我在没有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 press
和keycode 143 release
。
哪些elisp代码可以使emacs区分C-SPC
和 Fn 并让我在不设置前者的情况下取消设置后者?
答案 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这样的程序解释为任何东西。