如何使Emacs键绑定识别大写字母?

11

我该如何使Emacs识别M-C (meta-shift-c),而不是将其转换为m-c?

目前,当我执行 C-h k M-C 时,输出如下: M-c (从M-C翻译过来) 运行capitalize-word命令。

我该如何让它不将M-C转换为M-c?

2个回答

12

只需在您的按键绑定中使用修饰键 S (Shift)。例如:

(global-set-key "\M-\S-c" 'foobar)

如果没有任何东西显式地绑定到移位键,那么Emacs会自动将其转换为未按下Shift键的键。

来自Elisp手册,节点键序列输入(Key Sequence Input):

如果输入字符是大写字母(或带有Shift修饰符),并且没有绑定键,但其小写形式已经有了绑定,则read-key-sequence将字符转换为小写。注意,lookup-key不会以这种方式执行大小写转换。


啊,我懂了。我之前有点迷惑是因为 Aquamacs 自动区分 m-cM-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) - incandescentman
1
如果您使用 kbd,请不要使用 \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) - Drew
FYI - 9个月后,您取消了这个答案,转而接受了Stefan的答案。那是相同的答案。(他写的是M-C,但与M-S-c相同。) - Drew
那种方式似乎更简单,不是吗? - incandescentman
@PeterSalazar:什么更简单?那个“更简单的方法”是完全相同的答案,只是Stefan没有详细说明-他没有展示如何“为M-C添加绑定”。我也说了同样的话:答案是添加这样的绑定,我展示了这意味着什么(如何做到这一点),并指向了Emacs文档,解释了发生了什么以及为什么OP的解决方案尝试失败了。你认为“更简单的方法”有什么我没注意到的地方吗? - Drew

4
为了让Emacs区分这两个按键非常容易:添加一个M-C的绑定。当没有为M-C找到绑定时,将M-C翻译为M-c作为后备。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接