[gnome-shell] extensions-tool: Add bash completion



commit 0de5209cf19743d92541b9640918ab7ca5d213df
Author: Florian Müllner <fmuellner gnome org>
Date:   Tue Aug 28 04:38:23 2018 +0200

    extensions-tool: Add bash completion
    
    Completions are clearly helpful, in particular for extension UUIDs
    that are often lengthy strings containing random usernames.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/1234

 meson.build                                        |  2 +
 .../completion/bash/gnome-extensions               | 51 ++++++++++++++++++++++
 src/extensions-tool/meson.build                    |  6 +++
 3 files changed, 59 insertions(+)
---
diff --git a/meson.build b/meson.build
index e11618f037..2bd67399d7 100644
--- a/meson.build
+++ b/meson.build
@@ -132,6 +132,8 @@ else
   have_systemd = false
 endif
 
+bash_completion = dependency('bash-completion', required: false)
+
 if get_option('man')
   xsltproc = find_program('xsltproc')
 
diff --git a/src/extensions-tool/completion/bash/gnome-extensions 
b/src/extensions-tool/completion/bash/gnome-extensions
new file mode 100644
index 0000000000..e0286729b2
--- /dev/null
+++ b/src/extensions-tool/completion/bash/gnome-extensions
@@ -0,0 +1,51 @@
+
+# Check for bash
+[ -z "$BASH_VERSION" ] && return
+
+################################################################################
+
+__gnome_extensions() {
+  local commands="version enable disable info list create"
+  local COMMAND=${COMP_WORDS[1]}
+
+  _init_completion -s || return
+
+  case "${COMP_CWORD}" in
+    1)
+      COMPREPLY=($(compgen -W "help $commands" -- "$2"))
+      return 0
+      ;;
+
+    2)
+      case "$COMMAND" in
+        help)
+          COMPREPLY=($(compgen -W "$commands" -- "$2"))
+          return 0
+          ;;
+
+        disable)
+          local list_opt=--enabled
+          ;;&
+        enable)
+          local list_opt=--disabled
+          ;;&
+        enable|disable|info)
+          COMPREPLY=($(compgen -W "`gnome-extensions list $list_opt`" -- "$2"))
+          return 0
+          ;;
+      esac
+      ;;
+  esac
+
+  # Stop if we are currently waiting for an option value
+  $split && return
+
+  # Otherwise, get the supported options for ${COMMAND} (if any)
+  COMPREPLY=($(compgen -W "$(_parse_help $1 "help $COMMAND")" -- "$2"))
+  [[ $COMPREPLY == *= ]] && compopt -o nospace
+  return 0
+}
+
+################################################################################
+
+complete -F __gnome_extensions gnome-extensions
diff --git a/src/extensions-tool/meson.build b/src/extensions-tool/meson.build
index 8e8f818cb8..edd445a5e2 100644
--- a/src/extensions-tool/meson.build
+++ b/src/extensions-tool/meson.build
@@ -26,3 +26,9 @@ executable('gnome-extensions',
   dependencies: [gio_dep, gio_unix_dep],
   install: true
 )
+
+if bash_completion.found()
+  install_data('completion/bash/gnome-extensions',
+    install_dir: bash_completion.get_pkgconfig_variable('completionsdir')
+  )
+endif


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]