Download agicli/printplus.py from AGofficial/AgiCLI: direct link, hf CLI and curl.
- Browser
- Download file 21.3 kB
-
https://huggingface.co/AGofficial/AgiCLI/resolve/main/agicli/printplus.py
- Command line
-
hf download hf://AGofficial/AgiCLI/agicli/printplus.py
-
curl -L -o printplus.py https://huggingface.co/AGofficial/AgiCLI/resolve/main/agicli/printplus.py
21.3 kB
| """ | |
| A module that provides enhanced printing functionality with colored text and optional borders. | |
| Supports both traditional terminal output and custom GUI terminal output. | |
| """ | |
| import threading | |
| # Global terminal reference (set by the GUI app) | |
| _terminal = None | |
| _token_tracker = None | |
| _input_result = None | |
| _input_event = threading.Event() | |
| def _output(text: str, color: str = "white"): | |
| """Output text to either the GUI terminal or standard console.""" | |
| if _terminal is not None: | |
| _terminal.print(text, color) | |
| else: | |
| # Fallback to standard print with ANSI colors | |
| text_color = colors.get(color, colors['reset']) | |
| print(f"{text_color}{text}{colors['reset']}") | |
| colors = { | |
| "red": "\033[91m", | |
| "green": "\033[92m", | |
| "yellow": "\033[93m", | |
| "blue": "\033[94m", | |
| "magenta": "\033[95m", | |
| "orange": "\033[33m", | |
| "black": "\033[90m", | |
| "cyan": "\033[96m", | |
| "white": "\033[97m", | |
| "reset": "\033[0m", | |
| } | |
| def pr(x, color="red", suround=False, surround_color="red", big_text=False, surround_char="", margin=1): | |
| for i in range(margin): | |
| _output("", color) | |
| if not big_text: | |
| if suround: | |
| # Handle surround_char | |
| if surround_char: | |
| # If multiple chars, alternate them | |
| if len(surround_char) > 1: | |
| chars = list(surround_char) | |
| border_top = "" | |
| border_bottom = "" | |
| for i in range(len(x) + 4): | |
| border_top += chars[i % len(chars)] | |
| border_bottom += chars[i % len(chars)] | |
| left_char = chars[0] | |
| right_char = chars[1 % len(chars)] | |
| else: | |
| # Single char | |
| border_top = surround_char * (len(x) + 4) | |
| border_bottom = surround_char * (len(x) + 4) | |
| left_char = surround_char | |
| right_char = surround_char | |
| _output(border_top, surround_color) | |
| _output(f"{left_char} {x} {right_char}", color) | |
| _output(border_bottom, surround_color) | |
| else: | |
| # Default box drawing characters | |
| border_top = "β" + "β" * (len(x) + 2) + "β" | |
| border_bottom = "β" + "β" * (len(x) + 2) + "β" | |
| _output(border_top, surround_color) | |
| _output(f"β {x} β", color) | |
| _output(border_bottom, surround_color) | |
| else: | |
| _output(str(x), color) | |
| if big_text: | |
| # Unicode block font character definitions | |
| block_font = { | |
| 'A': [ | |
| " ββββββ ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "βββ βββ", | |
| "βββ βββ" | |
| ], | |
| 'B': [ | |
| "βββββββ ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "βββββββ " | |
| ], | |
| 'C': [ | |
| " βββββββ", | |
| "ββββββββ", | |
| "βββ ", | |
| "βββ ", | |
| "ββββββββ", | |
| " βββββββ" | |
| ], | |
| 'D': [ | |
| "βββββββ ", | |
| "ββββββββ", | |
| "βββ βββ", | |
| "βββ βββ", | |
| "ββββββββ", | |
| "βββββββ " | |
| ], | |
| 'E': [ | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββ ", | |
| "ββββββ ", | |
| "ββββββββ", | |
| "ββββββββ" | |
| ], | |
| 'F': [ | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββ ", | |
| "ββββββ ", | |
| "βββ ", | |
| "βββ " | |
| ], | |
| 'G': [ | |
| " βββββββ ", | |
| "ββββββββ ", | |
| "βββ ββββ", | |
| "βββ βββ", | |
| "βββββββββ", | |
| " βββββββ " | |
| ], | |
| 'H': [ | |
| "βββ βββ", | |
| "βββ βββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "βββ βββ", | |
| "βββ βββ" | |
| ], | |
| 'I': [ | |
| "βββ", | |
| "βββ", | |
| "βββ", | |
| "βββ", | |
| "βββ", | |
| "βββ" | |
| ], | |
| 'J': [ | |
| " βββ", | |
| " βββ", | |
| " βββ", | |
| "ββ βββ", | |
| "ββββββββ", | |
| " ββββββ " | |
| ], | |
| 'K': [ | |
| "βββ βββ", | |
| "βββ ββββ", | |
| "βββββββ ", | |
| "βββββββ ", | |
| "βββ βββ", | |
| "βββ βββ" | |
| ], | |
| 'L': [ | |
| "βββ ", | |
| "βββ ", | |
| "βββ ", | |
| "βββ ", | |
| "ββββββββ", | |
| "ββββββββ" | |
| ], | |
| 'M': [ | |
| "ββββ ββββ", | |
| "βββββ βββββ", | |
| "βββββββββββ", | |
| "βββββββββββ", | |
| "βββ βββ βββ", | |
| "βββ βββ" | |
| ], | |
| 'N': [ | |
| "ββββ βββ", | |
| "βββββ βββ", | |
| "ββββββ βββ", | |
| "ββββββββββ", | |
| "βββ ββββββ", | |
| "βββ βββββ" | |
| ], | |
| 'O': [ | |
| " βββββββ ", | |
| "βββββββββ", | |
| "βββ βββ", | |
| "βββ βββ", | |
| "βββββββββ", | |
| " βββββββ " | |
| ], | |
| 'P': [ | |
| "βββββββ ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "βββββββ ", | |
| "βββ ", | |
| "βββ " | |
| ], | |
| 'Q': [ | |
| " βββββββ ", | |
| "βββββββββ", | |
| "βββ βββ", | |
| "βββββ βββ", | |
| "βββββββββ", | |
| " βββββββ " | |
| ], | |
| 'R': [ | |
| "βββββββ ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "βββ βββ", | |
| "βββ βββ" | |
| ], | |
| 'S': [ | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ" | |
| ], | |
| 'T': [ | |
| "βββββββββ", | |
| "βββββββββ", | |
| " βββ ", | |
| " βββ ", | |
| " βββ ", | |
| " βββ " | |
| ], | |
| 'U': [ | |
| "βββ βββ", | |
| "βββ βββ", | |
| "βββ βββ", | |
| "βββ βββ", | |
| "βββββββββ", | |
| " βββββββ " | |
| ], | |
| 'V': [ | |
| "βββ βββ", | |
| "βββ βββ", | |
| "βββ βββ", | |
| "ββββ ββββ", | |
| " βββββββ ", | |
| " βββββ " | |
| ], | |
| 'W': [ | |
| "βββ βββ", | |
| "βββ βββ", | |
| "βββ ββ βββ", | |
| "ββββββββββ", | |
| "ββββββββββ", | |
| " ββββββββ " | |
| ], | |
| 'X': [ | |
| "βββ βββ", | |
| "ββββββββ", | |
| " ββββββ ", | |
| " ββββββ ", | |
| "ββββ βββ", | |
| "βββ βββ" | |
| ], | |
| 'Y': [ | |
| "βββ βββ", | |
| "ββββ ββββ", | |
| " βββββββ ", | |
| " βββββ ", | |
| " βββ ", | |
| " βββ " | |
| ], | |
| 'Z': [ | |
| "ββββββββ", | |
| "βββββββββ", | |
| " ββββ ", | |
| " ββββ ", | |
| "ββββββββ", | |
| "ββββββββ" | |
| ], | |
| '0': [ | |
| " βββββββ ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| " βββββββ " | |
| ], | |
| '1': [ | |
| " βββ", | |
| "ββββ", | |
| "ββββ", | |
| " βββ", | |
| " βββ", | |
| " βββ" | |
| ], | |
| '2': [ | |
| "βββββββ ", | |
| "ββββββββ", | |
| " βββββββ", | |
| "βββββββ ", | |
| "ββββββββ", | |
| "ββββββββ" | |
| ], | |
| '3': [ | |
| "βββββββ ", | |
| "ββββββββ", | |
| " βββββββ", | |
| " βββββββ", | |
| "ββββββββ", | |
| "βββββββ " | |
| ], | |
| '4': [ | |
| "βββ βββ", | |
| "βββ βββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| " βββ", | |
| " βββ" | |
| ], | |
| '5': [ | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ" | |
| ], | |
| '6': [ | |
| " βββββββ ", | |
| "ββββββββ ", | |
| "ββββββββ ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| " βββββββ " | |
| ], | |
| '7': [ | |
| "ββββββββ", | |
| "ββββββββ", | |
| " ββββ", | |
| " ββββ ", | |
| " βββ ", | |
| " βββ " | |
| ], | |
| '8': [ | |
| " βββββββ ", | |
| "βββββββββ", | |
| "ββββββββ ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| " βββββββ " | |
| ], | |
| '9': [ | |
| " βββββββ ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| " ββββββββ", | |
| " βββββββ ", | |
| " ββββββ " | |
| ], | |
| ' ': [ | |
| " ", | |
| " ", | |
| " ", | |
| " ", | |
| " ", | |
| " " | |
| ], | |
| '!': [ | |
| "βββ", | |
| "βββ", | |
| "βββ", | |
| "βββ", | |
| "βββ", | |
| "βββ" | |
| ], | |
| '?': [ | |
| "βββββββ ", | |
| "ββββββββ", | |
| " ββββββ", | |
| " βββββ ", | |
| " βββ ", | |
| " βββ " | |
| ], | |
| '.': [ | |
| " ", | |
| " ", | |
| " ", | |
| " ", | |
| "βββ", | |
| "βββ" | |
| ], | |
| ',': [ | |
| " ", | |
| " ", | |
| " ", | |
| " ", | |
| "βββ", | |
| "βββ" | |
| ], | |
| '-': [ | |
| " ", | |
| " ", | |
| "ββββββ", | |
| "ββββββ", | |
| " ", | |
| " " | |
| ], | |
| '_': [ | |
| " ", | |
| " ", | |
| " ", | |
| " ", | |
| "ββββββββ", | |
| "ββββββββ" | |
| ], | |
| '/': [ | |
| " βββ", | |
| " ββββ", | |
| " ββββ ", | |
| " ββββ ", | |
| "ββββ ", | |
| "βββ " | |
| ], | |
| '\\': [ | |
| "βββ ", | |
| "ββββ ", | |
| " ββββ ", | |
| " ββββ ", | |
| " ββββ", | |
| " βββ" | |
| ], | |
| '(': [ | |
| " βββ", | |
| "ββββ", | |
| "βββ ", | |
| "βββ ", | |
| "ββββ", | |
| " βββ" | |
| ], | |
| ')': [ | |
| "βββ ", | |
| "ββββ", | |
| " βββ", | |
| " βββ", | |
| "ββββ", | |
| "βββ " | |
| ], | |
| ':': [ | |
| " ", | |
| "βββ", | |
| "βββ", | |
| "βββ", | |
| "βββ", | |
| " " | |
| ], | |
| ';': [ | |
| " ", | |
| "βββ", | |
| "βββ", | |
| "βββ", | |
| "βββ", | |
| " " | |
| ], | |
| '@': [ | |
| " βββββββ ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| " βββββββ " | |
| ], | |
| '#': [ | |
| " βββ βββ ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| "βββββββββ", | |
| " βββ βββ " | |
| ], | |
| '$': [ | |
| "βββββββΒ·", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ", | |
| "ββββββββ" | |
| ], | |
| '%': [ | |
| "βββ βββ", | |
| "βββββββ", | |
| " ββββ ", | |
| " ββββ ", | |
| "βββββββ", | |
| "βββ βββ" | |
| ], | |
| '&': [ | |
| " βββ ", | |
| "ββββ ", | |
| "βββββββββ", | |
| "ββββββββ ", | |
| " ββββββββ", | |
| " βββββββ" | |
| ], | |
| '*': [ | |
| "β ββββ", | |
| " βββββ", | |
| "ββββββ", | |
| " βββ ", | |
| " ", | |
| " " | |
| ], | |
| '+': [ | |
| " ", | |
| " βββ ", | |
| "βββββββ", | |
| "βββββββ", | |
| " βββ ", | |
| " " | |
| ], | |
| '=': [ | |
| " ", | |
| "ββββββ", | |
| "ββββββ", | |
| "ββββββ", | |
| "ββββββ", | |
| " " | |
| ], | |
| } | |
| # Convert text to uppercase and get characters | |
| text = str(x).upper() | |
| lines = ["", "", "", "", "", ""] | |
| for char in text: | |
| if char in block_font: | |
| char_lines = block_font[char] | |
| for i in range(6): | |
| lines[i] += char_lines[i] | |
| else: | |
| # For unsupported characters, use a placeholder | |
| for i in range(6): | |
| lines[i] += " " | |
| # Apply color | |
| text_color = colors.get(color, colors['reset']) | |
| # Handle surround for big text | |
| if suround: | |
| border_color = colors.get(surround_color, colors['reset']) | |
| # Calculate max width of the big text | |
| max_width = max(len(line) for line in lines) | |
| # Handle surround_char | |
| if surround_char: | |
| # If multiple chars, alternate them | |
| if len(surround_char) > 1: | |
| chars = list(surround_char) | |
| border_top = "" | |
| border_bottom = "" | |
| for i in range(max_width + 4): | |
| border_top += chars[i % len(chars)] | |
| border_bottom += chars[i % len(chars)] | |
| left_char = chars[0] | |
| right_char = chars[1 % len(chars)] | |
| else: | |
| # Single char | |
| border_top = surround_char * (max_width + 4) | |
| border_bottom = surround_char * (max_width + 4) | |
| left_char = surround_char | |
| right_char = surround_char | |
| else: | |
| # Default box drawing characters | |
| border_top = "β" + "β" * (max_width + 2) + "β" | |
| border_bottom = "β" + "β" * (max_width + 2) + "β" | |
| left_char = "β" | |
| right_char = "β" | |
| # Print with border | |
| _output(border_top, surround_color) | |
| # Join all lines and output as a single block for proper alignment | |
| ascii_block = '\n'.join(f"{left_char} {line.ljust(max_width)} {right_char}" for line in lines) | |
| _output(ascii_block, color) | |
| _output(border_bottom, surround_color) | |
| else: | |
| # Print without border - join all lines as single block | |
| ascii_block = '\n'.join(lines) | |
| _output(ascii_block, color) | |
| for i in range(margin): | |
| _output("", color) | |
| def inp(prompt, color="red", margin=1): | |
| """Get input from the user, using GUI terminal if available.""" | |
| global _input_result | |
| for i in range(margin): | |
| _output("", color) | |
| if _terminal is not None: | |
| # Use the GUI terminal's input system | |
| _input_event.clear() | |
| _input_result = None | |
| def on_input(user_input): | |
| global _input_result | |
| _input_result = user_input | |
| _input_event.set() | |
| _terminal.set_input_callback(on_input, prompt, color) | |
| _input_event.wait() | |
| for i in range(margin): | |
| _output("", color) | |
| return _input_result | |
| else: | |
| # Fallback to standard input | |
| text_color = colors.get(color, colors['reset']) | |
| user_input = input(f"{text_color}{prompt}{colors['reset']}") | |
| for i in range(margin): | |
| print() | |
| return user_input | |