Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: using the description from _arguments foo:description:->state
On Sep 11, 5:04pm, Mikael Magnusson wrote:
}
} "($opts)-A[define widget alias]:old widget:->widget :new widget:->widget"
}
} Is there any way to get that description from the $state handler and
} pass it on to compadd?
It appears the answer to this is categorically "no."
The description is extracted into the $descrs array by the comparguments
builtin called at _arguments line 318. It's then assigned to $descr at
line 355 and passed through to _description for formatting at line 366.
However, all of the related variables are declared local to _arguments,
so when that eventually returns without ever making a call to compadd,
all that information is discarded.
Given the usual state (ahem) of the _arguments code, it's surprisingly
straightforward to add a parallel array for passing back the description:
Index: Completion/Base/Utility/_arguments
===================================================================
*** Completion/Base/Utility/_arguments 23 Nov 2008 18:26:27 -0000
--- Completion/Base/Utility/_arguments 11 Sep 2011 17:44:45 -0000
***************
*** 344,349 ****
--- 344,350 ----
context=()
state=()
+ state_descr=()
while true; do
while _tags; do
***************
*** 376,381 ****
--- 377,383 ----
if (( ! $state[(I)$action] )); then
comparguments -W line opt_args
state+=( "$action" )
+ state_descr+=( "$descr" )
if [[ -n "$usecc" ]]; then
curcontext="${oldcontext%:*}:$subc"
else
(Not sure why the use of tabs for indentation is different on adjacent
lines in that section of _arguments.)
However, because callers of _arguments are responsible for declaring
state as a local, there are a HUGE number of files that would have to
be updated to also declare state_descr as a local ... UNLESS we were
willing to declare it local in _main_complete as is done with the
opt_args variable (which is also supposed to be declared local by all
callers of _arguments but conspicuously is not by several completers
including _zle).
Also I'm not really happy with "state_descr" as a name, but I suppose
it'll do. Anyway then we have:
Index: Completion/Zsh/Command/_zle
===================================================================
--- Completion/Zsh/Command/_zle 21 Dec 2010 16:41:15 -0000
+++ Completion/Zsh/Command/_zle 11 Sep 2011 17:57:16 -0000
@@ -44,7 +44,7 @@
'(-)*:widget arguments: ' && ret=0
;;
(widget*)
- _wanted -C "$context[1]" widgets expl widget compadd -k widgets && ret=0
+ _wanted -C "$context[1]" widgets expl "${state_descr[1]:-widget}" compadd -k widgets && ret=0
;&
(function)
[[ $state[1] != *function ]] || # Handle fall-through
Index: Completion/Base/Core/_main_complete
===================================================================
--- Completion/Base/Core/_main_complete 1 Jun 2011 06:39:59 -0000
+++ Completion/Base/Core/_main_complete 11 Sep 2011 17:59:57 -0000
@@ -23,7 +23,8 @@
local func funcs ret=1 tmp _compskip format nm call match min max i num\
_completers _completer _completer_num curtag _comp_force_list \
_matchers _matcher _c_matcher _matcher_num _comp_tags _comp_mesg \
- mesg str context state line opt_args val_args curcontext="$curcontext" \
+ mesg str context state state_descr line opt_args val_args \
+ curcontext="$curcontext" \
_last_nmatches=-1 _last_menu_style _def_menu_style _menu_style sel \
_tags_level=0 \
_saved_exact="${compstate[exact]}" \
And for completeness (ahem):
Index: Completion/Base/Utility/_values
===================================================================
RCS file: /extra/cvsroot/zsh/zsh-4.0/Completion/Base/Utility/_values,v
retrieving revision 1.9
diff -c -r1.9 _values
--- Completion/Base/Utility/_values 21 Dec 2010 16:41:15 -0000 1.9
+++ Completion/Base/Utility/_values 11 Sep 2011 18:06:27 -0000
@@ -87,6 +87,7 @@
if [[ "$action" = -\>* ]]; then
compvalues -v val_args
state="${${action[3,-1]##[ ]#}%%[ ]#}"
+ state_descr="$descr"
if [[ -n "$usecc" ]]; then
curcontext="${oldcontext%:*}:$subc"
else
Opinions?
--
Barton E. Schaefer
Messages sorted by:
Reverse Date,
Date,
Thread,
Author