1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-05-20 06:56:05 +02:00

31503: zmv improvements for user-specified programs.

-p splits words of commands passed to it.
-P is like -p for when the program doesn't understand the -- convention
This commit is contained in:
Peter Stephenson 2013-07-03 12:46:02 +01:00
parent 96c8b2832b
commit 669c070efe
3 changed files with 25 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2013-07-03 Peter Stephenson <p.stephenson@samsung.com>
* 31503: Doc/Zsh/contrib.yo, Functions/Misc/zmv: split words
in program passed to zmv with -p and add -P for programs
that don't understand the "--" convention.
2013-06-28 Clint Adams <clint@zsh.org>
* 31500: Completion/Debian/Command/_dput: dput-ng completion

View File

@ -3618,7 +3618,7 @@ ifzman(above)\
ifnzman((noderef(Utilities))).
)
findex(zmv)
item(tt(zmv) [ tt(-finqQsvwW) ] [ -C | -L | -M | -p var(program) ] [ -o var(optstring) ] var(srcpat) var(dest) )(
item(tt(zmv) [ tt(-finqQsvwW) ] [ -C | -L | -M | -[pP] var(program) ] [ -o var(optstring) ] var(srcpat) var(dest) )(
Move (usually, rename) files matching the pattern var(srcpat) to
corresponding files having names of the form given by var(dest), where
var(srcpat) contains parentheses surrounding patterns which will be
@ -3663,7 +3663,13 @@ sitem(tt(-p) var(program))(Call var(program) instead of tt(cp), tt(ln) or
tt(mv). Whatever it does, it should at least understand the form
ifzman(`var(program) tt(-)tt(-) var(oldname) var(newname)')\
ifnzman(example(var(program) tt(-)tt(-) var(oldname) var(newname)))
where var(oldname) and var(newname) are filenames generated by tt(zmv).)
where var(oldname) and var(newname) are filenames generated by tt(zmv).
var(program) will be split into words, so might be e.g. the name
of an archive tool plus a copy or rename subcommand.)
sitem(tt(-P) var(program))(As tt(-p) var(program), except that
var(program) does not accept a following tt(-)tt(-) to indicate the
end of options. In this case filenames must already be in a sane
form for the program in question.)
sitem(tt(-o) var(optstring))(The var(optstring) is split into words and
passed down verbatim to the tt(cp), tt(ln) or tt(mv) command called to
perform the work. It should probably begin with a `tt(-)'.)

View File

@ -93,7 +93,11 @@
# -p <program>
# Call <program> instead of cp, ln or mv. Whatever it does, it should
# at least understand the form '<program> -- <oldname> <newname>',
# where <oldname> and <newname> are filenames generated.
# where <oldname> and <newname> are filenames generated. <program>
# will be split into words.
# -P <program>
# As -p, but the program doesn't understand the "--" convention.
# In this case the file names must already be sane.
# -w Pick out wildcard parts of the pattern, as described above, and
# implicitly add parentheses for referring to them.
# -W Just like -w, with the addition of turning wildcards in the
@ -123,14 +127,16 @@ setopt extendedglob
local f g args match mbegin mend files action myname tmpf opt exec
local opt_f opt_i opt_n opt_q opt_Q opt_s opt_M opt_C opt_L
local opt_o opt_p opt_v opt_w opt_W MATCH MBEGIN MEND
local opt_o opt_p opt_P opt_v opt_w opt_W MATCH MBEGIN MEND
local pat repl errstr fpat hasglobqual opat
typeset -A from to
integer stat
local dashes=--
myname=${(%):-%N}
while getopts ":o:p:MCLfinqQsvwW" opt; do
while getopts ":o:p:P:MCLfinqQsvwW" opt; do
if [[ $opt = "?" ]]; then
print -r -- "$myname: unrecognized option: -$OPTARG" >&2
return 1
@ -144,6 +150,7 @@ done
[[ -n $opt_C ]] && action=cp
[[ -n $opt_L ]] && action=ln
[[ -n $opt_p ]] && action=$opt_p
[[ -n $opt_P ]] && action=$opt_P dashes=
if [[ -z $action ]]; then
action=$myname[-2,-1]
@ -278,7 +285,7 @@ fi
for f in $files; do
[[ -z $to[$f] ]] && continue
exec=($action ${=opt_o} $opt_s -- $f $to[$f])
exec=(${=action} ${=opt_o} $opt_s $dashes $f $to[$f])
[[ -n $opt_i$opt_n$opt_v ]] && print -r -- ${(q-)exec}
if [[ -n $opt_i ]]; then
read -q 'opt?Execute? ' || continue