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)