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
|
class ArrowModuleChain:
def __init__(self, right, background="#000000", capped_left=False, capped_right=False):
self.sep = "\uE0B0" if right else "\uE0B2"
self.bg = background
self.right = right
self.chain = []
self.modules = []
self.capped_left = capped_left
self.capped_right = capped_right
def append(self, module):
if len(self.modules) > 0:
self.chain.pop()
fg = module["background"]
bg = self.modules[-1]["background"]
else:
bg = module["background"] if self.capped_left else self.bg
fg = module["background"]
if not self.right:
bg, fg = fg, bg
self.chain.append(self.get_sep(bg, fg))
bg = module["background"] if self.capped_right else self.bg
fg = module["background"]
if not self.right:
bg, fg = fg, bg
self.chain.append(self.get_sep(fg, bg))
self.modules.append(module)
def extend(self, *modules):
for module in modules:
self.append(module)
def get_sep(self, fg, bg):
return f"%{{F{fg}}}%{{B{bg}}}{self.sep}"
def __str__(self):
result = []
for i in range(len(self.modules)):
result.append(self.chain[i])
bg = self.modules[i]["background"]
fg = self.modules[i]["foreground"]
text = self.modules[i]["callback"]()
text = f"%{{F{fg}}}%{{B{bg}}} {text} "
result.append(text)
if len(self.chain) > 0:
result.append(self.chain[-1])
return "".join(result)
|