aboutsummaryrefslogtreecommitdiffstats
path: root/examples/mixed
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-06-13 01:27:15 +0200
committerMattias Andrée <maandree@operamail.com>2014-06-13 01:27:15 +0200
commit467f2fe4c53f30c2a7f7da17918c782dbe99ca00 (patch)
tree52f0e7178358431e06c095405fb136d62c89c857 /examples/mixed
parentremove old imports (diff)
downloadxpybar-467f2fe4c53f30c2a7f7da17918c782dbe99ca00.tar.gz
xpybar-467f2fe4c53f30c2a7f7da17918c782dbe99ca00.tar.bz2
xpybar-467f2fe4c53f30c2a7f7da17918c782dbe99ca00.tar.xz
demo combination of linereading and clock
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'examples/mixed')
-rw-r--r--examples/mixed64
1 files changed, 64 insertions, 0 deletions
diff --git a/examples/mixed b/examples/mixed
new file mode 100644
index 0000000..5770dc8
--- /dev/null
+++ b/examples/mixed
@@ -0,0 +1,64 @@
+# -*- python -*-
+
+# A simple xpybar configuration that mixes linereading with a clock
+
+import sys
+import threading
+
+from util import *
+
+from plugins.clock import Clock
+
+
+OUTPUT, HEIGHT, YPOS, TOP = 0, 12, 0, True
+
+text = ''
+clock_ = Clock(format = '%Y-(%m)%b-%d %T, %a w%V, %Z', sync_to = 0.5)
+
+class Clocked:
+ def __init__(self, *args):
+ self.sometimes = Sometimes(*args)
+ self.text = self.sometimes()
+ def __call__(self, update = False):
+ if update:
+ self.text = self.sometimes()
+ return self.text
+
+functions = [ lambda : text
+ , Clocked(clock_.read, 1)
+ ]
+
+pattern = '%s \0 %s'
+
+start_ = start
+def start():
+ start_()
+
+ def read_stdin():
+ global text
+ try:
+ text = input()
+ except:
+ sys.exit(0)
+ bar.invalidate()
+
+ def update_per_clock():
+ for f in functions:
+ if isinstance(f, Clocked):
+ f(True)
+ bar.invalidate()
+
+ async(lambda : forever(read_stdin))
+ async(lambda : clock_.continuous_sync(update_per_clock))
+
+
+semaphore = threading.Semaphore()
+def redraw():
+ if semaphore.acquire(blocking = False):
+ try:
+ values = pattern % tuple(f() for f in functions)
+ bar.partial_clear(0, bar.width, 10, 0, 2, values)
+ bar.draw_coloured_splitted_text(0, bar.width, 10, 0, 2, values)
+ finally:
+ semaphore.release()
+