Преамбула
Некоторое время назад я быстро и как-то незаметно «подсел» на эту раскладку и заимел привычку везде использовать тире, кавычки-ёлочки, многоточия и прочие символы, при повседневном использовании в большинстве случаев заменяемыми суррогатами. Переехав в Ubuntu, с огорчением убедился, что Compose-key для полного счастья все-таки не хватает. Перейдя по ссылке «некая версия для Линукса» с сайта Бирмана, я с огорчением обнаружил, что предложенное Сергеем Столяровым решение мне не нравится. Не нравится как минимум тем, что смешивать саму раскладку и способ переключения мне показалось весьма… странным. В полном соответствии с принципом «Критикуешь — предлагай» я несколько модернизировал решение Сергея.
Задача
Добиться поддержки «типографической» функциональности средствами, максимально приближенными к штатным.
Решение
…оказалось достаточно простым, можно даже сказать тривильным.
Шаг 1
Выбираем основу. Как и практически любому «беглецу» из оффтопика мне оказалось удобнее всего использовать winkeys.
Шаг 2
Придумываем название и идентификатор. «Winkeys + Typography» и «winkeys_typo» кажутся вполне подходящими.
Шаг 3
Добавляем информацию о новой (правда, еще несуществующей) раскладке в общий список (/etc/X11/xkb/base.xml) в элемент, ответственный за русский язык (//layoutList/layout[configItem/name='ru']/variantList — в Ubuntu 8.04 это окрестности строки 2826) в виде нового варианта:
<layout>
<configItem>
<name>ru</name>
<shortDescription>Rus</shortDescription>
<description>Russia</description>
</configItem>
<variantList>
<variant>
<configItem>
<name>winkeys_typo</name>
<description>Winkeys + Typography</description>
</configItem>
</variant>
<variant>
Шан 4
Создаем в наиболее подходящем месте (/etc/X11/xkb/symbols/ru) новую раскладку, бессовестно использовав результаты работы Сергея, полностью либо частично (я реализовывал частичный вариант — для достижения функциональности раскладки Бирмана, но можно пойти дальше):
partial alphanumeric_keys
xkb_symbols "winkeys_typo" {
include "ru(winkeys)"
name[Group1]= "Russia — Typography";
key.type[group1]="FOUR_LEVEL";
key <TLDE> { [ Cyrillic_io, Cyrillic_YO, acute, approxeq ] };
key <AE01> { [ 1, exclam, onesuperior, onesuperior ] };
key <AE02> { [ 2, quotedbl, twosuperior, twosuperior ] };
key <AE03> { [ 3, numerosign, threesuperior, threesuperior ] };
key <AE04> { [ 4, semicolon, section, section ] };
key <AE05> { [ 5, percent, 0x01002030, 0x01002030 ] };
key <AE11> { [ minus, underscore, emdash, hyphen ] };
key <AE12> { [ equal, plus, notequal, plusminus ] };
key <AD01> { [Cyrillic_shorti, Cyrillic_SHORTI, q, onequarter ] };
key <AD03> { [ Cyrillic_u, Cyrillic_U, EuroSign, oneeighth ] };
key <AD04> { [ Cyrillic_ka, Cyrillic_KA, registered, R ] };
key <AD05> { [ Cyrillic_ie, Cyrillic_IE, trademark, onethird ] };
key <AD09> { [ Cyrillic_shcha, Cyrillic_SHCHA, masculine, O ] };
key <AC01> { [ Cyrillic_ef, Cyrillic_EF, approxeq, A ] };
key <AC02> { [ Cyrillic_yeru, Cyrillic_YERU, section, S ] };
key <AC03> { [ Cyrillic_ve, Cyrillic_VE, degree, D ] };
key <AC04> { [ Cyrillic_a, Cyrillic_A, sterling, F ] };
key <AC06> { [ Cyrillic_er, Cyrillic_ER, h, onehalf ] };
key <AC07> { [ Cyrillic_o, Cyrillic_O, doublelowquotemark, J ] };
key <AC08> { [ Cyrillic_el, Cyrillic_EL, leftdoublequotemark, leftsinglequotemark ] };
key <AC09> { [ Cyrillic_de, Cyrillic_DE, rightdoublequotemark, rightsinglequotemark ] };
key <AC10> { [ Cyrillic_zhe, Cyrillic_ZHE, leftsinglequotemark, seconds ] };
key <AC11> { [ Cyrillic_e, Cyrillic_E, rightsinglequotemark, minutes ] };
key <AB02> { [ Cyrillic_che, Cyrillic_CHE, multiply, 0x010022C5 ] };
key <AB03> { [ Cyrillic_es, Cyrillic_ES, copyright, copyright ] };
key <AB08> { [ Cyrillic_be, Cyrillic_BE, guillemotleft, doublelowquotemark ] };
key <AB09> { [ Cyrillic_yu, Cyrillic_YU, guillemotright, rightdoublequotemark ] };
key <AB10> { [ period, comma, ellipsis, comma ] };
key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
include "level3(ralt_switch)"
};
Шаг 5
Активизируем раскладку (Система/Параметры/Клавиатура/Раскладки):
Шаг 6
Пользуемся :-)
PS: Сий рецепт был испытан мною в Ubuntu 8.04, но может оказаться вполне рабочим в разнообразных других дистрибуциях (разумеется, пятый шаг будет актуален лишь для дистрибуций на базе gnome)
PPS: Особо ленивые или занятые могут взять уже отредактированные файлы от Ubuntu 8.04: /etc/X11/xkb/base.xml и /etc/X11/xkb/symbols/ru.
Update:
Стоит также отметить, что раскладка Бирмана — не единственная, и, говорят, не самая лучшая. За подробностями отсылаю к
Heath’у и его обзору.
комментарии (33)
Было бы неплохо, если бы можно было описать эти типографические клавиши в отдельном файле (birman) и использовать ru+birman, en+birman и т. д. Как думаете, это возможно?
Вот есть раскладки с «AltGr + …», что под Окошками, что в Иксах.
Есть кнопка Compose, в Иксах и на Маке. Под Окнами её можно эмулировать с помощью AutoHotKey.
А больше-то особо ничего и нет? Почему нет аккордных способов (кажется, в Винде тоже можно попробовать эмулировать их в AutoHotKey)? Может, ещё какие-то способы есть?
/etc/X11/xkb/symbols/ruговорит о знаке ударения — акуте? Если да, тоTLDE— это что за клавиша? Тильда? Если да, то акут у меня не ставитсяinclude "ru(winkeys)"
нужно заменить на
include "ru(basic)" или даже просто на include "ru".
а, не не не, я немного ошибся. Очередное обновление просто перезаписало файл /etc/X11/xkb/symbols/ru, поэтому достаточно вернуть всё на место и оставить пока winkeys
Самое интересное, что если пойду опять в клавиатуру, удалю и заново поставлю типографическую раскладку — все снова работает. И потом снова пропадает.
Файла ru тоже, судя по результатам поиска по всему диску, нет нигде в других папках.
Может быть там в каком-то другом месте это храниться?