【问题标题】:Is it possible to make emacs interpet an fn key as a modifier key?是否可以让 emacs 将 fn 键作为修饰键进行解释?
【发布时间】:2015-02-09 16:41:03
【问题描述】:

是否可以让 emacs 将 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 的文档时,我没有得到任何结果。 (它只显示函数的文档,如果我实际执行命令,然后注意到 h-x 是从 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 将“hyper”标志添加到下一个 字符,C-x @ s 添加“super”标志,C-x @ a 添加“alt” 旗帜。比如 C-x @h C-a 就是进入 Hyper-Control-a 的一种方式。 (不幸的是,没有办法通过使用 C-x @ 添加两个修饰符 两次为同一个角色,因为第一个去工作 C-x。)

【问题讨论】:

    标签: macos emacs elisp keyboard-shortcuts


    【解决方案1】:

    如果您希望它充当超级修饰符,即您将它与被修改的键一起按住,那么不 - 这是操作系统级别的事情,所以您需要在外面照顾它的 Emacs。 xmodmap 是 Unix 下的标准方法,如果内存可用,我已经读过它在 OSX 中有效。

    不过,您完全可以将C-x @ h (event-apply-hyper-modifier) 调用的函数绑定到另一个按键序列。

    您无法确定该函数名称的原因是绑定位于所谓的“翻译键映射”之一中,该映射“指定在读取键序列时进行的翻译,而不是完整键序列的绑定”。因此 C-hk (读取键序列)不能用于确定这一点。 OTOH 请注意,您可以仍然使用 Cx@Ch 来查看带有 Cx的所有内容>@ 前缀,确实为您提供了您所追求的信息。

    更多详情请看C-hig(elisp) Translation KeymapsRET

    一般来说,event-apply-*-modifier 函数(用于 shift、control、meta(您的 Alt 键)、super、hyper 和 alt(不是您的 Alt 键))从用户那里读取下一个键,然后应用所需的修饰键,传递结果,就好像它是使用真正的修饰键键入的一样。

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

    然后您可以将序列 h-x 键入为 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 "&lt;f9&gt;")

    【讨论】:

    • 我现在不确定当时是否是这种情况,但在查看该信息节点后,似乎应该使用 local-function-key-map 而不是 function-key-map
    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2012-04-21
    相关资源
    最近更新 更多