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

Var*_*r87 4 macos emacs elisp keyboard-shortcuts

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

我有这个:

(setq ns-function-modifier 'hyper) ; set Mac's Fn key to type Hype
Run Code Online (Sandbox Code Playgroud)

并尝试这样做:

(setq <f6> 'hyper)
Run Code Online (Sandbox Code Playgroud)

但后者不起作用.

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

编辑:似乎一种可能的解决方案是绑定f9,C-x @ h但当我尝试获取该函数的文档C-x @C-x @ h我没有得到任何结果.(它只显示该函数的文档,如果我实际执行命令然后注释h-x"已翻译" C-x @ h x.所以如果有某种方法C-x @ h通过函数绑定到一个键(我想一个宏可以工作,但我更喜欢使用elisp尽可能)我想这可以解决我的问题.

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

即使您的键盘缺少这些额外的修饰键,您也可以使用Cx @输入:Cx @ h将"hyper"标志添加到下一个字符,Cx @ s添加"super"标志,Cx @ a添加"alt" "国旗.例如,Cx @h Ca是一种进入Hyper-Control-a的方法.(不幸的是,有没有办法通过使用CX @两次相同的字符,因为第一个去的CX工作添加两个修饰.)

phi*_*ils 8

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

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

您在确定该函数名称时遇到问题的原因是该绑定位于所谓的"翻译键映射"中,该"翻译键映射"指定在读取键序列时进行的翻译,而不是对完整键序列的绑定.因此C-hk(读取键序列)不能用于确定它.OTOH请注意,您仍然可以使用前缀C-x@C-h来查看所有内容C-x@,这样可以为您提供所需的信息.

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

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

以下(我从我的另一个答案中取消)将使用键盘上的数字键来表示所有修改键.

然后,您可以将序列键入h-x<kp-5>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)
Run Code Online (Sandbox Code Playgroud)

nb供F9使用(kbd "<f9>").