From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 2351 invoked from network); 29 Mar 2021 11:56:07 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 29 Mar 2021 11:56:07 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1617018967; b=OOKgPSFK3DY+vk3VgLUhsPXXBIOgQZzQyUp0lPwlfbApnVHr/3mZzF3P5nAZAA2sxzuo7lWxOB 5YcM10qiYz9i6VgP1QJSwkoIo43ytdjeI6RjW+6z1/uhOf0WuBFF+u9aQhqNayG/07vHJnIeU3 5h9bxtnZKGNebKQghapdIC646gRmv3lW15d0aynx19zsjTmSEa0uxzWlXnscqK6MZqZRV+wVzl n3XR70tx7SZSkVn7eVY82W7uzrHbC40m5T5LmQgKc9lGI3st2F2TtvBy6wVNpj9GT3urlse010 BMBpvj6KgmD2lceMEwXlwM9ozQrhA4mE0bUBrUrOIeOMuw==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-lf1-f54.google.com) smtp.remote-ip=209.85.167.54; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1617018967; bh=gpv+LXMERSirMBNYiUdGJuCxvauwhMvZonTbPP/LLwM=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Transfer-Encoding:Content-Type:Cc:To:Subject: Message-ID:Date:From:In-Reply-To:References:MIME-Version:DKIM-Signature: DKIM-Signature; b=znrNBi9xFwkqqcjom7CuFbZoF7EbLbZCJY7+gEziIklo8t9m5NTgruD7bxI/tfSsfWJebKA0vU 6teXolfoKQtOsPvhWBsQG3WRJVY0MOqJQ6wvDBbKp+cjdJAEeWIVx8kJ85qsyfHUddc8T/GCFB DsTXeFH7/O5GGZxOSIF5u7CwMCb0wXbWSX3CNyoEtFIIuahel1DbHkZ+PNJYsd5ivmhToctMBi jt5CAHVtAa+f1U7pRdcT8YypnC9CdGCEuVjc+1CNJtnIXyFsrMUp/wF4+WHks0EIRtAAUOUu9K E3lB8WkVkZv3m3gjMvcCy/d9qKkaSZZ5+yBOeY07rw2tJw==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Transfer-Encoding: Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References: MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=R/n/ecILekiF/9h9DP55GCf8THQVQV+0KlOhXvZteb0=; b=RMtzjHfhGrbJ1khQH3FtaqoZ0A 59M7ImgIIZB1ImA8GWgkOVphj4io6YHh0k7aNrlqfzyZGxn+PgdTuYPi8wvfxCML3R3yb1FrclaOv +el+z9W6SbrNrITofxmj0NI1QW9autk8DR8sa9FnaNmK/S1yIsO4qWHBjHv2vT1lnMp+gLWq6r4Pz OatjZ+LodrxVicNojMNrpyb68Z+uX3wmEv2QLaF/eBRxMcJA8NF+j/QYGt07tXYkXk7yHIUMmWmv2 TnxKhOwI+IYqJJLQr8g/9LembA0O0twr1icpOseagnkFzyaBQ6ZiHMOM0JPK94CnQorPVcsyyypoQ wAbOff+Q==; Received: from authenticated user by zero.zsh.org with local id 1lQqV5-00021p-2V; Mon, 29 Mar 2021 11:56:07 +0000 Authentication-Results: zsh.org; iprev=pass (mail-lf1-f54.google.com) smtp.remote-ip=209.85.167.54; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-lf1-f54.google.com ([209.85.167.54]:34558) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1lQqUs-0001sF-HP; Mon, 29 Mar 2021 11:55:54 +0000 Received: by mail-lf1-f54.google.com with SMTP id i26so17945747lfl.1 for ; Mon, 29 Mar 2021 04:55:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=R/n/ecILekiF/9h9DP55GCf8THQVQV+0KlOhXvZteb0=; b=J4z3wh0qCCDeSPil9rev/DVk6kax1rKxXxaLmmsmX9bd72mQR7i2sfLw/VJoTiq5IS suIf/MS6Ax1fd2pIUYnxmjUjAihM6MMoAhOhHgWzQCZMBIbBf+0pw/95ztsFjbcPaS5/ ymowE8md2vEEBWs03p8u5kStX+wQzVP5mA/Ee8cLySAyJI2YqhQAV3+/6scFHntkxmMy AhC6OxWO3MgUaQ9z9pRAR2r/uETQoFEEdEkAQxWninW2j52d91KMXLSMjoKdbKm/P/EB o/vSa58mpr73oP6yJhIgJowqaoolijmb3WJmM6JQGmCYP3J/teEzFtp6Z+UbAIEy1Pbt gVnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=R/n/ecILekiF/9h9DP55GCf8THQVQV+0KlOhXvZteb0=; b=GvDS2WBMmPSIQC2sqmyEXd5OlM+Th8EAkp470ip+b1vcfj6QKx7gqRcFH+uv3oeXxH pCOHkdDZblKWg4u7GvxeNkHrSWNJX7vag8X3zWxZu1lyCv21ZiX00FGC/Ag9G2LYfcLV GMvbnskuqmrOaCa3arxfYdqoPfK+dElghqOTfIqNMUug6oDcNd5bNBDWzPTQmxdQMDgf /dPgG1KimDK3zNNmYAdhNkemvv1AaAD80+8J5y2NLIiygEUuk85rEtlhN75giw45eFvo 1Krw+BamyLGqwYDHVbpxT7yK4mUpLpTgfHOVDXQKC2Ob6mrgfIKb0gSLWLdWAcsFaTWi +uyg== X-Gm-Message-State: AOAM532K4jfph7lYxE5HP0bvEFNBTRcgf34BTQJtNOq42wxOGlveemlM 3iV3cOHZHdhfZRVG+njpk90jTkZgIuQPpIVVLOvLyqMFjo8iNQ== X-Google-Smtp-Source: ABdhPJwY5ZrhXJwi+Q8azuKp7/5YDDZrxDOaRQ8Op6VGe1ej8yJZQgjAj9yrmsq5YKqv9Recp81pwE61yH+bK0DhiQU= X-Received: by 2002:ac2:54bc:: with SMTP id w28mr15512888lfk.593.1617018953832; Mon, 29 Mar 2021 04:55:53 -0700 (PDT) MIME-Version: 1.0 References: <20210329073913.GP18178@tarpaulin.shahaf.local2> In-Reply-To: <20210329073913.GP18178@tarpaulin.shahaf.local2> From: Marlon Richert Date: Mon, 29 Mar 2021 14:55:17 +0300 Message-ID: Subject: Re: Feature Patch: Use completion to view parameter values To: Daniel Shahaf Cc: Zsh hackers list Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Seq: 48316 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: On Mon, Mar 29, 2021 at 10:39 AM Daniel Shahaf wro= te: > What about parameters implemented by modules? The getters of those may > run arbitrary code, and may have side effects: e.g., imagine an > $AUTOINCREMENT parameter that returns an incremented-by-one value every > time it's evaluated: Is there a way to identify these somehow, so I could filter them out? How about if I never auto-evaluate "special" parameters? So, like this: diff --git a/Completion/Zsh/Type/_parameters b/Completion/Zsh/Type/_paramet= ers index 207e5cf78..4cc8171b0 100644 --- a/Completion/Zsh/Type/_parameters +++ b/Completion/Zsh/Type/_parameters @@ -6,13 +6,18 @@ # If you specify a -g option with a pattern, the pattern will be used to # restrict the type of parameters matched. -local expl pattern fakes faked tmp i pfilt +local MATCH MBEGIN MEND \ + disp dopt expl fakes faked i matches pattern pfilt sep tmp if compset -P '*:'; then _history_modifiers p return fi +_tags parameters +( _tags && _requested parameters ) || + return + pattern=3D(-g \*) zparseopts -D -K -E g:=3Dpattern @@ -32,8 +37,19 @@ zstyle -t ":completion:${curcontext}:parameters" prefix-needed && \ [[ $PREFIX !=3D [_.]* ]] && \ pfilt=3D'[^_.]' -_wanted parameters expl parameter \ - compadd "$@" -Q - \ - "${(@M)${(@k)parameters[(R)${pattern[2]}~*local*]}:#${~pfilt}*}" \ - "$fakes[@]" \ - "${(@)${(@M)faked:#${~pattern[2]}}%%:*}" +_description parameters expl parameter +compadd "$expl[@]" -O matches - \ + "${(@M)${(@k)parameters[(R)${pattern[2]}~*local*]}:#${~pfilt}*}" \ + "$fakes[@]" \ + "${(@)${(@M)faked:#${~pattern[2]}}%%:*}" + +if zstyle -t ":completion:${curcontext}:parameters" extra-verbose; then + zstyle -s ":completion:${curcontext}:parameters" list-separator sep || + sep=3D-- + zformat -a disp " $sep " \ + ${matches[@]:/(#m)*/"${MATCH}:${${(t)${(P)MATCH}:#*special*}:+${(Pkv@q= +)MATCH}}"} + disp=3D( "${disp[@]:/(#m)*/$MATCH[1,COLUMNS]}" ) + dopt=3D( -d disp ) +fi + +compadd "$expl[@]" $dopt -Q -a matches diff --git a/Test/Y01completion.ztst b/Test/Y01completion.ztst index 571f3cf16..e5901b8e5 100644 --- a/Test/Y01completion.ztst +++ b/Test/Y01completion.ztst @@ -222,7 +222,7 @@ F:regression test workers/31611 comptesteval "zstyle ':completion:*:tst:*' ignored-patterns 2" comptest $'tst 1,\t' comptesteval "zstyle -d ':completion:*:tst:*' ignored-patterns" -0:-F doesn't break _sequence +0:-F doesn=E2=80=99t break _sequence >line: {tst 1,}{} >DESCRIPTION:{desc} >NO:{2} @@ -237,6 +237,28 @@ F:regression test workers/31611 >FI:{file1} >FI:{file2} + comptesteval "bar=3D({$'\\0'..$'\\C-?'}); baz=3D\$bar" + comptesteval 'zstyle ":completion:*:parameters" extra-verbose yes' + comptest $': $ba\t' +0:extra-verbose shows parameter values +>line: {: $ba}{} +>DESCRIPTION:{parameter} +>NO:{bar -- '^@' '^A' '^B' '^C' '^D' '^E' '^F' '^G' '^H' '\t' '\n' '^K' '^L' '^M' '^N} +>NO:{baz -- '^@ ^A ^B ^C ^D ^E ^F ^G ^H \t \n ^K ^L ^M ^N ^O ^P ^Q ^R ^S ^T ^U ^V ^W } + + comptest $': $path\C-D' +0:extra-verbose does not show special parameter values +>DESCRIPTION:{parameter} +>NO:{path} + + comptesteval 'zstyle -d ":completion:*:parameters" extra-verbose' + comptest $': $ba\t' +0:parameter values not shown without extra-verbose +>line: {: $ba}{} +>DESCRIPTION:{parameter} +>NO:{bar} +>NO:{baz} + comptesteval '_tst() { local disp=3D( {a..z} ); compadd -ld disp $disp[@]; comppostfuncs=3D( _pst ) }' comptesteval '_pst() { local disp=3D( "$compstate[insert]" ); compadd -Qld disp $disp }' comptesteval "zstyle ':completion:*' menu select=3Dlong-list"