在不清除屏幕的情况下读取linux终端中的特殊键

时间:2014-09-30 05:48:49

标签: python python-3.x terminal ncurses python-curses

我有一个程序,我只需要在linux终端(xterm和console)中读取特殊键。目前我正在使用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实现的), < / LI>
  • 清除后恢复原始屏幕并手动恢复CRLF行为的任何方法,
  • 在Linux中持续读取特殊键的任何其他简单方法吗?

1 个答案:

答案 0 :(得分:2)

(从评论中移出)

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

要回答您的最新评论:箭头键适用于我pythonipythoni1 ...