mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01:00
New _cpio
This commit is contained in:
parent
85850097fb
commit
60227908e1
2 changed files with 145 additions and 0 deletions
|
@ -1,5 +1,7 @@
|
|||
2001-03-25 Peter Stephenson <pws@pwstephenson.fsnet.co.uk>
|
||||
|
||||
* 13751: Completion/User/_cpio: added.
|
||||
|
||||
* 13745: Test/ztst.zsh: set LC_COLLATE to C if already set to
|
||||
something.
|
||||
|
||||
|
|
143
Completion/User/_cpio
Normal file
143
Completion/User/_cpio
Normal file
|
@ -0,0 +1,143 @@
|
|||
#compdef cpio
|
||||
|
||||
(( $+_is_gnu )) || typeset -gA _is_gnu
|
||||
|
||||
local cmd=$service args ig context curcontext="$curcontext" state line opt_args
|
||||
local expl ret
|
||||
local fmts='(bar bin odc newc crc tar ustar hpbin hpodc)'
|
||||
|
||||
if (( ! $+_is_gnu[$cmd] )); then
|
||||
if [[ $(_call version $cmd --version </dev/null 2>/dev/null) = *GNU* ]]
|
||||
then
|
||||
_is_gnu[$cmd]=yes
|
||||
else
|
||||
_is_gnu[$cmd]=
|
||||
fi
|
||||
fi
|
||||
ig=$_is_gnu[$cmd]
|
||||
|
||||
if (( $CURRENT == 2 )); then
|
||||
# Complete arguments
|
||||
args=('-o[create archive]' '-i[extract from archive]'
|
||||
'-p[run as filter on directory tree]')
|
||||
[[ -n $ig ]] && args=($args '--create[create archive]'
|
||||
'--extract[extract from archive]'
|
||||
'--pass-through[run as filter on directory tree]'
|
||||
'--help[show help text]' '--version[show version information]')
|
||||
else
|
||||
if [[ -n ${words[(r)(-o*|-[^-]*o*|--create)]} ]]; then
|
||||
# Optiona for creating archive
|
||||
if [[ -n $ig ]]; then
|
||||
args=(
|
||||
'--file=:archive file:->afile'
|
||||
"--format=:format type:$fmts"
|
||||
'--message=:message at end of volume:'
|
||||
'--null' '--reset-access-time'
|
||||
'--verbose' '--dot' '--append'
|
||||
'--block-size=:block size in 512 byte units:'
|
||||
'--dereference'
|
||||
'--io-size=:block size in bytes'
|
||||
'--quiet' '--force-local' '--help' '--version')
|
||||
fi
|
||||
args=($args
|
||||
'-A[append files to archive]'
|
||||
'-B[block size 5120 bytes with special file]'
|
||||
'-C[set block size per record]:block size in bytes:(8192)'
|
||||
'-F[set archive file to use]:archive file:->afile'
|
||||
'(-H)-c[read/write header in ASCII]'
|
||||
"(-c)-H[set format type for archive header]:$fmts"
|
||||
'-L[follow symbolic links]'
|
||||
'-M[print message at end of volume]:message to print:'
|
||||
'-O[set output archive file]:output archive file:_files'
|
||||
)
|
||||
elif [[ -n ${words[(r)(-i*|-[^-]*i*|--extract)]} ]]; then
|
||||
if [[ -n $ig ]]; then
|
||||
args=('--file=:archive file:->afile'
|
||||
"--format=:format type:$fmts"
|
||||
'--make-directories' '--nonmatching'
|
||||
'--preserve-modification-time' '--numeric'
|
||||
'--rename' '--list' '--swap-bytes' '--swap-halfwords'
|
||||
'--dot' '--unconditional' '--verbose'
|
||||
'--block-size=:block size in 512 byte units:'
|
||||
'--swap-halfwords'
|
||||
'--io-size=:block size in bytes:'
|
||||
'--pattern-file=:file with list of patterns:_files'
|
||||
'--owner=:user (and group) for files:->user' '--no-preserve-owner'
|
||||
'--message=:message at end of volume:'
|
||||
'--force-local'
|
||||
'--no-absolute-filenames' '--sparse' '--only-verify-crc'
|
||||
'--quiet' '--help' '--version')
|
||||
fi
|
||||
args=($args
|
||||
'-b[reverse bytes in word]'
|
||||
'-B[block size 5120 bytes with special file]'
|
||||
'-d[create directories as needed]'
|
||||
'-C[set block size per record]:block size in bytes:(8192)'
|
||||
'-E[read filenames from file]:file name for list of files:_files'
|
||||
'-f[only copy files not matching patterns]'
|
||||
'-F[set archive file to use]:archive file:->afile'
|
||||
'(-H)-c[read/write header in ASCII]'
|
||||
"(-c)-H[set format type for archive header]:$fmts"
|
||||
'-I[set input archive file]:input archive file:_files'
|
||||
'-m[preserve file modification times]'
|
||||
'-M[print message at end of volume]:message to print:'
|
||||
'-n[show UID and GID numerically]'
|
||||
'-r[interactively rename files]'
|
||||
'-R[set user and group for files]:user (and group) for files:->user'
|
||||
'-s[swap bytes within each halfword]'
|
||||
'-S[swap bytes within each word]'
|
||||
'-t[print a table of contents]'
|
||||
'*:pattern to extract'
|
||||
)
|
||||
elif [[ -n ${words[(r)(-p*|-[^-]*p*|--pass-through)]} ]]; then
|
||||
if [[ -n $ig ]]; then
|
||||
args=('--null' '--reset-access-time' '--make-directories'
|
||||
'--link' '--quiet' '--preserve-modification-time'
|
||||
'--unconditional' '--verbose' '--dot' '--dereference'
|
||||
'--owner=:user (and group) for files:->user'
|
||||
'--no-preserve-owner' '--sparse' '--help' '--version')
|
||||
fi
|
||||
args=($args
|
||||
'-d[create directories as needed]'
|
||||
'-l[link files instead of copying]'
|
||||
'-L[follow symbolic links]'
|
||||
'-m[preserve file modification times]'
|
||||
'-R[set user and group for files]:user (and group) for files:->user'
|
||||
'*:destination directory:_files -/'
|
||||
)
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
args=($args
|
||||
'-a[reset access time of input files]'
|
||||
)
|
||||
fi
|
||||
|
||||
ret=1
|
||||
_arguments -s "$args[@]" && ret=0
|
||||
|
||||
if [[ $state = afile ]]; then
|
||||
if compset -P '*:'; then
|
||||
# TODO: doesn't need to be rsh.
|
||||
_wanted files expl 'remote files' \
|
||||
compadd $(rsh ${words[CURRENT]%:*} echo ${words[CURRENT]#*:}\*) && ret=0
|
||||
elif compset -P '*@'; then
|
||||
_wanted hosts expl 'remote host name' _hosts && ret=0
|
||||
else
|
||||
_alternative \
|
||||
'files:: _files' \
|
||||
'hosts:remote host name:_hosts -S:' \
|
||||
'users:user name:_users -qS@' && ret=0
|
||||
fi
|
||||
elif [[ $state = user ]]; then
|
||||
if compset -P '*[:.]'; then
|
||||
_groups
|
||||
else
|
||||
local suf=.
|
||||
[[ $OSTYPE = (solaris|hpux)* ]] && suf=:
|
||||
compset -S '.*' && unset suf
|
||||
_users -S "$suf" -q
|
||||
fi
|
||||
fi
|
||||
|
||||
return ret
|
Loading…
Reference in a new issue