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