是否可以将emacs interpet一个fn键作为修饰键?

时间:2014-12-11 08:52:40

标签: macos emacs elisp keyboard-shortcuts

是否可以将emacs interpet一个fn键作为修饰键?我可以绑定f6,f.ex。超级?

我有这个:

(setq ns-function-modifier 'hyper) ; set Mac's Fn key to type Hype

试图这样做:

(setq <f6> 'hyper)

但后者不起作用。

我不想将操作系统作为一个整体看作f9作为某种修饰键(使得在其他应用程序中更容易将功能键用于不同目的)。

编辑:似乎一种可能的解决方案是将f9绑定到C-x @ h但是当我尝试获取函数C-x @C-x @ h的文档时,我不会# 39;得到任何结果。 (它只显示该函数的文档,如果我实际执行命令,然后注意h-x已被&{34;翻译&#34;来自C-x @ h x。所以,如果有某种方式通过函数将C-x @ h绑定到一个键(我猜宏可以工作,但我更喜欢在可能的情况下使用elisp)我想这可以解决我的问题。

http://www.gnu.org/software/emacs/manual/html_node/emacs/Modifier-Keys.html

  

即使您的键盘缺少这些额外的修改键,您也可以   使用C-x @输入:C-x @ h将“超级”标志添加到下一个   字符,C-x @ s添加“超级”标志,而C-x @ a添加“alt”   旗。例如,C-x @ h C-a是一种进入Hyper-Control-a的方法。   (不幸的是,使用C-x @无法添加两个修饰符   两次为同一个角色,因为第一个去上班   C-x。)

1 个答案:

答案 0 :(得分:7)

如果你希望它作为超级修饰符起作用,你将它与被修改的键一起保持下来,那么不 - 那是一个操作系统级别的东西,所以你需要在外面处理它Emacs。 xmodmap是Unix下的标准方法,如果内存服务我已经读过,它在OSX中有效。

但是,您绝对可以将C-x @ hevent-apply-hyper-modifier)调用的函数绑定到另一个键序列。

您无法确定该功能名称的原因是该绑定位于所谓的“翻译键映射”中,该“翻译键映射”指定在读取键序列时进行的翻译,而不是对完整键序列进行绑定。因此, C-h k (其读取键序列)不能用于建立它。 OTOH注意你可以仍然使用 Cx @ Ch 来查看 Cx @ 前缀, 为您提供您所追求的信息。

有关详细信息,请参阅 C-h i g (elisp) Translation Keymaps RET

通常,event-apply-*-modifier函数(用于shift,control,meta(您的Alt键),super,hyper和&amp; alt(不是您的Alt键))从用户读取下一个键,然后将所需的修饰符应用于该键,将结果传递给它,就像使用实际修饰键键入它一样。

以下(我从another answer of mine取消)将使用键盘上的数字键来表示所有修饰键。

然后您可以将序列 h-x 键入为&lt; kp-5&gt; x

(define-key function-key-map (kbd "<kp-1>") 'event-apply-control-modifier)
(define-key function-key-map (kbd "<kp-2>") 'event-apply-meta-modifier)
(define-key function-key-map (kbd "<kp-3>") 'event-apply-super-modifier)
(define-key function-key-map (kbd "<kp-4>") 'event-apply-shift-modifier)
(define-key function-key-map (kbd "<kp-5>") 'event-apply-hyper-modifier)
(define-key function-key-map (kbd "<kp-6>") 'event-apply-alt-modifier)

n.b。对于 F9 ,请使用(kbd "<f9>")