# 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 on 2012-01-08. # Written by Lars Luthman 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