diff options
author | Igor Murzov <e-mail@date.by> | 2011-09-21 03:07:45 +0400 |
---|---|---|
committer | Igor Murzov <e-mail@date.by> | 2011-09-26 02:59:14 +0400 |
commit | c7b9d08d171baa782bbb56ff142ea8572eecc778 (patch) | |
tree | deb8230758d2bb1d25a419813ddd39b89cb58fc3 | |
parent | a1b8148d234f5a49d8da28977387e0463ce349ed (diff) | |
download | bash-completion-c7b9d08d171baa782bbb56ff142ea8572eecc778.tar.gz |
feh: New completion.
NB: feh should be compiled with `make help=1`. Otherwise `feh --help`
will not print help message, and option completion will not work.
-rw-r--r-- | completions/Makefile.am | 1 | ||||
-rw-r--r-- | completions/feh | 127 | ||||
-rw-r--r-- | test/completion/feh.exp | 1 | ||||
-rw-r--r-- | test/lib/completions/feh.exp | 55 |
4 files changed, 184 insertions, 0 deletions
diff --git a/completions/Makefile.am b/completions/Makefile.am index 0cfea794..62060c5c 100644 --- a/completions/Makefile.am +++ b/completions/Makefile.am @@ -46,6 +46,7 @@ bashcomp_DATA = abook \ dvd+rw-tools \ e2fsprogs \ evince \ + feh \ findutils \ freeciv \ freerdp \ diff --git a/completions/feh b/completions/feh new file mode 100644 index 00000000..53ed5589 --- /dev/null +++ b/completions/feh @@ -0,0 +1,127 @@ +# bash completion for feh(1) + +have feh || return + +_feh() +{ + local cur prev words cword split + _init_completion -s || return + + case "$prev" in + -B|--image-bg) + COMPREPLY=( $( compgen -W 'default white black' -- "$cur" ) ) + return + ;; + --index-dim|--index-name|--index-size) + COMPREPLY=( $( compgen -W '0 1' -- "$cur" ) ) + return + ;; + -f|--filelist|-o|--output|-O|--output-only|-\||--start-at) + _filedir + return + ;; + -K|--caption-path|-C|--fontpath|-j|--output-dir) + _filedir -d + return + ;; + -e|--font|-M|--menu-font|-@|--title-font) + # expect string like "dejavu.ttf/12" + if [[ "$cur" == */* ]]; then # expect integer value + COMPREPLY=( $(compgen -P "$cur" -W '{0..9}') ) + compopt -o nospace + return + fi + local font_path + # font_path="$(imlib2-config --prefix 2> /dev/null)/share/imlib2/data/fonts" + # COMPREPLY=( $( cd "$font_path" 2> /dev/null; compgen -f \ + # -X "!*.@([tT][tT][fF])" -S / -- "$cur" ) ) + for (( i=${#words[@]}-1; i>0; i-- )); do + if [[ ${words[i]} == -@(C|-fontpath) ]]; then + font_path="${words[i+1]}" + COMPREPLY+=( $( cd "$font_path" 2> /dev/null; compgen -f \ + -X "!*.@([tT][tT][fF])" -S / -- "$cur" ) ) + fi + done + compopt -o nospace + return + ;; + -T|--theme) + local conf_path=~/.config/feh/themes + local theme_name theme_opts + [ -r "$conf_path" ] || return + while read theme_name theme_opts; do + if [[ "$theme_name" == '#'* || "$theme_name" == "" ]]; then + continue + fi + COMPREPLY+=( $( compgen -W "$theme_name" -- "$cur" ) ) + done < "$conf_path" + return + ;; + -S|--sort) + COMPREPLY=( $( compgen -W 'name filename width height pixels size + format' -- "$cur" ) ) + return + ;; + -R|--reload|-H|--limit-height|-W|--limit-width|-E|--thumb-height|\ + -y|--thumb-width|-J|--thumb-redraw) + # expect integer value + COMPREPLY+=( $(compgen -W '{0..9}') ) + compopt -o nospace + return + ;; + --zoom) + # expect integer value or "max", "fill" + COMPREPLY=( $(compgen -W 'max fill' -- "$cur") ) + if [[ ! $cur || ! $COMPREPLY ]]; then + COMPREPLY+=( $(compgen -W '{0..9}') ) + compopt -o nospace + fi + return + ;; + -0|--reload-button|-1|--pan-button|-2|--zoom-button|-3|--menu-button|\ + -4|--prev-button|-5|--next-button|-8|--rotate-button|-9|--blur-button) + COMPREPLY=( $( compgen -W '{0..9}' -- "$cur" ) ) + return + ;; + -a|--alpha) + COMPREPLY=( $( compgen -W '{0..255}' -- "$cur" ) ) + return + ;; + -b|--bg) + _filedir + COMPREPLY+=( $( compgen -W 'trans' -- "$cur" ) ) + return + ;; + -g|--geometry) + # expect string like 640x480 + if [[ $cur && "$cur" != *x* ]]; then + COMPREPLY=( x ) + fi + COMPREPLY+=( $(compgen -W "{0..9}") ) + compopt -o nospace + return + ;; + -L|--customlist|--info|-D|--slideshow-delay|-~|--thumb-title|-^|--title) + # argument required but no completions available + return + ;; + esac + + $split && return + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '$( _parse_help "$1" --help )' -- "$cur" ) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + [[ $COMPREPLY ]] && return + fi + + _filedir 'xpm|tif?(f)|png|p[npgba]m|iff|?(i)lbm|jp?(e)g|jfi?(f)|gif|bmp|arg?(b)|tga|xcf|ani|ico' +} && complete -F _feh feh + +# 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/feh.exp b/test/completion/feh.exp new file mode 100644 index 00000000..4613bfaf --- /dev/null +++ b/test/completion/feh.exp @@ -0,0 +1 @@ +assert_source_completions feh diff --git a/test/lib/completions/feh.exp b/test/lib/completions/feh.exp new file mode 100644 index 00000000..129e1f4d --- /dev/null +++ b/test/lib/completions/feh.exp @@ -0,0 +1,55 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "feh " + + +sync_after_int + + +set test "--lis<TAB> should complete \"--list\"" +assert_complete "--list" "feh --lis" $test + + +sync_after_int + + +set test "-S pix<TAB> should complete \"pixels\"" +assert_complete "pixels" "feh -S pix" $test + + +sync_after_int + + +set test "--zoom ma<TAB> should complete \"max\"" +assert_complete "max" "feh --zoom ma" $test + + +sync_after_int + + +set test "-g 640<TAB> should complete digits plus \"x\"" +assert_complete "0 1 2 3 4 5 6 7 8 9 x" "feh -g 640" $test + + +sync_after_int + + +set test "-g 640x48<TAB> should complete digits" +assert_complete "0 1 2 3 4 5 6 7 8 9" "feh -g 640x48" $test + + +sync_after_int + + +teardown |