вторник, 31 марта 2009 г.

Изменение раскладки клавиатуры в Linux. Модифицируем машинописную раскладку

В своё время я много извращался с разнообразными раскладками. Одно время даже вовсю пользовался фонетической ЯВЕРТЫ. Потом серьезно задался целью отказаться от раскладки ЙЦУКЕН, которая была на самом деле придумана за бургом (стыд и позор нашим). Серьезный стимул появился после прочтения статьи господина Зубачёва о неэффективности вражеской раскладки, ставшей стандартом. Проблема ЙЦУКЕН в том, что основная нагрузка ложится на указательные пальцы. Если в эпоху печатных машинок это было позитивным моментом, то сейчас пальцы не так устают от нажатий на клавиши на современных клавиатурах. Стало быть, желательно бы задействовать больше пальцев, чем практически два, как это и бывает на ЙЦУКЕН. Зубачёв предложил свой вариант раскладки, но осилить его я не смог - уж больно много бы времени понадобилось для её изучения. К сожалению, статья Зубачёва пропала из интернета (гугл выдает только старые темы уже несуществующего форума), но пользователь atommix в своем профиле на клавогонках опубликовал информацию о её подключении. Увы, без статьи понять её преимущества тяжело.

Поскольку сил на эту раскладку будущего у меня не хватило, я решил отделаться модифицированием машинописной раскладки typewriter под себя. Об этом я и опишу в этой заметке.

Почему я выбрал машинописную и что меня не устроило в winkeys?

  • Запятая на шифте
  • Цифры в нижнем регистре, в то время как на клавиатуре и так места не хватает для нашего слегка большего алфавита по сравнению с латинским, а для цифр, которые не так часто встрачеются при написании текста и так есть дополнительная клавиатура

Что меня не устроило в оригинальной машинописной раскладке, так это расположение некоторых знаков на тех же клавишах с цифрами. Например, мне совершенно непонятно зачем было на цифру "8" вешать знак подчеркивания "__", в то время как он и так есть в нижнем регистре знака "минус". По мне, так расположить там знак умножения, как на английской раскладке куда как полезнее. Также я решил расположить на цифре "2" кавычки, а на цифре "3" знак "№". Поскольку я часто занимаюсь написанием текста в LaTeX, то установка неразрывного пробела "~" доставляла постоянно головную боль. Дабы не сильно отдаляться от английской раскладки, я поставил знак "~" в верхний регистр, так же, как и в us-раскладке. При использовании LaTeX также приходится печатать скобки, фигурные и квадратные, если с фигурными у меня еще справляется пакет auctex.el для Emacs, расставляя их автоматом при установке латеховского макроса, то с квадратными это не так. Хотя... вот сейчас даже и не припомню где мне пригодились квадратные скобки при написании русского текста. Пожалуй, только при использовании PSTricks для создания иллюстраций и русских подписей. Однако, факт остаётся фактом - я убрал твёрдый знак и поставил его в верхний регистр мягкого знака (при необходимости большой мягкий знак можно напечатать, используя CAPS LOCK), а не его место в нижнем регистре поставил "[", а в верхнем, соотвественно, "]".

Последний штрих: буква "ха" располагается в неудобной позиции - правее буквы "з", которая и так наживается мизинцем, что постоянно приводило меня к опечаткам. Как показывает практика, это приводит не только меня к опечаткам. Мне рассказывали истории, как в одном заявлении, адресованом некоторому господину Зуеву, случайно нажали не ту клавишу. Так вот, поскольку в машинописаи запятая и точка находятся на цифрах 6 и 7 соответственно, то необходимость в клавише правее "ю" по сути отпадает, но там сидит буква "ё". Надо только куда-то отправить слэш, что я и сделал - на нижний регистр клавиши "тильда" и букву "ё" поменять с "х" местами. Это я и сделал.

Итак, моя раскладка в нижнем регистре выглядит следующим образом:

