#!/usr/bin/env python3 from sys import argv import curses from wrapper import widget_wrapper list_starting_arg = 1 for i, arg in enumerate(argv[1:]): if arg == '--': if i + 2 == len(argv): print("Empty list given") exit(-1) list_starting_arg = i + 2 break else: print("List starting -- wasn't given") exit(-1) desc_arg = '' result_arg = 'index' # todo: Generalize and simplify over descriptor object. for arg in argv[1:]: if arg.startswith('--'): if arg == '--': break elif arg.startswith('--result='): result_arg = arg[arg.find('=') + 1:] if result_arg not in ['index', 'line']: print("Invalid --result=") exit(-1) elif arg.startswith('--desc='): desc_arg = arg[arg.find('=') + 1:] else: print("Unknown parameter ", arg) exit(-1) else: print("Unknown parameter ", arg) exit(-1) current = 0 lines = argv[list_starting_arg:] list_box = None def init(screen): global list_box curses.start_color() curses.curs_set(0) y = 0 if desc_arg != '': list_box = screen.subwin(y + 1, 0) y += 1 def draw_list_box(): y = 0 list_box.border() y += 1 for i, line in enumerate(lines): list_box.addstr(y, 1, line, curses.A_REVERSE if i == current else curses.A_NORMAL) y += 1 list_box.refresh() def driver(screen): global current y = 0 if desc_arg != '': screen.addstr(y, 0, desc_arg) y += 1 draw_list_box() key = screen.getch() if key == curses.KEY_DOWN: current = (current + 1) % len(lines) elif key == curses.KEY_UP: current = len(lines) - 1 if current == 0 else current - 1 elif key == curses.KEY_ENTER or key == 10 or key == 13: if result_arg == 'index': return str(current) elif result_arg == 'line': return lines[current] screen.refresh() if __name__ == "__main__": print(widget_wrapper(init, driver))