войти зарегистрироваться

Убунтариум whois

индекс
170,92

И снова о раскладке Бирмана

Преамбула

Некоторое время назад я быстро и как-то незаметно «подсел» на эту раскладку и заимел привычку везде использовать тире, кавычки-ёлочки, многоточия и прочие символы, при повседневном использовании в большинстве случаев заменяемыми суррогатами. Переехав в 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)

  • для украинского языка есть готовое решение, там даже русские буквы можно водить (ы,э,ъ), чем и пользуюсь, делал раньше своё на основе этой раскладки, правда её теперь включили в стандартный xkb
    • Спасибо за раскладку, давно про нее задумывался, но никак не доходили руки.
  • вместо последнего
    • тфу хабр зохавал теги - /layout вместо последнего /variant
      • Не, /layout там сильно ниже, вариантов русского еще много.
  • Надо же как у дураков мысли сходятся. Как раз занимался этим же самым на днях, только не довёл ещё до релиза.
    • Меня гораздо больше удивил тот факт, что практически одновременно со мной на смежную тему написал посмотреть профиль Алексей Ёжиков. Вот уж где совпадение…
      • Здесь совпадение куда большее, потому что я именно что занимался портированием раскладки Бирмана, руководствуясь пресловутой «некоей раскладкой для Линукса» :)
      • Забавно. Когда я ставил ссылку на этот топик, я не посмотрел на дату его создания, думал, что он с историей, так сказать. :)
  • Неудобство этого способа в том, что для английской раскладки придётся дублировать всё это в en-файле. И для других используемых — тоже.

    Было бы неплохо, если бы можно было описать эти типографические клавиши в отдельном файле (birman) и использовать ru+birman, en+birman и т. д. Как думаете, это возможно?
    • Думаю, возможно. Я поковыряюсь завтра в этом направлении. По положительным результатам подправлю пост, по отрицательным — просто так отпишусь :)
    • На самом деле — всё плохо, текущий способ для этого не подходит. Обратите внимание на второй конфиг — там присутствуют оригинальные буквы. Тут нужно либо искать иной способ привязки дополнительных символов, либо писать скрипт, который будет вытаскивать оригинальные буквы из базовой раскладки.
  • На самом деле интересен даже вот какой вопрос, безотносительно операционной системы. Какие вообще бывают принципы ввода дополнительных символов?

    Вот есть раскладки с «AltGr + …», что под Окошками, что в Иксах.
    Есть кнопка Compose, в Иксах и на Маке. Под Окнами её можно эмулировать с помощью AutoHotKey.

    А больше-то особо ничего и нет? Почему нет аккордных способов (кажется, в Винде тоже можно попробовать эмулировать их в AutoHotKey)? Может, ещё какие-то способы есть?
    • Может, ещё какие-то способы есть?
      Есть :)
      • Ну, инновационного способа ввода символов там нет. Всё равно должно быть произведено нажатие некой клавиши-модификатора + основной клавиши клавиатуры. Или, если там любая клавиша может быть сделана модификационной, то получается аналог аккордов.
        • Если серьезно — то вполне существуют аккордные клавиатуры, но особым успехом вроде бы не пользуются. Видимо, аккордный ввод слишком уж экзотичен для масс.
          • Ну, аккорд из двух клавиш явно удобнее, чем последовательный ввод. Точнее, мне так кажется. :)
  • А как быть если я использую фонетическую раскладку для русского в 8.04? Есть мысли по этому поводу?
    • Мысли — есть, реализации — пока нет. Над этим я подумаю завтра. © :-)
      • Ага, понял ) Если что - буду рад. Спасибо )
        • Универсального способа я не нашел, но, например, посмотреть профиль Heath расценивает этот топик как «описание технологии» изготовления раскладок. Это действительно несложно, просто требует некоторого времени.
          • Это же и есть технология. В принципе, если заморочиться, то можно написать конвертер между файлами *.klc (они текстовые, из них потом генерируется DLL) для MSKLC, xkb-файлами для Unix и любыми другими текстовыми описаниями раскладок. Тогда достаточно будет сделать раскладку в любом из предложенных редакторов, и разом конвертировать её в любой нужный формат.
  • Мне показалось, или первая же строчка:
    key <TLDE> { [ Cyrillic_io, Cyrillic_YO, acute, approxeq ] };
    в файле /etc/X11/xkb/symbols/ru говорит о знаке ударения — акуте? Если да, то TLDE — это что за клавиша? Тильда? Если да, то акут у меня не ставится почему-то. Может я не так понимаю?
    • А другие нестандартные символы ставятся? Я вроде всё проверял. На всякий случай проверьте включения (базовую раскладку — сначала, альт-свитчер — в конце) и смену типа на четырехуровневую.
      • Другие ставятся. Решил проблему другим путем: заменил слово aсute на шестнадцатеричный код акута: 0x01000301.
  • Некоторое время назад (у меня сегодня) обновления из Дебиана докатились и до убунту, как известно, winkeys теперь переименован в basic. Естественно сломалось и данное решение. Сейчас я буду чинить её у себя, я так понимаю строку:
    include "ru(winkeys)"

    нужно заменить на

    include "ru(basic)" или даже просто на include "ru".
    • upd.

      а, не не не, я немного ошибся. Очередное обновление просто перезаписало файл /etc/X11/xkb/symbols/ru, поэтому достаточно вернуть всё на место и оставить пока winkeys
      • Спасибо, дорогой мой человек :-) А то вчера после апдейта отказалась эта раскладка работать :-)
        • Да, решение-то проблемным оказалось в этом смысле… И что самое противное — я уж ничего и не сделаю с этим ввиду переезда в макось.
  • У меня странная проблема на ubuntu 8.04.01, скопировал ваши файлы, добавляю типографическую раскладку — она отлично работает, но проходит какое-то время и она просто перестает работать, то есть все буквы работают на ура, а ввод типографики пропадает.
    Самое интересное, что если пойду опять в клавиатуру, удалю и заново поставлю типографическую раскладку — все снова работает. И потом снова пропадает.
  • На Kubuntu Intrepid 8.10 искал на нескольких компах но так и не нашёл файла /etc/X11/xkb/symbols/ru и даже самой папки /etc/X11/xkb/symbols нет.
    Файла ru тоже, судя по результатам поиска по всему диску, нет нигде в других папках.
    Может быть там в каком-то другом месте это храниться?
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.