diff options
Diffstat (limited to 'utils/slv2.bash_completion')
-rw-r--r-- | utils/slv2.bash_completion | 59 |
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 |