[PATCH] add zsh completion and optionalize bash and zsh completion

Saleem Abdulrasool compnerd at compnerd.org
Mon Nov 19 15:35:03 PST 2007


Signed-off-by: Saleem Abdulrasool <compnerd at compnerd.org>
---
 configure.in         |   15 +++++++++++++
 tools/Makefile.am    |    9 +++++++-
 tools/_polkit        |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++
 tools/_polkit_action |   24 ++++++++++++++++++++++
 tools/_polkit_auth   |   50 ++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 151 insertions(+), 1 deletions(-)
 create mode 100644 tools/_polkit
 create mode 100644 tools/_polkit_action
 create mode 100644 tools/_polkit_auth

diff --git a/configure.in b/configure.in
index cfc4b98..ac9d474 100644
--- a/configure.in
+++ b/configure.in
@@ -434,6 +434,21 @@ AC_DEFINE_UNQUOTED(PAM_FILE_INCLUDE_PASSWORD, "$PAM_FILE_INCLUDE_PASSWORD", [pam
 AC_DEFINE_UNQUOTED(PAM_FILE_INCLUDE_SESSION, "$PAM_FILE_INCLUDE_SESSION", [pam file session])
 
 # ********************
+# Shell Completion
+# ********************
+
+AC_ARG_WITH([bash-completion],
+            AC_HELP_STRING([--with-bash-completion],[Install bash completion scripts]),,
+            [with_bash_completion=yes])
+
+AC_ARG_WITH([zsh-completion],
+            AC_HELP_STRING([--with-zsh-completion],[Install zsh completion scripts]),,
+            [with_zsh_completion=no])
+
+AM_CONDITIONAL([WITH_BASH_COMPLETION], test x"$with_bash_completion" != x"no")
+AM_CONDITIONAL([WITH_ZSH_COMPLETION], test x"$with_zsh_completion" != x"no")
+
+# ********************
 # Internationalisation
 # ********************
 
diff --git a/tools/Makefile.am b/tools/Makefile.am
index faa0937..b305269 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -25,10 +25,17 @@ polkit_auth_LDADD = @GLIB_LIBS@ @DBUS_LIBS@ $(top_builddir)/src/polkit/libpolkit
 polkit_action_SOURCES = polkit-action.c
 polkit_action_LDADD = $(GLIB) $(top_builddir)/src/polkit/libpolkit.la
 
+if WITH_BASH_COMPLETION
 profiledir = $(sysconfdir)/profile.d
 profile_SCRIPTS = polkit-bash-completion.sh
+endif
 
-EXTRA_DIST = $(profile_SCRIPTS)
+if WITH_ZSH_COMPLETION
+zshcompletiondir = $(DESTDIR)$(datadir)/zsh/site-functions
+zshcompletion_SCRIPTS = _polkit _polkit_auth _polkit_action
+endif
+
+EXTRA_DIST = polkit-bash-completion.sh _polkit _polkit_auth _polkit_action
 
 clean-local :
 	rm -f *~ polkit-reload-config
diff --git a/tools/_polkit b/tools/_polkit
new file mode 100644
index 0000000..bc7bdac
--- /dev/null
+++ b/tools/_polkit
@@ -0,0 +1,54 @@
+#autoload
+
+# vim: set et sw=3 sts=3 ts=3 ft=zsh:
+# ZSH Completion for polkit-auth
+# Written by Saleem Abdulrasool <compnerd at compnerd.org>
+# Usage: _polkit actions|constraints|authorization|overriden-actions|obtainable-actions|authorized-actions
+
+_polkit_actions() {
+   local actions
+   actions=( $(polkit-action) )
+   compadd "$@" -k actions
+}
+
+_polkit_constraints() {
+   local constraints
+   constraints=( local active local+active )
+   compadd "$@" -k constraints
+}
+
+_polkit_authorization() {
+   local authorization
+   authorization=( no auth_admin_one_shot auth_admin auth_admin_keep_session auth_admin_keep_always auth_self_one_shot auth_self auth_self_keep_session auth_self_keep_always yes )
+   compadd "$@" -k authorization
+}
+
+_polkit_overriden_actions() {
+   local overrides
+   overrides=( $(polkit-action --show-overrides) )
+   compadd "$@" -k overrides
+}
+
+_polkit_obtainable_actions() {
+   local actions
+   actions=( $(polkit-auth --show-obtainable) )
+   compadd "$@" -k actions
+}
+
+_polkit_authorized_actions() {
+   local actions
+   actions=( $(polkit-auth --explicit) )
+   compadd "$@" -k actions
+}
+
+_polkit() {
+   local command="$argv[$#]"
+
+   [[ "$command" == (actions|constraints|authorization|overriden-actions|obtainable-actions|authorized-actions) ]] || {
+      _message "unknown command: $command"
+   }
+
+   _polkit_${command/-/_}
+}
+
+_polkit "$@"
diff --git a/tools/_polkit_action b/tools/_polkit_action
new file mode 100644
index 0000000..7ec7365
--- /dev/null
+++ b/tools/_polkit_action
@@ -0,0 +1,24 @@
+#compdef polkit-action
+
+# vim: set et sw=3 sts=3 ts=3 ft=zsh:
+# ZSH Completion for polkit-action
+# Written by Saleem Abdulrasool <compnerd at compnerd.org>
+
+_polkit_action() {
+   local arguments
+
+   arguments=(
+      "(-)--action[Show detailed information about a specific action]:action:_polkit actions"
+      "(-)--reset-defaults[Reset the defaults for the specified action]:Overridden Action:_polkit overriden-actions"
+      "(-)--show-overrides[List actions where the defaults are overridden]"
+      "(-)--set-defaults-any[Override the any stanza for an action]:Action:_polkit _actions:Authorization:_polkit authorization"
+      "(-)--set-defaults-inactive[Override the inactive stanza for an action]:Action:polkit _actions:Authorization:_polkit authorization"
+      "(-)--set-defaults-active[Override the active stanza for an action]:Action:polkit _actions:Authorization:_polkit authorization"
+      "(-)--version[Display program version]"
+      "(-)--help[Display program help]"
+   )
+
+   _arguments $arguments
+}
+
+_polkit_action "$@"
diff --git a/tools/_polkit_auth b/tools/_polkit_auth
new file mode 100644
index 0000000..e70f1a0
--- /dev/null
+++ b/tools/_polkit_auth
@@ -0,0 +1,50 @@
+#compdef polkit-auth
+
+# vim: set et sw=3 sts=3 ts=3 ft=zsh:
+# ZSH Completion for polkit-auth
+# Written by Saleem Abdulrasool <compnerd at compnerd.org>
+
+_polkit_auth() {
+   local arguments action_arguments user_arguments grant_arguments
+   local commands actions grant=0
+
+   commands=( --show-obtainable --version --help )
+   actions=( --obtain --explicit --explicit-detail --grant --revoke )
+
+   for (( i = 0 ; i < ${#words[@]} ; i++ )) ; do
+      if [[ "${words[$i]##--#}" == "grant" ]] ; then
+         grant=1
+         break
+      fi
+   done
+
+   arguments=(
+      '(-)--show-obtainable[Show all actions that can be obtained via authentication]'
+      '(-)--version[Show version and exit]'
+      '(-)--help[Show help information]'
+   )
+
+   action_arguments=(
+      "($commands $actions)--obtain[Attempt to obtain authorization to do an action]:Obtainable Actions:_polkit obtainable-actions"
+      "($commands $actions)--explicit[Show explicit authorizations]"
+      "($commands $actions)--explicit-detail[Show detailed information about explicit authorizations]"
+      "($commands $actions)--grant[Grant an authorization for an action]:Obtainable Actions:_polkit actions"
+      "($commands $actions)--revoke[Revoke all authorization for an action]:Authorized Actions:_polkit authorized-actions"
+   )
+
+   user_arguments=(
+      "($commands)--user[The user the authorization applies to]:User:_users"
+   )
+
+   grant_arguments=(
+      "($commands)--constraint[Optional constraints on the granted authorization]:Constraint:_polkit constraints"
+   )
+
+   if [[ grant -eq 1 ]] ; then
+      _arguments $arguments $user_arguments $action_arguments $grant_arguments
+   else
+      _arguments $arguments $user_arguments $action_arguments
+   fi
+}
+
+_polkit_auth "$@"
-- 
1.5.3.5


--n8g4imXOkfNTN/H1--


More information about the hal mailing list