diff --git a/CHANGES b/CHANGES index c53ae2ff..66ec7290 100644 --- a/CHANGES +++ b/CHANGES @@ -9,7 +9,7 @@ bash-completion (2.x) [ Ville Skyttä ] * Activate hping2 completion also for hping and hping3. * Add badblocks, compgen, crontab, dumpe2fs, e2freefrag, e2label, ether-wake, - filefrag, growisofs, iftop, ip (Debian: #600617), lrzip, POSIX sh, + filefrag, growisofs, iftop, ip (Debian: #600617), lrzip, lsof, POSIX sh, sha{,224,256,384,512}sum, sysbench, tune2fs, xmodmap, and xrdb completions. * Add *.gif (Alioth: #312512), *.m2t (Alioth: #312770), *.3gpp, *.3gpp2, *.awb, and *.iso (Alioth: #311420) to mplayer filename completions. diff --git a/completions/Makefile.am b/completions/Makefile.am index 2071564f..fb423253 100644 --- a/completions/Makefile.am +++ b/completions/Makefile.am @@ -79,6 +79,7 @@ bashcomp_DATA = abook \ lintian \ lisp \ lrzip \ + lsof \ lvm \ lzma \ lzop \ diff --git a/completions/lsof b/completions/lsof new file mode 100644 index 00000000..ac010dad --- /dev/null +++ b/completions/lsof @@ -0,0 +1,64 @@ +# lsof(8) completion + +have lsof && +_lsof() +{ + COMPREPLY=() + local cur prev + _get_comp_words_by_ref cur prev + + case $prev in + -'?'|-h|+c|-c|-d|-F|-i|+r|-r|-s|-S|-T) + return 0 + ;; + -A|-k|-m|+m|-o) + _filedir + return 0 + ;; + +d|+D) + _filedir -d + return 0 + ;; + -D) + COMPREPLY=( $( compgen -W '? b i r u' -- "$cur" ) ) + return 0 + ;; + -f) + COMPREPLY=( $( compgen -W 'c f g G n' -- "$cur" ) ) + return 0 + ;; + -g) + # TODO: handle ^foo exclusions, comma separated lists + _pgids + return 0 + ;; + -p) + # TODO: handle ^foo exclusions, comma separated lists + _pids + return 0 + ;; + -u) + # TODO: handle ^foo exclusions, comma separated lists + COMPREPLY=( $( compgen -u -- "$cur" ) ) + return 0 + ;; + esac + + if [[ "$cur" == [-+]* ]]; then + COMPREPLY=( $( compgen -W '-h -a -A -b -c +c -C +d -d +D -D +f -f -F -g + -i -k -l +L -L +m -m +M -M -n -N -o -O -p -P +r -r -R -s -S -T -t + -u -U -v -V +w -w -x -X -z -Z' -- "$cur" ) ) + return 0 + fi + + _filedir +} && +complete -F _lsof lsof + +# 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/lsof.exp b/test/completion/lsof.exp new file mode 100644 index 00000000..98baab04 --- /dev/null +++ b/test/completion/lsof.exp @@ -0,0 +1 @@ +assert_source_completions lsof diff --git a/test/lib/completions/lsof.exp b/test/lib/completions/lsof.exp new file mode 100644 index 00000000..551bde2a --- /dev/null +++ b/test/lib/completions/lsof.exp @@ -0,0 +1,21 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "lsof " +sync_after_int + +assert_complete_any "lsof -" +sync_after_int + + +teardown