about summary refs log tree commit diff
path: root/Completion/Unix/Command/_cdcd
diff options
context:
space:
mode:
authorClint Adams <clint@users.sourceforge.net>2002-02-21 03:21:25 +0000
committerClint Adams <clint@users.sourceforge.net>2002-02-21 03:21:25 +0000
commite595143c423fcb9e8545e9aa21111a2da46578fe (patch)
treed10c22149eadfbed073838dcd85ca6d2e3572c6f /Completion/Unix/Command/_cdcd
parent0da46d6002e156bf81e7bb3c6acece15b39a7e00 (diff)
downloadzsh-e595143c423fcb9e8545e9aa21111a2da46578fe.tar.gz
zsh-e595143c423fcb9e8545e9aa21111a2da46578fe.tar.xz
zsh-e595143c423fcb9e8545e9aa21111a2da46578fe.zip
completion for cdcd
Diffstat (limited to 'Completion/Unix/Command/_cdcd')
-rw-r--r--Completion/Unix/Command/_cdcd101
1 files changed, 101 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_cdcd b/Completion/Unix/Command/_cdcd
new file mode 100644
index 000000000..30b165df2
--- /dev/null
+++ b/Completion/Unix/Command/_cdcd
@@ -0,0 +1,101 @@
+#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