diff options
author | Mikael Magnusson <mikachu@gmail.com> | 2015-07-03 13:57:08 +0200 |
---|---|---|
committer | Mikael Magnusson <mikachu@gmail.com> | 2015-07-03 14:20:32 +0200 |
commit | 439764a43f7d9a06e2c734984aa321c98dfcc80f (patch) | |
tree | 31ed750740714129f59598dee2096e337360eb7a | |
parent | 38145b255a941098a92ded3647f70be977483fa9 (diff) | |
download | zsh-439764a43f7d9a06e2c734984aa321c98dfcc80f.tar.gz zsh-439764a43f7d9a06e2c734984aa321c98dfcc80f.tar.xz zsh-439764a43f7d9a06e2c734984aa321c98dfcc80f.zip |
35673: Improve _zargs
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | Completion/Zsh/Function/_zargs | 64 |
2 files changed, 48 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog index 03747ead0..49dda862f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-07-03 Mikael Magnusson <mikachu@gmail.com> + + * 35673: Completion/Zsh/Function/_zargs: Improve _zargs + 2015-07-02 Peter Stephenson <p.stephenson@samsung.com> * Han Pingtian: 35665: Src/Zle/complete.c: better error handling diff --git a/Completion/Zsh/Function/_zargs b/Completion/Zsh/Function/_zargs index f1f87b447..c24b276f2 100644 --- a/Completion/Zsh/Function/_zargs +++ b/Completion/Zsh/Function/_zargs @@ -1,24 +1,48 @@ #compdef zargs -value-,-default-,-command- -# atom smasher - jan 2011 -local arguments +local arguments eofstr pos=$((CURRENT)) numeofs=0 ret=1 cmdpos=1 -arguments=( $arguments[@] - '(--eof -e)'{--eof=,-e+}'[change the end-of-input-args string from "--" to eof-str]' - '(--exit, -x)'{--exit,-x}'[exit if the size (see --max-chars) is exceeded]' - '--help[print summary and exit]' - '(--interactive, -p)'{--interactive,-p}'[prompt before executing each command line]' - '(--max-args, -n)'{--max-args=,-n+}'[use at most max-args arguments per command line]' - '(--max-chars, -s)'{--max-chars=,-s+}'[use at most max-chars characters per command line]' - '(--max-lines, -l)'{--max-lines=,-l+}'[use at most max-lines of the input-args per command line]' - '(--max-procs, -P)'{--max-procs=,-P+}'[run up to max-procs command lines in the background at once]' - '(--no-run-if-empty, -r)'{--no-run-if-empty,-r}'[do nothing if there are no input arguments before the eof-str]' - '(--null, -0)'{--null,-0}'[split each input-arg at null bytes, for xargs compatibility]' - '(--replace, -i)'{--replace=,-i}'[substitute replace-str in the initial-args by each initial-arg]' - '(--verbose, -t)'{--verbose,-t}'[print each command line to stderr before executing it]' - '--version[print the version number of zargs and exit]' -) +#this doesn't handle '--' on the command line, only -- +#it also by extension doesn't handle eofstr being the empty string +#it also also doesn't handle eofstr being -e or --eof, and everything will +# probably also be confused if the command at the end takes a -e, --eof= or -- +eofstr=${${${${words[(r)(--eof=*|-e*)]}#--eof=}#-e}:---} +while { + pos=$(( words[(b:pos-1:I)$eofstr] )) + (( numeofs == 0 )) && (( cmdpos = pos )) + (( pos )) && (( numeofs++ )) + (( pos )) +} {} +case $numeofs in + 0) + #zargs arguments + arguments=( + '(--eof -e)'{--eof=,-e+}'[change the end-of-input-args string from "--" to eof-str]' + '(--exit, -x)'{--exit,-x}'[exit if the size (see --max-chars) is exceeded]' + '--help[print summary and exit]' + '(--interactive, -p)'{--interactive,-p}'[prompt before executing each command line]' + '(--max-args, -n)'{--max-args=,-n+}'[use at most max-args arguments per command line]' + '(--max-chars, -s)'{--max-chars=,-s+}'[use at most max-chars characters per command line]' + '(--max-lines, -l)'{--max-lines=,-l+}'[use at most max-lines of the input-args per command line]' + '(--max-procs, -P)'{--max-procs=,-P+}'[run up to max-procs command lines in the background at once]' + '(--no-run-if-empty, -r)'{--no-run-if-empty,-r}'[do nothing if there are no input arguments before the eof-str]' + '(--null, -0)'{--null,-0}'[split each input-arg at null bytes, for xargs compatibility]' + '(--replace, -i)'{--replace=,-i}'[substitute replace-str in the initial-args by each initial-arg]' + '(--verbose, -t)'{--verbose,-t}'[print each command line to stderr before executing it]' + '--version[print the version number of zargs and exit]' + ) + _arguments -S -s $arguments[@] && ret=0 + ;; + 1) + #argument list for command + _files && ret=0 + ;; + *) + #command and command arguments + shift cmdpos words + (( CURRENT -= cmdpos )) + _normal + ;; +esac -_arguments -S -s $arguments[@] - -_command_names -e +return ret |