在 emacs 中取消設置 Fn 鍵(控制台)
當我在控制台上執行 emacs24 時,我的兩台聯想筆記型電腦上的 Fn 鍵都會設置選擇標記(與 相同
C-SPC
)。這是非常瘋狂的行為,因為我需要 Fn 鍵來更改螢幕亮度、音量等。如何取消綁定 Fn 鍵,使其在 emacs 中不執行任何操作?
編輯:
如果我按下
C-h k Fn
emacs,我會得到與按下完全相同的輸出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-SPC
並Fn
註冊為同一個 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 之類的程序解釋為任何東西。