Записки i-Diota: клавиатурные раскладки

Стандартная русская раскладка клавиатуры на Mac довольно странная:
  • переключение раскладок по Command-Space;
  • точка и запятая в нестандартных местах (на кнопках 6 и 7, соответственно)

Так как Mac - не единственная моя система (более того, внутри Mac живет Windows с офисом-2007), то все имеющееся великолепие нужно заставить ходить строем.

Как выяснилось, задача настройки переключателя не вполне тривиальная:

  • В Windows стандартными средствами можно настроить только сочетание Ctrl-Shift или Alt-Shift. У меня много лет использовался Ctrl-Shift (правые), хотя переучиться недолго.
  • В Mac OS X стандартными средствами нельзя назначить переключение по произвольным клавишам, только модификатор(ы)+действие.
  • На ноутбучной клавиатуре MacBook Pro просто нету правого Ctrl в нижнем ряду.
  • В X11 (xkb) можно сделать все, но описание этого процесса рвет крышу.

В результате, проблема заняла куда больше времени, чем я бы хотел на нее потратить, но в результате все возможные способы были, похоже, изучены.

Mac OS X: раскладка клавиатуры

По счастью, все элементарно. Можно воспользоваться готовыми решениями на выбор: Вопрос с русской буквой ё и "где должна быть тильда" оставляю для самостоятельного изучения, файлы раскладок - текстовые и если не нравится что-то, то можно и самому подредактировать.

Переключение раскладок по Alt-Space/Command-Space

На Mac делать ничего не надо. Ну, если быть точным, то Command-Space в стандартн ой ситуации вызывает Spotlight, поэтому просто включение этих кнопок для выбора Input Source вызывает конфликт. Но можно для Input source оставить только переключение Next (для двух раскладок Next и Previous не нужны), а Spotlight перевесить на Alt-Space.

Windows. Ничего лучше, чем переключение по AutoHotKey я за 5 минут не нашел. Качаем, ставим, редактируем скрипт, имеем переключение по Alt-Space вдобавок к имеющемуся. Недостатки: не работает в input-поле Run и, как говорят, еще в некоторых программах, помимо этого пропадает оконное меню, которое раньше вызывалось через Alt-Space.

X11 (xkb). Проще всего оказалось похакать имеющиеся способы переключения. В файле /usr/local/share/X11/xkb/symbols/group (в более старых версиях Xorg/XFree он может называться /usr/X11R6/lib/X11/xkb/symbols/group) меняем описание модификатора alt_caps_toggle на такое же, но для пробела:

partial modifier_keys
xkb_symbols "alt_caps_toggle" {
    key        <SPCE> {
       type="PC_SYSRQ",
       symbols[Group1]= [  space,  ISO_Next_Group]
    };
};
А в xorg.conf пишем в секции описания клавиатуры:
 Option "XkbOptions" "grp:alt_caps_toggle,grp_led:scroll"
Похакать оказалось проще, чем пересоздавать symbols.dir (я за 2 минуты так и не понял чем), но можно и честно создать свой переключатель alt_space_toggle

Ура, все работает, везде переключаемся по "кнопка-слева-от-пробела"-Space (в Mac "кнопка слева" - это Command, на остальных клавиатурах - Alt).

Переключение по Shift-Control

Для Windows и X11 делать ничего, что выходило бы за рамки стандартных настроек не нужно.

С Mac дело обстоит несколько хуже:

  • Присвоить любую последовательность символов любому набору нажатых клавиш можно с помощью Controller Mate, 15 долларов жалко, но можно и заплатить за то, чтобы оставить привычные кнопки.
  • Но, как и написано выше, на ноутбучной клавиатуре просто нет правого Control.

Переключение по (Alt-)CapsLock

(Alt-)CapsLock - еще один распространенный способ переключения. Причины очевидны, клавиша CapsLock является абсолютно ненужной, а приспособить ее к чему-то хорошему хочется.

X11 - никаких проблем, одна из стандартных настроек (та самая, которую мы хачили).

Windows - делается той же AutoHotKey, но не через !Space, а через !CapsLock.

Mac. На удивление, можно сделать почти то что хочется штатными средствами, не ставя дополнительных программ. Он делается в два шага:

  1. Ремэппим клавишу CapsLock в клавишу Help
  2. Назначаем сочетанию Alt-Help функцию переключения клавиатуры (Next Layout)
Процесс ремеппинга подробно описан на macoshints (важное замечание: нужно назначить хоть какой-то мэппинг для modifier keys через Keyboard & Mouse - Keyboard - Modifier Keys, а то нужная секция в .plist будет пустой). К сожалению, назначить просто Help в качестве переключателя нельзя, какой-то модификатор обязателен.

