mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01: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:
parent
96c8b2832b
commit
669c070efe
3 changed files with 25 additions and 6 deletions
|
@ -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
|
||||
|
|
|
@ -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(-)'.)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue