diff options
Diffstat (limited to '')
-rw-r--r-- | completions/ps | 70 | ||||
-rw-r--r-- | completions/psql | 150 |
2 files changed, 151 insertions, 69 deletions
diff --git a/completions/ps b/completions/ps new file mode 100644 index 0000000..e816355 --- /dev/null +++ b/completions/ps @@ -0,0 +1,70 @@ +# bash completion for ps(1) -*- shell-script -*- + +_comp_cmd_ps() +{ + local cur prev words cword comp_args + _comp_initialize -- "$@" || return + + case $prev in + --help) + _comp_compgen -- -W 'simple list output threads misc all' + return + ;; + --info | V | --version) + return + ;; + -C) + _comp_compgen_pnames + return + ;; + -[Gg] | --[Gg]roup) + _comp_compgen -- -g + return + ;; + ?(-)p | [^-]*p | --pid) + _comp_compgen_pids + return + ;; + --ppid) + _comp_compgen_pids # TODO: Only pids with children? + return + ;; + ?(-)q | [^-]*q | --quick-pid) + _comp_compgen_pids + return + ;; + -s | --sid) + # TODO + return + ;; + ?(-)t | [^-]*t | --tty) + _comp_expand_glob COMPREPLY '/dev/tty*' && + _comp_compgen -- -W '"${COMPREPLY[@]}" "${COMPREPLY[@]#/dev/}"' + return + ;; + ?(-)U | [^-]*U | -u | --[Uu]ser) + _comp_compgen -- -u + return + ;; + --format | ?(-)[Oo] | [^-]*[Oo]) + # TODO: This doesn't work well when there are multiple options for + # the non-first item (similarly to useradd --groups and others). + local labels=$("$1" L | _comp_awk '{ print $1 }') + _comp_delimited , -W '$labels' + return + ;; + esac + + if [[ $cur == -* ]]; then + # sed: strip single char dashless ", x," that trip _comp_compgen_help + _comp_compgen_help - <<<"$({ + "$1" --help + "$1" --help all + } 2>/dev/null | + command sed -e "s/, [A-Za-z],/,/")" || + _comp_compgen_usage + fi +} && + complete -F _comp_cmd_ps ps + +# ex: filetype=sh diff --git a/completions/psql b/completions/psql index 4bc6049..b05b3a4 100644 --- a/completions/psql +++ b/completions/psql @@ -1,97 +1,104 @@ # bash completion for Postgresql -*- shell-script -*- -_pg_databases() +_comp_cmd_psql__databases() { # -w was introduced in 8.4, https://launchpad.net/bugs/164772 # "Access privileges" in output may contain linefeeds, hence the NF > 1 - COMPREPLY=($(compgen -W "$(psql -XAtqwlF $'\t' 2>/dev/null | - awk 'NF > 1 { print $1 }')" -- "$cur")) + _comp_compgen_split -- "$(psql -XAtqwlF $'\t' 2>/dev/null | + _comp_awk 'NF > 1 { print $1 }')" } -_pg_users() +_comp_cmd_psql__users() { # -w was introduced in 8.4, https://launchpad.net/bugs/164772 - COMPREPLY=($(compgen -W "$(psql -XAtqwc 'select usename from pg_user' \ - template1 2>/dev/null)" -- "$cur")) - ((${#COMPREPLY[@]} == 0)) && COMPREPLY=($(compgen -u -- "$cur")) + _comp_compgen_split -- "$(psql -XAtqwc 'select usename from pg_user' \ + template1 2>/dev/null)" || + _comp_compgen -- -u } # createdb(1) completion # -_createdb() +_comp_cmd_createdb() { - local cur prev words cword split - _init_completion -s || return + local cur prev words cword was_split comp_args + _comp_initialize -s -- "$@" || return + local noargopts='!(-*|*[hUOpDET]*)' + # shellcheck disable=SC2254 case $prev in - --host | -!(-*)h) - _known_hosts_real -- "$cur" + --host | -${noargopts}h) + _comp_compgen_known_hosts -- "$cur" return ;; - --username | --owner | -!(-*)[UO]) - _pg_users + --username | --owner | -${noargopts}[UO]) + _comp_cmd_psql__users return ;; - --help | --version | --port | --tablespace | --encoding | --template | -!(-*)[pDET]) + --help | --version | --port | --tablespace | --encoding | --template | \ + -${noargopts}[pDET]) return ;; esac - $split && return + [[ $was_split ]] && return if [[ $cur == -* ]]; then - COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + _comp_compgen_help [[ ${COMPREPLY-} == *= ]] && compopt -o nospace else - _pg_databases + _comp_cmd_psql__databases fi } && - complete -F _createdb createdb + complete -F _comp_cmd_createdb createdb # createuser(1) completion # -_createuser() +_comp_cmd_createuser() { - local cur prev words cword split - _init_completion -s || return + local cur prev words cword was_split comp_args + _comp_initialize -s -- "$@" || return + local noargopts='!(-*|*[pchU]*)' + # shellcheck disable=SC2254 case $prev in - --help | --version | --port | --connection-limit | -!(-*)[pc]) + --help | --version | --port | --connection-limit | -${noargopts}[pc]) return ;; - --host | -!(-*)h) - _known_hosts_real -- "$cur" + --host | -${noargopts}h) + _comp_compgen_known_hosts -- "$cur" return ;; - --username | -!(-*)U) - _pg_users + --username | -${noargopts}U) + _comp_cmd_psql__users return ;; esac - $split && return + [[ $was_split ]] && return if [[ $cur == -* ]]; then - COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + _comp_compgen_help [[ ${COMPREPLY-} == *= ]] && compopt -o nospace fi } && - complete -F _createuser createuser + complete -F _comp_cmd_createuser createuser # dropdb(1) completion # -_dropdb() +_comp_cmd_dropdb() { - local cur prev words cword split - _init_completion -s || return + local cur prev words cword was_split comp_args + _comp_initialize -s -- "$@" || return + local noargopts='!(-*|*[hU]*)' + # shellcheck disable=SC2254 case $prev in - --host | -!(-*)h) - _known_hosts_real -- "$cur" + --host | -${noargopts}h) + _comp_compgen_known_hosts -- "$cur" return ;; - --username | -!(-*)U) - _pg_users + --username | -${noargopts}U) + _comp_cmd_psql__users return ;; --help | --version) @@ -99,90 +106,95 @@ _dropdb() ;; esac - $split && return + [[ $was_split ]] && return if [[ $cur == -* ]]; then - COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + _comp_compgen_help [[ ${COMPREPLY-} == *= ]] && compopt -o nospace else - _pg_databases + _comp_cmd_psql__databases fi } && - complete -F _dropdb dropdb + complete -F _comp_cmd_dropdb dropdb # dropuser(1) completion # -_dropuser() +_comp_cmd_dropuser() { - local cur prev words cword split - _init_completion -s || return + local cur prev words cword was_split comp_args + _comp_initialize -s -- "$@" || return + local noargopts='!(-*|*[phU]*)' + # shellcheck disable=SC2254 case $prev in - --help | --version | --port | -!(-*)p) + --help | --version | --port | -${noargopts}p) return ;; - --host | -!(-*)h) - _known_hosts_real -- "$cur" + --host | -${noargopts}h) + _comp_compgen_known_hosts -- "$cur" return ;; - --username | -!(-*)U) - _pg_users + --username | -${noargopts}U) + _comp_cmd_psql__users return ;; esac - $split && return + [[ $was_split ]] && return if [[ $cur == -* ]]; then - COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + _comp_compgen_help [[ ${COMPREPLY-} == *= ]] && compopt -o nospace else - _pg_users + _comp_cmd_psql__users fi } && - complete -F _dropuser dropuser + complete -F _comp_cmd_dropuser dropuser # psql(1) completion # -_psql() +_comp_cmd_psql() { - local cur prev words cword split - _init_completion -s || return + local cur prev words cword was_split comp_args + _comp_initialize -s -- "$@" || return + local noargopts='!(-*|*[hUdofLcFpPRTv]*)' + # shellcheck disable=SC2254 case $prev in - --host | -!(-*)h) - _known_hosts_real -- "$cur" + --host | -${noargopts}h) + _comp_compgen_known_hosts -- "$cur" return ;; - --username | -!(-*)U) - _pg_users + --username | -${noargopts}U) + _comp_cmd_psql__users return ;; - --dbname | -!(-*)d) - _pg_databases + --dbname | -${noargopts}d) + _comp_cmd_psql__databases return ;; - --output | --file | --log-file | -!(-*)[ofL]) - _filedir + --output | --file | --log-file | -${noargopts}[ofL]) + _comp_compgen_filedir return ;; --help | --version | --command | --field-separator | --port | --pset | \ - --record-separator | --table-attr | --set | --variable | -!(-*)[?VcFpPRTv]) + --record-separator | --table-attr | --set | --variable | \ + -${noargopts}[?VcFpPRTv]) return ;; esac - $split && return + [[ $was_split ]] && return if [[ $cur == -* ]]; then # return list of available options - COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + _comp_compgen_help [[ ${COMPREPLY-} == *= ]] && compopt -o nospace else # return list of available databases - _pg_databases + _comp_cmd_psql__databases fi } && - complete -F _psql psql + complete -F _comp_cmd_psql psql # ex: filetype=sh |