Emacs创建键盘修改器

4
我在Mac OS上使用emacs。 我想将一个修饰键(Meta,Control,...)映射到一个简单的键。 基本上这就是我需要的:(global-set-key (kbd "a") 'hyper) 这里的a只是a键,没有Control-a或其他任何东西,只有没有修饰符的"a"。 例如,我想让“a”变成超级键,但我找不到解决方法。 有人有线索吗?

你正在使用哪个操作系统和Emacs版本?根据我所见,设置超级键和超级用户键是与操作系统相关的。 - Peter
我的 Emacs 版本是 23.4,我正在运行在 Mac OS 10.7 上。 - itsu
1个回答

8
这种方法不会像按住修饰键再按另一个键那样生成修饰键,但它仍然可以让你使用超级绑定。

默认情况下,你可以通过 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实例的父级。请注意:

如果`local-function-key-map'中的条目与次要模式、本地或全局按键映射中的绑定冲突,则会忽略这些条目。也就是说,只有在原始按键序列没有任何绑定时,重新映射才适用。

C-hig (elisp) 翻译键映射 RET

因此,请确保使用没有现有绑定的按键序列。(理论上这很有限制,但因人而异。)

编辑:澄清一下,这为您提供了一种访问在没有超级修饰键的计算机上使用任何现有的“超级”绑定的方法,但实际上并没有创建新的修饰键。如果您没有访问现有绑定的方式,则此技术与常规前缀绑定相比没有任何优势。

我相信正如彼得所评论的那样,创建一个真正的修饰键是操作系统层面的任务。据我所知,当您单独按下修饰键时,Emacs不会接收任何输入,当您按下非修饰键与修饰键一起时,Emacs接收到(修改后的)输入。反之,当您按住非修饰键时,Emacs立即接收输入,并且无法将该输入与其他输入组合在一起并将其全部视为单个(修改后的)事件。
如果在Unix系统中实现这一点,通常的机制是使用xmodmap,因此在OSX上也可能是这种情况。以下链接可能有所帮助:

我已经尝试过这个解决方法,但不幸的是它并不能完全像一个正常的修改器一样工作。 例如,如果我将H-d映射到delete-char,那么当我键入a-d时,它将在第一次起作用,但如果我再次键入d,则会插入一个“d”而不是删除另一个字符。 这个函数只发送单个“事件”,所以我不能像真正的修改器一样使用它,很遗憾 :-( - itsu
1
谢谢phils,我不知道在Mac OS下存在xmodmap,这应该可以完成工作;-) - itsu
请确保您使用的键序列没有现有的绑定,或者您可以使用key-translation-map代替,它似乎优先于其他键绑定(至少根据我的测试)。 - Jisang Yoo

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