def show(self): import keyboard self._print_menu() ansi.save_position() ansi.hide_cursor() try: for key in keyboard.keyboard_listener(): stop = self._on_key(key) if stop: return self.get_result() self._goto_top() self._print_menu() finally: self._clear_menu() ansi.show_cursor()
def _on_key(self, key): prevent = False if len(key) == 1 and 32 < ord(key) <= 127: if not self.text: self.text = [] self.text.append(key) self._refilter() elif self.text and key == "backspace": del self.text[-1] self._refilter() elif self.text is not None and key == "esc": self.text = None ansi.hide_cursor() prevent = True self._refilter() if not prevent: return self.parent._on_key(key)
def show(self): import keyboard ansi.hide_cursor() self._print_menu(rewind=False) try: for key in keyboard.keyboard_listener(): if key == "enter": self._clear_menu() ansi.write(self.options[self.cursor]) return self.options[self.cursor] elif key == "esc": self._clear_menu() ansi.write("<esc>") return None elif key == "left": self.cursor = max(0, self.cursor - 1) elif key == "right": self.cursor = min(len(self.options) - 1, self.cursor + 1) self._print_menu(rewind=True) finally: ansi.show_cursor() ansi.write("\n")