馃悕馃悕馃悕
at dev 87 lines 2.7 kB view raw
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 = []