summaryrefslogtreecommitdiffstats
path: root/tools/lilv.bash_completion
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lilv.bash_completion')
-rw-r--r--tools/lilv.bash_completion55
1 files changed, 55 insertions, 0 deletions
diff --git a/tools/lilv.bash_completion b/tools/lilv.bash_completion
new file mode 100644
index 0000000..d5de5e2
--- /dev/null
+++ b/tools/lilv.bash_completion
@@ -0,0 +1,55 @@
+# Copyright 2012-2022 David Robillard <d@drobilla.net>
+# Copyright 2009 Lars Luthman <lars.luthman@gmail.com>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+# Bash auto-completion script written for lv2info. Could be adapted to any
+# other program that takes an LV2 plugin URI as parameter.
+
+# 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