| 123456789101112131415161718192021222324252627282930313233343536373839 |
- import os
- from types import SimpleNamespace
- def new(original, max_cols):
- write = original.write
- flush = original.flush
- try:
- _fd = original.fileno()
- except OSError:
- _fd = 1
- def cols():
- try:
- return os.get_terminal_size(_fd)[0]
- except (ValueError, OSError):
- # original is closed, detached, or not a terminal, or
- # os.get_terminal_size() is unsupported
- return max_cols
- def _ansi_escape_sequence(code, param=''):
- def inner(_available=None): # because of jupyter.
- write(inner.sequence)
- inner.sequence = f'\x1b[{param}{code}'
- return inner
- def factory_cursor_up(num):
- return _ansi_escape_sequence('A', num) # sends cursor up: CSI {x}A.
- clear_line = _ansi_escape_sequence('2K\r') # clears the entire line: CSI n K -> with n=2.
- clear_end_line = _ansi_escape_sequence('K') # clears line from cursor: CSI K.
- clear_end_screen = _ansi_escape_sequence('J') # clears screen from cursor: CSI J.
- hide_cursor = _ansi_escape_sequence('?25l') # hides the cursor: CSI ? 25 l.
- show_cursor = _ansi_escape_sequence('?25h') # shows the cursor: CSI ? 25 h.
- carriage_return = '\r'
- return SimpleNamespace(**locals())
|