【发布时间】:2016-12-19 10:41:47
【问题描述】:
我正在写一个*nix shell,我想支持Ctrl-Enter的组合键。我使用的库是 GNU readline。
我已经花了几个小时,但找不到路。
我可以绑定Enter成功,如:
========= ~/.inputrc ===============
"\C-M": "sdf"
======================================
当我按下 Enter 时,我得到了“sdf”的回显,正如预期的那样。
我也可以绑定Esc,Enter成功(注意,这里是key serial,不是组合),比如:
========= ~/.inputrc ===============
"\e\C-M": "sdf"
======================================
当我按 Esc 然后按 Enter 时,“sdf”按预期回显。
但是,以下行不能产生有效的 Ctrl-Enter 组合:
========= ~/.inputrc ===============
"\C\C-M": "sdf"
======================================
而且,"\C-\C-M" 也不起作用。
这里有两个相关的问题:
How to bind Ctrl-Enter in fish?
谁能帮帮我?
【问题讨论】:
-
第二个链接问题中的答案应该告诉您这实际上是不可能的。
-
Esc 和Control 的区别在于
Esc可以在下一个键之前按下和释放。\C-M有效,因为大多数终端在您按 Enter 或 Control-m 时会生成 ASCII 13。您需要同时按住控制键和另一个键,它才有意义;按住两次是什么意思? -
"按住两次是什么意思?"
-
“按住两次是什么意思?”对不起,我在哪里表示,请原谅我的英语不好。我或多或少知道你的意思。但是奇怪的是zsh支持Alt+Enter,还有一些*nix shell支持Shift+Enter(google的时候看到的)。 @chepner
-
shell 对键盘一无所知;它只是在其输入文件上获取一系列字节。您的终端仿真器会生成该系列字节,其中一件事是在您按下 Enter 键时写入 ASCII 13。因此,
Control-Enter不是您可以用单个字节表示的。