| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | """ |
| | A utility for showing and hiding the terminal cursor on Windows and Linux, based on https://github.com/bchao1/bullet |
| | """ |
| |
|
| | import os |
| | import sys |
| | from contextlib import contextmanager |
| |
|
| |
|
| | |
| | if os.name == "nt": |
| | import ctypes |
| | import msvcrt |
| |
|
| | class CursorInfo(ctypes.Structure): |
| | |
| | _fields_ = [("size", ctypes.c_int), ("visible", ctypes.c_byte)] |
| |
|
| |
|
| | def hide_cursor(): |
| | if os.name == "nt": |
| | ci = CursorInfo() |
| | handle = ctypes.windll.kernel32.GetStdHandle(-11) |
| | ctypes.windll.kernel32.GetConsoleCursorInfo(handle, ctypes.byref(ci)) |
| | ci.visible = False |
| | ctypes.windll.kernel32.SetConsoleCursorInfo(handle, ctypes.byref(ci)) |
| | elif os.name == "posix": |
| | sys.stdout.write("\033[?25l") |
| | sys.stdout.flush() |
| |
|
| |
|
| | def show_cursor(): |
| | if os.name == "nt": |
| | ci = CursorInfo() |
| | handle = ctypes.windll.kernel32.GetStdHandle(-11) |
| | ctypes.windll.kernel32.GetConsoleCursorInfo(handle, ctypes.byref(ci)) |
| | ci.visible = True |
| | ctypes.windll.kernel32.SetConsoleCursorInfo(handle, ctypes.byref(ci)) |
| | elif os.name == "posix": |
| | sys.stdout.write("\033[?25h") |
| | sys.stdout.flush() |
| |
|
| |
|
| | @contextmanager |
| | def hide(): |
| | "Context manager to hide the terminal cursor" |
| | try: |
| | hide_cursor() |
| | yield |
| | finally: |
| | show_cursor() |
| |
|