我该如何使Emacs识别M-C (meta-shift-c),而不是将其转换为m-c?
目前,当我执行 C-h k M-C
时,输出如下:
M-c (从M-C翻译过来) 运行capitalize-word命令。
我该如何让它不将M-C转换为M-c?
只需在您的按键绑定中使用修饰键 S
(Shift)。例如:
(global-set-key "\M-\S-c" 'foobar)
如果没有任何东西显式地绑定到移位键,那么Emacs会自动将其转换为未按下Shift键的键。
来自Elisp手册,节点键序列输入(Key Sequence Input)
:
如果输入字符是大写字母(或带有Shift修饰符),并且没有绑定键,但其小写形式已经有了绑定,则
read-key-sequence
将字符转换为小写。注意,lookup-key
不会以这种方式执行大小写转换。
M-C
的绑定。当没有为M-C
找到绑定时,将M-C
翻译为M-c
作为后备。
m-c
和M-C
,并将后者识别为m-s-c
。我现在知道了,在 GNU Emacs 中,你必须单独指定 shift 修饰键。 - incandescentman(define-key my-keys-minor-mode-map (kbd "M-S-c") 'enable-auto-capitalize-mode)
和(define-key my-keys-minor-mode-map (kbd "\M-\S-c") 'enable-auto-capitalize-mode)
。 - incandescentmankbd
,请不要使用\M
等语法:kbd
期望您在使用C-h k
时看到的相同语法。但似乎您必须使用字符串或向量语法,而不是kbd
。因此,请尝试(define-key mymap "\M-\S-c" 'mycmd)
或(define-key mymap [(meta shift ?c)] 'mycmd)
。或者(define-key mymap (kbd "M-C") 'mycmd)
。 - DrewM-C
,但与M-S-c
相同。) - DrewM-C
添加绑定”。我也说了同样的话:答案是添加这样的绑定,我展示了这意味着什么(如何做到这一点),并指向了Emacs文档,解释了发生了什么以及为什么OP的解决方案尝试失败了。你认为“更简单的方法”有什么我没注意到的地方吗? - Drew