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.
This commit is contained in:
Igor Murzov 2011-09-21 03:07:45 +04:00
parent a1b8148d23
commit c7b9d08d17
4 changed files with 184 additions and 0 deletions

View File

@ -46,6 +46,7 @@ bashcomp_DATA = abook \
dvd+rw-tools \
e2fsprogs \
evince \
feh \
findutils \
freeciv \
freerdp \

127
completions/feh Normal file
View File

@ -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

1
test/completion/feh.exp Normal file
View File

@ -0,0 +1 @@
assert_source_completions feh

View File

@ -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