changeset:   2553:aa72269e70f8
user:        Kris Maglione <jg_AT_suckless.org>
date:        Sat Oct 17 04:34:17 2009 -0400
files:       alternative_wmiircs/python/pygmi/event.py alternative_wmiircs/python/pygmi/menu.py alternative_wmiircs/python/pygmi/monitor.py alternative_wmiircs/python/wmiirc.py
description:
Small python wmiirc changes.
diff -r 4d85770063e3 -r aa72269e70f8 alternative_wmiircs/python/pygmi/event.py
--- a/alternative_wmiircs/python/pygmi/event.py	Sat Oct 17 03:10:37 2009 -0400
+++ b/alternative_wmiircs/python/pygmi/event.py	Sat Oct 17 04:34:17 2009 -0400
@@ -163,7 +163,7 @@
         """
         self.modes = {}
         self.modelist = []
-        self.mode = 'main'
+        self._set_mode('main', False)
         self.defs = {}
         events.bind(Key=self.dispatch)
 
@@ -178,14 +178,14 @@
             }
             self.modelist.append(mode)
 
-    def _set_mode(self, mode):
+    def _set_mode(self, mode, execute=True):
         self._add_mode(mode)
         self._mode = mode
         self._keys = dict((k % self.defs, v) for k, v in
                           self.modes[mode]['keys'].items() +
                           self.modes[mode]['import'].items());
-
-        client.write('/keys', '\n'.join(self._keys.keys()) + '\n')
+        if execute:
+            client.write('/keys', '\n'.join(self._keys.keys()) + '\n')
 
     mode = property(lambda self: self._mode, _set_mode,
                    doc="The current mode for which to dispatch keys")
diff -r 4d85770063e3 -r aa72269e70f8 alternative_wmiircs/python/pygmi/menu.py
--- a/alternative_wmiircs/python/pygmi/menu.py	Sat Oct 17 03:10:37 2009 -0400
+++ b/alternative_wmiircs/python/pygmi/menu.py	Sat Oct 17 04:34:17 2009 -0400
@@ -1,4 +1,5 @@
 from pygmi.util import call
+from threading import Thread
 
 __all__ = 'Menu', 'ClickMenu'
 
@@ -10,7 +11,6 @@
         return res
     if not action:
         return run()
-    from threading import Thread
     t = Thread(target=run)
     t.daemon = True
     t.start()
@@ -23,7 +23,7 @@
         self.histfile = histfile
         self.nhist = nhist
 
-    def call(self, choices=None):
+    def __call__(self, choices=None):
         if choices is None:
             choices = self.choices
         if callable(choices):
@@ -36,6 +36,7 @@
                 args += ['-n', self.nhist]
             return call(*map(str, args), input='\n'.join(choices))
         return inthread(act, self.action)
+    call = __call__
 
 class ClickMenu(object):
     def __init__(self, choices=(), action=None,
@@ -44,7 +45,7 @@
         self.action = action
         self.prev = None
 
-    def call(self, choices=None):
+    def __call__(self, choices=None):
         if choices is None:
             choices = self.choices
         if callable(choices):
@@ -56,5 +57,6 @@
             args += ['--'] + list(choices)
             return call(*map(str, args)).replace('\n', '')
         return inthread(act, self.action)
+    call = __call__
 
 # vim:se sts=4 sw=4 et:
diff -r 4d85770063e3 -r aa72269e70f8 alternative_wmiircs/python/pygmi/monitor.py
--- a/alternative_wmiircs/python/pygmi/monitor.py	Sat Oct 17 03:10:37 2009 -0400
+++ b/alternative_wmiircs/python/pygmi/monitor.py	Sat Oct 17 04:34:17 2009 -0400
@@ -8,6 +8,16 @@
 monitors = {}
 
 def defmonitor(*args, **kwargs):
+    """
+    Defines a new monitor to appear in wmii's bar based on
+    the wrapped function. Creates a new Monitor object,
+    initialized with *args and **kwargs. The wrapped function
+    is assigned to the 'action' keyword argument for the
+    Monitor, its name is assigned to the 'name' argument.
+
+    The new monitor is added to the 'monitors' dict in this
+    module.
+    """
     def monitor(fn):
         kwargs['action'] = fn
         if not args and 'name' not in kwargs:
@@ -21,25 +31,35 @@
         return monitor(fn)
     return monitor
 
-class MonitorBase(type):
-    def __new__(cls, name, bases, attrs):
-        new_cls = super(MonitorBase, cls).__new__(cls, name, bases, attrs)
-        if name not in attrs:
-            new_cls.name = new_cls.__name__.lower()
-        try:
-            Monitor
-            if new_cls.name not in monitors:
-                monitors[new_cls.name] = new_cls()
-        except Exception, e:
-            pass
-        return new_cls
+class Monitor(object):
+    """
+    A class to manage status monitors for wmii's bar. The bar item
+    is updated on a fixed interval based on the values returned
+    by the 'action' method.
 
