GNU/Linux, Vim, LaTeX, полезные скрипты, визуализация данных, численные расчёты

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

11 коммент.:

Анонимный комментирует...

Спасибо за статью. Очень удобная функция. :)

А что надо сделать для того, что бы изменения в ~/.XCompose вступили в силу? Перезапустить X-сервер?

jetxee комментирует...

У меня изменения вступают в силу для новозапущенных приложений, то есть: редактирую ~/.XCompose, добавляя новую последовательность, закрываю gedit, открываю gedit — новая последовательность работает.

shoorick комментирует...

Работает под FreeBSD / KDE. Правда, общесистемный список Compose-последовательностей хранится в /usr/local/lib/X11/locale/en_US.UTF-8/Compose

ЗЫ Ещё файлик: со стрелками (но работают ещё не все), дореволюционными и башкирскими буквами — http://shoorick.ru/lj/txt/dotXCompose_as

Денис комментирует...

Спасибо, полезная штука...
А может кто-нибудь знает как сделать раскладку-транслитерацию? Так, чтобы при переключении на нее и нажатии на "ж" вводилось "zh", "п" - "p" и т.д.

jetxee комментирует...

2shoorick:
Спасибо за файлик! Дореволюционную ѣ, стрелки и ≠ скопировал к себе. Хорошие мнемоники придумал!

2Денис:
Как сделать транслитерационную раскладку, я не знаю. Посмотри статью Creating custom keyboard layouts for X11 using XKB. Возможно, поможет.

Анонимный комментирует...

Вместо пакета im-switch можно задать переменные в файле /etc/enviroment:

GTK_IM_MODULE=xim
QT_IM_MODULE=xim

Анонимный комментирует...

Спасибо огромное!

nullie комментирует...

Спасибо, если-бы я ещё текст не по-диагонали читал, сразу бы пронял про XIM :)

darkk комментирует...

Спасибо, превосходный совет, многоточия как раз не хватало.

Ярослав Клюев комментирует...

А где узнать как правильно писать <определения клавишь>?

например я хочу на русские что-то забиндить кнопки

jetxee комментирует...

Здравствуйте, Ярослав!

<Названия_клавиш> можно подглядеть в файле /usr/share/X11/xkb/symbols/ru, где определены разные русские раскладки клавиатуры. Искать идентификаторы вида Cyrillic_io («ё») и Cyrillic_IO («Ё»).

Например, там есть такая строчка:
«key <TLDE> { [ Cyrillic_io, Cyrillic_IO ] };»
означающая, что при нажатии на тильду в русской расскладке набирается «ё» или«Ё» соответственно. И можно делать сочетания такого рода, работающие в русской раскладке:
«<Multi_key> <Cyrillic_be> <Cyrillic_be> : "„" # открывающая кавычка-лапка на Compose-б-б
<Multi_key> <Cyrillic_io> <Cyrillic_io> : "“" # закрывающая кавычка-лапка на Compose-ё-ё
<Multi_key> <Cyrillic_e> <Cyrillic_e> : "“" # закрывающая кавычка-лапка на Compose-э-э
»

Отправить комментарий