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

在控制台上的emacs中取消设置Fn键,emacs,elisp,keyboard-shortcuts,Emacs,Elisp,Keyboard Shortcuts,我在一台没有X org的笔记本电脑上使用emacs24,只有Linux控制台。笔记本电脑是联想的Ideapad。当我点击Fn(我在各种组合中使用它来调整音量、亮度等)时,选择标记的设置与我点击C-SPC时的设置类似。这是不切实际的,因为我想在不选择文本的情况下改变音量 在emacs中使用C-h k Fn进行检查时,我得到的输出与按C-h k C-SPC时完全相同: C-@ runs the command set-mark-command, which is an interactive com

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

在emacs中使用
C-h k Fn
进行检查时,我得到的输出与按
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\u 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
我会得到:
keycode143按
,然后
keycode143按Fn释放


什么样的elisp代码可以使emacs区分
C-SPC
和Fn,并使我能够在不取消前者的情况下取消后者的设置?

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

通过运行以下命令查找引起故障的键或键组合的键代码:

 $ sudo showkey
。。。和击键。在我的例子中,击打Fn得到的输出是143

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

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

143当然应替换为相关钥匙的钥匙代码。我还遇到了Fn+LeftArrow(表示音量下降)输出波浪形的问题,因此我也得到了该组合的代码,并在/etc/中为该组合插入了另一行


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

如果acpi_listen报告每个键的相同值,emacs将无法区分它们。Emacs只能使用操作系统提供的信息,这里的错误在于操作系统。我认为您需要检查xmodmap,以便在Emacs之外解决这个问题。xmodmap会工作吗?或者改为查看/etc/inputrc是否有意义?抱歉,您只是在控制台中。xmodmap需要X。我不确定改为使用什么:(