Поло, водное по-оло!..

There are two non-empty arrays $a and $b. What is the result of their sum (+)?

View Results

Loading ... Loading ...

Рекламная пауза

да здравствует независимость от контекста!

«А всё-таки она Матрица!» — сказал Лео».

Мне захотелось, чтобы раскладки клавиатуры переключались немодально. Caps — ну, вы помните, да?.. — у меня на машине отсутствует как класс. Посему я подумал некоторое время и выбрал в качестве будущей юдоли сочетания right shift + right control и left shift + left control, первое для стабильного переключения на латиницу (“qwerty”), второе на русский (“йцукен”).

Как это делается. Я решил использовать существующий переключатель, модернизировав его на свой лад. В Xorg, как мы помним, переключатель по ctrl-shift так и называется: “ctrl_shift_toggle”. Проставляем его в /etc/X11/xorg.conf в секции InputDevice с драйвером kdb:

Section "InputDevice"
    Identifier     "Generic Keyboard"
    Driver         "kbd"
    Option         "CoreKeyboard"
    Option         "XkbRules" "xorg"
    Option         "XkbModel" "pc105"
    Option         "XkbLayout" "us,ru"
    Option         "XkbVariant" "basic,winkeys"
    Option         "XkbOptions" "grp:ctrl_shift_toggle,ctrl:nocaps,grp_led:caps"
EndSection

Открываем /usr/share/X11/xkb/symbols/group, ищем там соответствующую секцию.

// using the group(ctrl_shift_toggle) map, pressing:
//     Control_L+Shift_L locks the prev group
//     Control_R+Shift_R locks the next group
// If you have two groups and group wrap is enabled, the effect is
// indistinguishable.
partial modifier_keys
xkb_symbols "ctrl_shift_toggle" {
    key <LFSH> {
        type[Group1]="PC_CONTROL_LEVEL2",
        symbols[Group1]= [ Shift_L,     ISO_Prev_Group ]
    };
    key <RTSH> {
        type[Group1]="PC_CONTROL_LEVEL2",
        symbols[Group1]= [ Shift_R,     ISO_Next_Group ]
    };
    key <LCTL>  {       [       Control_L,      ISO_Prev_Group ]        };
    key <RCTL>  {       [       Control_R,      ISO_Next_Group ]       };
};

Как видим, текущая настройка позволяет переключаться в двух направлениях по имеющимся раскладкам (на предыдущую и следующую раскладки соответственно), что на двух раскладках просто заменяет одну на “ту, другую”. Соответственно, нам надо помнить, какая из них у нас работает сейчас, то есть часть мозга решает задачу, которую решать не хочется — да, по большому счёту, и не нужно. Перенастраиваем переключение на последнюю и первую раскладки (в моём, довольно распространённом, случае, когда раскладки прописаны в порядке us, ru, left ctrl + left shift дадут русскую, а right ctrl + right shift, соответственно, латиницу).

// using the group(ctrl_shift_toggle) map, pressing:
//     Control_L+Shift_L locks the last group
//     Control_R+Shift_R locks the first group
// If you have two groups and group wrap is enabled, the effect is
// indistinguishable.
partial modifier_keys
xkb_symbols "ctrl_shift_toggle" {
    key <LFSH> {
        type[Group1]="PC_CONTROL_LEVEL2",
        symbols[Group1]= [ Shift_L,     ISO_Last_Group ]
    };
    key <RTSH> {
        type[Group1]="PC_CONTROL_LEVEL2",
        symbols[Group1]= [ Shift_R,     ISO_First_Group ]
    };
    key <LCTL>  {       [       Control_L,      ISO_Last_Group ]        };
    key <RCTL>  {       [       Control_R,      ISO_First_Group ]       };
};

Рестартовав Иксы, с удивлением обнаруживаем, что основную роль в нелёгком деле включения нужной раскладки играет одна из этих двух клавиш, нажатая последней. То есть, можно нажать произвольный Shift или произвольный Ctrl, а затем правую или левую завершающую клавишу комбинации: только она сыграет роль; таким образом, для переключения раскладок очень легко использовать клавиатурный аккорд на две руки, к чему крайне быстро привыкаешь.

Поэкспериментировав с разными способами включения удобоприятной раскладки, пришёл к такому:

xkb_symbols "shifts_toggle" {
    key <LFSH>  { [     Shift_L, ISO_Last_Group ] };
    key <RTSH>  { [     Shift_R, ISO_First_Group ] };
};

Всё.

Share:
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Juick
  • Twitter

1 comment to да здравствует независимость от контекста!

  • heman

    Очень познавательно, так сказать хозяйке на заметку.

    Афтару респект, сам использую Caps :)

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">