Но кроме русской раскладки есть ещё и английская. Для неё в X-ах не предусмотрено tyewriter-варианта, а хочется, потому что на переключение режима в мозгах требуется слишком много времени (цифры набирать то с шифтом, то без, и знаки препинания скачут по всей клавиатуре). Раскладка Дворака (у которой есть вариант с цифрами на верхнем уровне) - слишком другая, а я не так много набираю англоязычных текстов, чтобы изучать совсем новую раскладку (да ещё и надписи на клавишах будут мешать). Вобщем, сделал я себе 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.
Какие только велосипеды не придумают чтобы не пользоваться Emacs и нормальными браузерами типа сonkeror ;) Это я про стрелочки
ОтветитьУдалитьА правый альт нельзя композом занимать - он слишком удобен для нажатия большим пальцем правой руки.
Поэтому у меня compose на rctrl
А rctrl на Ret/Enter, чтобы удобно нажимать мизинцем правой руки
А мизинцем левой руки удобно нажимать lctrl на капсе, а оба альта и так удобно расположены, в отличии от ctrl.
А не знает ли уважаемый автор как настроить включатели раскладок - т.е. для включения каждой раскладки используется отдельная комбинация?
ОтветитьУдалитьС моей точки зрения это намного удобнее четырех переключателей на разные раскладки. Требуется всего лишь (не глядя на клавиатуру) нажать нужную комбинацию для перехода на другой язык...
За typewriter-раскладки - спасибо. Сам давно к ним присматриваюсь, ваш пост вдохновил попробовать, вечером начну :)
Альтернативные раскладки и переключатели хорошо, но когда повседневно приходится на работе сидеть за компом с win.. В общем, у меня не получается для разных компьютеров иметь разные привычки.
ОтветитьУдалить@golden
ОтветитьУдалитьПримерно такой код в конфиге xkb:
partial modifier_keys xkb_symbols " shift_ctrl_1 " {
key < LFSH > {
type =" PC_BREAK " ,
symbols [ Group1 ]= [ Shift_L , ISO_First_Group ]
};
key < RTSH > {
type =" PC_BREAK " ,
symbols [ Group1 ]= [ Shift_R , ISO_Last_Group ]
};
key < LCTL > { [ Control_L , ISO_First_Group ] };
key < RCTL > { [ Control_R , ISO_Last_Group ] };
};
Здесь на первую раскладку переключают левые ctrl+shift, на вторую - правые ctrl+shift. Ещё вот тут подобные штуки обсуждают: http://linuxforum.ru/index.php?showtopic=49203
Уже делаю аналогичные раскладки для Emacs. Предыдущий typewriter для Emacs у меня отличался от иксового.
ОтветитьУдалитьЧто расстроило: поломался conkeror.
У него навигация по ссылкам цифрами, теперь их надо нажимать шифтом, а с шифтом она не работает. Ну это я потом подумаю как пофиксить можно.
Поправочка: в Emacs ustw делать нет необходимости: достаточно сделать (deactivate-input-method) и будет использоваться иксовый инпут метод по умолчанию
ОтветитьУдалитьПо поводу иллюстрации с изображением клавиш: вы рисовали ее вручную - или для этого есть какой-то специальный софт? Дело в том, что мне нужно сделать наклейки для клавиатуры, под нестандартную раскладку...
ОтветитьУдалить@Анониный
ОтветитьУдалитьЭту картинку - сам в inkscape рисовал. Софт такой где-то есть. Даже в комплект иксов кажется входит что-то типа xkb_show, показывающее текущую раскладку - но не так красиво ;)