curses 与 Ctrl+Enter 和其他具有重叠转义序列的击键有何不同?

How curses differs Enter from Ctrl+Enter and other key strokes with overlapping escape sequences?

据我所知,在 Konsole 中,CTRL+ENTERENTER 看起来都像 [=21] 的 stdin 中的字节 13 =]宁应用程序。但是当我 运行 mc 显然使用 ncurses lib 时,按 CTRL+ENTER 会将文件名插入命令行,而 ENTER 打开文件。它是如何实施的?我试图查看来源,但它们对我来说完全不可读。

mc(午夜指挥官)不将 ncurses 用于 input,但可以将其用于 output。本质上它是在寻找特定的字符序列。

mc 很少使用 terminfo 数据库,主要只是检查 xterm 鼠标和交替屏幕功能。

原则上,它可以从 ncurses terminfo 数据库中读取用户定义的功能(参见示例 ncurses trapping extended keys (Control-left, Shift-Function etc)),但它 不是.

由于您正在查看源代码,请参阅 lib/tty/key.cmc 的源代码,其中包含 mc 用作一组预定义键的表。例如,当 mc 配置为使用俚语时,这样做 "works",尽管它有一个缺点,即它是硬编码的,实际上可能与您的终端不匹配。

但是 - 正如我所说,mc 有自己的 输入 。在 key.c 的更下方,您可能会在 get_modifier() ifdef'd with HAVE_TEXTMODE_X11_SUPPORT 中看到一个块。里面是一个最终转到 XQueryPointer 的调用,mc 用来查找修改键的当前状态——如果它在 X 显示中恰好是 运行,并且如果功能已启用。你可能已经看到了。