我在Mac OS上使用emacs。我想将修饰符(Meta,Control,...)映射到一个简单的键。基本上这就是我需要的:(global-set-key (kbd "a") 'hyper)
这里的 a 只是 a 键,没有 Control-a 或其他什么,只是单独的"a",带有修饰符。例如,我希望"a"变得超级,但我找不到解决方案。
有人有线索吗?
这种方法不会在按住修饰符的情况下按下另一个键时生成修饰键,但它仍然允许您使用超绑定。
默认情况下,您可以通过 C-x@ 前缀使用其他修饰键。有关完整列表,请参阅 C-x@C-h。
这些绑定是function-key-map
的,你可以使用相同的方法来获取你自己的独立于操作系统的绑定。
(define-key function-key-map (kbd "C-c H") 'event-apply-hyper-modifier)
function-key-map
是所有local-function-key-map
实例的父实例。请注意:
如果"本地函数键映射"中的条目与次要模式、本地或全局键映射中的绑定冲突,则忽略这些条目。 即 仅当原始键序列没有任何绑定时,重新映射才适用。
C-hig (elisp) Translation Keymaps
RET
因此,请确保使用没有现有绑定的键序列。(从理论上讲,这是相当有限的,但是YMMV。
编辑:澄清一下,当您使用没有超级修饰键的计算机时,这为您提供了一种访问任何现有"超级"绑定的方法,但实际上并没有创建新的修饰键。如果没有要访问的现有绑定,则此技术与常规前缀绑定相比没有任何优势。
我相信,正如彼得评论的那样,创建一个真正的修饰键是一项操作系统级别的任务。AFAIK 当你单独按下修饰键时,Emacs 不会接收任何输入,当你按下带有修饰符的非修饰符时,Emacs 会收到(修改后的)输入。相反,当你按住一个非修饰键时,Emacs 会立即接收到输入,并且无法将该输入与其他输入组合在一起,并将其全部视为单个(修改后的)事件。
IIRC,xmodmap
将是Unix系统中实现这一目标的典型机制,因此OSX很可能就是这种情况。以下链接可能会有所帮助:
- http://computing.fnal.gov/docs/products/xemacs/v21_1/xemacs.info,.SuperandHyperKeys.html
- http://www.emacswiki.org/emacs/XModMap
- http://www.emacswiki.org/emacs/MetaKeyProblems