Как назначить сочетания клавиш CTRL+A, CTRL+E для работы в качестве клавиш Home и End во всей системе?

Как назначить сочетания клавиш CTRL+A, CTRL+E для работы в качестве клавиш Home и End во всей системе?

Есть ли способ сопоставить CTRL+A и CTRL+E для работы?общесистемныйкак перейти к началу строки и перейти к концу строки соответственно?

Т.е. я бы хотел, чтобы эти сочетания клавиш без проблем работали в любом приложении, а не только в терминале (т.е. как в OSX).

Моя основная система — Ubuntu с рабочим столом Unity, но было бы неплохо иметь универсальное решение, которое не зависело бы от рабочего стола или, по крайней мере, поддерживалось бы в Gnome, XFCE и LXDE.

решение1

xmodmapможет показаться, что это дает ответ, но это не так, потому чтокоды клавишон манипулирует существующими клавишами на клавиатуре, а неизмененныйключи. A controlA— модифицированный ключ.

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

Модификатор управления находится 0x4в состоянии; XLookupString(одна из нескольких связанных функций для объединения ключевых событий) преобразуетсимвол ключадля "a" в ^A(control/A).

Поскольку для клавиш управления нет символа клавиши, переназначение кодов клавиш с помощью xmodmapOP-задачи будет невозможно.

КрешатьПроблема OP, нужно иметь способ сказать операционной системе (по сути) отказаться от доставки отдельных событий для controlи A— но Linux и X так не работают. Ограничивая область действия определенным приложением (xterm) или набором приложений (программы на основе Gtk), можно было бы решать их по отдельности. Но решение, которое применимо ко всей системе, не кажется выполнимым.

Связанный контент