summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/slv2.bash_completion59
1 files changed, 59 insertions, 0 deletions
diff --git a/utils/slv2.bash_completion b/utils/slv2.bash_completion
new file mode 100644
index 0000000..921087a
--- /dev/null
+++ b/utils/slv2.bash_completion
@@ -0,0 +1,59 @@
+# Bash auto-completion script written for lv2_inspect, lv2_jack_host
+# and lv2_simple_jack_host. Could be adapted to any other program
+# that takes an LV2 plugin URI as parameter.
+
+# Written by Lars Luthman <lars.luthman@gmail.com> on 2009-10-12.
+# No copyright claimed for this script. Do what you want with it.
+
+# For some reason Bash splits the command line not only at whitespace
+# but also at ':' signs before putting the parts into COMP_WORDS.
+# Since ':' is used in all URIs, which are what we want to complete,
+# we have to put the URI back together before we can complete it
+# and then cut off the parts we prepended from the completions.
+# It probably breaks in some special cases but for most common uses
+# it should work fine.
+
+function _lv2_inspect() {
+ local uri cur opts w wn raw_reply len type
+ opts=`lv2_list | xargs -n1 echo -n " "`
+
+ # This is the last "word", as split by Bash.
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ w="$cur"
+
+ # Add the previous word while it or this one is a word break character
+ for i in `seq $(( $COMP_CWORD - 1 )) -1 1`; do
+ wn="${COMP_WORDS[i]}"
+ if expr "$COMP_WORDBREAKS" : ".*$wn" > /dev/null; then
+ if expr "$COMP_WORDBREAKS" : ".*$w" > /dev/null; then
+ break
+ fi
+ fi
+ w="$wn"
+ uri="$w$uri"
+ done
+
+ # Check the length of the words we prepend
+ len=${#uri}
+ uri="$uri$cur"
+ raw_reply="$(compgen -W "${opts}" -- ${uri})"
+
+ # If we are listing alternatives, just print the full URIs.
+ type=`echo $COMP_TYPE | awk '{ printf "%c", $1 }'`
+ if expr "?!@%" : ".*$type" > /dev/null; then
+ COMPREPLY=( $raw_reply )
+ return 0
+ fi
+
+ # Otherwise, strip the prepended words from all completion suggestions.
+ COMPREPLY=()
+ for i in $raw_reply; do
+ COMPREPLY=( ${COMPREPLY[@]} ${i:len} )
+ done
+}
+
+complete -F _lv2_inspect lv2_inspect
+
+# And the same for lv2_jack_host and lv2_simple_jack_host.
+complete -F _lv2_inspect lv2_jack_host
+complete -F _lv2_inspect lv2_simple_jack_host