#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() { songlist=(${"$(xmms2 list)"}) playlistitems=() for song ($songlist); do if [[ $song = (#b)' '\[(<->)/(<->)\]' '(*)' '\((*)\) ]]; then 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_add() { _files } _xmms2_radd() { _dirs } _xmms2_addpls() { local expl _description files expl 'playlist' _files "$expl[@]" -g '*.([mM]3[uU]|[pP][lL][sS])(-.)' } _xmms2() { _arguments \ '--format[specify the format of song display]:format string' \ '--no-status[prevent printing song status on completion]' \ '*::xmms2 command:_xmms2_command' } _xmms2 "$@"