如何將 CTRL+A、CTRL+E 對應為系統範圍內的 Home、End 功能?

如何將 CTRL+A、CTRL+E 對應為系統範圍內的 Home、End 功能?

有沒有辦法映射 CTRL+A 和 CTRL+E 來運作全系統作為移動到行首,並相應地移動到行尾?

即我希望這些快捷方式能夠在任何應用程式中無縫運作,而不僅僅是在終端機中(即在 OSX 中)。

我的主要係統是帶有 Unity 桌面的 Ubuntu,但最好有一個與桌面無關的通用解決方案,或至少在 Gnome、XFCE 和 LXDE 中支援。

答案1

xmodmap似乎提供了答案,但事實並非如此,因為鍵碼它操作的是鍵盤上現有的按鍵,而不是修改的鍵。 AcontrolA是修改後的鍵。

xmodmap只能重新指派現有的鍵碼或(它們的名稱)鍵符號,如其手冊頁所列的:

keycode 數位=鍵符號名
keycode any=鍵符號名
keysym 鍵符號名=鍵符號名

若要查看已知的鍵碼xmodmap,請執行

xmodmap -pk

它顯示了類似這樣的內容(為了清晰起見縮短了):

There are 4 KeySyms per KeyCode; KeyCodes range from 8 to 255.

    KeyCode Keysym (Keysym) ...
    Value   Value   (Name)  ...

      8     0x0061 (a)      0x0041 (A)      0x00e5 (aring)  0x00c5 (Aring)  
      9     0x0073 (s)      0x0053 (S)      0x00df (ssharp) 0x00cd (Iacute) 
     10     0x0064 (d)      0x0044 (D)      0x08ef (partialderivative)      0x00ce (Icircumflex)    
     11     0x0066 (f)      0x0046 (F)      0x08f6 (function)       0x00cf (Idiaeresis)     
     12     0x0068 (h)      0x0048 (H)      0x01ff (abovedot)       0x00d3 (Oacute) 
     13     0x0067 (g)      0x0047 (G)      0x00a9 (copyright)      0x01bd (doubleacute)    
     14     0x007a (z)      0x005a (Z)      0x07d9 (Greek_OMEGA)    0x00b8 (cedilla)
     ...

xev顯示實際發生的情況:

KeyPress event, serial 34, synthetic NO, window 0xc00001,
    root 0x111, subw 0xc00002, time 2209364614, (27,43), root:(47,86),
    state 0x4, keycode 8 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (01) "^A"
    XmbLookupString gives 1 bytes: (01) "^A"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0xc00001,
    root 0x111, subw 0xc00002, time 2209364773, (27,43), root:(47,86),
    state 0x4, keycode 8 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (01) "^A"
    XFilterEvent returns: False

控制修飾符是0x4in 狀態; (用於組合關鍵事件的幾個相關函數XLookupString之一)轉換鍵盤符號將“a”轉換為^A(control/A)。

由於任何控制鍵都沒有鍵符號,因此xmodmap無法使用 重新指派鍵碼來解決 OP 的問題。

解決OP 的問題是,必須有一種方法告訴作業系統(本質上)拒絕為control和傳遞單獨的事件A- 但 Linux 和 X 不是這樣工作的。將範圍限制為特定應用程式 (xterm) 或一組應用程式(基於 Gtk 的程式),人們可以單獨解決這些問題。但適用於整個系統的解決方案似乎並不可行。

相關內容