Skip to content

tui

dandy.cli.tui.tui

tui_terminal = Terminal() module-attribute

tui = Tui() module-attribute

Tui

Source code in dandy/cli/tui/tui.py
def __init__(self):
    self.term = tui_terminal
    self.printer = Printer(tui_terminal)

    self._buffer = []
    self._action_commands = []
    self._last_autocomplete_text = ''
    self._match_index = 0
    self._current_matches = []
    self._hint_lines = 0
    self._input_prefix = self.term.bold_blue('🎩 ')
    self._processing_input = False

term = tui_terminal instance-attribute

printer = Printer(tui_terminal) instance-attribute

clear

Source code in dandy/cli/tui/tui.py
def clear(self):
    print(self.term.clear)

setup_autocomplete

Source code in dandy/cli/tui/tui.py
def setup_autocomplete(self, action_commands: list):
    self._action_commands = action_commands

get_user_input

Source code in dandy/cli/tui/tui.py
def get_user_input(self, question: str | None = None) -> str:
    if question:
        self._input_prefix = self.term.purple('⦿ ')
        self.printer.indented_event(
            text=f'{self.term.purple}Question: {self.term.normal}{question}',
            indent=1
        )
        self.printer.purple_divider()

    else:
        self._input_prefix = self.term.bold_blue('⦿ ')
        self.printer.blue_divider()

    self._buffer = []
    self._match_index = 0
    self._current_matches = []
    self._hint_lines = 0

    with self.term.cbreak():
        sys.stdout.write(self._input_prefix)
        sys.stdout.flush()

        self._processing_input = True

        while self._processing_input:
            key = self.term.inkey(timeout=None)

            if key.name == 'KEY_ENTER' or key in {'\n', '\r'}:
                self._process_enter_key()

            elif key.name == 'KEY_BACKSPACE' or key in {'\x7f', '\x08'}:
                self._process_backspace_key()

            elif key.name == 'KEY_TAB' or key == '\t':
                self._process_tab_key()

            elif not key.is_sequence:
                self._process_key(key)

    if question:
        self.printer.divider()

    return ''.join(self._buffer)