# bash completion for feh(1) -*- shell-script -*- _feh() { local cur prev words cword split _init_completion -s || return case "$prev" in --image-bg | -B) COMPREPLY=($(compgen -W 'checks white black' -- "$cur")) return ;; --filelist | --output | --output-only | --start-at | -!(-*)[foO\|]) _filedir return ;; --caption-path | --fontpath | --output-dir | -!(-*)[KCj]) _filedir -d return ;; --font | --menu-font | --title-font | -!(-*)[eM@]) # 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 ;; --theme | -!(-*)T) 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 ;; --sort | -!(-*)S) COMPREPLY=($(compgen -W 'name filename mtime width height pixels size format' -- "$cur")) return ;; --reload | --limit-height | --limit-width | --thumb-height | --thumb-width | \ --thumb-redraw | --magick-timeout | -!(-*)[RHWEyJ]) # 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 ;; --alpha | -!(-*)a) COMPREPLY=($(compgen -W '{0..255}' -- "$cur")) return ;; --bg | -!(-*)b) _filedir COMPREPLY+=($(compgen -W 'trans' -- "$cur")) return ;; --geometry | --max-dimension | --min-dimension | -!(-*)g) # expect string like 640x480 if [[ $cur && $cur != *x* ]]; then COMPREPLY=(x) fi COMPREPLY+=($(compgen -W "{0..9}")) compopt -o nospace return ;; --customlist | --index-info | --info | --slideshow-delay | --thumb-title | \ --title | -!(-*)[LD~^]) # argument required but no completions available return ;; esac $split && return if [[ $cur == -* ]]; then # Some versions of feh just output "See 'man feh'" for --help :( COMPREPLY=($(compgen -W '$(_parse_help "$1" --help)' -- "$cur")) if [[ ${COMPREPLY-} ]]; then [[ $COMPREPLY == *= ]] && compopt -o nospace return fi fi # FIXME: It is hard to determine correct supported extensions. # feh can handle any format that imagemagick can plus some others _filedir 'xpm|tif?(f)|png|p[npgba]m|iff|?(i)lbm|jp?(e)g|jfi?(f)|gif|bmp|arg?(b)|tga|xcf|ani|ico|?(e)ps|pdf|dvi|txt|svg?(z)|cdr|[ot]tf' } && complete -F _feh feh # ex: filetype=sh