From 467f2fe4c53f30c2a7f7da17918c782dbe99ca00 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 13 Jun 2014 01:27:15 +0200 Subject: demo combination of linereading and clock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- examples/mixed | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 examples/mixed (limited to 'examples') 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() + -- cgit v1.2.3-70-g09d2