[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