bash-completion: add completion for gstreamer tools
authorStéphane Cerveau <scerveau@collabora.com>
Fri, 26 Feb 2021 10:13:45 +0000 (11:13 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 29 Apr 2021 23:54:33 +0000 (23:54 +0000)
Allow to autocomplete with elements/properties
in the devenv using gst-launch-1.0 etc.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/232>

gst-env.py

index 0fa40f5..42907fa 100755 (executable)
@@ -43,6 +43,18 @@ SHAREDLIB_REG = re.compile(r'\.so|\.dylib|\.dll')
 GSTPLUGIN_FILEPATH_REG_TEMPLATE = r'.*/{libdir}/gstreamer-1.0/[^/]+$'
 GSTPLUGIN_FILEPATH_REG = None
 
+BC_RC =  '''
+BASH_COMPLETION_SCRIPTS="{bash_completions}"
+BASH_COMPLETION_PATHS="{bash_completions_paths}"
+for p in $BASH_COMPLETION_PATHS; do
+for f in $BASH_COMPLETION_SCRIPTS; do
+  [ -f "$p/$f" ] && . "$p/$f"
+done
+done
+'''
+BASH_COMPLETION_PATHS = [SCRIPTDIR + '/subprojects/gstreamer/data/bash-completion/completions']
+BASH_COMPLETION_PATHS += [SCRIPTDIR + '/subprojects/gst-devtools/validate/data/bash-completion/completions']
+
 def listify(o):
     if isinstance(o, str):
         return [o]
@@ -219,6 +231,8 @@ def setup_gdb(options):
 
     return python_paths
 
+def is_bash_completion_available (options):
+    return  os.path.exists(os.path.join(options.builddir, 'subprojects/gstreamer/data/bash-completion/helpers/gst'))
 
 def get_subprocess_env(options, gst_version):
     env = os.environ.copy()
@@ -504,6 +518,14 @@ if __name__ == "__main__":
                     shutil.copyfileobj(src, tmprc)
             tmprc.write('\nexport PS1="[gst-%s] $PS1"' % gst_version)
             tmprc.flush()
+            if is_bash_completion_available(options):
+                bash_completions_files = []
+                for p in BASH_COMPLETION_PATHS:
+                    if os.path.exists(p):
+                        bash_completions_files +=  os.listdir(path=p)
+                bc_rc = BC_RC.format(bash_completions=' '.join(bash_completions_files), bash_completions_paths=' '.join(BASH_COMPLETION_PATHS))
+                tmprc.write(bc_rc)
+                tmprc.flush()
             args.append("--rcfile")
             args.append(tmprc.name)
         elif args[0].endswith('fish'):