On Thu, Jan 22, 2009 at 09:30:16AM +0100, Louis-David Mitterrand wrote:
> xmms2 is a command-line intensive music player with many options.
> A zsh completion would be really nice.
> 
> Fortunately someone has written one:

Thanks.

Index: Completion/Unix/Command/_xmms2
===================================================================
RCS file: Completion/Unix/Command/_xmms2
diff -N Completion/Unix/Command/_xmms2
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ Completion/Unix/Command/_xmms2      22 Jan 2009 15:07:46 -0000
@@ -0,0 +1,200 @@
+#compdef xmms2
+
+_xmms2_command() {
+    local xmms2_cmds
+
+    xmms2_cmds=(
+       add:"adds a URL to the playlist"
+       addarg:"adds one URL with arguments to the playlist"
+       addid:"adds a Medialib id to the playlist"
+       insert:"inserts one URL at a specific position"
+       insertid:"inserts one Medialib id at a specific position"
+       radd:"adds a directory recursively to the playlist"
+       clear:"clears the playlist"
+       shuffle:"shuffles the playlist"
+       sort:"sort the playlist; use a space delimiter for multiple properties"
+       remove:"removes something from the playlist"
+       list:"lists the playlist"
+       addpls:"Adds the contents of a playlist file to the playlist"
+       play:"starts playback"
+       stop:"stops playback"
+       toggleplay:"toggles playback status between play/pause"
+       pause:"pause playback"
+       next:"play next song"
+       prev:"play previous song"
+       seek:"seek to a specific place in current song"
+       jump:"take a leap in the playlist"
+       move:"move a entry in the playlist"
+       volume:"set volume for a channel"
+       volume_list:"list volume levels for each channel"
+       mlib:"medialib manipulation - type 'xmms2 mlib' for more extensive help"
+       playlist:"playlist manipulation - type 'xmms2 playlist' for more 
extensive help"
+       coll:"collection manipulation - type 'xmms2 coll' for more extensive 
help"
+       browse:"browse server file lists"
+       status:"go into status mode"
+       info:"information about current entry"
+       current:"formatted information about the current entry"
+       config:"set a config value"
+       config_list:"list all config values"
+       plugin_list:"list all plugins loaded in the server"
+       stats:"get statistics from server"
+       quit:"make the server quit"
+       help:"print help about a command"
+       )
+
+    if (( CURRENT == 1 )); then
+       _describe -t command "xmms2 commands" xmms2_cmds
+    else
+       local curcontext="$curcontext"
+    fi
+
+    local cmd=$words[1]
+
+    local curcontext="${curcontext%:*}:xmms2-${cmd}"
+    _call_function ret _xmms2_$cmd
+}
+
+ _xmms2_jump() {
+     oldIFS=$IFS
+     IFS=$'\n'
+     songlist=($(xmms2 list))
+     IFS=oldIFS
+     playlistitems=""
+     for song ($songlist); do 
+        if [[ $song = (#b)'  '\[(<->)/(<->)\]' '(*)' '\((*)\) ]]; then
+                   playlistitems=($playlistitems "$match[1][$match[3]]")
+        fi
+     done
+     
+     _values -s ' ' 'playlist items' ${(On)playlistitems}
+
+}
+
+_xmms2_mlib() {
+    local mlib_cmds
+    mlib_cmds=(
+       add:"Add 'url' to medialib"
+       loadall:"Load everything from the mlib to the playlist"
+       searchadd:"Search for, and add songs to playlist"
+       search:"Search for songs matching criteria"
+       addpath:"Import metadata from all media files under 'path'"
+       rehash:"Force the medialib to check whether its data is up to date"
+       remove:"Remove an entry from medialib"
+       setstr:"Set a string property together with a medialib entry."
+       setint:"Set a int property together with a medialib entry."
+       rmprop:"Remove a property from a medialib entry"
+       addcover:"Add a cover image on id(s)."
+
+       )
+    if (( CURRENT == 2 )); then
+       _describe -t command "xmms2 mlib commands" mlib_cmds
+    else
+       local curcontext="$curcontext"
+    fi
+
+    local cmd=$words[2]
+
+    local curcontext="${curcontext%:*}:xmms2-${cmd}"
+    _call_function ret _xmms2_$cmd
+
+}
+
+
+_xmms2_playlist() {
+    local playlist_cmds
+    playlist_cmds=(
+       list:"List all available playlists"
+       create:"Create a playlist"
+       type:"Set the type of the playlist (list, queue, pshuffle)"
+       load:"Load 'playlistname' stored in medialib"
+       remove:"Remove a playlist"
+       )
+    if (( CURRENT == 2 )); then
+       _describe -t command "xmms2 playlist commands" playlist_cmds
+    else
+       local curcontext="$curcontext"
+    fi
+
+    local cmd=$words[2]
+
+    local curcontext="${curcontext%:*}:xmms2-${cmd}"
+    _call_function ret _xmms2_playlist_$cmd
+}
+
+_xmms2_playlist_load() {
+    local list
+    list=($(xmms2 playlist list))
+    _describe -t command "xmms2 playlists" list
+}
+
+
+_xmms2_playlist_remove() {
+    local list
+    list=($(xmms2 playlist list))
+    _describe -t command "xmms2 playlists" list
+}
+
+
+_xmms2_coll() {
+    local coll_cmds
+    coll_cmds=(
+       save:"Save a pattern as a collection"
+       rename:"Rename a collection"
+       list:"List all collections in a given namespace"
+       query:"Display all the media in a collection"
+       queryadd:"Add all media in a collection to active playlist"
+       find:"Find all collections that contain the given media"
+       get:"Display the structure of a collection"
+       remove:"Remove a saved collection"
+       attr:"Get/set an attribute for a saved collection"
+       )
+    if (( CURRENT == 2 )); then
+       _describe -t command "xmms2 collection commands" coll_cmds
+    else
+       local curcontext="$curcontext"
+    fi
+
+    local cmd=$words[2]
+
+    local curcontext="${curcontext%:*}:xmms2-${cmd}"
+    _call_function ret _xmms2_coll_$cmd
+}
+
+_xmms2_coll_helper() {
+    local list
+    list=($(xmms2 coll list))
+    _describe -t command "xmms2 playlists" list
+}
+
+_xmms2_coll_rename() {
+    _xmms2_coll_helper
+}
+
+_xmms2_coll_remove() {
+    _xmms2_coll_helper
+}
+
+_xmms2_coll_get() {
+    _xmms2_coll_helper
+}
+
+_xmms2_coll_query() {
+    _xmms2_coll_helper
+}
+
+_xmms2_coll_queryadd() {
+    _xmms2_coll_helper
+}
+
+_xmms2_coll_attr() {
+    _xmms2_coll_helper
+}
+
+_xmms2() {
+_arguments \
+    '--format[specify the format of song display]:format string' \
+    '--no-status[prevent printing song status on completion]' \
+    '*::xmms2 command:_xmms2_command'
+}
+
+_xmms2 "$@"



-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to