Emacs

在 emacs 中取消設置 Fn 鍵(控制台)

  • March 31, 2014

當我在控制台上執行 emacs24 時,我的兩台聯想筆記型電腦上的 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 鍵……)

這種使用 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 之類的程序解釋為任何東西。

引用自:https://unix.stackexchange.com/questions/120948