【问题标题】:How to create a case-sensitive keybinding in Emacs?如何在 Emacs 中创建区分大小写的键绑定?
【发布时间】:2014-06-12 05:25:27
【问题描述】:

根据Emacs' manual,由于“历史原因”,修饰键不区分大小写。

我可以改变这种行为吗?

我的目标是让M-aM-A 具有不同的含义。

谢谢!

【问题讨论】:

  • 据我所知,如果只有一个键定义,它们只会被视为不区分大小写。如果您创建两个 - 即一个小写键定义和一个大写键定义,则它们不再被视为不区分大小写。使用您寻求的方法是很常见的。例如,(global-set-key [?\s-m] 'minimize)(global-set-key [?\s-M] 'maximize)

标签: emacs elisp key-bindings case-sensitive


【解决方案1】:

根据说明书,

Control 修饰的字母字符始终被视为不区分大小写:Emacs 始终将 C-A 视为 C-a,将 C-B 视为 C-b,等等。其原因是历史性的。

所以你不能像这样定义它们:

(global-set-key (kbd "C-a") 'xxx)
(global-set-key (kbd "C-A") 'yyy)

但是S-可以用于Shift,所以:

(global-set-key (kbd "C-a") 'xxx)
(global-set-key (kbd "C-S-a") 'yyy)  ;; C-A

没问题。和

对于所有其他修饰符,您可以在自定义 Emacs 时使修改后的字母字符区分大小写。例如,您可以让 M-a 和 M-A 运行不同的命令。

所以你可以像这样定义键绑定:

(global-set-key (kbd "M-a") 'xxx)
(global-set-key (kbd "M-A") 'yyy)

【讨论】:

  • 实际上,我经常这样做。这确实意味着在文档中调用我的代码,但是,C-A 又名C-S-a(反之亦然)。 Emacs 本身总是使用后一种表示法,并带有显式的 Shift 修饰符。
猜你喜欢
  • 2013-08-21
  • 2010-10-03
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
相关资源
最近更新 更多