From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19249 invoked by alias); 17 Jul 2016 15:00:23 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 38870 Received: (qmail 14817 invoked from network); 17 Jul 2016 15:00:23 -0000 X-Qmail-Scanner-Diagnostics: from hermes.apache.org by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(140.211.11.3):SA:0(-1.3/5.0):. Processed in 0.149979 secs); 17 Jul 2016 15:00:23 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: danielsh@apache.org X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at apache.org does not designate permitted sender hosts) From: Daniel Shahaf To: zsh-workers@zsh.org Subject: [PATCH] _add-zle-hook-widget: New completion. Date: Sun, 17 Jul 2016 15:00:14 +0000 Message-Id: <1468767614-9635-1-git-send-email-danielsh@tarsus.local2> X-Mailer: git-send-email 2.1.4 In-Reply-To: <160716185103.ZM5258@torch.brasslantern.com> References: <160716185103.ZM5258@torch.brasslantern.com> --- I wanted to use 'autoload +X add-zle-hook-widget; zstyle -g reply zle-hook types' to avoid duplicating $hooktypes, but couldn't get it to work. (Neither with -k nor with -z was the style defined) Daniel Completion/Zsh/Function/_add-zle-hook-widget | 34 ++++++++++++++++++++++++++++ Functions/Zle/add-zle-hook-widget | 1 + 2 files changed, 35 insertions(+) create mode 100644 Completion/Zsh/Function/_add-zle-hook-widget diff --git a/Completion/Zsh/Function/_add-zle-hook-widget b/Completion/Zsh/Function/_add-zle-hook-widget new file mode 100644 index 0000000..40afb7e --- /dev/null +++ b/Completion/Zsh/Function/_add-zle-hook-widget @@ -0,0 +1,34 @@ +#compdef add-zle-hook-widget + +local context state state_descr line +typeset -A opt_args + +_add-zle-hook-widget_classes() { + local -a hooktypes=( zle-isearch-exit zle-isearch-update + zle-line-pre-redraw zle-line-init zle-line-finish + zle-history-line-set zle-keymap-select ) + # $hooktypes is duplicated in add-zle-hook-function itself, if you add entries update both places + compadd "$@" -a hooktypes +} + +_add-zle-hook-widget_widgets() { + if (( $+opt_args[-d] )); then + local -a tmp + zstyle -g tmp $line[1] widgets + _wanted widgets expl "installed hooks" compadd -- ${tmp#<->:} && return 0 + else + _wanted widgets expl widget compadd -M 'r:|-=* r:|=*' -k widgets && ret=0 && return 0 + fi + return 1 +} + +_add-zle-hook-widget() { + _arguments -s -w -S : \ + '(-D)-d[remove HOOK from the array]' \ + '(-d)-D[interpret HOOK as pattern to remove from the array]' \ + {-U,-z,-k}"[passed to 'autoload']" \ + ':hook class:_add-zle-hook-widget_classes' \ + ':widget:_add-zle-hook-widget_widgets' +} + +_add-zle-hook-widget "$@" diff --git a/Functions/Zle/add-zle-hook-widget b/Functions/Zle/add-zle-hook-widget index cc2d54a..7f749b4 100644 --- a/Functions/Zle/add-zle-hook-widget +++ b/Functions/Zle/add-zle-hook-widget @@ -32,6 +32,7 @@ zmodload -e zsh/zle || return 1 local -a hooktypes=( zle-isearch-exit zle-isearch-update zle-line-pre-redraw zle-line-init zle-line-finish zle-history-line-set zle-keymap-select ) + # $hooktypes is duplicated in _add-zle-hook-function, if you add entries update both places # Stash in zstyle to make it global zstyle zle-hook types ${hooktypes#zle-}