From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id d904f596 for ; Thu, 21 Mar 2019 12:41:42 +0000 (UTC) Received: (qmail 2856 invoked by alias); 21 Mar 2019 12:41:31 -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: List-Unsubscribe: X-Seq: 44155 Received: (qmail 12136 invoked by uid 1010); 21 Mar 2019 12:41:31 -0000 X-Qmail-Scanner-Diagnostics: from mail-ot1-f66.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.101.1/25393. spamassassin: 3.4.2. Clear:RC:0(209.85.210.66):SA:0(-1.7/5.0):. Processed in 2.276354 secs); 21 Mar 2019 12:41:31 -0000 X-Envelope-From: phy1729@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 209.85.210.66 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-disposition:in-reply-to:user-agent; bh=YHOUNDlIhiLAqhQokobqfB1mSigqgHd0cl/oC4w/Yz0=; b=ZHNH4U4zQNeH9tO7rxr0HPubOdePAAjwUO9QdD4wEJK0jXnihhz62Sc2fUcvys8svv p1NrNGNOury3EYb1paRrKebWXCY/ySU2gWvJYywDHJAS6QER0b5lGrXPQAx7zuxY1FWb ycMCM41Wy4Z9pFiHpmX4Rds6uub+ADEtyshg/nDcIpRP4qgGFCBxE/lNAJvfZ3PT0yu1 aDLVmhHWnnd86E6FFqLPO2Y3BEQJjMDPc1Dt7UqmQH1KwpyFKBNhnpd3181DLMUsqsAN tgRscQK+XO20mL9O3Rcqqc6R+7r835Oi1PvCnabfI/5JwsTRTY5QsbpSSGQDTzNylU7D mjbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :in-reply-to:user-agent; bh=YHOUNDlIhiLAqhQokobqfB1mSigqgHd0cl/oC4w/Yz0=; b=M3wFwSLhIXSootMztpgwi/dbZVL9r0m+Ed37J/46DM3IJH6Mcikjj+9ndVj3PZUnyZ oD6DfWZxtQnZH9CE7AOMqkumAquyeVe+bgsbmmLBfYs9YsGtQSRCEL6Io2tSzHVv58pb /45P/rdMe1RYymx3fOnxYpzinTJRN+NdZ8vk4eZxV+7fBfL4cD/sOd4BihsInXHBTDKe 12790xmmwbCUcWy+1iYoX5dc+8O4pmPwsZ5OvlqdxTFVa4JPLZlksRQYGViP/L9Rw+7I X2L0W3lYzLZ5sIIZDYP5ZrbwR+TH7eRRQW5kgMH/J8ZOmR73Oc+dQ5+P85ZmqdfxsHHA 65ow== X-Gm-Message-State: APjAAAXzTpLGGX7fEf3MP45Z+x2zHZJXzjHY5JjwgLw/fcYHCiTau3To awHqBlJu5ZDCfUfg0rPIElECBDfV X-Google-Smtp-Source: APXvYqwDyvb8KlihFJ0NtKUiLRhT7HpbNle8FDTyZjibcbSt7MQq+uX+i191H8ShJQOnLKCmzsclUA== X-Received: by 2002:a9d:600d:: with SMTP id h13mr2330846otj.114.1553172055722; Thu, 21 Mar 2019 05:40:55 -0700 (PDT) Date: Thu, 21 Mar 2019 07:40:53 -0500 From: Matthew Martin To: Daniel Shahaf Cc: zsh-workers@zsh.org Subject: Re: [PATCH] _pick_variant: Update builtin check Message-ID: <20190321124052.GA24497@CptOrmolo.darkstar> Mail-Followup-To: Daniel Shahaf , zsh-workers@zsh.org References: <20190320020511.GA6739@CptOrmolo.darkstar> <20190320033815.GA22718@CptOrmolo.darkstar> <20190320125238.GA48465@CptOrmolo.darkstar> <20190320130523.rwpxbzi4u66i2srz@tarpaulin.shahaf.local2> <20190321001636.GA57147@CptOrmolo.darkstar> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.4 (2019-03-13) On Thu, Mar 21, 2019 at 07:57:38AM -0400, Daniel Shahaf wrote: > I understand what you mean in the context of this thread, but I think > the two uses of the term 'command' might be confusing to someone who > opens the file in a year or three. How about: > > # Precommands which allow their wrapped command to be a builtin. > # All of these are necessarily builtins or reserved words themselves, but not all builtin precommands are listed here: for one, the 'command' builtin is excluded. Works for me. Unless there are other comments I'll commit later today. - Matthew Martin >From 06741ae0671c4a29d2700afa46470a8024ddbefb Mon Sep 17 00:00:00 2001 From: Matthew Martin Date: Tue, 19 Mar 2019 20:42:35 -0500 Subject: [PATCH] _pick_variant: Update builtin check --- Completion/Base/Utility/_pick_variant | 30 ++++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/Completion/Base/Utility/_pick_variant b/Completion/Base/Utility/_pick_variant index 9099e3599..872e8f583 100644 --- a/Completion/Base/Utility/_pick_variant +++ b/Completion/Base/Utility/_pick_variant @@ -1,9 +1,15 @@ #autoload -local output cmd pat +local output cmd pat pre local -a var local -A opts +# Precommands which allow their wrapped command to be a builtin. +# All of these are necessarily builtins or reserved words themselves, +# but not all builtin precommands are listed here: +# for one, the 'command' builtin is excluded. +local -ar builtin_precommands=(- builtin eval exec nocorrect noglob time) + (( $+_cmd_variant )) || typeset -gA _cmd_variant zparseopts -D -A opts b: c: r: @@ -13,19 +19,27 @@ while [[ $1 = *=* ]]; do var+=( "${1%%\=*}" "${1#*=}" ) shift done -if (( $+_cmd_variant[$opts[-c]] )); then - (( $+opts[-r] )) && eval "${opts[-r]}=${_cmd_variant[$opts[-c]]}" - [[ $_cmd_variant[$opts[-c]] = "$1" ]] && return 1 + +if (( ${#precommands:|builtin_precommands} )); then + pre=command +elif (( $+opts[-b] && ( $precommands[(I)builtin] || $+builtins[$opts[-c]] ) )); then + (( $+opts[-r] )) && eval "${opts[-r]}=$opts[-b]" return 0 +elif (( $precommands[(I)builtin] )); then + pre=builtin +else + # Neither builtin nor command-forcing precommand specified, + # so no prefix is needed. + pre= fi -if [[ $+opts[-b] -eq 1 && -n $builtins[$opts[-c]] ]]; then - _cmd_variant[$opts[-c]]=$opts[-b] +if [[ $pre != builtin ]] && (( $+_cmd_variant[$opts[-c]] )); then (( $+opts[-r] )) && eval "${opts[-r]}=${_cmd_variant[$opts[-c]]}" + [[ $_cmd_variant[$opts[-c]] = "$1" ]] && return 1 return 0 fi -output="$(_call_program variant $opts[-c] "${@[2,-1]}" &1)" +output="$(_call_program variant $pre $opts[-c] "${@[2,-1]}" &1)" for cmd pat in "$var[@]"; do if [[ $output = *$~pat* ]]; then @@ -36,6 +50,6 @@ for cmd pat in "$var[@]"; do done (( $+opts[-r] )) && eval "${opts[-r]}=$1" -_cmd_variant[$opts[-c]]="$1" +[[ $pre != builtin ]] && _cmd_variant[$opts[-c]]="$1" return 1 -- 2.21.0