пятница, 21 мая 2010 г.

Создание собственной раскладки клавиатуры

Как и многие наверное в Украине, я использую три клавиатурные раскладки: Английскую, Русскую и Украинскую. Украинскую я использую реже всего, но иногда надо. Каждый раз ее устанавливать, когда она нужна, немного напрягает, так же, как напрягает необходимость скакать пальцами по клавиатуре как конь при частом переключении раскладок. Среди украинских раскладок есть одна очень интересная, которая в прошлом дистрибутиве называлась Ukrainian unicode (сейчас просто "Украинская"). Ее особенность в том, что в ней зашиты как русские буква типа "Ы", так и украинские типа "І", но проблема в том, что по умолчанию используются украинские буквы и нужно нажимать клавишу-модификатор, чтобы ввести русскую, а для таких русскоязычных украинцев как я нужно как раз наоборот.

Итак, ближе к делу.

Все раскладки в Ubuntu хранятся в директории /usr/share/X11/xkb/symbols/, в частности все украинские раскладки хранятся в файле /usr/share/X11/xkb/symbols/ua.

Сначала создаем резервную копию этого файла:

cd /usr/share/X11/xkb/symbols/ && sudo cp ua ua.bak



Затем открываем этот файл для редактирования:

sudo gedit ua

При просмотре файла ua можно достаточно быстро разобраться что именно нужно менять.

Берем ту раскладку, которая ближе всего к тому, что нам надо, например Ukraine - Winkeys

Вот часть кода, отвечающая за нее:

partial alphanumeric_keys
xkb_symbols "winkeys" {
include "ua(basic)"

name[Group1]= "Ukraine - Winkeys";

key <ae03> { [ 3, numerosign ] };
key <ae04> { [ 4, semicolon ] };
key <ae05> { [ 5, percent ] };
key <ae06> { [ 6, colon ] };
key <ae07> { [ 7, question ] };
key <ae08> { [ 8, asterisk ] };
key <ab10> { [ period, comma ] };
};


Копируем эту часть в конец файла и редактируем:

Вместо include "ua(basic) вставляем include "ua(winkeys)", чтобы в качестве основы использовалась именно раскладка winkeys.

name[Group1]= "Ukraine - Winkeys"; заменяем на name[Group1]= "Ukraine - My key list";, то есть пишем имя раскладки, под которым она будет видна в меню выбора раскладок в Gnome.

И дальше редактируем по собственному усмотрению непосредственно строчки key меняя назначение клавиш.

Кроме добавления русских и украинских букв в одну раскладку можно сделать так, чтобы такие символы как # и , не прыгали при переключении с кириллической раскладки на английскую, что очень удобно при наборе программного кода (для этого конечно придется изменить и английскую раскладку тоже).

Вот например как выглядит моя русско-украинская раскладка:


// my layout
partial alphanumeric_keys
xkb_symbols "ua_my" {
include "ua(winkeys)"
include "level3(ralt_switch)"

name[Group1]= "Ukraine - Моя раскладка";

key <tlde> { [ apostrophe, U2019, U0301, asciitilde ] }; // Apostrophe and Stress symbol
key <ae01> { [ 1, exclam, ampersand ] };
key <ae02> { [ 2, quotedbl, twosuperior, at ] };
key <ae03> { [ 3, numbersign, percent, numerosign ] }; // Paragraph and Hryvnia sign
key <ae04> { [ 4, semicolon, EuroSign ] };
key <ae05> { [ 5, colon, degree ] };
key <ae06> { [ 6, asciicircum, less ] };
key <ae07> { [ 7, question, greater ] };
key <ae08> { [ 8, asterisk, dollar ] };
key <ae09> { [ 9, parenleft, bracketleft, braceleft ] };
key <ae10> { [ 0, parenright, bracketright, braceright] };
key <ae11> { [ minus, underscore, emdash, endash ] };
key <ae12> { [ equal, plus, U2248, plusminus ] };

key <ad03> { [ Cyrillic_u, Cyrillic_U, Byelorussian_shortu, Byelorussian_SHORTU ]};
key <ad04> { [ Cyrillic_ka, Cyrillic_KA, registered ] }; // Registered tm
key <ad05> { [ Cyrillic_ie, Cyrillic_IE, Cyrillic_io, Cyrillic_IO ] };
key <ad12> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN, Ukrainian_yi,Ukrainian_YI ] };
key <ac02> { [ Cyrillic_yeru, Cyrillic_YERU, Ukrainian_i, Ukrainian_I ] };
key <ac11> { [ Cyrillic_e, Cyrillic_E, Ukrainian_ie,Ukrainian_IE ] };

key <bksl> { [ backslash, bar, Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };

key <ab03> { [ Cyrillic_es, Cyrillic_ES, copyright ] };
key <ab06> { [ Cyrillic_te, Cyrillic_TE, trademark ] };
key <ab08> { [ Cyrillic_be, Cyrillic_BE, guillemotleft, doublelowquotemark ] };
key <ab09> { [ Cyrillic_yu, Cyrillic_YU, guillemotright, leftdoublequotemark ] };
key <ab10> { [ period, comma, slash, ellipsis ] };
};



Вы конечно можете придумать что-то еще интереснее.

Далее нужно указать системе, что появилась еще одна раскладка, а именно прописать ее в файле

/usr/share/X11/xkb/rules/evdev.xml

Снова создаем резервную копию файла:

cd /usr/share/X11/xkb/rules/
sudo cp evdev.xml evdev.bak


Открываем его для редактирования:

sudo gedit evdev.xml

и вставляем в разделе после


<layout>
<configitem>
<name>ua</name>
<shortdescription>Ukr</shortdescription>
<description>Ukraine</description>
<languagelist><iso639id>ukr</iso639id></languagelist>
</configitem>


вот такой текст:

<variant>
<configitem>
<name>ua_my</name>
<description>Ukraine - My key list</description>
</configitem>
</variant>


Сохраняем файл.

После этого заходим в меню Система-Параметры-Клавиатура и добавляем новую раскладку к активным.

Теперь можно пользоваться двумя раскладкам вместо трех.

P.S. Внимательно следите за пунктуацией в файле раскладок, одна лишняя запятая без параметра не даст вам использовать раскладку!

UPDATE После очередного обновления опять слетела раскладка. Попытался восстановить ее по собственной инструкции и что-то не заладилось - раскладку упорно отказывалась отображаться в списке доступных. Тогда я не мудрствуя лукаво просто изменил непосредственно украинскую раскладку используемую по-умолчанию: все сразу заработало как надо!

1 комментарий:

Популярные сообщения