summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStéphane Cerveau <scerveau@collabora.com>2021-02-26 15:32:29 +0100
committerStéphane Cerveau <scerveau@collabora.com>2021-03-04 08:19:04 +0100
commit8b3340632c74b6af45ce2d95b75dae496a745764 (patch)
treea7d392781b744eb7d190537445fc8edd303aee08
parent2b8eef30e7192869bdb607fa0c0f9f856af94ace (diff)
bash-completion: add gst-validate script
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/237>
-rw-r--r--validate/data/bash-completion/completions/gst-validate-1.0142
1 files changed, 142 insertions, 0 deletions
diff --git a/validate/data/bash-completion/completions/gst-validate-1.0 b/validate/data/bash-completion/completions/gst-validate-1.0
new file mode 100644
index 0000000..8342b84
--- /dev/null
+++ b/validate/data/bash-completion/completions/gst-validate-1.0
@@ -0,0 +1,142 @@
+# GStreamer
+# Copyright (C) 2015 Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+# Copyright (C) 2021 Stéphane Cerveau <scerveau@collabora.com>
+#
+# bash/zsh completion support for gst-validate
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+_GST_HELPERDIR="${BASH_SOURCE[0]%/*}/../helpers"
+
+if [[ ! -f $_GST_HELPERDIR/gst ]]; then
+ _GST_HELPERDIR="$(pkg-config --variable=bashhelpersdir gstreamer-1.0)"
+else
+ _GST_HELPERDIR=`cd "$_GST_HELPERDIR"; pwd`
+fi
+
+# Common definitions
+. "$_GST_HELPERDIR"/gst
+
+_gst_validate_all_arguments ()
+{
+ _gst_all_arguments gst-validate-1.0
+}
+
+_gst_complete_compatible_elements ()
+{
+ COMPREPLY=( $(compgen -W "$($_GST_HELPER --compatible-with $previous_element)" -- $cur) )
+}
+
+_gst_complete_all_elements ()
+{
+ COMPREPLY=( $(compgen -W "$($_GST_HELPER -l)" -- $cur) )
+}
+
+_gst_complete_element_properties ()
+{
+ COMPREPLY=( $(compgen -W "$($_GST_HELPER --element-properties $previous_element)" -- $cur) )
+}
+
+_gstvalidate___exclude_ () { _gst_mandatory_argument gst-validate-1.0; }
+
+_gst_validate_main ()
+{
+ local i=1 command function_exists previous_element have_previous_element=0 completion_func
+
+ while [[ $i -ne $COMP_CWORD ]];
+ do
+ local var
+ var="${COMP_WORDS[i]}"
+ if [[ "$var" == "-"* ]]
+ then
+ command="$var"
+ fi
+ i=$(($i+1))
+ done
+
+ i=1
+ while [[ $i -ne $COMP_CWORD ]];
+ do
+ local var
+ var="${COMP_WORDS[i]}"
+
+ if [[ "$var" == "-"* ]]
+ then
+ i=$(($i+1))
+ continue
+ fi
+
+ $(gst-inspect-1.0 --exists $var)
+ if [ $? -eq 0 ]
+ then
+ previous_element="$var"
+ have_previous_element=1
+ fi
+ i=$(($i+1))
+ done
+
+ if [[ "$command" == "--gst"* ]]; then
+ completion_func="_${command//-/_}"
+ else
+ completion_func="_gstlaunch_${command//-/_}"
+ fi
+
+ # Seems like bash doesn't like "exclude" in function names
+ if [[ "$completion_func" == "_gstlaunch___exclude" ]]
+ then
+ completion_func="_gstvalidate___exclude_"
+ fi
+
+ declare -f $completion_func >/dev/null 2>&1
+
+ function_exists=$?
+
+ if [[ "$cur" == "-"* ]]; then
+ _gst_validate_all_arguments
+ elif [ $function_exists -eq 0 ]
+ then
+ $completion_func
+ elif [ $have_previous_element -ne 0 ] && [[ "$prev" == "!" ]]
+ then
+ _gst_complete_compatible_elements
+ elif [ $have_previous_element -ne 0 ]
+ then
+ _gst_complete_element_properties
+ else
+ _gst_complete_all_elements
+ fi
+}
+
+_gst_validate_func_wrap ()
+{
+ local cur prev
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
+ $1
+}
+
+# Setup completion for certain functions defined above by setting common
+# variables and workarounds.
+# This is NOT a public function; use at your own risk.
+_gst_validate_complete ()
+{
+ local wrapper="__launch_wrap${2}"
+ eval "$wrapper () { _gst_validate_func_wrap $2 ; }"
+ complete -o bashdefault -o default -o nospace -F $wrapper $1 2>/dev/null \
+ || complete -o default -o nospace -F $wrapper $1
+}
+
+_gst_validate_complete gst-validate-1.0 _gst_validate_main