Typewriter-like раскладки

Илья Портнов

2009-07-01

По совету http://vonderer.blogspot.com/ решил попробовать использовать для русского языка раскладку пишущей машинки. Главное преимущество (для меня) — в том, что знаки препинания обычно в тексте встречаются гораздо чаще, чем цифры, а в typewriter набирать их становится проще. Заодно точка и запятая получают по отдельной клавише, и буква Ё — более удобное место. В общем, действительно, удобно. Правда, на привыкание ушло около недели.

Но кроме русской раскладки есть ещё и английская. Для неё в X-ах не предусмотрено typewriter-варианта, а хочется, потому что на переключение режима в мозгах требуется слишком много времени (цифры набирать то с шифтом, то без, и знаки препинания скачут по всей клавиатуре). Раскладка Дворака (у которой есть вариант с цифрами на верхнем уровне) — слишком другая, а я не так много набираю англоязычных текстов, чтобы изучать совсем новую раскладку (да ещё и надписи на клавишах будут мешать). В общем, сделал я себе typewriter-вариант английской раскладки. Выглядит это так:

Соответствующий код (/usr/share/X11/xkb/symbols/ustw):

partial alphanumeric_keys xkb_symbols "typewriter" { include "us(basic)" 
name[Group1]= "US — Typewriter";
key <AE01> {[exclam, 1 ]};
key <AE02> {[numbersign,2]};
key <AE03> {[slash,3]};
key <AE04> {[semicolon,4]};
key <AE05> {[colon,5 ]};
key <AE06> {[comma,6 ]};
key <AE07> {[period,7]};
key <AE08> {[asterisk,8]};
key <AE09> {[question,9]};
key <AE10> {[percent,0]};
key <BKSL> {[parenleft,parenright]};
key <AC10> {[at,ampersand]};
key <AB08> {[asciicircum,less]};
key <AB09> {[dollar,greater]};
key <AB10> {[bar,backslash]};};
Кроме того, ещё с давних пор я использую CapsLock как специальный модификатор, превращающий некоторые буквенные клавиши в стрелки и т.п. Сейчас ещё захотелось на Shift-Caps повесить переключение такого режима (чтоб в браузере тексты читать, листая кнопками j/k и т.п.). И ещё захотелось временный переключатель из русской раскладки в английскую — иногда >/< или ещё чего набрать быстро. И, раз уж пошла такая пьянка, чтоб можно было греческие буквы побыстрее набирать (временный переключатель в греческую раскладку) (правда, я не верю, что греки пользуются фонетической раскладкой, которая в иксах под именем gr, ну да это их проблемы).

Итак, текущие мои настройки, если кому интересно.

/usr/share/X11/xkb/symbols/addkeys — мои раскладки:


