Mercurial > vixm
view vixm/control.py @ 20:f39963e96ca1
Rework of the help string code
Instead of having all the help strings in the command table, we just shove
them into the __doc__ for each of the function handlers. This means that no
one function can handle two different functionalities as their help string
space would collide. This is fine most of the time anyway. However, the
considerably cleaner command table is a major plus.
The only other "negative" side-effect is the fact that we need to make sure
that the first two lines of the function handler are in the right format.
First line: the command along with any optional or mandatory arguments
Second line: "\t - " followed by a one line description of what the command
does.
Subsequent lines: All subsequent lines are currently ignored, however it
would be nice to display the entire __doc__ string content when something
like "h <help string>"-type functionality is implemented.
author | Josef "Jeff" Sipek <jeffpc@josefsipek.net> |
---|---|
date | Sun, 20 Aug 2006 01:00:29 -0400 |
parents | a3385f616b53 |
children | dfcf1a46fc56 |
line wrap: on
line source
import os, xmms import playlist, util def cmd_quit(ui, start, stop, args): """q[!] - quit Quits the program. The optional '!' forces the termination regardless of any unsaved work""" ui.shutdown = True def cmd_number(ui, start, stop, args): """[range]n [playlistid] - print the addressed lines The lines are printed along with the line/song numbers. See also: 'l'""" do_list(ui, start, stop, True, args) def cmd_list(ui, start, stop, args): """[range]l [playlistid] - print the addressed lines See also: 'n'""" do_list(ui, start, stop, False, args) def cmd_enqueue(ui, start, stop, args): """a [songid] - appends/enqueues a song A song at songid position in LIST_DEFAULT is appended to the end of the LIST_PRIO playlist. Duplicates are _NOT_ eliminated.""" try: id = int(args[0])-1 if (id < 0) or \ (id >= len(ui.lists[playlist.LIST_DEFAULT])): raise ValueError except ValueError: print "Invalid song id" return s = ui.lists[playlist.LIST_DEFAULT][id] print "Enqueuing song: %s (%s)" % (s["title"], util.strtime(s["time"])) ui.lists[playlist.LIST_PRIO].enqueue(s) def cmd_dequeue(ui, start, stop, args): """[range]d - delete/dequeue addressed songs Songs in range are removed from the LIST_PRIO playlist. They still remain in the LIST_DEFAULT at their original locations.""" l = ui.lists[playlist.LIST_PRIO] max = len(l) if not max: return start = util.fixupint(start, max) stop = util.fixupint(stop, max) for i in range(start-1, stop): s = l[start-1] print "Dequeuing song: %s (%s)" % (s["title"], util.strtime(s["time"])) l.dequeue(s) def cmd_help(ui, start, stop, args): """h - this help screen""" keys = args[0].keys() keys.sort() for c in keys: text = args[0][c][0].__doc__.split("\n")[0:2] text = "\n".join(text) print " %s" % (text,) def do_list(ui, start, stop, number, args): # get the list id from the argument or default to # LIST_PRIO try: if args[1]: listid = int(args[1]) else: listid = playlist.LIST_PRIO if listid < 0 or listid >= len(ui.lists): raise ValueError except ValueError, e: print "Invalid list number" raise e max = len(ui.lists[listid]) if not max: return start = util.fixupint(start, max) stop = util.fixupint(stop, max) # starting number should be less than the ending # number, as well as positive; ending number should # be less than or equal to the size of the playlist if start > stop or \ start < 1 or \ stop > max: raise ValueError i = 1 pfx = "" for s in ui.lists[listid]: if i < start or i > stop: i += 1 continue if number: pfx = "%d. " % (i,) print "%s%s (%s)" % (pfx, s["title"], util.strtime(s["time"])) i += 1 def cmd_play(ui, start, stop, args): """x - Direct XMMS control: play""" xmms.control.play() def cmd_pause(ui, start, stop, args): """c - Direct XMMS control: pause""" xmms.control.pause() def cmd_stop(ui, start, stop, args): """v - Direct XMMS control: stop""" xmms.control.stop() def cmd_prev(ui, start, stop, args): """z - Direct XMMS control: previous song""" xmms.control.playlist_prev() def cmd_next(ui, start, stop, args): """b - Direct XMMS control: next song""" xmms.control.playlist_next() def cmd_shell(ui, start, stop, args): """![command] - Execute a shell command""" if args[0]: os.system(args[0]) print "!"