import keyboard import time import os def put_cursor(line, col): return f'\033[{int(line)};{int(col)}f' class Menu: def __init__(self, start_line): self.start_line = start_line self.options = [ 'test 1', 'test 2', 'test 3' ] self.selected = 0 self.highlight = '\033[38;5;0m\033[48;5;2m' self.regular = '\033[38;5;2m' def next(self): self.selected += 1 if self.selected > len(self.options) - 1: self.selected = 0 def prev(self): self.selected -= 1 if self.selected < 0: self.selected = len(self.options) - 1 def draw(self): term_size = os.get_terminal_size() current_line = self.start_line for i, option in enumerate(self.options): print(f'{put_cursor(self.start_line + i, 0)}\033[2;0;0m', end='') print(' ' * term_size.columns, end='\r') if i == self.selected: print(f'{self.highlight}{option}') else: print(f'{self.regular}{option}') def main(): selected_item = 0 menu = Menu(10) menu.draw() while True: pressed_key = keyboard.read_event() if pressed_key.event_type == 'down': if pressed_key.name == 'j': menu.next() elif pressed_key.name == 'k': menu.prev() menu.draw() if __name__ == '__main__': main()