96 lines
2.1 KiB
Python
96 lines
2.1 KiB
Python
|
#!/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))
|