diff options
author | Mattias Andrée <maandree@operamail.com> | 2014-03-04 02:40:05 +0100 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2014-03-04 02:40:05 +0100 |
commit | e268a646fc5e05f03fd2b5c766331d691d508a52 (patch) | |
tree | ead8f3d19051dabf23c18c1ea784e7587ece4992 /examples | |
parent | beginning of xmonad plugin (diff) | |
download | xpybar-e268a646fc5e05f03fd2b5c766331d691d508a52.tar.gz xpybar-e268a646fc5e05f03fd2b5c766331d691d508a52.tar.bz2 xpybar-e268a646fc5e05f03fd2b5c766331d691d508a52.tar.xz |
fix threading issues in xmonad example
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/xmonad | 65 |
1 files changed, 30 insertions, 35 deletions
diff --git a/examples/xmonad b/examples/xmonad index 0c6700f..cd6e623 100644 --- a/examples/xmonad +++ b/examples/xmonad @@ -7,73 +7,68 @@ import threading from util import * +import Xlib.X, Xlib.protocol.event + 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) + bar.clear() + get_display().flush() + def refresh(): global text - text_ = None try: - text_ = input() + text = input() except: sys.exit(0) + # Dummy event for performing update in the main thread # TODO do this better + e = Xlib.protocol.event.KeyPress(detail = 1, + time = Xlib.X.CurrentTime, + root = get_display().screen().root, + window = bar.window, + child = Xlib.X.NONE, + root_x = 1, root_y = 1, + event_x = 1, event_y = 1, + state = 0, same_screen = 1) + get_display().send_event(bar.window, e) + get_display().flush() + async(lambda : forever(refresh)) + + +semaphore = threading.Semaphore() +def redraw(): + global text + if semaphore.acquire(blocking = False): buf, esc = '', None - for c in text_: + for c in text: if esc is not None: esc += c if esc == '^': buf += '^' esc = None elif esc[-1] == ')': - if esc.startswith('bg('): + if esc.startswith('bg(') or esc.startswith('fg('): + c = 4 if esc.startswith('bg(') else 3 esc = esc[3 : -1] if esc == '': - buf += '\033[49m' + buf += '\033[%i9m' % c 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]) + buf += '\033[%i8;2;%sm' % (c, ';'.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) + bar.draw_coloured_text(0, 10, 0, 2, buf) semaphore.release() return True return False |