From 439764a43f7d9a06e2c734984aa321c98dfcc80f Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Fri, 3 Jul 2015 13:57:08 +0200 Subject: 35673: Improve _zargs --- Completion/Zsh/Function/_zargs | 64 +++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 20 deletions(-) (limited to 'Completion/Zsh') 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 -- cgit 1.4.1