LINUX.ORG.RU

Capslock & linuxmint mate

 , , ,


0

1

Долгое время был приверженцем переключения раскладки на ctrl+shift. Около двух месяцев назад решил перестроить себя на капслок, ибо я всё равно им не пользуюсь. Оказалось гораздо удобнее, да и нет никакой зависимости от того какая из клавиш была отжата первой.

Но блин столкнулся с другой проблемой. Shift+Capslock работает так, как раньше работал Capslock... При наборе текста частенько сталкиваюсь с тем, что у меня случайным образом этот чёртов capslock врубается... Очень раздражает. Хочу как-нибудь отключить его вообще. Т.е. чтобы shift+capslock не делал ничего, либо тоже переключал раскладки.

Глядя на окно настроек клавиатуры может показаться, что это элементарно. Там же checkbox-ы. Натыкал себе по душе параметров и радуйся жизни. Фиг с два... Там какая то совершенно невменяемая логика, которая очень далека от того что там написано. К примеру если выставить на смену языка и capslock и shift+capslock, по capslock-у будет меняться режим capslock-а. Если же заблокировать capslock в настройках уже не смены языка, а поведения capslock-а, то начинается вообще какая-то необъяснимая вакханалия. А самое интересное - если долго пытаться выбрать хоть сколько-нибудь работающую комбинацию настроек, внезапно начинает дичайше глючить поведение мыши в целом по системе...

Отсюда вопрос. Я хочу:

  • capslock - переключает раскладку
  • shift+capslock, alt+capslock - либо ничего не делают, либо тоже переключают раскладку
  • переключение раскладки интересует самое обычное, а не так, что с shift-ом 1 язык, без него другой. На мой взгляд так слишком много мороки.

Как это сделать в linuxmint-е (mate)? Диаложег вроде такой же как и в Ubuntu. Полагаю, что он туда перекочевал ещё из gnome2. Возможно это проблема не только mint-а


У меня нормально работает capslock(alt+capslock для переключения регистра), правда настроено переключение только на время нажатия. Настроено через это же меню

arch, mate 1.8.1, раньше тоже вполне работало

disarmer ★★★ ()
Последнее исправление: disarmer (всего исправлений: 1)

Там какая то совершенно невменяемая логика, которая очень далека от того что там написано.

Там нет никакой логики. В данном случае ты пытаешься использовать два взаимоисключающих правила XKB.

бла-бла-бла, бла-бла-бла…

Нужно просто переписать правило grp:caps_toggle, чтобы не назначалось ничего на Shift-CapsLock. Подробности в гугле.

Gotf ★★★ ()
Ответ на: комментарий от disarmer

У меня нормально работает capslock(alt+capslock для переключения регистра), правда настроено переключение только на время нажатия. Настроено через это же меню

Да, есть такая опция. И даже работает. Но мне точно не подходит по нажатию.

faiwer ()
Ответ на: комментарий от Gotf

Там нет никакой логики. В данном случае ты пытаешься использовать два взаимоисключающих правила XKB.

Так вот оно что... Не продумали диаложег. Для таких целей стоит дизейблить взаимоисключаемые варианты.

faiwer ()
Ответ на: комментарий от faiwer

Для таких целей стоит дизейблить взаимоисключаемые варианты.

Если диалог строится динамически на основе base.lst (например), то это невозможно без анализа всех правил.

Gotf ★★★ ()
Ответ на: комментарий от Gotf

Нарыл, что правила лежат в /usr/share/X11/xkb/rules/base. Файл судя по первой строке собран из остальных. Остальные во многом дублируют друг друга. В целом само правило выглядит так:

grp:caps_toggle = +capslock(grouplock)

Правило убивающее capslock выглядит так:

caps:none = +capslock(none)

Предполагаю, что +capslock это что-то вроде метода, принимающего 1 параметр. А вот где может лежать этот метод (может он вообще захардхожен) не имею никакого представления. Мде =(

faiwer ()
Ответ на: комментарий от faiwer

Получилось.

Отпишу здесь о деталях, вдруг кому пригодится.

За работу клавиатуры, по всей видимости, отвечает некий xkb. Именно его настройки изменяются в том диаложке, который «Клавиатура». Настройки физически расположены тут: /usr/share/X11/xkb/

В поддиректории rules лежат непосредственно сами правила. Именно там я нарыл правило «grp:caps_toggle». Но правило ссылается на уже готовый символ. Выглядит это так:

grp:caps_toggle = +capslock(grouplock)

Как оказалось, +capslock это указание из какого файла взять сам символ. В данном случае из /usr/share/X11/xkb/symbols/capslock. А вот grouplock это уже непосредственно название самого символа. Вот его код:

partial hidden modifier_keys
xkb_symbols "grouplock" {
    replace key <CAPS> { [ ISO_Next_Group, Caps_Lock ] };
};

partial, hidden, modifier_keys - это всё модификаторы символа. Подробнее о них можно прочесть здесь ( http://www.charvolant.org/~doug/xkb/html/node5.html#Sec:Symbols ). Внутри же уже сами настройки. В нашем случае CAPS ребиндится на ISO_Next_Group и на самого себя (Caps_Lock). Суть в том, что если в квадратных скобках указано два значения, то первое доступно без shift-а, а второе с ним. Если же указано всего 1 значение, то оно будет использоваться в обоих вариантах. Собственно достаточно поменять код на:

partial hidden modifier_keys
xkb_symbols "grouplock" {
    replace key <CAPS> { [ ISO_Next_Group ] };
};

после чего пощёлкать в том самом диаложке что-нибудь (чтобы сбросить кеш), как мы получаем, то что хотели. Теперь по shift+caps_lock тоже меняется раскладка.

faiwer ()
Ответ на: комментарий от faiwer

Прочитав твою мегапростыню, я понял только то, что тебе нужен свич по капсу.

DeadEye ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.