1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-11-20 05:53:52 +01:00
zsh/Completion/Unix/Command/_cdcd

102 lines
2.3 KiB
Plaintext

#compdef cdcd
typeset -A opt_args
_cdcd_tracks ()
{
print ${${${(f)"$(cdcd info)"}[3]}/Total tracks: #(#b)([0-9]##)*/$match[1]}
}
_cdcd_track_list ()
{
print ${1..$(_cdcd_tracks)}
}
_cdcd_track_list_verbose ()
{
print ${${(M)${(f)"$(cdcd tracks)"}:#(#s) #[0-9]##:*}/(#s) #(#b)([0-9]##):[ >]#? #[^ ]# #(*) ##/$match[1]:${(qqq)match[2]}}
}
_cdcd_commands ()
{
_arguments \
':cdcd command:((
play\:"play a track"
stop\:"stop plating"
open\:"eject the CD-ROM tray"
eject\:"eject the CD-ROM tray"
close\:"close the CD-ROM tray"
pause\:"pause playing"
resume\:"resume playing"
ff\:"fast forward"
rew\:"rewind"
next\:"advance one track"
prev\:"return to previous track"
getvol\:"get current volume settings"
setvol\:"set volume settings"
status\:"get numerical data regarding the CD status"
info\:"short information about the CD"
tracks\:"list all tracks on the CD"
rndplay\:"play a random track"
list\:"list all CDs in a CD-ROM changer"
slot\:"changes the current CD in the CD-ROM changer"
edit\:"edit information about the disc"
ext\:"Extended information about the disc"
refresh\:"refresh the information about the CD from a CDDB server"
device\:"change the CD-ROM device cdcd will use"
verbose\:"toggle verbosity"
sites\:"edit the server list"
access\:"configure cddb access method"
help\:"display a help message"
))'
}
if (( CURRENT == 2 )); then
_cdcd_commands
else
shift words
(( --CURRENT ))
case "$words[1]" in
# sub-commands with no args
stop|open|eject|close|pause|resume|next|prev|getvol)
;;
status|info|tracks|rndplay|list|slot|refresh)
;;
# sub-commands with args that cannot be completed
ff|rew|setvol)
;;
# sub-commands that do not work as expected
access|edit|sites)
;;
# completeable sub-commands
verbose)
_arguments \
':verbose subcommand:((
on\:"turn verbosity on"
off\:"turn verbosity off"))'
;;
ext)
_arguments \
":ext subcommand:((
disc\:\"extra information about the disc\"
$(_cdcd_track_list)))"
;;
device)
compadd "$expl[@]" /dev/cd* /dev/cd*/*
;;
play)
if (( CURRENT == 2 )); then
_arguments ":play subcommand:((
$(_cdcd_track_list_verbose)))"
else
shift words
(( --CURRENT ))
_arguments ":play subcommand2:((
$(_cdcd_track_list_verbose)))"
fi
;;
help)
_cdcd_commands;;
esac
fi