From bf0ec3ce0e9a2d56b42189648b9157612b2d3762 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Wed, 9 Jun 2010 22:33:25 +0300 Subject: [PATCH] Split chown, chgrp, and id completions into contrib/coreutils. --- CHANGES | 1 + Makefile.am | 1 + bash_completion | 114 ------------------------------ contrib/coreutils | 124 +++++++++++++++++++++++++++++++++ test/completion/chgrp.exp | 1 + test/lib/completions/chgrp.exp | 20 ++++++ 6 files changed, 147 insertions(+), 114 deletions(-) create mode 100644 contrib/coreutils create mode 100644 test/completion/chgrp.exp create mode 100644 test/lib/completions/chgrp.exp diff --git a/CHANGES b/CHANGES index 783ddb63..db9b9231 100644 --- a/CHANGES +++ b/CHANGES @@ -57,6 +57,7 @@ bash-completion (2.x) * Split sshfs completion from contrib/ssh into contrib/sshfs. * Split mount and umount completion into contrib/mount. * Split service completion into contrib/service. + * Split chown, chgrp, and id completions into contrib/coreutils. * Do basic HTML file completion with Firefox and Chrome and friends, and Epiphany. * Do basic diff/patch completion with cdiff and kompare. diff --git a/Makefile.am b/Makefile.am index 8662bc8b..7e03d5c8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -25,6 +25,7 @@ bashcomp_DATA = contrib/abook \ contrib/cksfv \ contrib/clisp \ contrib/configure \ + contrib/coreutils \ contrib/cowsay \ contrib/cpan2dist \ contrib/cpio \ diff --git a/bash_completion b/bash_completion index e4caaa32..bfba066b 100644 --- a/bash_completion +++ b/bash_completion @@ -1083,101 +1083,6 @@ _dvd_devices() kernel buildworld' make -# chown(1) completion -# -_chown() -{ - local cur prev split=false - - # Get cur and prev words; but don't treat user:group as separate words. - cur=`_get_cword :` - prev=`_get_pword :` - - _split_longopt && split=true - - case "$prev" in - --from) - _usergroup - return 0 - ;; - --reference) - _filedir - return 0 - ;; - esac - - $split && return 0 - - if [[ "$cur" == -* ]]; then - # Complete -options - local w opts - for w in "${COMP_WORDS[@]}" ; do - [[ "$w" == -@(R|-recursive) ]] && opts="-H -L -P" && break - done - COMPREPLY=( $( compgen -W '-c -h -f -R -v --changes --dereference \ - --no-dereference --from --silent --quiet --reference --recursive \ - --verbose --help --version $opts' -- "$cur" ) ) - else - local args - - # The first argument is an usergroup; the rest are filedir. - _count_args : - - if [[ $args == 1 ]]; then - _usergroup - else - _filedir - fi - fi -} # _chown() -complete -F _chown -o filenames chown - - -# chgrp(1) completion -# -_chgrp() -{ - local cur prev split=false - - COMPREPLY=() - cur=`_get_cword` - cur=${cur//\\\\/} - prev=${COMP_WORDS[COMP_CWORD-1]} - - _split_longopt && split=true - - if [[ "$prev" == --reference ]]; then - _filedir - return 0 - fi - - $split && return 0 - - # options completion - if [[ "$cur" == -* ]]; then - local w opts - for w in "${COMP_WORDS[@]}" ; do - [[ "$w" == -@(R|-recursive) ]] && opts="-H -L -P" && break - done - COMPREPLY=( $( compgen -W '-c -h -f -R -v --changes --dereference \ - --no-dereference --silent --quiet --reference --recursive \ - --verbose --help --version $opts' -- "$cur" ) ) - return 0 - fi - - # first parameter on line or first since an option? - if [[ $COMP_CWORD -eq 1 && "$cur" != -* || "$prev" == -* ]]; then - local IFS=$'\n' - COMPREPLY=( $( compgen -g "$cur" 2>/dev/null ) ) - else - _filedir || return 0 - fi - - return 0 -} # _chgrp() -complete -F _chgrp -o filenames chgrp - - # renice(8) completion # _renice() @@ -1759,25 +1664,6 @@ _look() } && complete -F _look -o default look -# id(1) completion -# -have id && -_id() -{ - local cur - - COMPREPLY=() - cur=`_get_cword` - - if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W '-a -g --group -G --groups -n --name\ - -r --real -u --user --help --version' -- "$cur" ) ) - else - COMPREPLY=( $( compgen -u "$cur" ) ) - fi -} && -complete -F _id id - _filedir_xspec() { local IFS cur xspec diff --git a/contrib/coreutils b/contrib/coreutils new file mode 100644 index 00000000..8146e9aa --- /dev/null +++ b/contrib/coreutils @@ -0,0 +1,124 @@ +# Completions for various core utilities + +# chown(1) completion +# +have chown && +_chown() +{ + local cur prev split=false + + # Get cur and prev words; but don't treat user:group as separate words. + cur=`_get_cword :` + prev=`_get_pword :` + + _split_longopt && split=true + + case "$prev" in + --from) + _usergroup + return 0 + ;; + --reference) + _filedir + return 0 + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + # Complete -options + local w opts + for w in "${COMP_WORDS[@]}" ; do + [[ "$w" == -@(R|-recursive) ]] && opts="-H -L -P" && break + done + COMPREPLY=( $( compgen -W '-c -h -f -R -v --changes --dereference \ + --no-dereference --from --silent --quiet --reference --recursive \ + --verbose --help --version $opts' -- "$cur" ) ) + else + local args + + # The first argument is an usergroup; the rest are filedir. + _count_args : + + if [[ $args == 1 ]]; then + _usergroup + else + _filedir + fi + fi +} && +complete -F _chown -o filenames chown + + +# chgrp(1) completion +# +have chgrp && +_chgrp() +{ + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + cur=${cur//\\\\/} + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + if [[ "$prev" == --reference ]]; then + _filedir + return 0 + fi + + $split && return 0 + + # options completion + if [[ "$cur" == -* ]]; then + local w opts + for w in "${COMP_WORDS[@]}" ; do + [[ "$w" == -@(R|-recursive) ]] && opts="-H -L -P" && break + done + COMPREPLY=( $( compgen -W '-c -h -f -R -v --changes --dereference \ + --no-dereference --silent --quiet --reference --recursive \ + --verbose --help --version $opts' -- "$cur" ) ) + return 0 + fi + + # first parameter on line or first since an option? + if [[ $COMP_CWORD -eq 1 && "$cur" != -* || "$prev" == -* ]]; then + local IFS=$'\n' + COMPREPLY=( $( compgen -g "$cur" 2>/dev/null ) ) + else + _filedir || return 0 + fi + + return 0 +} && +complete -F _chgrp -o filenames chgrp + +# id(1) completion +# +have id && +_id() +{ + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '-a -g --group -G --groups -n --name\ + -r --real -u --user --help --version' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -u "$cur" ) ) + fi +} && +complete -F _id id + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/test/completion/chgrp.exp b/test/completion/chgrp.exp new file mode 100644 index 00000000..2b1d2251 --- /dev/null +++ b/test/completion/chgrp.exp @@ -0,0 +1 @@ +assert_source_completions chgrp diff --git a/test/lib/completions/chgrp.exp b/test/lib/completions/chgrp.exp new file mode 100644 index 00000000..8dfeea79 --- /dev/null +++ b/test/lib/completions/chgrp.exp @@ -0,0 +1,20 @@ +proc setup {} { + save_env +}; # setup() + + +proc teardown {} { + assert_env_unmodified +}; # teardown() + + +setup + + +assert_complete_any "chgrp " + + +sync_after_int + + +teardown