2009-07-01
Эта история началась с того, что я поменял клавиатуру — действие, которое я осуществляю только под непреодолимым гнётом обстоятельств. В данном случае гнёт этот выразился в том, что меня достала моя беспроводная клавиатура имени товарища Logitech'а.
Всем она была хороша — и тактильностью, и расположением клавиш, и тем, что шла в комплекте с очень приличной мышью, разумеется, также беспроводной. Но имела три неискоренимых врождённых недостатка, следующих из её беспроводной природы:
В результате пошёл я в магазин и прикупил себе проводную (с USB-разъёмом) клавиатуру BTC 6100 — Ultra Slim Multimedia. Которая, кроме ультраплоскости, отличалась ещё и ультракомпактностью (за счёт отсутствия NumPad'а), коротким ходом клавиш при отличной тактильности, наличием светодиодных индикаторов. Мультимедийными прибамбасами она была не очень отягощена: имелись Интернет-клавиши Назад, Вперёд, Домой и клавиши регуляции звука:

Но так было не всегда. Останавливаться на истории создания пишущей машинки не буду — интересующийся легко найдёт эти сведения в Интернете. Не буду также пересказывать легенды о причинах появления современных клавиатурных раскладок — тем более, что никаких документальных подтверждений оным обнаружить так и не удалось. А начну я с обзора современного положения дел в этой области.
Но перво-наперво договоримся о терминах. В Windows под словом "раскладка" понимается сочетание языковой принадлежности и непосредственно системы расположения клавиш. Например, русская раскладка по умолчанию, русская фонетическая и русская (пишущая машинка) выступают как равноправные.
В Linux'е (точнее, в оконной системе X — о раскладках в консоли мы здесь говорить не будем) принята несколько иная номенклатура: понятие "раскладка" определяет страну и принятый в ней набор символов, тогда как собственно разновидности расположения клавиш именуются вариантами, вне зависимости от языка.
Для страны России и набора символов кириллицы в настоящее время сохраняют актуальность следующие варианты русской (ru) раскладки:



Существуют и менее известные варианты русской раскладки, штатно не включаемые в дистрибутивы (по крайней мере, мне об этом ничего неизвестно). Одна из них — так называемая типографская раскладка Ильи Бирмана, позволяющая непосредственно вводить с клавиатуры парные и "лапчатые" кавычки, короткие и длинные тире и так далее. Изначально разработанная для Windows, она была адаптирована и для Иксов. С той же целью был разработан и вариант enhanced русской раскладки.
Все перечисленные варианты русской раскладки, кроме фонетического, в основе своей имеют базовую раскладку ЙЦУКЕН, созданную некогда для пишущих машинок по тем же принципам, что и изначальная раскладка QWERTY — изобретение Кристофера Шоулза, основоположника машинописи (ознакомиться с историей вопроса можно здесь). Ныне её рассматривают как анахронизм "механических" времён, и время от времени предпринимают попытки замены на что-нибудь более "эргономичное".
Для латиницы такая замена была предложена ещё в тридцатые годы Августом Двораком, профессором Вашингтонского университета. Будучи профессиональным психологом и педагогом, он подошёл к этому вопросу сугубо научно, с учётом частоты употребления букв, физиологии и психологии:

Попыткой преодолеть необходимость принципиального переучивания было создание варианта Colemak, разработанного (также для латиницы) Шаем Колманом совсем недавно, в 2006 году:

На Руси тоже предпринимались попытки создания "эргономичных" вариантов для русской раскладки — по крайней мере об одной такой, получившей имя DIKTOR, мне известно:

Так что, если не вдаваться в экстрим с полным переучиванием, фактически, выбор вариантов раскладки в русскоязычном окружении сводится к четырём перечисленным ранее. При этом вариант phonetic отметаем с негодованием — предназначен в первую очередь для людей, русским языком не владеющих (хотя, подозреваю, таковые на форумах Рунета не так уж и редки).
С не меньшим негодованием следует отмести и вариант legacy — если, разумеется, у пользователя нет привычки к оному со времён "чёрного" DOS'а: никакими иными преимуществами оный не отмечен, а недостатков хоть отбавляй. Главные из них — несовпадение с фабричной маркировкой современных клавиатур и нахождение всех знаков препинания на верхнем регистре.
Так что, фактически, у нас простая альтернатива — winkeys или typewriter. В пользу первого говорит:
Но в конце 1980-х у нас появились персональные компьютеры иностранного производства. Клавиатур, учитывающих длину русского алфавита, никто в мире не производил и не собирается. Поэтому какому-то идиоту поручили (или он сам вызвался, не важно) русифицировать что есть. И этот идиот, будучи, видимо, программистом, совершил не просто идиотский поступок, а преступление: он поместил запятую в верхний регистр, потому что русский алфавит длинный, а клавиш на клавиатуре столько, сколько нужно для размещения латинского алфавита.В цитате присутствуют некоторые фактические ошибки: как уже говорилось, на первых персоналках под DOS использовался вариант legacy (где все знаки препинания, без всякой дискриминации, были опущены в парашу — то есть подняты на верхний регистр), либо, всё-таки, вариант typewriter. Тем не менее с итоговым выводом Тёмы согласен: изобретатель winkeys-варианта русской раскладки был либо врагом-вредителем, либо инициативным идиотом (а инициативный идиот, как гласит киргизская народная мудрость, гораздо опаснее врага-вредителя).
Тем не менее, всё не так суицидально — по крайней мере в UNIX-подобных системах. Ибо там пользователь может без труда подогнать стандартный вариант раскладки под свои потребности — для чего ему нужны только текстовый редактор и знание того, какой именно файл отвечает за раскладку клавиатуры.
С файлом — всё просто: кириллическая раскладка клавиатуры в Иксах (повторяю, о консоли сейчас речь не идёт, это особая история) описана в файле /usr/share/X11/xkb/symbols/ru (реальное местоположение его может варьировать в зависимости от дистрибутива — но симлинк всегда будет по указанному пути). Так что следует его загрузить в текстовый редактор (с правами суперпользователя) и отредактировать должным образом (разумеется, копию оригинала надо предварительно сохранить — во избежание).
Как редактировать файл описания раскладки — становится ясным из его просмотра. В двух словах: главной частью его является секция common, описывающая основные алфавитные клавиши и общая для всех вариантов русской раскладки (кроме варианта phonetic — по понятным причинам его алфавитная часть выглядит совершенно иначе). Очевидно, что в базовой секции менять что-либо нецелесообразно, хотя и не запрещается.
Далее, каждому из прочих основных вариантов соответствует своя секция, в которой описываются его особенности, в частности, расположение знаков препинания и прочих специальных символов. И вот тут-то открывается простор для модификации: редко используемые символы, расположенные на удобных местах, можно заменить символами часто используемыми, например, той же пресловутой запятой.
Как я уже говорил, по ряду причин в качестве такой "заменяемой" клавиши я довольно давно уже избрал "левый бак-слэш", который при русской раскладке я никогда не использовал по прямому назначению. Почему и повесил на нижний регистр этой клавиши запятую, а на верхний — апостроф, который применяю довольно часто.
Для этого всего-то и нужно было, что вписать в секцию xkb_symbols "winkeys" строку
key <LSGT> { [ comma, apostrophe ] };
В принципе, этой строкой можно подменить и оригинальные значения кода LSGT в секции common — тогда новые символы будут вводиться при всех вариантах раскладки.
При желании можно подменить значения и других редко используемых клавиш, таких, как заглавные Ё (насколько мне известно, она применяется только в случае русского идиоматического выражения) и Ъ (примеров использования которого на верхнем регистре я просто не знаю). Повесив на них такие символы, как тильда или одинарная кавычка, в русской раскладке отсутствующие как класс. В общем, простор для творчества ограничен только фантазией и реальными потребностями.
В чём недостаток прямого редактирования файла раскладки — очевидно: положение всех дополнительных клавиш на клавиатурах ничем и никем не регламентировано, и они могут кочевать по "доске" совершенно произвольным образом, например, тот же левый бак-слэш может располагаться на правой её части или, как это стало в обычае нынче, вообще отсутствовать. Что при смене клавиатуры или просто переходе с декстопа на ноутбук доставляет немало неудобств.
И потому более радикальный способ решения проблемы запятой (а также всех остальных "верхнерегистровых" знаков препинания — отказ от варианта winkeys вообще, и переход на вариант typewriter. Что я и проделал после последней смены клавиатуры.
Это тоже имеет свои недостатки. Во-первых, как я уже говорил, маркированных соответствующим образом клавиатур, насколько мне известно, в природе не существует. Во-вторых, некоторое время на привыкание всё-таки потребуется.
Первая проблема временно, до выработки автоматизма, может быть решена посредством наклеек на клавиши — правда, давеча приобретая их, я с удивлением обнаружил, что они стоят примерно половину цены не вполне беспородной клавиатуры.
Вторая же задача решается ежедневной, ежечасной, ежеминутной тренировкой. У меня на это ушло около суток чистого времени — правда, в прошлой своей жизни я заканчивал курсы машинописи и более четверти века печатал на механических пишущих машинках. Тем не менее, овчинка в любом случае стоит выделки. И потому беру на себя смелость рекомендовать вариант typewriter всем, кому в большом количестве приходится набирать русские тексты.
Как изменить вариант раскладки? Традиционный способ, основанный на использовании файла конфигурации Иксов описан бессчётно и сводится к внесению в /etc/X11/xorg.conf строк вида:
Option "XkbLayout" "us,ru(typewriter)"или
Option "XkbLayout" "us,ru" Option "XkbVariant" "typewriter"а также обеспечения переключения латницы на кириллицу посредством строки вроде
Option "XkbOptions" "grp:lwin_toggle,grp_led:scroll"Каковая предусматривает переключение по левой win-клавише и указание текущей раскладки индикатором ScrollLock (разумеется, и то, и другое определяется сугубо индивидуальными предпочтениями).
В современных версиях Xorg использование файла его конфигурации требует ещё двух строк
Option "AutoAddDevices" "False" Option "AllowEmptyInput" "False"запрещающих автоматическое определение устройств ввода.
С другой стороны, ныне можно обходиться без файла /etc/X11/xorg.conf, настраивая раскладку, её вариант и переключатель через HAL, как это было подробно описано в соответствующей заметке, к коей и отсылаю за подробностями.
Надеюсь, что читатель, опробовавший вариант typewriter, быстро убедится в том, что для массового набора он куда более пригоден, нежели привычный winkeys. Осталось только убедить производителей клавиатур (или, скорее, их распространителей на Руси) выпускать их модели, фабрично маркированные в соответствие с вариантом typewriter. А в идеале, если уж помечтать, — то и специальные клавиатуры для юниксоидов. Специфика которых должна быть вовсе не в клавишах с изображением пингвина или деймона. Не секрет ведь, что при массовом наборе текстов большинство пользователей Unix-подобных систем для навигации по тексту пользуются не клавишами управления курсором, а привычными кейбиндингами — кто в стиле vi, кто — в стиле emacs. Так почему бы не выкинуть с клавиатур всякие стрелки, PgUp/PgDown, End/Home? Ведь это позволит создавать вполне компактные "доски" с клавишами нормального размера, что более чем востребовано для малогабаритных ноутбуков.
Право, это задача куда более благородная и практически значимая, нежели борьба с предустановленной Windows...
В настоящей заметке использованы иллюстрации из Википедии — Раскладка клавиатуры, QWERTY и Клавиатура Дворака, а также из статьи Новая усовершенствованная раскладка клавиатуры для кириллицы (DIKTOR).
А какой вариант раскладки используете вы? Если есть желание и время, можете принять участие в опросе.