diff options
Diffstat (limited to '')
| -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  | 
