aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TODO1
-rw-r--r--examples/xmonad80
-rwxr-xr-xsrc/__main__.py5
-rw-r--r--src/util.py16
4 files changed, 97 insertions, 5 deletions
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 | <devices>...] <interval>
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()