-class Monitor(object):
+    Property active: When true, the monitor is updated at regular
+             intervals. When false, monitor is hidden.
+    Property name: The name of the monitor, which acts as the name
+           of the bar in wmii's filesystem.
+    Property interval: The update interval, in seconds.
+    Property side: The side of the bar on which to place the monitor.
+    Property action: A function of no arguments which returns the
+            value of the monitor. Called at each update interval.
+            May return a string, a tuple of (Color, string), or None
+            to hide the monitor for one iteration.
+    """
     side = 'right'
     interval = 1.0
 
     def __init__(self, name=None, interval=None, side=None,
                  action=None, colors=None, label=None):
+        """
+        Initializes the new monitor. For parameter values, see the
+        corresponding property values in the class's docstring.
+
+        Param color: The initial colors for the monitor.
+        Param label: The initial label for the monitor.
+        """
         if side:
             self.side = side
         if name:
@@ -54,6 +74,10 @@
         self.tick()
 
     def tick(self):
+        """
+        Called internally at the interval defined by #interval.
+        Calls #action and updates the monitor based on the result.
+        """
         mon = monitors.get(self.name, None)
         if self.timer and mon is not self:
             return
@@ -71,12 +95,14 @@
             self.timer.start()
 
     def getlabel(self):
-        if self.action:
-            try:
-                return self.action(self)
-            except Exception:
-                pass
-        return None
+        """
+        Calls #action and returns the result, ignoring any
+        exceptions.
+        """
+        try:
+            return self.action(self)
+        except Exception:
+            return None
 
     _active = True
     def _set_active(self, val):
diff -r 4d85770063e3 -r aa72269e70f8 alternative_wmiircs/python/wmiirc.py
--- a/alternative_wmiircs/python/wmiirc.py	Sat Oct 17 03:10:37 2009 -0400
+++ b/alternative_wmiircs/python/wmiirc.py	Sat Oct 17 04:34:17 2009 -0400
@@ -138,8 +138,8 @@
 
 def clickmenu(choices, args):
     ClickMenu(choices=(k for k, v in choices),
-              action=lambda choice: dict(choices).get(choice, identity)(*args)) \
-            .call()
+              action=lambda choice: dict(choices).get(choice, identity)(*args)
+             ).call()
 
 class Notice(Button):
     def __init__(self):
@@ -211,18 +211,18 @@
 
     "Running programs",
     ('%(mod)s-a',      "Open wmii actions menu",
-        lambda k: action_menu.call()),
+        lambda k: action_menu()),
     ('%(mod)s-p',      "Open program menu",
-        lambda k: program_menu.call()),
+        lambda k: program_menu()),
 
     ('%(mod)s-Return', "Launch a terminal",
         lambda k: call(*terminal, background=True)),
 
     "Tag actions",
     ('%(mod)s-t',       "Change to another tag",
-        lambda k: tags.select(tag_menu.call())),
+        lambda k: tags.select(tag_menu())),
     ('%(mod)s-Shift-t', "Retag the selected client",
-        lambda k: setattr(Client('sel'), 'tags', tag_menu.call())),
+        lambda k: setattr(Client('sel'), 'tags', tag_menu())),
 
     ('%(mod)s-n', "Move to the view to the left",
         lambda k: tags.select(tags.next())),
Received on Sat Oct 17 2009 - 23:49:03 UTC
This archive was generated by hypermail 2.2.0 : Sun Oct 18 2009 - 00:00:14 UTC