mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 21:44:11 +01:00
157 lines
4.0 KiB
Plaintext
Executable File
157 lines
4.0 KiB
Plaintext
Executable File
#compdef mattrib mcopy mdel mdu mcd mdeltree mdir mformat mlabel mmd mmount mmove mrd mread mren mtoolstest mtype
|
|
|
|
(( $+functions[_mtools_drives] )) ||
|
|
_mtools_drives() {
|
|
local expl
|
|
|
|
_wanted drives expl drive compadd "$@" -M "m:{a-z}={A-Z}" \
|
|
${${(M)${(f)"$(mtoolstest)"}:#drive*}##drive }
|
|
}
|
|
|
|
(( $+functions[_mtools_dosfiles] )) ||
|
|
_mtools_dosfiles() {
|
|
local expl files dirs disp dirsonly suf='/' ret=1
|
|
|
|
zparseopts -D -E '/=dirsonly'
|
|
if compset -P '[A-Za-z]:'; then
|
|
_tags files
|
|
else
|
|
_tags files drives
|
|
fi
|
|
compset -P '*/'
|
|
if compset -S '/*'; then
|
|
suf=''
|
|
dirsonly=(1)
|
|
fi
|
|
|
|
while _tags; do
|
|
_requested drives expl drive _mtools_drives -S '' && ret=0
|
|
if _requested files; then
|
|
files=( ${(f)"$(mdir -aX $IPREFIX 2>/dev/null)"} )
|
|
dirs=( ${${${(M)files:#*/}%/}##*/} )
|
|
disp=( $dirs/ )
|
|
while _next_label files expl 'file'; do
|
|
(( ! $#dirsonly )) && compadd "$@" "$expl[@]" -M 'm:{a-zA-Z}={A-Za-z}' \
|
|
${files##*/} && ret=0
|
|
compadd "$@" "$expl[@]" -M 'm:{a-zA-Z}={A-Za-z}' -S "$suf" -q \
|
|
-d disp -a dirs && ret=0
|
|
done
|
|
fi
|
|
(( ret )) || return 0
|
|
done
|
|
|
|
return ret
|
|
}
|
|
|
|
(( $+functions[_mtools_files] )) ||
|
|
_mtools_files() {
|
|
local dos
|
|
|
|
if [[ -prefix [a-zA-Z]: ]]; then
|
|
dos='files:file:_mtools_dosfiles'
|
|
else
|
|
dos='drives:drive:_mtools_drives -S ""'
|
|
fi
|
|
_alternative $dos 'files:file:_files'
|
|
}
|
|
|
|
_mtools() {
|
|
local args Dopt oopt sopt topt vopt
|
|
|
|
Dopt='(-V)-D[specify name clash handling]:clash option:
|
|
_values "name clash handling"
|
|
"o[overwrite primary names]"
|
|
"O[overwrite secondary names]"
|
|
"r[rename primary name]"
|
|
"R[rename secondary name]"
|
|
"a[autorename primary name]"
|
|
"A[autorename secondary name]"
|
|
"s[skip primary name]"
|
|
"S[skip secondary name]"
|
|
"m[ask user what to do with primary name]"
|
|
"M[ask user what to do with secondary name]"'
|
|
oopt='(-V)-o[no confirmation on overwrite of DOS files]'
|
|
sopt=( '(-V -s -/)'-{s,/}'[recurse subdirectories]' )
|
|
topt='(-V)-t[perform text file translation]'
|
|
vopt='(-V)-v[verbose]'
|
|
|
|
case $service in
|
|
mattrib)
|
|
args=( $mdfiles
|
|
'(-V)-+a[archive]'
|
|
'(-V)-+h[hidden]'
|
|
'(-V)-+r[readonly]'
|
|
'(-V)-+s[system]'
|
|
'(-V)-/[recurse subdirectories]'
|
|
'(-V)-X[concise output]'
|
|
'(-V)-p[replay mode]'
|
|
'(-V)*:file:_mtools_dosfiles'
|
|
)
|
|
;;
|
|
mcopy|mread)
|
|
args=( $Dopt $oopt $sopt $topt $vopt
|
|
'(-V)-b[batch mode]'
|
|
'(-V)-p[preserve file attributes]'
|
|
'(-V)-Q[quit on failure]'
|
|
'(-V)-a[text mode transfer]'
|
|
'(-V)-n[no confirmation on overwrite of Unix files]'
|
|
'(-V)-m[preserve modification time]'
|
|
'(-V)*:source file:_mtools_files'
|
|
)
|
|
;;
|
|
mdeltree|mrd)
|
|
args=( $vopt '(-V)*:directory:_mtools_dosfiles -/' )
|
|
;;
|
|
mdel)
|
|
args=( $vopt '(-V)*:file:_mtools_dosfiles' )
|
|
;;
|
|
mdir)
|
|
args=( $Dopt $sopt
|
|
'(-V)-w[wide output]'
|
|
'(-V)-a[also list hidden files]'
|
|
'(-V)-f[fast - do not find free space]'
|
|
'(-V -b -X)'-{b,X}'[concise output]'
|
|
'(-V)*:file:_mtools_dosfiles'
|
|
)
|
|
;;
|
|
mdu)
|
|
args=(
|
|
'(-V)-a[output for all files]'
|
|
'(-V)-s[summarize - output only for each argument]'
|
|
'(-V)*:file:_mtools_dosfiles'
|
|
)
|
|
;;
|
|
mlabel)
|
|
args=(
|
|
'(-V -s)-c[clear existing label]'
|
|
'(-V -c)-s[show existing label]'
|
|
'(-V -N)-n[assign new random serial number]'
|
|
'(-V -n)-N[specify new serial number]:serial number'
|
|
'1:drive:_mtools_drives -S ""'
|
|
)
|
|
;;
|
|
mmd)
|
|
args=( $Dopt '(-V)*:directory:_mtools_dosfiles -/' )
|
|
;;
|
|
mmove|mren)
|
|
# target file should be completed relative to source here
|
|
args=( $Dopt $oopt $vopt '(-V)*:file:_mtools_dosfiles' )
|
|
;;
|
|
mtype)
|
|
args=( $topt
|
|
'(-V)-s[strip the high bit]'
|
|
'(-V)*:file:_mtools_files'
|
|
)
|
|
;;
|
|
mbadblocks|mmount|mformat|mtoolstest|mdrive)
|
|
args=( '(-V)1:drive:_mtools_drives' )
|
|
;;
|
|
mcd) args=( '(-V)*:directory:_mtools_dosfiles -/' ) ;;
|
|
esac
|
|
|
|
_arguments -s -S "$args[@]" \
|
|
'(-D -o -s -t -v -w -a -h -r -s -/ -X -p -f -b * 1)-V[display version information]'
|
|
}
|
|
|
|
_mtools "$@"
|