Немного о клавиатурных раскладках

Алексей Федорчук

2009-07-01

Эта история началась с того, что я поменял клавиатуру — действие, которое я осуществляю только под непреодолимым гнётом обстоятельств. В данном случае гнёт этот выразился в том, что меня достала моя беспроводная клавиатура имени товарища Logitech'а.

Всем она была хороша — и тактильностью, и расположением клавиш, и тем, что шла в комплекте с очень приличной мышью, разумеется, также беспроводной. Но имела три неискоренимых врождённых недостатка, следующих из её беспроводной природы:

  1. отсутствие светодиодных индикаторов;
  2. пропуск букв при очень быстром наборе;
  3. ограниченный ресурс мизинчиковых батареек — сколько их ни заначивай, но рано или поздно наступает момент, когда они садятся (как правило, среди ночи), и запас в холодильнике оказывается исчерпанным.
Разумеется, на такой случай имелась у меня и проводная клавиатура — но а) не очень удобная с точки зрения расположения клавиш и б) несколько громоздкая.

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

btc.jpeg

Иными словами, всё близко к идеалу — за единственным исключением: на ней напрочь отсутствовала клавиша Левый бакслэш. Зачем он нужен — спросите вы меня? Ответить легко: дело в том, что уже много лет на нижний регистр этой клавиши при кириллической раскладке я вешаю запятую — ну, сильно напрягает меня жать шифт для ввода этого, согласитесь, не редкого препинака. И вообще, более неудобного расположения знаков препинания при русской раскладке на современных клавиатурах трудно себе вообразить — разве что старая раскладка legacy превосходит её в этом отношении.

Но так было не всегда. Останавливаться на истории создания пишущей машинки не буду — интересующийся легко найдёт эти сведения в Интернете. Не буду также пересказывать легенды о причинах появления современных клавиатурных раскладок — тем более, что никаких документальных подтверждений оным обнаружить так и не удалось. А начну я с обзора современного положения дел в этой области.

Но перво-наперво договоримся о терминах. В Windows  под словом "раскладка" понимается сочетание языковой принадлежности и непосредственно системы расположения клавиш. Например, русская раскладка по умолчанию, русская фонетическая и русская (пишущая машинка) выступают как равноправные.

В Linux'е (точнее, в оконной системе X — о раскладках в консоли мы здесь говорить не будем) принята несколько иная номенклатура: понятие "раскладка" определяет страну и принятый в ней набор символов, тогда как собственно разновидности расположения клавиш именуются вариантами, вне зависимости от языка.

Для страны России и набора символов кириллицы в настоящее время сохраняют актуальность следующие варианты русской (ru) раскладки:

  1. typewriter — вариант раскладки стандартной советской пишущей машинки:

    typewriter.gif

    клавиатур, маркированных таким образом, я в заводском исполнении не видел, однако в UNIX-системах (FreeBSD и Linux) именно он был исторически первым;
  2. legacy — этот вариант получил широкое распространение во времена DOS, когда в соответствие с ним маркировались русифицированные фабричным способом клавиатуры; представляет собой инвертированный в отношении цифр и знаков препинания вариант пишущей машинки;
  3. winkeys — вариант, принятый в настоящее время в Windows, соответственно ему маркируются все современные русифицированные клавиатуры; клавиатуры:

    winkeys.png

  4. как и всё в Windows, созданы (специально?) не похожими ни на один из предыдущих;
  5. phonetic — вариант, в котором русские буквы располагаются на месте похожих по звучанию латинских:

    fonetic.png

Эти варианты являются более или менее общепринятыми, и один из них обычно предлагается на выбор при установке большинства корректно русифицированных дистрибутивов Linux. Причём следует учесть, что предлагаемый по умолчанию вариант русской раскладки — это, как правило, legacy. Исключением, насколько мне известно, являются последние версии Ubuntu — в них умолчальным вариантом выступает winkeys.

Существуют и менее известные варианты русской раскладки, штатно не включаемые в дистрибутивы (по крайней мере, мне об этом ничего неизвестно). Одна из них — так называемая типографская раскладка Ильи Бирмана, позволяющая непосредственно вводить с клавиатуры парные и "лапчатые" кавычки, короткие и длинные тире и так далее. Изначально разработанная для Windows, она была адаптирована и для Иксов. С той же целью был разработан и вариант enhanced русской раскладки.

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

Для латиницы такая замена была предложена ещё в тридцатые годы Августом Двораком, профессором Вашингтонского университета. Будучи профессиональным психологом и педагогом, он подошёл к этому вопросу сугубо научно, с учётом частоты употребления букв, физиологии и психологии:

По свидетельству тех, кто его освоил, вариант раскладки Дворака действительно обеспечивает фантастическую скорость набора (повторяю, латиницы). Он принят в качестве стандарта ANSI и поддерживается во всех UNIX-подобных операционных системах (и даже в Windows). Однако согласно статистическим данным, его использует не более 2% пользователей. Главная причина чему — резкое отличие варианта Дворака от QWERTY, а ведь именно в этой раскладке набирает свои первые символы подавляющее большинство пользователей персоналок.

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

 Утверждается, что Colemak, благодаря некоторому сходству со стандартным QWERTY, допускает их попеременное использование, обеспечивая при этом много большую скорость набора по сравнению с последним (и несколько большую, нежели при использовании варианта Дворака). Вариант Colemak поддерживается в Иксах, однако сведений о его распространенности у меня нет. Подозреваю, что популярность варианта Colemak ещё ниже, нежели варианта Дворака — хотя бы ввиду отсутствия традиции.

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

diktor.jpg

Этот вариант базируется на тех же принципах, что и вариант Дворака и, подобно последнему, согласно уверениям разработчиков, обеспечивает большую скорость набора и меньшую утомляемость. Однако и о её сколько нибудь широком использовании мне неизвестно. Более того, по моему мнению, шансов на таковое она имеет ещё меньше, нежели варианты Дворака или Колмана — вне зависимости от его достоинств, ибо все обучающие курсы набора в нашей стране базируются на использовании стандартной ЙЦУКЕН.

Так что, если не вдаваться в экстрим с полным переучиванием, фактически, выбор вариантов раскладки в русскоязычном окружении сводится к четырём перечисленным ранее. При этом вариант phonetic отметаем с негодованием — предназначен в первую очередь для людей, русским языком не владеющих (хотя, подозреваю, таковые на форумах Рунета не так уж и редки).

С не меньшим негодованием следует отмести и вариант legacy — если, разумеется, у пользователя нет привычки к оному со времён "чёрного" DOS'а: никакими иными преимуществами оный не отмечен, а недостатков хоть отбавляй. Главные из них — несовпадение с фабричной маркировкой современных клавиатур и нахождение всех знаков препинания на верхнем регистре.

Так что, фактически, у нас простая альтернатива — winkeys или typewriter. В пользу первого говорит:

  1. совпадение раскладки с фабричной маркировкой клавиш;
  2. всеобщая распространённость  (большинство недавних пользователей Windows об указанной альтернативе и не подозревают).
Против — достаточно причудливое расположение знаков препинания и, в первую очередь, нахождение запятой на верхнем регистре, что в своё время было специально отмечено Артемием Лебедевым. Не могу отказать себе в удовольствии процитировать:
Но в конце 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).

А какой вариант раскладки используете вы? Если есть желание и время, можете принять участие в опросе.