8 февр. 2008 г.

О переселении душ или о переназначении клавиш

Многие пользователи Emacs используют CapsLock в качестве левого Ctrl. Это довольно удобно. Так почему же на клавишу Return не назначить правый Ctrl? Это еще больше добавляет удобства, да и симметричности с левым Ctrl, который на месте клавиши CapsLock.

Небольшое отступление: некоторые пользователи нажимают комбинации C-a, C-e, C-d, используя левый Ctrl. Делать это не только неудобно, но и довольно неграмотно (скорее даже преступно :)). Если одна клавиша на левой стороне клавиатуры, а другая на правой, то пожалуйста, используйте обе руки (будь-то С-f, M-/ или C-M-s (здесь Ctrl и Alt для правой руки, а 's' для левой)). Стремитесь к эргономичности.

Вернемся к теме. Возникает вопрос: куда же деть Return? А его вполне можно "повесить" на место правого Ctrl или на место Menu, если таковое имеется (между правым Alt и правым Ctrl). На некоторых ноутбуках фирмы Apple вообще нет правого Ctrl, так что данная замена будет очень кстати.

В итоге мы имеем Control_L на месте клавиши CapsLock, Control_R на месте клавиши Return и Return на месте Menu (или правого Ctrl).

Запускаем xev. Нажимаем клавишу "Return" (или "Enter"), вылавливаем keycode:

  
state ..., keycode 36 (keysym ..., Return), same_screen ...,
  
  
xmodmap -e "keycode 36 = Control_R"
xmodmap -e "add Control = Control_R"
  

Получаем Control_R на месте клавиши Return. Для CapsLock и левого Ctrl:

  
xmodmap -e "keycode 66 = Control_L"
xmodmap -e "add Control = Control_L"
  

Теперь назначаем Return на Menu, к примеру.

  
xmodmap -e "keycode 117 = Return"
  

Не забудьте использовать xev для определения keycode.

Итак, у нас высвободились две клавиши. Правый Ctrl и левый. Некоторые "вешают" цикличное переключение раскладки клавиатуры на левый Ctrl. Думаю, что это слишком "жирно". Более грамотно было бы настроить переключение по Ctrl+1 (english), Ctrl+2 (russian) или Alt+1, Alt+2, или Fn+j, Fn+k, или каким-либо другим комбинациям. Возможно помощь в этом сможет оказать статья "Emacs, X Window и единое переключение раскладки клавиатуры".

Как же использовать высвободившиеся левый и правый Ctrl? Для меня было удобно сделать так. При нажатии правого Ctrl получать С-H в Emacs (Ctrl + Hyper), левого Ctrl -- C-s (где 's' не 's', а Super). После переназначения с помощью xmodmap получаем такую штуку. При нажатии правого Ctrl + 'k' получаем С-H-k, Ctrl + Shift + k -- C-S-H-k, Ctrl + Alt + k -- C-M-H-k. С левым Ctrl по аналогии. То есть открывается простор для назначения новых биндингов, которые вполне легко использовать.

Теперь к практической части. Пускаем xev, находим keycode для левого и правого Ctrl. Берем, например, какие-нибудь braille_dot_* и назначаем:

  
xmodmap -e "keycode 37 = braille_dot_5 NoSymbol Control_L"
xmodmap -e "keycode 109 = braille_dot_6 NoSymbol Control_R NoSymbol NoSymbol NoSymbol NoSymbol Hyper_R"

xmodmap -e "add Mod4 = braille_dot_5"
xmodmap -e "add Mod5 = braille_dot_6"
  

Для меня это сработало. :)

Теперь добавляем все, что мы проделали в ~/.xmodmaprc

  
keycode 117 = Return

keycode 66 = Control_L
add Control = Control_L
keycode 36 = Control_R
add Control = Control_R

keycode 37 = braille_dot_5 NoSymbol Control_L
keycode 109 = braille_dot_6 NoSymbol Control_R NoSymbol NoSymbol NoSymbol NoSymbol Hyper_R

add Mod4 = braille_dot_5
add Mod5 = braille_dot_6
  

И прописываем в ~/.xinitrc

  
xmodmap ~/.xmodmaprc
  

Возможно будут полезны приложения xkeycaps и xbindkeys, как более легкие инструменты для достижения результата.

Для платформы Windows стоит обратить внимание на приложение xkeymacs.

Кому-то покажется все это неудобно, особенно нажимать Menu для получения Return. Могу заверить, что через 2 дня от неудобства не останется и следа. Привыкнуть довольно легко. Так что найдите время, чтобы "наточить топор", господа. В качестве переходного этапа можно для начала обойтись лишь переназначением Control_L на CapsLock, Control_R -- Return, Menu -- Return и отключением левого и правого Ctrl.

Все, теперь остается лишь выучить раскладку клавиатуры Дворака и благодать обязательно снизойдет.

Данная статья -- лишь одна из идей по оптимизации использования клавиатуры. Хотелось бы в комментариях услышать другие подходы в данной области.

Материалы к ознакомлению:

man xev
man xmodmap
/usr/include/X11/keysymdef.h