【发布时间】:2014-11-24 15:43:49
【问题描述】:
我有一个程序,我只需要读取 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 和 ↑ 一致,在所有终端上,因此它将是 PITA
所以有什么办法
- 避免用curses清除屏幕和改变换行模式(我读到可以使用ncurses的函数
newterm,但它不是Python实现的),或 - 清除清除后恢复原始屏幕并手动恢复CRLF行为等的任何方式,或
- 还有其他在 Linux 中持续读取特殊键的简单方法吗?
【问题讨论】:
-
也许看看
https://bitbucket.org/pypy/pyrepl。它是基于诅咒的,但不会清除屏幕。 -
看起来很有趣,但是如何在这里挂钩不是很明显,我应该实例化 UnixConsole 吗?
-
啊,prepare() 和 get_event()。现在我该如何将换行符改回 CRLF? :D 你想把它变成一个答案吗;)
-
除非它没有解码箭头键:(
标签: python python-3.x terminal ncurses python-curses