/!"№;:,.*?%-=(

 йцукенгшщзё[

 фывапролджэ

 ячсмитьбюх
В верхнем регистре:
~1234567890_+)

 ЙЦУКЕНГШЩЗЁ]

 ФЫВАПРОЛДЖЭ

 ЯЧСМИТъБЮХ
Изменений немного, но они очень положительно сказываются на моей работе. Чтобы раелизовать такое в Linux, необходимо модифицировать файл /usr/share/X11/xkb/symbols/ru. Но сначала сделаем бэкап:
sudo cp /usr/share/X11/xkb/symbols/ru /usr/share/X11/xkb/symbols/ru.backup
чтобы потом в случае возникновения проблем и нежеланием в них разбираться сделать обратное копирование: </src> sudo cp /usr/share/X11/xkb/symbols/ru.backup /usr/share/X11/xkb/symbols/ru </src> Итак, приступим к редактированию файла в вашем любимом текстовом редакторе (например, vim):
sudo vim /usr/share/X11/xkb/symbols/ru
Находим строки вида:
partial alphanumeric_keys
xkb_symbols "typewriter" {
  include "ru(common)"
  name[Group1]= "Russia - Typewriter";
дальше идет определение клавиш. Именно здесь и определена машинописная раскладка. Я её привёл к виду:
partial alphanumeric_keys
xkb_symbols "typewriter" {
  include "ru(common)"
  name[Group1]= "Russia - Typewriter";
  key  { [ slash, asciitilde ] };
  key  { [ exclam, 1 ] };
  key  { [ quotedbl, 2 ] };
  key  { [ numerosign, 3 ] };
  key  { [ semicolon, 4 ] };
  key  { [ colon, 5 ] };
  key  { [ comma, 6 ] };
  key  { [ period, 7 ] };
  key  { [ asterisk, 8 ] };
  key  { [ question, 9 ] };
  key  { [ percent, 0 ] };
  key  { [ parenleft, parenright ] };

  key  { [ bracketleft, bracketright ]
  };
  key  { [ Cyrillic_io, Cyrillic_IO ] };
  key  { [ Cyrillic_ha, Cyrillic_HA ] };
  key  { [Cyrillic_softsign,Cyrillic_hardsign ] };
};

Строка типа

  key  { [ slash, asciitilde ] };
означает, что при нажатии на клавишу "TLDE" будет печататься в нижнем регистре слэш, а в верхнем, соответственно, тильда. Я не задавался целью понять досканально все эти обозначения, но мне хватило взгяда на примеры раскладок ru(phonetic) и us, чтобы сделать то, что и требовалось.

Теперь редактируем xorg.conf:

sudo vim /etc/X11/xorg.conf

Section "InputDevice"
 Identifier "Generic Keyboard"
 Driver "kbd"
 Option "XkbRules" "xorg"
 Option "XkbModel" "pc105"
 Option "XkbLayout" "us,ru"
 Option "XkbVariant" ",typewriter"  # <- вариант раскладки ru
 Option "XkbOptions" "grp:menu_toggle"  # <- мой способ переключения между раскладками по клавише меню (ваш может отличаться)
EndSection
Собственно, и всё. Перезапускаем иксы и проверяем. А если что не устроило - всегда можно восстановить из бэкапа файл /usr/share/X11/xkd/symbols/ru и вернуть в xorg.conf то, что было (возможно, winkeys).

Стоит отметить, что при обновлении/переустановке иксов, файл /usr/share/X11/xkd/symbols/ru перезапишется, следовательно, желательно его ещё куда-нибудь кинуть в домашний каталог.

Проблемы были обнаружены на Ubuntu 8.04. Просто Ubuntu считает себя больно умной и при старте иксов говорила, что раскладка-то не совсем такая. Однако, закрыв окно предупреждения, можно было работать без каких-либо проблем. В Ubuntu 8.10 подобное не наблюдалось, как и в Дебиане.

В дальнейшем напишу как интегрировать такую раскладку в Emacs.

Копируете статью - поставьте ссылку на оригинал!

Комментариев нет:

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