partial alphanumeric_keys xkb_symbols "en" { include "ustw" name[Group1]= "US — Additional"; key.type[group1]="FOUR_LEVEL"; 
key <AC01> {[a, A, Home, Home]};
key <AD03> {[e, E, End, End]};
key <AC05> {[ g, G, Home, End]};
key <AC06> {[ h, H, Left, Left]}; 
key <AC07> {[ j, J, Down, Down]}; 
key <AC08> {[ k, K, Up, Up]}; 
key <AC09> {[l, L, Right, Right]}; 
key <AC03> {[d, D, Delete, Delete]}; 
key <AD10> {[p, P, XF86ScrollUp, XF86ScrollUp]}; 
key <AB06> {[n, N, XF86ScrollDown, XF86ScrollDown]}; include "addkeys(caps_switch)"};
partial alphanumeric_keys xkb_symbols "ru" {
include "ru(typewriter)" name[Group1]= "Russia — Additional"; 
key.type[group1]="FOUR_LEVEL"; 
key <AC01> {[Cyrillic_ef, Cyrillic_EF, Home, Home]};
key <AD03> {[Cyrillic_u, Cyrillic_U, End, End]}; 
key <AC05> {[Cyrillic_pe, Cyrillic_PE, Home, End]};
key <AC06> {[Cyrillic_er, Cyrillic_ER, Left, Left]};
key <AC07> {[Cyrillic_o, Cyrillic_O, Down, Down]};
key <AC08> {[Cyrillic_el, Cyrillic_EL, Up, Up]}; 
key <AC09> {[Cyrillic_de, Cyrillic_DE, Right, Right]}; 
key <AE11> {[minus, underscore, emdash, hyphen]}; 
key <AE12> {[equal, plus, notequal, plusminus]}; 
key <AC03> {[Cyrillic_ve, Cyrillic_VE, Delete, Delete]}; 
key <AD11> {[Cyrillic_ha, Cyrillic_HA, bracketleft, braceleft]}; 
key <AD12> {[Cyrillic_hardsign,Cyrillic_HARDSIGN, bracketright, braceright]}; 
key <AD10> {[Cyrillic_ze, Cyrillic_ZE, XF86ScrollUp, XF86ScrollUp]};
key <AB06> {[ Cyrillic_te, Cyrillic_TE, XF86ScrollDown, XF86ScrollDown]}; 
include "addkeys(caps_switch)";
partial alphanumeric_keys xkb_symbols "gr" { include "gr" name[Group1]= "Greek — Additional"; key.type[group1]="FOUR_LEVEL"; 
key <AC01> {[Greek_alpha, Greek_ALPHA, Home, Home]};
key <AD03> {[Greek_epsilon, Greek_EPSILON, End, End]}; 
key <AC05> {[Greek_gamma, Greek_GAMMA, Home, End]};
key <AC06> {[Greek_eta, Greek_ETA, Left, Left]}; 
key <AC07> {[Greek_xi, Greek_XI, Down, Down]}; 
key <AC08> {[Greek_kappa, Greek_KAPPA, Up, Up]}; 
key <AC09> {[Greek_lambda, Greek_LAMBDA, Right, Right]}; 
key <AC03> {[Greek_delta, Greek_DELTA, Delete, Delete]}; 
include "addkeys(caps_switch)" };
xkb_symbols "caps_switch" { key <CAPS>
{ type[Group1]="ONE_LEVEL", symbols[Group1] = [ ISO_Level3_Shift ] }; 
modifier_map Mod5 { ISO_Level3_Shift }; 
replace key <II65> { type[Group1]="ONE_LEVEL",
actions[Group1] = [ SetGroup(group=3) ], actions[Group2] = [ SetGroup(group=3) ], actions[Group3] = [ ],
actions[Group4] = [ SetGroup(group=3) ] }; 
replace key <I21>
{ type[Group1]="ONE_LEVEL", type[Group2]="ONE_LEVEL",
actions[Group1] = [ SetGroup(group=1) ], actions[Group2] = [ SetGroup(group=1) ], 
actions[Group3] = [ SetGroup(group=1) ], actions[Group4] = [ ] }; 
replace key <RCTL> { actions[Group1] = [ SetGroup(group=2) ], 
actions[Group2] = [ SetGroup(group=1) ], actions[Group3] = [ SetGroup(group=1) ], 
actions[Group4] = [ ], locks = yes< }; };
Ну и в /etc/X11/xorg.conf:
 Option "XkbLayout" "addkeys(en),addkeys(ru),gr" Option    "XkbOptions" "grp_led:caps,compose:ralt"
Рус/лат переключается правым Ctrl, индикация лампочкой Caps. Временный переключатель в английскую раскладку на клавише <I21> (у меня она рядом с левым Ctrl). На клавише <II65> (у меня над <I21>) — временный переключатель в третью раскладку (греческие буквы иногда набрать). По Caps+буква — некоторые спецклавиши: Caps-hjkl — стрелки, Caps-a — Home, Caps-e — End, Caps-g — Home, Caps-G — End. На правом Alt — Compose.