summaryrefslogtreecommitdiffstats
path: root/completions/povray
diff options
context:
space:
mode:
Diffstat (limited to 'completions/povray')
-rw-r--r--completions/povray64
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