在 emacs 中取消设置 Fn 键(控制台)

在 emacs 中取消设置 Fn 键(控制台)

当我在控制台上运行 emacs24 时,两台 Lenovo 笔记本电脑上的 Fn 键都会设置选择标记(与 相同C-SPC)。这是相当疯狂的行为,因为我需要 Fn 键来更改屏幕亮度、音量等。

如何解除 Fn 键的绑定,使其在 emacs 中不起作用?

编辑:

如果我按下C-h k Fnemacs ,我会得到与按下完全相同的输出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 并按 Fn 键,我会得到输出:

^@

C-SPC如果按或C-@(Ctrl+AltGr+2),这与我从 acpi_listen 获得的输出完全相同。也就是说:它们都注册为同一个 acpi 事件。

发现这一点后,我尝试取消设置C-@。我让它工作的唯一方法是这样的:

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

和这个:

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

在这两种情况下,C-SPC我都尝试重新设置C-SPC

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

但这并不生效。

之后我可以将我的问题细化为:

如果C-SPCFn被注册为相同的 acpi 事件,我可以让 emacs 区分它们吗?

(请注意,这只是控制台中的问题。Emacs 在我的 X 机器上无法拾取 Fn 键...)

答案1

这种使用 dumpkeys、loadkeys 和 showkey 的解决方案可能适用于 Linux 虚拟控制台中运行的程序以意外方式解释功能键的其他实例。

通过运行以下命令查找导致问题的按键或按键组合的按键代码:

 $ sudo showkey

...然后按下键。在我的实例中,点击Fn输出为 143。

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

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

143 当然应该替换为相关按键的键码。我还遇到了Fn+ (用于降低音量)输出波浪号的问题LeftArrow,因此我也获得了该组合的代码,并在 /etc/rc.local 中添加了另一行。

请注意,这不会阻止Fn功能的正常行为(更改音量、亮度等),它只会阻止功能键被 emacs 等程序解释为任何内容。

相关内容