Что же выбрать?

Дело персонального вкуса, естественно. Но раз меня сместили с привычных кнопок Ctrl-Shift, то сейчас у меня везде две переключалки (Alt-CapsLock и Alt/Command-Space), посмотрим какая выживет. Да, в Windows и X11 двойные переключалки делаются элементарно, а на Маке сработал такой финт:
  • Next Layout переключается по Alt-Help(CapsLock)
  • Previous Layout переключается по Command-Space

Comments

Блин, а где xorg.conf взять.
Во первых, по моему там XFree.
Во вторых, у XFree я конфиг тоже не видел.

Не понял вопроса, отчего пугаюсь. "там" - это где ?

А я до сих пор использую раскладку с запятой на Shift+6 и точкой на Shift+7. Как привык в конце 80-х в DOS, так зачем переучиваться?

Задача - уменьшить зоопарк, а не выяснить как правильно.

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

Это еще с пишмашинок тянется, естественно. Но не точно, ибо букву ё куда только на клавиатурах не пихали, на маке она тоже не на месте.

Но 95% поста - вообще не про раскладки, а про переключалку. И этот секс вообще необъясним никаким разумным способом

> точка и запятая в нестандартных местах
> (на кнопках 6 и 7, соответственно)

А может, всё-таки, на 7 и 6, если "соответственно")? ;-)

Ну, а во-2-х, это достаточно стандартно -- по кр. мере, именно так на практически всех QWERTY-клавиатурах. Альтернативное "решение" от M$ известно, и распространено, и даже, быть может, чуть удобнее, но это оно, скорее, нестандартно. :)

<q>Mac. На удивление, можно сделать почти то что хочется штатными средствами, не ставя дополнительных программ. Он делается в два шага:

1. Ремэппим клавишу CapsLock в клавишу Help
2. Назначаем сочетанию Alt-Help функцию переключения клавиатуры (Next Layout)

Процесс ремеппинга подробно описан на macoshints (важное замечание: нужно назначить хоть какой-то мэппинг для modifier keys через Keyboard & Mouse - Keyboard - Modifier Keys, а то нужная секция в .plist будет пустой). К сожалению, назначить просто Help в качестве переключателя нельзя, какой-то модификатор обязателен.</q>

у меня не работает.

Что именно у тебя не работает ?

это был я.

ну извЕни

1. забиндивание перключение раскладки на такую комбинацию
2. переключение раскладки по некоторым комбинациям (например, можно выставить перключение по 0-на-цифровой-клаве, но работать не будет. хоть с модификаторами, хоть без).

Alt-Help - работает. В смысле - перемепленый хелп.

Alt-Keypad0 - не работает. Keypad0 - тоже не работает.
Alt-Cmd-O - попробовал по приколу - тоже не работает.

ну вот у меня не прибиндивается. пищит и сопротивляется. и перемапленный и оригинальный (с инсерта).

а что при этом пишется в ~/Library/Prefernces/com....unversalaccess.plist?

У меня - биндится, но работает не везде.

Ну сервиспак от висты накати туда, вдруг поможет.

<q>Ну сервиспак от висты накати туда, вдруг поможет.</q>
а?!

Ну если у тебя не работает что-то, что работает у других, то это либо винды кривые, либо еще что-то непрямое.

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

на какой версии макоси это работает и что таки при этом записывается в .plist?

В указанный тобой plist ничего не пишется. А модифицированных за сегодня - слишком много, чтобы find -mtime нашел нужный.

Попробую найти нужный сам, буду рад помощи

<q>В указанный тобой plist ничего не пишется.</q>

а?! не верю (с) я именно туда и обнаружил запись этих хоткеев.

у обсуждаемого, кажется 61 (у хоткея, а не кнопки).

верия-то оси какая? отличается от 10.4.8?

PS: если снять/поставить галочку на данном хоткее, то можно будет увидеть и куда записали и что.
PPS: ls -ltTr

Да, оно пишется после закрытия окошка (а работает сразу)

Вот такое вот пишется:
&lt;dict&gt;
&lt;key&gt;enabled&lt;/key&gt;
&lt;integer&gt;1&lt;/integer&gt;
&lt;key&gt;key&lt;/key&gt;
&lt;integer&gt;114&lt;/integer&gt;
&lt;key&gt;modifier&lt;/key&gt;
&lt;integer&gt;524288&lt;/integer&gt;
&lt;key&gt;sybmolichotkey&lt;/key&gt;
&lt;integer&gt;60&lt;/integer&gt;
&lt;/dict&gt;

10.4.10

так цэ ж не Alt!

цэ ж Option (AKA Win).

