libreadline: remapping C-m (Ctrl+m)



我想在我的~/.inputrc中为\C-m自定义绑定。但是,当我替换它的那一刻,我无法再输入任何命令。例如,

"C-m": vi-forward-word

问题似乎是存在默认绑定

"C-m": accept-line

这本身不是问题,但似乎其他程序(终端?)发送^M(Ctrl-m)来指示回车。在我的设置中,我有urxvt,但我也尝试了xterm,行为是相同的(一旦我在inputrc的末尾添加"\C-m"vi-forward-word绑定,返回就不再有效)。

现在我想改变这一点,我愿意修补任何涉及的程序/库。我的问题是:我应该在哪里寻找相关作品?我检查了阅读行源代码,但找不到任何表明 \C-m 在内部重用的内容。同样,我检查了urxvt,但我在代码中找不到任何将回车映射到\C-m的内容(这将是我对导致此行为的情况的最佳猜测)。有趣的是,有一个 rxvt.7.pod 包含

KP_Enter  ^M      ESC O M

和 rxvt-unicode.termcap 与

...:cr=^M:...

但是,这两个文件似乎主要是文档或至少未安装。我对terminfo文件及其对整个终端工作的参与的了解有些有限。readline 和终端之间的交互也是如此(在我的示例中,readline 是否在 urxvt 之前调用?因此,如果有人有关于在哪里看的指针,我将不胜感激。

顺便说一句:我添加的那一刻

"r": accept-line

"\C-m"绑定之后,我恢复了原始行为(即返回工作)。如果我在"\C-m"之前添加该行,返回仍然无法按预期工作。

干杯!

德索

"r""C-m""C-M"^M都是相同的字符:ASCII CR(回车),通常回车映射到换行符(ASCII LF 换行)。 当然,这种行为是由readline假设的。原则上,使用 readline 库的应用程序可以抑制映射,但仅使用 .inputrc 文件和 shell 可以执行的操作很少。

该行

KP_Enter  ^M      ESC O M

在这里无关紧要:它指的是数字小键盘上的 Enter 键,而不是主键盘上的 Enter 键。

相关内容

  • 没有找到相关文章

最新更新