summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--Completion/Unix/Command/_bpython46
-rw-r--r--Completion/Unix/Command/_moosic487
3 files changed, 542 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 6a2833a13..481bbc3f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2014-07-26 Axel Beckert <abe@deuxchevaux.org>
+
+ * Omari Norman: 32817: Add completion for moosic.
+
+ * Sebastian Ramacher: 32816: Add completion for bpython and
+ variants.
+
+ * 32911: Expand bpython completion to bpython2 and bpython3.
+
2014-07-26 Barton E. Schaefer <schaefer@zsh.org>
* 32910: Src/mkmakemod.sh: quiet update of timestamp files
diff --git a/Completion/Unix/Command/_bpython b/Completion/Unix/Command/_bpython
new file mode 100644
index 000000000..c51cc8c3c
--- /dev/null
+++ b/Completion/Unix/Command/_bpython
@@ -0,0 +1,46 @@
+#compdef bpython bpython-gtk bpython-urwid bpython2 bpython2-gtk bpython2-urwid bpython3 bpython3-gtk bpython3-urwid
+
+local -a all_opts urwid_opts gtk_opts
+
+all_opts=(
+ '--config[configuration file]:config file:_files'
+ '-h --help[show help message]'
+ '(-i --interactive)'{-i,--interactive}'[drop to bpython after running a file]'
+ '(-q --quiet)'{-q,--quiet}'[do not flush the output to stdout]'
+ '(-V --version)'{-V,--version}'[print version]'
+ '1:script:_files -g "*.u#py(-.)"'
+ '*:arguments:'
+)
+
+urwid_opts=(
+ '(-r --reactor)'{-r,--reactor}'[use Twisted reactor instead of the event loop]:reactor:'
+ '--help-reactors[display list of available Twisted reactors]'
+ '(-p --plugin)'{-p,--plugin}'[exectue a twistd plugin]:plugin:'
+ '(-s --server)'{-s,--server}'[run an eval server on the given port]:port:'
+)
+
+gtk_opts=(
+ '--socket-id[embed bpython]:socket id:'
+)
+
+case "$service" in
+ bpython|bpython2|bpython3)
+ _arguments \
+ "$all_opts[@]" && return 0
+ ;;
+
+ bpython-urwid|bpython2-urwid|bpython3-urwid)
+ _arguments \
+ "$all_opts[@]" \
+ "$urwid_opts[@]" && return 0
+ ;;
+
+ bpython-gtk|bpython2-gtk|bpython3-gtk)
+ _arguments \
+ "$all_opts[@]" \
+ "$gtk_opts[@]" && return 0
+ ;;
+esac
+
+
+# vim:autoindent expandtab shiftwidth=2 tabstop=2 softtabstop=2 filetype=zsh
diff --git a/Completion/Unix/Command/_moosic b/Completion/Unix/Command/_moosic
new file mode 100644
index 000000000..f22fe16c5
--- /dev/null
+++ b/Completion/Unix/Command/_moosic
@@ -0,0 +1,487 @@
+#compdef moosic
+
+_moosic_add_cmds() {
+
+ # querying for information
+ typeset -a queries
+ queries=(
+ "help:print brief description of command"
+ "current:print name of currently playing song"
+ "current-time:print the amount of time the current song has been playing"
+ "list:print the list of items in the current song queue"
+ "plainlist:print the current song queue without numbering each line"
+ "history:print a list of items that were recently played"
+ {status,state}":print the current state of the music daemon"
+ "length:print the number of items in the queue"
+ "ispaused:show whether the current song is paused or not"
+ "islooping:show whether the server is in loop mode"
+ "isadvancing:show whether the server is advancing through the song queue"
+ "version:print version information for client and server"
+ )
+
+
+ # appending to song queue
+ typeset -a appending
+ appending=(
+ {append,add}":add the files to be played to the end of the song queue"
+ {pl-append,pl-add}":add the items listed in the given playlist files to end of queue"
+ "prepend:add the files to be played to the beginning of the song queue"
+ "pl-prepend:add the items in the given playlist files to beginning of queue"
+ "mixin:add the files to the song queue and reshuffle the entire queue"
+ "pl-mixin:add items in given playlist files to song queue and reshuffle the entire queue"
+ "replace:replace the current contents of the song queue with files listed"
+ "pl-replace:replace current contents of song queue with songs given in playlists"
+ "insert:insert the given items at a given point in the song queue"
+ "pl-insert:insert items from playlist files at specified point in queue"
+ "putback:reinsert current song at start of song queue"
+ "stagger-add:adds file list to end of queue after rearranging queue into staggered order"
+ "stagger-merge:adds given file list to queue in interleaved fashion"
+ "interval-add:inserts given songs with regular frequency specified by interval argument"
+ )
+
+ # removing
+ typeset -a removing
+ removing=(
+ {cut,del}":removes all song queue items in given range"
+ "crop:removes all song queue items that do not fall within given range"
+ "remove:remove all song queue items matching any one of given regexps"
+ "filter:remove all queue items not matching all given regexps"
+ "clear:clear song queue"
+ "wipe:clear song queue and stop current song"
+ )
+
+ # rearranging
+ typeset -a rearranging
+ rearranging=(
+ "move:move all items in given range to new position in song queue"
+ "move-pattern:moves all items matching the given regexp to new position"
+ "swap:trade places of songs in two specified ranges"
+ {shuffle,reshuffle}":reshuffle song queue within an optional range"
+ "sort:sort queue within optional range"
+ "reverse:reverse order of song queue"
+ "partial-sort:sort items matching each regexp"
+ "stagger:stagger items matching each regexp"
+ "sub:perform regular expression substitution on all items in queue"
+ "suball:like sub, but replace all occurrences of the pattern"
+ )
+
+ # general management
+ typeset -a general
+ general=(
+ "next:jumps ahead, number of songs optional"
+ "previous:retreats to previously played song"
+ "goto:jumps to next song matching regexp"
+ "gobackto:jumps back to most recent previous song matching regexp"
+ "noadvance:halt queue advancement"
+ "advance:resume queue advancement"
+ "toggle-advance:toggle queue advancement"
+ "stop:stop playing current song, stop processing queue, put current song back"
+ "pause:suspend current song to resume it later"
+ "unpause:unpause current song"
+ "play:resume playing"
+ "loop:turn loop mode on"
+ "noloop:turn loop mode off"
+ "toggle-loop:toggle loop mode"
+ "reconfigure:daemon reload configuration file"
+ "showconfig:show dameon filetype associations"
+ "start-server:starts new instance of daemon with given options"
+ {quit,exit,die}":quit daemon"
+ )
+
+ _describe queries queries -J queries
+ _describe appending appending -J appending
+ _describe removing removing -J removing
+ _describe rearranging rearranging -J rearranging
+ _describe general general -J general
+}
+
+_moosic() {
+ typeset context state line
+ typeset -A opt_args
+
+ typeset -a filelist_opts
+ filelist_opts=(
+ '(-g --shuffle-global)'{-g,--shuffle-global}'[shuffle filelist after directory expansion]'
+ '(-d --shuffle-dir)'{-d,--shuffle-dir}'[shuffle results of expanding the directories]'
+ '(-a --shuffle-args)'{-a,--shuffle-args}'[shuffle actual command line arguments]'
+ '(-o --inorder)'{-o,--inorder}'[do not shuffle filelist]'
+ '(-s --sort)'{-s,--sort}'[sort filelist lexicographically after expansion]'
+ '(-r --no-recurse)'{-r,--no-recurse}'[do not recurse through directories]'
+ '(-n --no-file-munge)'{-n,--no-file-munge}'[do not modify names in expanded filelist]'
+ '(-f --auto-find)'{-f,--auto-find}'[perform fuzzy search for music files]'
+ '(-F --auto-grep)'{-F,--auto-grep}'[like --auto-find but with regexp]'
+ '(-U --allow-unplayable)'{-U,--allow-unplayable}'[allow addition of unknown song types]'
+ )
+
+ typeset -a auto_opts
+ auto_opts=(
+ '(-m --music-dir)'{-m,--music-dir}'[directory used for auto-find, auto-grep]:directory:_files'
+ )
+
+ typeset -a main_opts
+ main_opts=(
+ '(-i --ignore-case)'{-i,--ignore-case}'[treat regexps as if they are case-insensitive]'
+ '(-S --showcommands)'{-S,--showcommands}'[show all moosic commands, then exit]'
+ '(-h --help)'{-h,--help}'[print help message then exit]'
+ '(-v --version)'{-v,--version}'[print version information, then exit]'
+ '(-c --config-dir)'{-c,--config-dir}'[configuration directory]:directory:_files'
+ '(-t --tcp)'{-t,--tcp}'[talk to server at specified host and port]:host\:port:'
+ '(-N --no-startserver)'{-N,--no-startserver}'[do not start moosicd server]'
+ )
+
+ typeset -a list_opts
+ list_opts=(
+ '(-C --current-in-list)'{-C,--current-in-list}'[print currently playing song in list]'
+ )
+
+ # GLOBAL ARGUMENTS
+ # do not use the -A option here. It will break the processing of
+ # positional arguments.
+ _arguments $main_opts $list_opts $auto_opts $filelist_opts \
+ '1: :->cmd' \
+ '*:: :->posarg'
+
+ if [[ $state == cmd ]]; then
+ _moosic_add_cmds
+ elif [[ $state == posarg ]]; then
+ _moosic_cmd_${line[1]}
+ fi
+}
+
+# Do something, but only if the current word is 2.
+_do2() {
+ if (( CURRENT == 2 )); then
+ $@
+ else
+ _message 'no more arguments'
+ fi
+}
+
+### QUERY COMMANDS
+
+_moosic_cmd_help() {
+ _do2 '_moosic_add_cmds'
+}
+
+_moosic_cmd_current() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_current-time() {
+ _do2 '_message' 'strftime string'
+}
+
+_moosic_cmd_list() {
+ _do2 '_message' 'range'
+}
+
+_moosic_cmd_plainlist() {
+ _do2 '_message' 'range'
+}
+
+_moosic_cmd_history() {
+ _do2 '_message' 'maximum number of entries'
+}
+
+_moosic_cmd_status() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_state() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_length() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_ispaused() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_islooping() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_isadvancing() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_version() {
+ _message 'no arguments'
+}
+
+### APPENDING COMMANDS
+
+_moosic_song_files()
+{
+ _arguments -A '-*' $main_opts $filelist_opts $auto_opts \
+ '*:song files:_files'
+}
+
+_moosic_cmd_append() {
+ _moosic_song_files
+}
+
+_moosic_cmd_add() {
+ _moosic_song_files
+}
+
+_moosic_cmd_pl-append() {
+ _moosic_song_files
+}
+
+_moosic_cmd_pl-add() {
+ _moosic_song_files
+}
+
+_moosic_cmd_prepend() {
+ _moosic_song_files
+}
+
+_moosic_cmd_pl-prepend() {
+ _moosic_song_files
+}
+
+_moosic_cmd_mixin() {
+ _moosic_song_files
+}
+
+_moosic_cmd_pl-mixin() {
+ _moosic_song_files
+}
+
+_moosic_cmd_replace() {
+ _moosic_song_files
+}
+
+_moosic_cmd_pl-replace() {
+ _moosic_song_files
+}
+
+_moosic_cmd_insert() {
+ _moosic_song_files
+}
+
+_moosic_cmd_pl-insert() {
+ _moosic_song_files
+}
+
+_moosic_cmd_putback() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_stagger-add() {
+ _moosic_song_files
+}
+
+_moosic_cmd_stagger-merge() {
+ _moosic_song_files
+}
+
+_moosic_cmd_interval-add() {
+ _arguments -A '-*' $main_opts $filelist_opts \
+ '1:interval:' \
+ '*:song files:_files'
+}
+
+### REMOVING COMMANDS
+
+_moosic_cmd_cut() {
+ _do2 '_message' 'range'
+}
+
+_moosic_cmd_del() {
+ _do2 '_message' 'range'
+}
+
+_moosic_cmd_crop() {
+ _do2 '_message' 'range'
+}
+
+_moosic_cmd_remove() {
+ _do2 '_message' 'regex'
+}
+
+_moosic_cmd_filter() {
+ _do2 '_message' 'regex'
+}
+
+_moosic_cmd_clear() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_wipe() {
+ _message 'no arguments'
+}
+
+### REARRANGING COMMANDS
+
+_moosic_cmd_move() {
+ _arguments -A '-*' $main_opts \
+ '1:range:' \
+ '2:index:' \
+ '*:no more arguments:'
+}
+
+_moosic_cmd_move-pattern() {
+ _arguments -A '-*' $main_opts \
+ '1:regex:' \
+ '2:index:' \
+ '*:no more arguments:'
+}
+
+_moosic_cmd_swap() {
+ _arguments -A '-*' $main_opts \
+ '1:range:' \
+ '2:range:' \
+ '*:no more arguments:'
+}
+
+_moosic_cmd_shuffle() {
+ _arguments -A '-*' $main_opts \
+ '1:range (optional):' \
+ '*:no more arguments:'
+}
+
+_moosic_cmd_reshuffle() {
+ _arguments -A '-*' $main_opts \
+ '1:range (optional):' \
+ '*:no more arguments:'
+}
+
+_moosic_cmd_sort() {
+ _arguments -A '-*' $main_opts \
+ '1:range (optional):' \
+ '*:no more arguments:'
+}
+
+_moosic_cmd_reverse() {
+ _arguments -A '-*' $main_opts \
+ '1:range (optional):' \
+ '*:no more arguments:'
+}
+
+_moosic_cmd_partial-sort() {
+ _do2 '_message' 'regex'
+}
+
+_moosic_cmd_stagger() {
+ _do2 '_message' 'regex'
+}
+
+_moosic_cmd_sub() {
+ _arguments -A '-*' $main_opts \
+ '1:pattern:' \
+ '2:replacement:' \
+ '3:range (optional):' \
+ '*:no more arguments:'
+}
+
+_moosic_cmd_suball() {
+ _arguments -A '-*' $main_opts \
+ '1:pattern:' \
+ '2:replacement:' \
+ '3:range (optional):' \
+ '*:no more arguments:'
+}
+
+### GENERAL COMMANDS
+
+_moosic_cmd_next() {
+ if (( CURRENT == 2 )); then
+
+ typeset -a display display_cmd
+ if zstyle -a ":completion:${curcontext}:next" \
+ 'command' display_cmd; then
+ $display_cmd
+ else
+ display=(${(f)"$(moosic list)"})
+ fi
+
+ typeset -a numbers
+ numbers=({1..${#display}})
+
+ compadd -V songs -d display -a numbers
+ else
+ _message 'no more arguments'
+ fi
+}
+
+_moosic_cmd_previous() {
+ _do2 '_message' 'number to skip'
+}
+
+_moosic_cmd_goto() {
+ _do2 '_message' 'regex'
+}
+
+_moosic_cmd_gobackto() {
+ _do2 '_message' 'regex'
+}
+
+_moosic_cmd_noadvance() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_advance() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_toggle-advance() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_stop() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_pause() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_unpause() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_play() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_loop() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_noloop() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_toggle-loop() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_reconfigure() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_showconfig() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_start-server() {
+ _message 'options'
+}
+
+_moosic_cmd_quit() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_exit() {
+ _message 'no arguments'
+}
+
+_moosic_cmd_die() {
+ _message 'no arguments'
+}
+
+_moosic "$@"