aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-03-04 02:40:05 +0100
committerMattias Andrée <maandree@operamail.com>2014-03-04 02:40:05 +0100
commite268a646fc5e05f03fd2b5c766331d691d508a52 (patch)
treeead8f3d19051dabf23c18c1ea784e7587ece4992
parentbeginning of xmonad plugin (diff)
downloadxpybar-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 '')
-rw-r--r--examples/xmonad65
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