|
- # Bash auto-completion script written for lv2info and lv2jack.
- # Could be adapted to any other program that takes an
- # LV2 plugin URI as parameter.
-
- # Updated for Lilv by David Robillard <d@drobilla.net> on 2012-01-08.
- # 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 _lv2info() {
- local uri cur opts w wn raw_reply len type
- opts=`lv2ls | 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 _lv2info lv2info
-
- # And the same for lv2jack.
- complete -F _lv2info lv2jack
|