readline:重新映射\ C-m(Ctrl + m)

时间:2016-01-16 06:34:27

标签: readline libreadline rxvt

我希望在〜/ .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 with

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

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

暂且不说:我添加的那一刻

"\r": accept-line
之后" \ C-m"绑定我回到原来的行为(即返回工作)。如果我在" \ C-m"之前添加该行。返回仍然没有按预期工作。

干杯!

DESO

1 个答案:

答案 0 :(得分:0)

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

该行

KP_Enter  ^M      ESC O M

与此无关:它指的是数字小键盘上的 Enter 键,而不是主键盘上的 Enter 键。