如何将C- [真正绑定(这次是真正的绑定)


11

有什么方法可以绑定C-[到某个东西,而不会M-弄乱所有(元)绑定吗?

这不是第一次出现这个问题。不幸的是,上一个线程中提供的唯一解决方案是a)特定于Linux,b)需要与Emacs无关的外部工具(同样是特定于Linux)。同样,我本可以在OS X上使用诸如Karabiner之类的东西C-[在Emacs 掌握之前盗取序列,但这既笨重又昂贵。

鉴于这是Emacs的是坚持翻译C-[ESCC-iTAB,可能别人我非常想打破这些关系,并获得宝贵的键序列回来。最近,我全力以赴地解决了这个问题,并指责了安静无辜的smartparens模式。

这里涉及到一个可能的解决方案,function-key-mapkey-translation-map这里进行了讨论,但可惜它要么不再起作用,要么首先就不起作用(或者我做错了什么)。我认为这是朝正确的方向发展。


3
Emacs不坚持“翻译C-[ESC”。两者是同一回事。同样,C-iTAB相同 ASCII控制代码的不同名称。
Drew

2
@Drew一点也不明显的是,带有控制键的组合键必须映射到GUI应用程序中的ASCII控制代码(只有32个)。(或者,即使在xterm中,也很糟糕,在很多情况下,它都具有ModifyOtherKeys模式以发送唯一的转义序列,尽管我不确定具体如何)
Random832

3
@ Random832:您正确区分按键字符是正确的。对于编辑者来说,将键序列 C-[(按键Ctrl和hit [)映射到C-[控制字符(又称为ESC字符)在逻辑上和直接性上是有些逻辑和直接的,但是不,这对设计编辑器的人不是必须的。是的,Emacs做到了。C-[ESC是相同的字符,但是键Ctrl+ [Esc不需要映射到任何特定字符。
德鲁

Answers:


8

根据我自己的配置改编:

(define-key input-decode-map [?\C-\[] (kbd "<C-[>"))
(global-set-key (kbd "<C-[>") 'butterfly)

显然,这仅在GUI中有效。

编辑:请注意,这input-decode-map是本地终端,这意味着如果您使用emacsclient,将无法对其进行修改,但如果您使用,则会对其进行修改emacs。通过将其包装在对框架进行操作的命令中并将其添加到after-make-frame-functions挂钩中,我已经解决了配置中的问题。


谢谢你,这看起来合法!我想知道是否有一种方法可以防止Emacs将Meta和ESC视为同一事物?我也想知道我是否只是在弄乱一些Emacs术语,而不是在这里直视
zeRusski

1
这是一个不同的问题,请为此打开一个新的问题。
wasamasa

有趣的是<C-i>,像您在配置中建议的那样,<C-[>绑定并绑定到全局映射,TABESC在每次映射到em时,都会使Emacs崩溃:
zeRusski 2015年

1
那么,考虑到你恰巧是谁在流传的家伙一个bug于字母“J”的输入掌舵崩溃,我怪你的Emacs打造成为crashy和会建议你去尝试一个不同的OS X.
wasamasa

相信我,我确实尝试了许多构建。我将不得不忍受的另一个谜。我会管理-)谢谢您的解决方案
zeRusski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.