aboutsummaryrefslogtreecommitdiffstats
path: root/examples/xmonad
blob: 0c6700fc8cc510878f28816a99d8a29e65ab242c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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