【问题标题】:Unsetting the Fn key in emacs on console在控制台的 emacs 中取消 Fn 键
【发布时间】:2014-03-23 23:49:25
【问题描述】:

我在没有 X 组织的笔记本电脑上使用 emacs24,只有 Llinux 控制台。笔记本电脑是联想 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_listenC-SPCFn 键和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-SPCFn 并使我能够取消设置后者而不取消设置前者?

【问题讨论】:

  • 如果 acpi_listen 为每个键报告相同的值,那么 Emacs 将无法区分它们。 Emacs 只能使用操作系统提供的信息,而这里的问题是操作系统。我认为您需要检查 xmodmap 以在 Emacs 之外解决这个问题。
  • 我的笔记本电脑上没有安装 X org 服务器 - 在线控制台。 xmodmap 会起作用吗?或者改为查看 /etc/inputrc 是否有意义?
  • 抱歉,错过了您只是在控制台中。 xmodmap 需要 X。我不知道用什么来代替 :(

标签: emacs elisp keyboard-shortcuts


【解决方案1】:

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

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

 $ sudo showkey

... 并按下键。在我的例子中,点击 Fn 得到输出 143。

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

(dumpkeys | grep 键盘映射;echo "keycode 143 =") |加载键

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多