diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Completion/Zsh/Context/_brace_parameter | 3 | ||||
-rw-r--r-- | Completion/Zsh/Type/_parameters | 5 | ||||
-rw-r--r-- | Src/Zle/compcore.c | 14 |
4 files changed, 28 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index c6099aef5..05200c664 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-01-28 Peter Stephenson <p.w.stephenson@ntlworld.com> + + * 32303: Src/Zle/compcore.c, Completion/Zsh/Type/_parameters, + Completion/Zsh/Context/_brace_parameter: allow completion + of modifiers for parameters in a fairly simplistic way. + 2014-01-28 Peter Stephenson <p.stephenson@samsung.com> * 32308 (slightly modified to use "a" as the vi command at start diff --git a/Completion/Zsh/Context/_brace_parameter b/Completion/Zsh/Context/_brace_parameter index c0ecf251b..2aeb12bf4 100644 --- a/Completion/Zsh/Context/_brace_parameter +++ b/Completion/Zsh/Context/_brace_parameter @@ -185,6 +185,9 @@ if [[ $PREFIX = *'${('[^\)]# ]]; then ) _describe -t flags "parameter flag" flags -Q -S '' return +elif compset -P '*:'; then + _history_modifiers p + return fi _parameters -e diff --git a/Completion/Zsh/Type/_parameters b/Completion/Zsh/Type/_parameters index 5156e3e2d..eaad3ca9d 100644 --- a/Completion/Zsh/Type/_parameters +++ b/Completion/Zsh/Type/_parameters @@ -8,6 +8,11 @@ local expl pattern fakes faked tmp pfilt +if compset -P '*:'; then + _history_modifiers p + return +fi + pattern=(-g \*) zparseopts -D -K -E g:=pattern diff --git a/Src/Zle/compcore.c b/Src/Zle/compcore.c index 5c5628a8d..ac7785ab7 100644 --- a/Src/Zle/compcore.c +++ b/Src/Zle/compcore.c @@ -1260,6 +1260,20 @@ check_param(char *s, int set, int test) ispar = (br >= 2 ? 2 : 1); b[we-wb] = '\0'; return b; + } else if (offs > e - s && *e == ':') { + /* + * Guess whether we are in modifiers. + * If the name is followed by a : and the stuff after + * that is either colons or alphanumerics we probably are. + * This is a very rough guess. + */ + char *offsptr = s + offs; + for (; e < offsptr; e++) { + if (*e != ':' && !ialnum(*e)) + break; + } + ispar = (br >= 2 ? 2 : 1); + return NULL; } } return NULL; |