2

我有一个程序,我只需要读取 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清除屏幕并更改换行模式(我读到newtermncurses的功能可以用于它,但它不是由Python实现的),或者
  • 清除后恢复原始屏幕并手动恢复 CRLF 行为等的任何方式,
  • 在 Linux 中持续读取特殊键的任何其他简单方法?
4

1 回答 1

2

(移自评论)

也许看看https://bitbucket.org/pypy/pyrepl。它是基于诅咒的,但不会清除屏幕。应用程序pythonipythoni1提供一个不使用的 Python 提示符readline,但提供了一个类似的界面,还有一些额外的功能,例如多行编辑(以防我们尝试键入多行命令)。

回答您的最新评论:箭头键对我有用,pythoni并且pythoni1...

于 2014-09-30T23:42:15.590 回答