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

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

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

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


 partial alphanumeric_keys
 xkb_symbols "typewriter" {
     include "us(basic)"
     name[Group1]= "US - Typewriter";
     key     { [exclam,    1 ] };
     key     { [numbersign,2 ] };
     key     { [slash,         3 ] };
     key     { [semicolon, 4 ] };
     key     { [colon,         5 ] };
     key     { [comma,         6 ] };
     key     { [period,       7 ] };
     key     { [asterisk,  8 ] };
     key     { [question,  9 ] };
     key     { [percent,   0 ] };
     key     { [parenleft, parenright ] };

key { [at, ampersand ] };
key { [asciicircum, less ] };
key { [dollar, greater ] };
key { [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  { [ a, A, Home, Home ] };
 key  { [ e, E, End, End ] };
 key  { [ g, G, Home, End ] };
 key  { [ h, H, Left, Left ] };
 key  { [ j, J, Down, Down ] };
 key  { [ k, K, Up, Up ] };
 key  { [ l, L, Right, Right ] };
 key  { [ d, D, Delete, Delete ] };
 key  { [ p, P, XF86ScrollUp, XF86ScrollUp ] };
 key  { [ 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 { [ Cyrillic_ef, Cyrillic_EF, Home, Home ] };
key { [ Cyrillic_u, Cyrillic_U, End, End ] };
key { [ Cyrillic_pe, Cyrillic_PE, Home, End ] };
key { [ Cyrillic_er, Cyrillic_ER, Left, Left ] };
key { [ Cyrillic_o, Cyrillic_O, Down, Down ] };
key { [ Cyrillic_el, Cyrillic_EL, Up, Up ] };
key { [ Cyrillic_de, Cyrillic_DE, Right, Right ] };
key { [ minus, underscore, emdash, hyphen ] };
key { [ equal, plus, notequal, plusminus ] };
key { [ Cyrillic_ve, Cyrillic_VE, Delete, Delete ] };
key { [ Cyrillic_ha, Cyrillic_HA, bracketleft, braceleft ] };
key { [Cyrillic_hardsign,Cyrillic_HARDSIGN, bracketright, braceright ] };
key { [ Cyrillic_ze, Cyrillic_ZE, XF86ScrollUp, XF86ScrollUp ] };
key { [ 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 { [ Greek_alpha, Greek_ALPHA, Home, Home ] };
key { [ Greek_epsilon, Greek_EPSILON, End, End ] };
key { [ Greek_gamma, Greek_GAMMA, Home, End ] };
key { [ Greek_eta, Greek_ETA, Left, Left ] };
key { [ Greek_xi, Greek_XI, Down, Down ] };
key { [ Greek_kappa, Greek_KAPPA, Up, Up ] };
key { [ Greek_lambda, Greek_LAMBDA, Right, Right ] };
key { [ Greek_delta, Greek_DELTA, Delete, Delete ] };
include «addkeys(caps_switch)»
};

xkb_symbols «caps_switch» {
key {
type[Group1]=»ONE_LEVEL»,
symbols[Group1] = [ ISO_Level3_Shift ]
};
modifier_map Mod5 { ISO_Level3_Shift };

replace key {
type[Group1]=»ONE_LEVEL»,
actions[Group1] = [ SetGroup(group=3) ],
actions[Group2] = [ SetGroup(group=3) ],
actions[Group3] = [ ],
actions[Group4] = [ SetGroup(group=3) ]
};

replace key {
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 {
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. Временный переключатель в английскую раскладку на клавише (у меня она рядом с левым Ctrl). На клавише (у меня над ) — временный переключатель в третью раскладку (греческие буквы иногда набрать). По Caps+буква — некоторые спецклавиши: Caps-hjkl — стрелки, Caps-a — Home, Caps-e — End, Caps-g — Home, Caps-G — End. На правом Alt — Compose.

Автор: Portnov