# povray completion -*- shell-script -*- # by "David Necas (Yeti)" _povray() { local cur prev words cword _init_completion || return local povcur=$cur pfx oext defoext defoext=png # default output extension, if cannot be determined FIXME _expand || return case $povcur in [-+]I*) cur="${povcur#[-+]I}" # to confuse _filedir pfx="${povcur%"$cur"}" _filedir pov COMPREPLY=(${COMPREPLY[@]/#/$pfx}) return ;; [-+]O*) # guess what output file type user may want case $( IFS=$'\n' command grep '^[-+]F' <<<"${words[*]}" ) in [-+]FN) oext=png ;; [-+]FP) oext=ppm ;; [-+]F[CT]) oext=tga ;; *) oext=$defoext ;; esac # complete filename corresponding to previously specified +I COMPREPLY=($( IFS=$'\n' command grep '^[-+]I' <<<"${words[*]}" )) COMPREPLY=(${COMPREPLY[@]#[-+]I}) COMPREPLY=(${COMPREPLY[@]/%.pov/.$oext}) cur="${povcur#[-+]O}" # to confuse _filedir pfx="${povcur%"$cur"}" _filedir $oext COMPREPLY=(${COMPREPLY[@]/#/$pfx}) return ;; *.ini\[ | *.ini\[*[^]]) # sections in .ini files cur="${povcur#*\[}" pfx="${povcur%\["$cur"}" # prefix == filename [[ -r $pfx ]] || return COMPREPLY=($(command sed -e 's/^[[:space:]]*\[\('"$cur"'[^]]*\]\).*$/\1/' \ -e 't' -e 'd' -- "$pfx")) # to prevent [bar] expand to nothing. can be done more easily? COMPREPLY=("${COMPREPLY[@]/#/${pfx}[}") return ;; *) _filedir '@(ini|pov)' return ;; esac } && complete -F _povray povray xpovray spovray # ex: filetype=sh