如何将 CTRL+A、CTRL+E 映射为 Home、End 系统范围?

ccp*_*zza 10 linux hotkeys key-binding ubuntu ubuntu-unity

有没有办法将 CTRL+A 和 CTRL+E 映射到系统范围内作为移动到行首,并相应地移动到行尾?

即我希望这些快捷方式能够在任何应用程序中无缝工作,而不仅仅是在终端中(即在 OSX 中)。

我的主要系统是带有 Unity 桌面的 Ubuntu,但最好有一个通用的解决方案,该解决方案与桌面无关,或者至少在 Gnome、XFCE 和 LXDE 中受支持。

Tho*_*key 7

xmodmap似乎也提供了一个答案,但它没有,因为键码是操纵在键盘上现有的密钥,而不是修改键。AcontrolA是修改后的密钥。

xmodmap 只能重新分配现有的键码或(它们的名称)键符,如其手册页中所列:

keycode NUMBER = KEYSYMNAME ... = KEYSYMNAME ... KEYSYMNAME = KEYSYMNAME ...
keycode any
keysym

要查看xmodmap知道的键码,请运行

xmodmap -pk
Run Code Online (Sandbox Code Playgroud)

它显示了这样的东西(为了清楚起见缩短了):

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)
     ...
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

控制修饰符是0x4处于状态;的XLookupString(用于组合关键事件的几个相关功能中的一个)变换键符为“A”到^A(控制/ A)。

因为任何控制键都没有 keysym,所以xmodmapOP 的问题不可能使用重新分配键码。

为了解决OP 的问题,必须有一种方法来告诉操作系统(基本上)拒绝为controland提供单独的事件A——但 Linux 和 X 不是这样工作的。将范围限制为特定应用程序 (xterm) 或一组应用程序(基于 Gtk 的程序),可以单独解决这些问题。但是适用于系统范围的解决方案似乎不可行。

  • 这令人失望:( (2认同)