NCurses 和 ESC、ALT 键

Posted

技术标签:

【中文标题】NCurses 和 ESC、ALT 键【英文标题】:NCurses and ESC,ALT keys 【发布时间】:2011-05-12 11:41:26 【问题描述】:

NCurses 有问题...我需要处理所有键,例如 EscAlt+F kbd> 等 问题是代码相似......即:


Esc - 27


Alt+A - 27 65


例如,Alt+[key] 组合的双重代码 类似于Esc 键... 任何想法如何处理?

【问题讨论】:

【参考方案1】:

这里是python的一个例子:

key = self.screen.getch()
if key == ord('q'): # quit
    go = False
elif key == 27: # Esc or Alt
    # Don't wait for another key
    # If it was Alt then curses has already sent the other key
    # otherwise -1 is sent (Escape)
    self.screen.nodelay(True)
    n = self.screen.getch()
    if n == -1:
        # Escape was pressed
        go = False
    # Return to delay
    self.screen.nodelay(False)

【讨论】:

【参考方案2】:

解决:

    使用 noecho 或超时模式 检查 27(ALTESC) 代码...如果通过: 尝试读取另一个代码 如果另一个代码是 ERR 则.. 你有 ESC 键在其他方式你有 ALT+另一个代码

【讨论】:

如果用户点击ESC,然后像[这样的另一个键,一个接一个非常快,我们的代码不能看到两个键都通过然后它会看起来不像ESC?因为我真的不知道终端如何在我第二次调用收集下一个我试图确定是否只是ESC 被击中的字符时知道这一点?! @AlexisWilke 没错。你无法确定他们是否真的击中了 Escape,然后[ 真的很快。但是,您通常可以使用如此短的超时,以至于没有人可以合理地击中它,并且大多数转义序列都足够长,以至于很难完美地击中每个键,例如25ms 彼此。另一方面,终端可能会比这更快。【参考方案3】:

你可以使用curses.ascii.ESC

https://docs.python.org/3/library/curses.ascii.html#module-curses.ascii https://github.com/python/cpython/blob/master/Lib/curses/ascii.py

【讨论】:

以上是关于NCurses 和 ESC、ALT 键的主要内容,如果未能解决你的问题,请参考以下文章

在 ncurses 中使用数字键盘键

简单的 ncurses 应用程序对箭头键没有反应

C指针原理(29)-Ncurses-文本终端的图形

Ncurses入门-安装与使用

Ncurses入门- 使用键盘

C指针原理(34)-Ncurses-文本终端的图形