馃悕馃悕馃悕
1
2def ansi(*sequence, end="m"):
3 return f"\033[{';'.join(sequence)}{end}"
4
5basic_colors = ["black", "red", "green", "yellow", "blue", "magenta", "cyan", "white", "default"]
6color_digits = {
7 k: i for (i,k) in enumerate(basic_colors)
8}
9
10locals().update(color_digits)
11
12modes = ["reset", "bold", "dim", "italic", "underline", "_5", "_6", "_7", "_8", "strike"]
13mode_digits = {
14 k: str(i) for (i,k) in enumerate(modes)
15}
16
17locals().update(mode_digits)
18
19def fg(color):
20 if isinstance(color, str):
21 if color.startswith("#"):
22 r = int(color[1:3], 16)
23 g = int(color[3:5], 16)
24 b = int(color[5:7], 16)
25 return f"38;2;{r};{g};{b}"
26 return f"3{color_digits[color]}"
27 return f"3{color}"
28
29def bg(color):
30 if isinstance(color, str):
31 if color.startswith("#"):
32 r = int(color[1:3], 16)
33 g = int(color[3:5], 16)
34 b = int(color[5:7], 16)
35 return f"48;2;{r};{g};{b}"
36 return f"4{color_digits[color]}"
37 return f"4{color}"
38
39reset = ansi(reset)
40clear_end = ansi(end="K")
41
42def main():
43 for fgc in [fg(c) for c in basic_colors]:
44 bgcs = [bg(c) for c in basic_colors]
45 tests = [f"{ansi(fgc,bgc)}test{reset}" for bgc in bgcs]
46 print(" ".join(tests))
47
48 for mode in mode_digits:
49 if mode == "reset" or mode.startswith("_"):
50 continue
51 print(mode)
52 md = mode_digits[mode]
53 for fgc in [fg(c) for c in basic_colors]:
54 bgcs = [bg(c) for c in basic_colors]
55 tests = [f"{ansi(fgc,bgc,md)}test{reset}" for bgc in bgcs]
56 print(" ".join(tests))
57
58 import random
59
60 while False:
61 gradient = []
62 for i in range(256):
63 rgb = f"#{i:02x}{j:02x}{255-i:02x}"
64 gradient.append(f"{ansi(bg(rgb))}namo amitabha buddha {reset}")
65
66 print("".join(gradient) + ansi(end="K"))
67
68 prev_color = None
69 target_color = None
70
71 gradient = []
72 while True:
73 prev_color = target_color if target_color else [random.randint(0, 255) for _ in range(3)]
74 target_color = [random.randint(0, 255) for _ in range(3)]
75
76 for i in range(256):
77 r = int(prev_color[0] + (target_color[0] - prev_color[0]) * i / 255)
78 g = int(prev_color[1] + (target_color[1] - prev_color[1]) * i / 255)
79 b = int(prev_color[2] + (target_color[2] - prev_color[2]) * i / 255)
80
81 rgb = f"#{r:02x}{g:02x}{b:02x}"
82 gradient.append(f"{ansi(bg(rgb))}namo amitabha buddha {reset}")
83
84 if len(gradient) > 2**14:
85
86 print("".join(gradient) + ansi(end="K"))
87 gradient = []