20080207

Как задавать произвольные Compose-последовательности

Я уже писал о том, как с помощью клавиши Compose набирать диакритику (символы с акцентами), типографские кавычки и другие символы уникода, отсутствующие в стандартной раскладке . Писал и о том, как я приспособил клавишу Compose, чтобы набирать ударения в словах (добавив специальную Compose-последовательность для символа ударения). Тогда же я ещё сокрушался, что среди стандартных Compose-последовательностей не хватает символа многоточия…

То, как я добавил новую Compose-последовательность (пересобрав метод ввода Latin-Plus) — было решением неудобным и негибким. Недавно же я узнал, как можно гораздо проще и быстрее задавать произвольные Compose-последовательности. Для этого, оказывается, достаточно отредактировать файл ~/.XCompose. Об этом и пойдёт речь.

1. Надо включить клавишу Compose (об этом я уже писал);
2. Маленькая хитрость. Вначале надо настроить систему так, чтобы библиотеки Qt и особенно GTK использовали метод ввода X Input Method (xim). Для этого в Debian можно установить im-switch, запустить im-switch -c и выбрать default-xim из списка. В других системах, видимо, надо присвоить переменным окружения GTK_IM_MODULE и QT_IM_MODULE значение xim (например, поместить GTK_IM_MODULE=xim в /etc/environment). Если этот шаг пропустить, все последующие настройки на GTK приложения распространяться не будут (они будут использовать свой метод ввода). С Qt приложениями, если честно, я не экспериментировал, но видимо и они могут иметь отдельную настройку;
3. После этого можно создать в домашнем каталоге файл ~/.XCompose. Первой его строчкой можно включить все стандартные комбинации клавиш:
include "/usr/share/X11/locale/en_US.UTF-8/Compose"

а затем можно и задать любые дополнительные последовательности (по образцу как в /usr/share/X11/locale/en_US.UTF-8/Compose). Например,
<Multi_key> <period> <space> : "…" U2026 # HORIZONTAL ELLIPSIS, многоточие
<Multi_key> <apostrophe> <apostrophe> : "́" U0301 # ударение

Всё, в запускаемых теперь приложениях должны работать новые комбинации. В частности, при нажатии Compose + точка + пробел будет набираться знак многоточия (который отличается от трёх точек), а если после буквы нажать Compose + два раза апостроф — над буквой появится знак ударения.

Таким образом можно вводить любые сиволы из уникодной таблицы (найти нужный символ поможет gnome-character-map). Достаточно вставить этот символ в кавычки после описания последовательности. Можно таким образом создавать целые клавиатурные макросы. В частности, я попробовал повесить <a href="" ></a> на сочетание Compose+a+h. Работает! Желающие могут взглянуть на мой файл ~/.XCompose (кодировка UTF-8). Я добавил туда ещё немного математики и греческие буквы.

Теперь можно прямо в e-mail писать: «∀ε>0 ∃δ>0 ∀x,|x-x₀|<δ : …» :)

Информацию я почерпнул из этих источников:
International text support on Linux
Compose key magic

Дополнение: в комментариях Shoorick дал ссылку на свой .XCompose, в котором есть дореволюционная буква «ѣ» и другая экзотичная кириллица, довольно удобные кавычки для русской раскладки, а также буквы для татарского, башкирского и казахского языков и набор разных стрелок (← → ↗ ↘ ⇐ ⇒ …): http://shoorick.ru/lj/txt/dotXCompose_as (стрелки, дореволюционные буквы и кавычки я заимствовал в свои настройки).