【问题标题】:readline: remapping \C-m (Ctrl+m)readline: 重新映射 \C-m (Ctrl+m)
【发布时间】:2016-04-21 19:49:50
【问题描述】:

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

"\C-m": vi-forward-word

问题似乎是存在一个默认绑定

"\C-m": accept-line

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

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

KP_Enter  ^M      ESC O M

和 rxvt-unicode.termcap 搭配

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

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

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

"\r": accept-line

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

干杯!

德索

【问题讨论】:

    标签: readline libreadline rxvt


    【解决方案1】:

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

    线

    KP_Enter  ^M      ESC O M
    

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

    【讨论】:

    • 谢谢,托马斯。我现在已经解决了这个问题。可以在here 找到有关相关组件交互的最佳解释(以及实际解决方案)。简短版本:我用 xterm 替换了 urxvt。后者似乎更具可配置性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多