我有一个程序,我只需要读取 linux 终端(xterm 和控制台)中的特殊键。目前我正在使用curses
来做这件事(尽管我绝对不需要诅咒其他任何东西),它完美地工作除了一个令人讨厌的地方:我不希望诅咒清除屏幕并更改 CRLF 模式。
也就是说,这段代码可以做到:
stdscr = curses.initscr()
curses.cbreak()
curses.noecho()
stdscr.keypad(1)
while True:
c = stdscr.getch()
if c == curses.KEY_UP:
scroll_up()
elif c == curses.KEY_DOWN:
scroll_down()
但复杂的是它会清除屏幕并且看不到终端上以前的内容;后台进程的所有输出也将仅将换行符转换为换行符。
我知道我可以自己将终端变成未煮熟的模式,在ESC
字符后延迟等等,但我希望这个程序可以使用特殊键,例如F1,Home和↑</kbd> consistently, on all terminals, and as such it would be PITA
因此有什么办法可以
- 避免使用curses清除屏幕并更改换行模式(我读到
newterm
ncurses的功能可以用于它,但它不是由Python实现的),或者 - 清除后恢复原始屏幕并手动恢复 CRLF 行为等的任何方式,或
- 在 Linux 中持续读取特殊键的任何其他简单方法?