diff options
Diffstat (limited to 'completions/povray')
-rw-r--r-- | completions/povray | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/completions/povray b/completions/povray new file mode 100644 index 0000000..56dfd94 --- /dev/null +++ b/completions/povray @@ -0,0 +1,64 @@ +# povray completion -*- shell-script -*- +# by "David Necas (Yeti)" <yeti@physics.muni.cz> + +_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 |