commit afb4535accaa08e20050a7b2d508d884b02f45a0 Author: Saleem Abdulrasool Date: Mon Nov 19 15:35:03 2007 -0800 add zsh completion and optionalize bash and zsh completion Signed-off-by: Saleem Abdulrasool diff --git a/configure.in b/configure.in index 2fdb935..a9ea35a 100644 --- a/configure.in +++ b/configure.in @@ -495,6 +495,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 a76e9fc..0449e12 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 = $(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 +# 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 + +_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 + +_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 "$@"