在控制台上的emacs中取消设置Fn键

时间:2014-03-23 23:49:26

标签: emacs elisp keyboard-shortcuts

我在没有X org的笔记本电脑上使用emacs24,只使用了Linux控制台。笔记本电脑是联想Ideapad。当我点击 Fn (我在各种组合中使用它来调整音量,亮度等)时,选择标记的设置与我点击C-SPC时类似。这是不切实际的,因为我想在不选择文字的情况下改变音量。

在emacs中使用C-h k <kbd>Fn</kbd>进行检查我得到的输出与按C-h k C-SPC时的输出完全相同:

C-@ runs the command set-mark-command, which is an interactive compiledLisp function.
It is bound to C-@, C-SPC.

(set-mark-command ARG)
...

使用$ acpi_listen检查C-SPC Fn 键和C-@都会给我相同的输出:^@。换句话说,它们都被解释为相同的acpi事件。

我可以通过以下方式取消C-@

(global-set-key (kbd "\C-@") 'ignore)

但是这会阻止C-SPC工作,并且结合上述内容我无法通过以下方式重新设置:

(global-set-key (kbd "C-SPC") 'set-mark-command) 

同时,如果我使用$ showkey,我会按 Fn 获取keycode 143 presskeycode 143 release

哪些elisp代码可以使emacs区分C-SPC Fn 并让我在不设置前者的情况下取消设置后者?

1 个答案:

答案 0 :(得分:0)

正如评论中指出的那样,问题与emacs无关。使用dumpkeys,loadkeys和showkey的此解决方案可能适用于其他功能键实例,这些实例键会被Linux虚拟控制台中运行的程序以意外方式解释。

通过运行找到导致问题的键或键组合的键码:

 $ sudo showkey

......然后按下钥匙。在我的实例中,点击 Fn 给出了输出143。

要阻止 Fn 被控制台中的程序解释为任何内容,请添加/etc/rc.local:

  

(dumpkeys | grep keymaps; echo“keycode 143 =”)| loadkeys

143当然应该被相关密钥的密钥代码替换。我也遇到了输出波浪号的 Fn + LeftArrow (意思是音量减小)的问题,所以我也得到了该组合的代码,然后扔了另一行在/ etc /.

请注意,这不会阻止 Fn 函数的正常行为(改变音量,亮度等),它只会阻止功能键被像emacs这样的程序解释为任何东西。