48 lines
961 B
Python
48 lines
961 B
Python
import curses
|
|
import signal
|
|
import os, sys
|
|
from sys import argv, exit
|
|
|
|
def handler(signum, frame):
|
|
curses.endwin()
|
|
exit(1)
|
|
|
|
init = None
|
|
driver = None
|
|
|
|
def curses_wrapper(screen):
|
|
curses.noecho()
|
|
curses.cbreak()
|
|
screen.keypad(True)
|
|
|
|
init(screen)
|
|
|
|
while True:
|
|
result = driver(screen)
|
|
if result != None:
|
|
return result
|
|
|
|
def widget_wrapper(p_init, p_driver):
|
|
signal.signal(signal.SIGINT, handler)
|
|
|
|
global init, driver
|
|
init = p_init
|
|
driver = p_driver
|
|
|
|
with open('/dev/tty', 'rb') as inf, open('/dev/tty', 'wb') as outf:
|
|
saved_stdin = os.dup(0)
|
|
saved_stdout = os.dup(1)
|
|
saved_stderr = os.dup(2)
|
|
|
|
os.dup2(inf.fileno(), 0)
|
|
os.dup2(outf.fileno(), 1)
|
|
os.dup2(outf.fileno(), 2)
|
|
|
|
result = curses.wrapper(curses_wrapper)
|
|
|
|
os.dup2(saved_stdin, 0)
|
|
os.dup2(saved_stdout, 1)
|
|
os.dup2(saved_stderr, 2)
|
|
|
|
return result
|