Pull to refresh

Умная раскладка через ComposeKey

Reading time3 min
Views2.9K
Этот топик — продолжение моего предыдущего, где я описывал проблему с переключениями раскладок, если их три и больше. В этом топике я расскажу о решении этой проблемы через 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-сервер
Tags:
Hubs:
+27
Comments12

Articles