Этот топик — продолжение моего предыдущего, где я описывал проблему с переключениями раскладок, если их три и больше. В этом топике я расскажу о решении этой проблемы через ComposeKey. Помимо того, ComposeKey отлично подойдет и для других целей.

Общие сведения


Поскольку, в альтернативных раскладках нам нужно всего несколько редкоупотребляемых символов, поэтому их удобнее привязат�� на конкретные сочетания клавиш вместо того, чтобы держать еще одну лишнюю раскладку клавиатуры. Да, мы можем писать их через Unicode символы, но, во-первых, нужно запоминать коды символов, а во-вторых, не всегда работает ( в предыдущей статье описано ). На помощь приходит ComposeKey, механизм в Linux для набора непечатных символов.

Как оно работает?


Существует клавиша ComposeKey, при зажатии которой и набора комбинации других клавиш, выводится символ. Настроить эту клавишу можно из консоли ( например, setxkbmap -option compose:rwin устанавливает правую Win клавишу на ComposeKey ), или же из графического интерфейса.

image

Как комбинации доступны?


Все комбинации доступны в файле /usr/share/X11/locale/CURRENT/Compose, где CURRENT — текущая локаль. Все комбинации интуитивно понятные, главное понять принцип их построения.

И как это относится к раскладкам?


У вас есть возможность объявлять собственные сочетания. Чтобы, например, на ComposeKey + Ы выводилась І, а на ComposeKey + ъ выводилась ї. И запомнить просто, и использовать не составит дополнительных проблем.

Для начала, решим проблему с Гномом. У него все сочетания жестко вписаны в код для совместимости на всех локалях, поэтому мы не сможем их поменять. Но мы можем переопределить их стандартным Xwindow Input Method (XIM). Для этого нам нужно установить переменную окружения GTK_IM_MODULE = "xim". Пропишем в ~/.bashrc ( если нужно для всех пользователей, то в /etc/environment ):

export GTK_IM_MODULE="xim"

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

Название исходных клавиш

На помощь приходит небезызвестная утилита xev, которая выводит все события иксов. Запускаем, нажимаем пару клавиш в русской раскладке, смотрим вывод. Получится типа такого:

KeyPress event, serial 35, synthetic NO, window 0x4800001,
root 0x15a, subw 0x0, time 191545195, (-229,390), root:(776,413),
state 0x2000, keycode 58 (keysym 0x6d8, Cyrillic_softsign), same_screen YES,
XLookupString gives 2 bytes: (d1 8c) "ь"
XmbLookupString gives 2 bytes: (d1 8c) "ь"
XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x4800001,
root 0x15a, subw 0x0, time 191545265, (-229,390), root:(776,413),
state 0x2000, keycode 58 (keysym 0x6d8, Cyrillic_softsign), same_screen YES,
XLookupString gives 2 bytes: (d1 8c) "ь"
XFilterEvent returns: False

Смотрим на строку state 0x2000, keycode 58 (keysym 0x6d8, Cyrillic_softsign), same_screen YES, вот этот Cyrillic_softsign и есть названием клавиши.

Символ и его unicode код

Сам символ можно найти в таблице символов, либо скопировать откуда-то. Чтобы узнать его unicode код, нужно найти в интернете таблицу unicode символов, найти символ и его код.

А как же пример?


Для примера возьмем сочетание, чтобы по ComposeKey + ы выводился символ i. Находим название клавиши «ы». xev говорит, что символ называется Cyrillic_yeru. Дальше, находим в unicode таблице символ «i» и ее код: U0456. Строчка для описании комбинации будет выглядеть так:
<Multi_key> <Cyrillic_yeru> : "i" U0456

Multi_key — и есть ComposeKey.

Выкладываю свою версию конфига ~/.XCompose:

include "/usr/share/X11/locale/en_US.UTF-8/Compose"
<Multi_key> <Cyrillic_e> : "є" U0454
<Multi_key> <Cyrillic_E> : "Є" U0404
<Multi_key> <Cyrillic_yeru> : "i" U0456
<Multi_key> <Cyrillic_YERU> : "І" U0406
<Multi_key> <Cyrillic_ghe> : "ґ" U0491
<Multi_key> <Cyrillic_GHE> : "Ґ" U0490
<Multi_key> <Cyrillic_hardsign> : "ї" U0457
<Multi_key> <Cyrillic_HARDSIGN> : "Ї" U0407


P.S. После изменений не забудьте перегрузить X-сервер