changeset:   2462:63a4e2dd7d19
tag:         tip
user:        Kris Maglione <jg_AT_suckless.org>
date:        Thu May 21 16:26:31 2009 -0400
files:       alternative_wmiircs/python/wmiirc alternative_wmiircs/python/wmiirc.py
description:
Minor pygmi efficiency imporvements. Add plugin support.
diff -r b9b5a6c675a8 -r 63a4e2dd7d19 alternative_wmiircs/python/wmiirc
--- a/alternative_wmiircs/python/wmiirc	Thu May 21 15:57:04 2009 -0400
+++ b/alternative_wmiircs/python/wmiirc	Thu May 21 16:26:31 2009 -0400
@@ -1,207 +1,3 @@
 #!/usr/bin/env python
-import os
-import re
-import sys
-
 import pygmi
-from pygmi import *
-from pygmi import events
-
-identity = lambda k: k
-
-# Keys
-events.keydefs = dict(
-    mod='Mod4',
-    left='h',
-    down='j',
-    up='k',
-    right='l')
-
-# Bars
-noticetimeout=5
-noticebar=('right', '!notice')
-
-# Theme
-background = '#333333'
-floatbackground='#222222'
-
-wmii['font'] = 'drift,-*-fixed-*-*-*-*-9-*-*-*-*-*-*-*'
-wmii['normcolors'] = '#000000', '#c1c48b', '#81654f'
-wmii['focuscolors'] = '#000000', '#81654f', '#000000'
-wmii['grabmod'] = events.keydefs['mod']
-wmii['border'] = 2
-
-def setbackground(color):
-    call('xsetroot', '-solid', color)
-setbackground(background)
-
-terminal = 'wmiir', 'setsid', 'xterm'
-pygmi.shell = os.environ.get('SHELL', 'sh')
-
-_AT_defmonitor
-def load(self):
-    return re.sub(r'^.*: ', '', call('uptime')).replace(', ', ' ')
-_AT_defmonitor
-def time(self):
-    from datetime import datetime
-    return datetime.now().strftime('%c')
-
-wmii.colrules = (
-    ('gimp', '17+83+41'),
-    ('.*', '62+38 # Golden Ratio'),
-)
-
-wmii.tagrules = (
-    ('MPlayer|VLC', '~'),
-)
-
-def unresponsive_client(client):
-    msg = 'The following client is not responding. What would you like to do?'
-    resp = call('wihack', '-transient', client.id,
-                'xmessage', '-nearmouse', '-buttons', 'Kill,Wait', '-print',
-                '%s\n  %s' % (client, client.label))
-    if resp == 'Kill':
-        client.slay()
-
-# End Configuration
-
-client.awrite('/event', 'Start wmiirc')
-
-tags = Tags()
-bind_events({
-    'Quit':         lambda args: sys.exit(),
-    'Start':        lambda args: args == 'wmiirc' and sys.exit(),
-    'CreateTag':    tags.add,
-    'DestroyTag':   tags.delete,
-    'FocusTag':     tags.focus,
-    'UnfocusTag':   tags.unfocus,
-    'UrgentTag':    lambda args: tags.set_urgent(args.split()[1], True),
-    'NotUrgentTag': lambda args: tags.set_urgent(args.split()[1], False),
-
-    'AreaFocus':    lambda args: (args == '~' and
-                                  (setbackground(floatbackground), True) or
-                                  setbackground(background)),
-
-    'Unresponsive': lambda args: Thread(target=unresponsive_client,
-                                        args=(Client(args),)).start(),
-
-    'Notice':       lambda args: notice.show(args),
-
-    ('LeftBarClick', 'LeftBarDND'):
-        lambda args: args.split()[0] == '1' and tags.select(args.split(' ', 1)[1]),
-
-    'ClientMouseDown':  lambda args: menu(*args.split(), type='client'),
-    'LeftBarMouseDown': lambda args: menu(*reversed(args.split()), type='lbar'),
-})
-
-_AT_apply
-class Actions(events.Actions):
-    def rehash(self, args=''):
-        program_menu.choices = program_list(os.environ['PATH'].split(':'))
-    def quit(self, args=''):
-        wmii.ctl('quit')
-    def eval_(self, args=''):
-        exec args
-    def exec_(self, args=''):
-        wmii['exec'] = args
-    def exit(self, args=''):
-        client.awrite('/event', 'Quit')
-
-program_menu = Menu(histfile='%s/history.prog' % confpath[0], nhist=5000,
-                    action=curry(call, 'wmiir', 'setsid',
-                                 pygmi.shell, '-c', background=True))
-action_menu = Menu(histfile='%s/history.action' % confpath[0], nhist=500,
-                   choices=lambda: Actions._choices,
-                   action=Actions._call)
-tag_menu = Menu(histfile='%s/history.tags' % confpath[0], nhist=100,
-                choices=lambda: sorted(tags.tags.keys()))
-
-def menu(target, button, type):
-    MENUS = {
-        ('client', '3'): (
-            ('Delete',     lambda c: Client(c).kill()),
-            ('Kill',       lambda c: Client(c).slay()),
-            ('Fullscreen', lambda c: Client(c).set('Fullscreen', 'on'))),
-        ('lbar', '3'): (
-            ('Delete',     lambda t: Tag(t).delete())),
-    }
-    choices = MENUS.get((type, button), None)
-    if choices:
-        ClickMenu(choices=(k for k, v in choices),
-                  action=lambda k: dict(choices).get(k, identity)(target)
-                 ).call()
-
-class Notice(Button):
-    def __init__(self):
-        super(Notice, self).__init__(*noticebar)
-        self.timer = None
-
-    def tick(self):
-        self.label = ''
-
-    def write(self, notice):
-        client.awrite('/event', 'Notice %s' % notice.replace('\n', ' '))
-
-    def show(self, notice):
-        if self.timer:
-            self.timer.cancel()
-        self.label = notice
-        from threading import Timer
-        self.timer = Timer(noticetimeout, self.tick)
-        self.timer.start()
-notice = Notice()
-
-bind_keys({
-    '%(mod)s-Control-t': lambda k: events.toggle_keys(restore='%(mod)s-Control-t'),
-
-    '%(mod)s-%(left)s':  lambda k: Tag('sel').select('left'),
-    '%(mod)s-%(right)s': lambda k: Tag('sel').select('right'),
-    '%(mod)s-%(up)s':    lambda k: Tag('sel').select('up'),
-    '%(mod)s-%(down)s':  lambda k: Tag('sel').select('down'),
-
-    '%(mod)s-Control-%(up)s':   lambda k: Tag('sel').select('up', stack=True),
-    '%(mod)s-Control-%(down)s': lambda k: Tag('sel').select('down', stack=True),
-
-    '%(mod)s-space': lambda k: Tag('sel').select('toggle'),
-
-    '%(mod)s-Shift-%(left)s':  lambda k: Tag('sel').send(Client('sel'), 'left'),
-    '%(mod)s-Shift-%(right)s': lambda k: Tag('sel').send(Client('sel'), 'right'),
-    '%(mod)s-Shift-%(up)s':    lambda k: Tag('sel').send(Client('sel'), 'up'),
-    '%(mod)s-Shift-%(down)s':  lambda k: Tag('sel').send(Client('sel'), 'down'),
-
-    '%(mod)s-Shift-space':  lambda k: Tag('sel').send(Client('sel'), 'toggle'),
-
-    '%(mod)s-d': lambda k: setattr(Tag('sel').selcol, 'mode', 'default-max'),
-    '%(mod)s-s': lambda k: setattr(Tag('sel').selcol, 'mode', 'stack-max'),
-    '%(mod)s-m': lambda k: setattr(Tag('sel').selcol, 'mode', 'stack+max'),
-
-    '%(mod)s-f':       lambda k: Client('sel').set('Fullscreen', 'toggle'),
-    '%(mod)s-Shift-c': lambda k: Client('sel').kill(),
-
-    '%(mod)s-a': lambda k: action_menu.call(),
-    '%(mod)s-p': lambda k: program_menu.call(),
-
-    '%(mod)s-Return': lambda k: call(*terminal, background=True),
-
-    '%(mod)s-t':       lambda k: tags.select(tag_menu.call()),
-    '%(mod)s-Shift-t': lambda k: setattr(Client('sel'), 'tags', tag_menu.call()),
-
-    '%(mod)s-n': lambda k: tags.select(tags.next()),
-    '%(mod)s-b': lambda k: tags.select(tags.next(True)),
-    '%(mod)s-i': lambda k: tags.select(tags.NEXT),
-    '%(mod)s-o': lambda k: tags.select(tags.PREV),
-})
-def bind_num(i):
-    bind_keys({
-        '%%(mod)s-%d' % i:       lambda k: tags.select(str(i)),
-        '%%(mod)s-Shift-%d' % i: lambda k: setattr(Client('sel'), 'tags', i),
-    })
-map(bind_num, range(0, 10))
-
-Actions.rehash()
-
-execfile(pygmi.find_script('wmiirc.local.py') or '/dev/null')
-
-event_loop()
-
-# vim:se sts=4 sw=4 et:
+import wmiirc
diff -r b9b5a6c675a8 -r 63a4e2dd7d19 alternative_wmiircs/python/wmiirc.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/alternative_wmiircs/python/wmiirc.py	Thu May 21 16:26:31 2009 -0400
@@ -0,0 +1,215 @@
+import operator
+import os
+import re
+import sys
+import traceback
+
+import pygmi
+from pygmi import *
+from pygmi import events
+
+identity = lambda k: k
+
+# Keys
+events.keydefs = dict(
+    mod='Mod4',
+    left='h',
+    down='j',
+    up='k',
+    right='l')
+
+# Bars
+noticetimeout=5
+noticebar=('right', '!notice')
+
+# Theme
+background = '#333333'
+floatbackground='#222222'
+
+wmii['font'] = 'drift,-*-fixed-*-*-*-*-9-*-*-*-*-*-*-*'
+wmii['normcolors'] = '#000000', '#c1c48b', '#81654f'
+wmii['focuscolors'] = '#000000', '#81654f', '#000000'
+wmii['grabmod'] = events.keydefs['mod']
+wmii['border'] = 2
+
+def setbackground(color):
+    call('xsetroot', '-solid', color)
+setbackground(background)
+
+terminal = 'wmiir', 'setsid', 'xterm'
+pygmi.shell = os.environ.get('SHELL', 'sh')
+
+@defmonitor
+def load(self):
+    return re.sub(r'^.*: ', '', call('uptime')).replace(', ', ' ')
+@defmonitor
+def time(self):
+    from datetime import datetime
+    return datetime.now().strftime('%c')
+
+wmii.colrules = (
+    ('gimp', '17+83+41'),
+    ('.*', '62+38 # Golden Ratio'),
+)
+
+wmii.tagrules = (
+    ('MPlayer|VLC', '~'),
+)
+
+def unresponsive_client(client):
+    msg = 'The following client is not responding. What would you like to do?'
+    resp = call('wihack', '-transient', client.id,
+                'xmessage', '-nearmouse', '-buttons', 'Kill,Wait', '-print',
+                '%s\n  %s' % (client, client.label))
+    if resp == 'Kill':
+        client.slay()
+
+# End Configuration
+
+client.awrite('/event', 'Start wmiirc')
+
+tags = Tags()
+bind_events({
+    'Quit':         lambda args: sys.exit(),
+    'Start':        lambda args: args == 'wmiirc' and sys.exit(),
+    'CreateTag':    tags.add,
+    'DestroyTag':   tags.delete,
+    'FocusTag':     tags.focus,
+    'UnfocusTag':   tags.unfocus,
+    'UrgentTag':    lambda args: tags.set_urgent(args.split()[1], True),
+    'NotUrgentTag': lambda args: tags.set_urgent(args.split()[1], False),
+
+    'AreaFocus':    lambda args: (args == '~' and
+                                  (setbackground(floatbackground), True) or
+                                  setbackground(background)),
+
+    'Unresponsive': lambda args: Thread(target=unresponsive_client,
+                                        args=(Client(args),)).start(),
+
+    'Notice':       lambda args: notice.show(args),
+
+    ('LeftBarClick', 'LeftBarDND'):
+        lambda args: args.split()[0] == '1' and tags.select(args.split(' ', 1)[1]),
+
+    'ClientMouseDown':  lambda args: menu(*args.split(), type='client'),
+    'LeftBarMouseDown': lambda args: menu(*reversed(args.split()), type='lbar'),
+})
+
+@apply
+class Actions(events.Actions):
+    def rehash(self, args=''):
+        program_menu.choices = program_list(os.environ['PATH'].split(':'))
+    def quit(self, args=''):
+        wmii.ctl('quit')
+    def eval_(self, args=''):
+        exec args
+    def exec_(self, args=''):
+        wmii['exec'] = args
+    def exit(self, args=''):
+        client.awrite('/event', 'Quit')
+
+program_menu = Menu(histfile='%s/history.prog' % confpath[0], nhist=5000,
+                    action=curry(call, 'wmiir', 'setsid',
+                                 pygmi.shell, '-c', background=True))
+action_menu = Menu(histfile='%s/history.action' % confpath[0], nhist=500,
+                   choices=lambda: Actions._choices,
+                   action=Actions._call)
+tag_menu = Menu(histfile='%s/history.tags' % confpath[0], nhist=100,
+                choices=lambda: sorted(tags.tags.keys()))
+
+def menu(target, button, type):
+    MENUS = {
+        ('client', '3'): (
+            ('Delete',     lambda c: Client(c).kill()),
+            ('Kill',       lambda c: Client(c).slay()),
+            ('Fullscreen', lambda c: Client(c).set('Fullscreen', 'on'))),
+        ('lbar', '3'): (
+            ('Delete',     lambda t: Tag(t).delete())),
+    }
+    choices = MENUS.get((type, button), None)
+    if choices:
+        ClickMenu(choices=(k for k, v in choices),
+                  action=lambda k: dict(choices).get(k, identity)(target)
+                 ).call()
+
+class Notice(Button):
+    def __init__(self):
+        super(Notice, self).__init__(*noticebar)
+        self.timer = None
+
+    def tick(self):
+        self.label = ''
+
+    def write(self, notice):
+        client.awrite('/event', 'Notice %s' % notice.replace('\n', ' '))
+
+    def show(self, notice):
+        if self.timer:
+            self.timer.cancel()
+        self.label = notice
+        from threading import Timer
+        self.timer = Timer(noticetimeout, self.tick)
+        self.timer.start()
+notice = Notice()
+
+bind_keys({
+    '%(mod)s-Control-t': lambda k: events.toggle_keys(restore='%(mod)s-Control-t'),
+
+    '%(mod)s-%(left)s':  lambda k: Tag('sel').select('left'),
+    '%(mod)s-%(right)s': lambda k: Tag('sel').select('right'),
+    '%(mod)s-%(up)s':    lambda k: Tag('sel').select('up'),
+    '%(mod)s-%(down)s':  lambda k: Tag('sel').select('down'),
+
+    '%(mod)s-Control-%(up)s':   lambda k: Tag('sel').select('up', stack=True),
+    '%(mod)s-Control-%(down)s': lambda k: Tag('sel').select('down', stack=True),
+
+    '%(mod)s-space': lambda k: Tag('sel').select('toggle'),
+
+    '%(mod)s-Shift-%(left)s':  lambda k: Tag('sel').send(Client('sel'), 'left'),
+    '%(mod)s-Shift-%(right)s': lambda k: Tag('sel').send(Client('sel'), 'right'),
+    '%(mod)s-Shift-%(up)s':    lambda k: Tag('sel').send(Client('sel'), 'up'),
+    '%(mod)s-Shift-%(down)s':  lambda k: Tag('sel').send(Client('sel'), 'down'),
+
+    '%(mod)s-Shift-space':  lambda k: Tag('sel').send(Client('sel'), 'toggle'),
+
+    '%(mod)s-d': lambda k: setattr(Tag('sel').selcol, 'mode', 'default-max'),
+    '%(mod)s-s': lambda k: setattr(Tag('sel').selcol, 'mode', 'stack-max'),
+    '%(mod)s-m': lambda k: setattr(Tag('sel').selcol, 'mode', 'stack+max'),
+
+    '%(mod)s-f':       lambda k: Client('sel').set('Fullscreen', 'toggle'),
+    '%(mod)s-Shift-c': lambda k: Client('sel').kill(),
+
+    '%(mod)s-a': lambda k: action_menu.call(),
+    '%(mod)s-p': lambda k: program_menu.call(),
+
+    '%(mod)s-Return': lambda k: call(*terminal, background=True),
+
+    '%(mod)s-t':       lambda k: tags.select(tag_menu.call()),
+    '%(mod)s-Shift-t': lambda k: setattr(Client('sel'), 'tags', tag_menu.call()),
+
+    '%(mod)s-n': lambda k: tags.select(tags.next()),
+    '%(mod)s-b': lambda k: tags.select(tags.next(True)),
+    '%(mod)s-i': lambda k: tags.select(tags.NEXT),
+    '%(mod)s-o': lambda k: tags.select(tags.PREV),
+})
+def bind_num(i):
+    bind_keys({
+        '%%(mod)s-%d' % i:       lambda k: tags.select(str(i)),
+        '%%(mod)s-Shift-%d' % i: lambda k: setattr(Client('sel'), 'tags', i),
+    })
+map(bind_num, range(0, 10))
+
+Actions.rehash()
+
+dirs = ('%s/plugins' % dir for dir in confpath if os.access('%s/plugins' % dir, os.R_OK))
+files = filter(re.compile(r'\.py$').match,
+               reduce(operator.add, map(os.listdir, dirs), []))
+for f in ['wmiirc_local'] + ['plugins.%s' % file[:-3] for file in files]:
+    try:
+        exec 'import %s' % f
+    except Exception, e:
+        traceback.print_exc(sys.stdout)
+
+event_loop()
+
+# vim:se sts=4 sw=4 et:
Received on Thu May 21 2009 - 20:26:35 UTC
This archive was generated by hypermail 2.2.0 : Thu May 21 2009 - 20:36:06 UTC