From 24ab1ce475bc17f28a7a1d3fd6666d82757e290c Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Tue, 4 Mar 2014 01:44:33 +0100 Subject: beginning of xmonad plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- TODO | 1 - examples/xmonad | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/__main__.py | 5 ++-- src/util.py | 16 ++++++++++-- 4 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 examples/xmonad diff --git a/TODO b/TODO index d4b4fde..9103a22 100644 --- a/TODO +++ b/TODO @@ -2,7 +2,6 @@ List of plugins to implement: iostat [-x] [-d] [-N] -zk [-p | ...] SMART monitoring - Xmonad Battery Volume control /proc/acpi (mute) diff --git a/examples/xmonad b/examples/xmonad new file mode 100644 index 0000000..0c6700f --- /dev/null +++ b/examples/xmonad @@ -0,0 +1,80 @@ +# -*- python -*- + +# A simple xpybar configuration for replacing dzen2 + +import sys +import threading + +from util import * + + +OUTPUT, HEIGHT, YPOS, TOP = 0, 12, 0, True + +text = '' + +start_ = start +create = [] # FIXME this should not be required!! +def start(): + start_() + bar.create_colour(0x90, 0x90, 0x90) # FIXME this should not be required!! + bar.create_colour(0x60, 0x60, 0x60) + bar.create_colour(0x30, 0x30, 0x30) + def refresh(): + global text + text_ = None + try: + text_ = input() + except: + sys.exit(0) + buf, esc = '', None + for c in text_: + if esc is not None: + esc += c + if esc == '^': + buf += '^' + esc = None + elif esc[-1] == ')': + if esc.startswith('bg('): + esc = esc[3 : -1] + if esc == '': + buf += '\033[49m' + else: + r, g, b = esc[1 : 3], esc[3 : 5], esc[5 : 7] + r, g, b = int(r, 16), int(g, 16), int(b, 16) + create.append((r, g, b)) + r, g, b = str(r), str(g), str(b) + buf += '\033[48;2;%sm' % ';'.join([r, g, b]) + elif esc.startswith('fg('): + esc = esc[3 : -1] + if esc == '': + buf += '\033[39m' + else: + r, g, b = esc[1 : 3], esc[3 : 5], esc[5 : 7] + r, g, b = int(r, 16), int(g, 16), int(b, 16) + create.append((r, g, b)) + r, g, b = str(r), str(g), str(b) + buf += '\033[38;2;%sm' % ';'.join([r, g, b]) + esc = None + elif c == '^': + esc = '' + else: + buf += c + text = buf + if redraw(): + get_display().flush() + async(lambda : forever(refresh)) + + +semaphore = threading.Semaphore() +def redraw(): + global create + if semaphore.acquire(blocking = False): + for r, g, b in create: + bar.create_colour(r, g, b) + create = [] + bar.clear() + bar.draw_coloured_text(0, 10, 0, 2, text) + semaphore.release() + return True + return False + diff --git a/src/__main__.py b/src/__main__.py index 1196341..6077a98 100755 --- a/src/__main__.py +++ b/src/__main__.py @@ -228,7 +228,7 @@ class Bar: buf = [int('0' + x) for x in buf] bci, fci = 0, 0 for b in buf: - if bci != 0: + if not bci == 0: if bci == 1: if not b == 2: bci = -2 @@ -237,9 +237,10 @@ class Bar: bc = (bc << 8) + b if bci == 4: bci = -1 + bc = (bc >> 16) & 255, (bc >> 8) & 255, bc & 255 bc = self.create_colour(*bc) bci += 1 - elif fci != 0: + elif not fci == 0: if fci == 1: if not b == 2: fci = -2 diff --git a/src/util.py b/src/util.py index 4d229ef..9c8c9d5 100644 --- a/src/util.py +++ b/src/util.py @@ -42,13 +42,25 @@ def watch(interval, target, delay = 0): @param interval:float The number of seconds to sleep between invocatons @param target:()→void The function - @param delay:float Number of extra seconds seconds to wait the first time + @param delay:float Number of extra seconds to wait the first time ''' - target() if not delay == 0: time.sleep(delay) while True: + target() time.sleep(interval) + + +def forever(target, delay = 0): + ''' + Run a function continuously forever + + @param target:()→void The function + @param delay:float Number of extra seconds to wait the first time + ''' + if not delay == 0: + time.sleep(delay) + while True: target() -- cgit v1.2.3-70-g09d2