может так и у меня назначилось бы. ну ручками прописанное тоже работает.
еще б от этого Win избавиться... и между приложениями по хоткеям переключаться...

Работает и Alt и Opt и Ctrl и даже все три сразу (+Help, естественно)

для уменьшения зоопарка нужно перестать быть i-diotom ;)

Ты зря, хорошая игрушка

может быть, но глядя на твои страдания этого не скажешь :)
может проще тогда было не ноут брать а обычный системник
если и клава тебе не нравится и монитор и ещё чего нибудь потом разонравится...

Мне немножко нужен ноут. У ноутов все всегда кривое, и монитор и кнопки и прочая. На нем мне нужен юникс в силу особенностей жизни.

Мне немножко нужен мак (RPP запускать).

Маковский ноут - не хуже прочих и на нем уже юникс. Такой компромисс.

Я, на самом деле, игрушкой доволен. Просто есть общепризнанное мнение, что там вообще все отлично, так вот это - не так.

Но как я чудовищно мучался с компанейским ноутом + юникс + подключение внешнего монитора (и так и не решил проблему) - это еще более дурацкая история. Не говоря о мучениях с 802.11, BT и так далее (под юниксом просто не работало, под виндами были проблемы)

Ну а что делать-то? Такого, вот чтобы вообще все и везде работало --- нет, как я подозреваю.

Я, кстати, еле отучился от раскладки, где запятая и точка под цифрами. Как только на 5-ю FreeBSD перешел, а там стандартная раскладка виндовая, я и не стал разбираться. А теперь, вот, обратно привык...

Кстати, я знаю, что ты гнутые клавиатуры не любишь, но с моей 4000-ой клавиатурой от MS шел в комплекте и intellitype для Mac'ов, то есть можно управлять специальными клавишами, причем для разных программ --- разные. А из alt'а command и из win-клавиши alt оно само сразу сделало.

<i>Ну а что делать-то? Такого, вот чтобы вообще все и везде работало --- нет, как я подозреваю.</i>

Проблема только в том, что грабли лежат в совершенно непривычных местах. Ну вот шрифты. Или перемэпливание клавиш.

1. ControllerMate для скольки-то там цепочек бесплатный (т.е., можно отказаться от Alt в связке Alt-CapsLock).
2. а вот как бы под Windows переключать с помощью того же CapsLock не все языки, но только некоторые заранее определенные?

2, дополенение
подумал, что, может, несколько неточно софрмулировал

дело в том, что у меня установленно больше, чем две input locales. несколькими языками я пользуюсь редко, и на них выделены свои shortcuts. а чаще всего переключаю en и ru.

и вот я думаю -- а как бы так сделать, чтобы с помощью того же CapsLock не переключать подряд все языки, но только эти два?

Re: 2, дополенение
В виндах можно назначить соответствующие кнопки 'switch to <kbd layout>'.
Но они будут разные.

Т.е. события такие есть, значит их можно прицепить к AutoHotKey для любой комбинации кнопок

Re: 2, дополенение
да, но переключение en и ru -- это будут, соотв., разные события. и на один CapsLock их не повесить (если только опять с еще одним модификатором).

на самом деле, программка PuntoSwitcher под Windows умеет как-то переключать только эти два языка. но у нее свой ограниченный набор кнопок. и нормально унифицировать (у меня просто тоже 3 платформы) не получается.

Вообще, идеальной была бы раскладка, где на месте цифр были бы знаки препинания, а цифры нажимались бы с шифтами.
Это объясняется тем, что мы чаще используем знаки препинания, чем цифры при письме. Так что маковская стандартная раскладка делает шаг в нужном направлении но вот, жаль, не до конца...
Вроде, раскладка Дворака как раз удовлетворяет тем требованиям, что я описал.

Для смены языка в винде по CapsLock можно создать раскладку с помощью утилиты MSKLC (с оф. сайта M$), взяв за основу стандартную английскую (или русскую) и переназначить в ней символы для нажатого CapsLock на те, что в другой раскладке.
Готовую раскладку (я ее сделал и использую) можно скачать по адресу http://zawullon.spb.ru/dev/layout
Лампочка показывает текущую раскладку, но язык в панели инструментов не меняется.

На Mac есть аналог MSKLC - Ukelele. У меня, к сожалению, пока не получилось сделать с ее помощию раскладку, т.к. для части клавиш (например англ. E) она при смене символа при нажатом CapsLock тут же меняет его и для Shift :(. Может быть из-за того, что я за основу взял английскую раскладку, а надо - русскую. Пока эксперементировать не продолжаю, поскольку работаю в основном в Linux, а на ковыряние MacOS нет времени.