From 5ef8fcaabe243c8c4e04de92e1f971543470ce87 Mon Sep 17 00:00:00 2001 From: Marlon Richert Date: Mon, 29 Mar 2021 22:56:34 +0300 Subject: [PATCH] Let `zstyle extra-verbose` show parameter values When completing parameters and `zstyle -t ":completion:${curcontext}:parameters" extra-verbose`, display values of non-special parameters as descriptions. --- Completion/Zsh/Type/_parameters | 28 ++++++++++++++++++++++------ Test/Y01completion.ztst | 24 +++++++++++++++++++++++- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/Completion/Zsh/Type/_parameters b/Completion/Zsh/Type/_parameters index 207e5cf78..b32e049f7 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=(-g \*) zparseopts -D -K -E g:=pattern @@ -32,8 +37,19 @@ zstyle -t ":completion:${curcontext}:parameters" prefix-needed && \ [[ $PREFIX != [_.]* ]] && \ pfilt='[^_.]' -_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=-- + zformat -a disp " $sep " \ + ${matches[@]:/(#m)*/"${MATCH}:${${parameters[$MATCH]:#*special*}:+${(Pkv@q+)MATCH}}"} + disp=( "${disp[@]:/(#m)*/$MATCH[1,COLUMNS]}" ) + dopt=( -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’t break _sequence >line: {tst 1,}{} >DESCRIPTION:{desc} >NO:{2} @@ -237,6 +237,28 @@ F:regression test workers/31611 >FI:{file1} >FI:{file2} + comptesteval "bar=({$'\\0'..$'\\C-?'}); baz=\$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=( {a..z} ); compadd -ld disp $disp[@]; comppostfuncs=( _pst ) }' comptesteval '_pst() { local disp=( "$compstate[insert]" ); compadd -Qld disp $disp }' comptesteval "zstyle ':completion:*' menu select=long-list" -- 2.31.0