2012-05-04 47 views
13

我希望某些鑰匙和鑰匙組合的行爲與Emacs中的其他鑰匙或鑰匙組合一樣。例如,我想F5表現爲C-C的替代每一個可能的組合,涉及它,或者C-S-C-。如果不手動重新綁定所有這些組合鍵,是否可以這樣做?使鑰匙表現爲另一個鑰匙

回答

8

您所指的鍵稱爲'前綴鍵'。前綴鍵有自己的鍵盤映射,所以要使另一個鍵行爲相同,您需要將其分配給相同的鍵盤映射。對於控制-C,使用mode-specific-map:自身

(global-set-key (kbd "<f5>") mode-specific-map) 

控制不是一個前綴鍵,或者一個真正的關鍵在所有的,因爲它不發送按鍵Emacs的 [1]直到你打另一個鍵。我不確定如何在Emacs內重新映射C-S-到C-。你可以用xmodmap在系統範圍內完成,但這可能不是你想要的。

[1]的控制鍵(SHIFT,ALT)做派按鍵操作系統,但Emacs的不「看」這一點,除非有在同一時間按下另一個鍵

+1

+1但是... *「控制本身不是一個前綴密鑰,或者真的是一個關鍵,因爲它不會發送按鍵」* ...控制肯定會自己發送一個按鍵。你可以在Linux下使用* xev *來查看。它在你按下時發送一個按鍵,當你釋放它時發送一個按鍵。在我的系統上CTRL的* xev *輸出給出:* KeyPress eventKeyPress事件...狀態0x14,鍵碼37(keysym 0xffe3,Control_L)... *等我有點爭議,你寫的控制不是「真的關鍵「。我的鍵盤的CTRL和CAPS-LOCK重新映射爲CTRL的功能確實具有攻擊性; ) – TacticalCoder

+1

@TacticalCoder:公平點,就X而言。但我不認爲X註冊的按鍵是Emacs自己可見的。如果Emacs沒有修改另一個密鑰,Emacs無法檢測或響應修改鍵。所以從Emacs的角度來看,CTRL本身並不是一個關鍵,直到它與另一個關鍵相結合。 – Tyler

5

我喜歡

(define-key key-translation-map [f5] (kbd "\C-c")) 

這是good resource

總結上面給出的鏈接:global-set-key的缺點是,當您定義組合鍵輸入符號時,它在isearch中不起作用。

鍵翻譯地圖也有問題。想象一下你定義了一個符號|執行命令並且C- |輸入符號|,按C- |將執行該命令。