From ddc538f39966abecca8938464e8b9cee82c56a43 Mon Sep 17 00:00:00 2001 From: Marlon Richert Date: Mon, 12 Apr 2021 23:17:23 +0300 Subject: [PATCH] Let extra-verbose completion show parameter values --- Completion/Zsh/Type/_parameters | 44 ++++++++++++++++++++++----------- Test/Y01completion.ztst | 29 +++++++++++++++++++++- 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/Completion/Zsh/Type/_parameters b/Completion/Zsh/Type/_parameters index 207e5cf78..00c181e11 100644 --- a/Completion/Zsh/Type/_parameters +++ b/Completion/Zsh/Type/_parameters @@ -6,18 +6,39 @@ # 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 - if compset -P '*:'; then _history_modifiers p return fi -pattern=(-g \*) +local MATCH i pfilt +local -i MBEGIN MEND nm=$compstate[nmatches] +local -a expl pattern=(-g \*) normal described verbose faked fakes tmp + +zstyle -t ":completion:${curcontext}:parameters" prefix-needed && + [[ $PREFIX != [_.]* ]] && + pfilt='[^_.]' +_description parameters expl parameter zparseopts -D -K -E g:=pattern -fakes=() -faked=() +if zstyle -t ":completion:${curcontext}:parameters" extra-verbose; then + described=( + "${(@M)${(@k)parameters[(R)$~pattern[2]~*(hideval|local|special)*]}:#$~pfilt*}" + ) + compadd "$@" "$expl[@]" -D described -a - described + if (( $#described )); then + verbose=( + ${described[@]:/(#m)*/"${MATCH}:${(@q+)${(Pkv@q+)MATCH}//\\/\\\\}"} ) + _describe -t parameters parameter verbose "$@" "$expl[@]" + fi + + normal=( + "${(@M)${(@k)parameters[(R)$~pattern[2]~^(*(hideval|special)*)~*local*]}:#$~pfilt*}" + ) +else + normal=( "${(@M)${(@k)parameters[(R)$~pattern[2]~*local*]}:#$~pfilt*}" ) +fi + if zstyle -a ":completion:${curcontext}:" fake-parameters tmp; then for i in "$tmp[@]"; do if [[ "$i" = *:* ]]; then @@ -27,13 +48,8 @@ if zstyle -a ":completion:${curcontext}:" fake-parameters tmp; then fi done fi +compadd "$@" "$expl[@]" - "$normal[@]" "${(@)fakes:|described}" \ + "${(@)${(@)${(@M)faked:#${~pattern[2]}}%%:*}:|described}" -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]}}%%:*}" +(( compstate[nmatches] > nm )) +return 0 diff --git a/Test/Y01completion.ztst b/Test/Y01completion.ztst index 858fa7220..2c6d25d9a 100644 --- a/Test/Y01completion.ztst +++ b/Test/Y01completion.ztst @@ -240,7 +240,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 does not break _sequence >line: {tst 1,}{} >DESCRIPTION:{desc} >NO:{2} @@ -255,6 +255,33 @@ F:regression test workers/31611 >FI:{file1} >FI:{file2} + comptesteval "bar=({$'\\0'..$'\\C-?'}); baz=\$bar" + comptesteval 'zstyle ":completion:*:parameters" extra-verbose yes' + comptesteval 'zstyle ":completion:*" fake-parameters bar baz:array' + 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} +>NO:{baz -- '^@ ^A ^B ^C ^D ^E ^F ^G ^H \t \n ^K ^L ^M ^N ^O ^P ^Q ^R ^S ^T ^U ^} + + comptesteval "path=( $ZTST_srcdir:A )" + comptesteval 'typeset -H paths=HIDDEN' + comptest $': $path\t' +0:extra-verbose doesn't show special or hidden parameter values +>line: {: $path}{} +>DESCRIPTION:{parameter} +>NO:{path} +>NO:{paths} + + 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