22 сентября 2011 г.

О клавише Compose полностью

Когда-то я уже затрагивала тему набора неклавиатурных символов и клавиши Compose. Достаточно, чтобы понять, что это, как включить и пользоваться. Однако, недавно вернулась к ней и как-то так увлеклась, что, кажется, разузнала всё что можно было вообще. У самой меня вопросов не осталось. Думаю, надо как-то теперь весь материал скомпановать.

Итак, существует ряд символов, набирать в тексте которые может понадобиться, но на клавиатуре изначально их не предусмотрено. К ним относятся, например, тире, правильные кавычки («ёлочки»), символ градуса, знаки валют и так далее.
Об этом я тоже уже немного писала раньше. Первое, что приходит в голову большинству пользователей, это программа типа «таблица символов». Её просто запускаешь, отыскиваешь там нужный знак и копируешь его в свой текст. Есть такая и для Windows, и для Gnome (gucharmap), и для KDE (kcharselect).
Если какие-то символы используются более или менее часто, можно, запомнить клавиатурные сочетания. А их посмотреть в той же таблице. В windows, например, можно нажать Alt и следующие за ним цифры из кода на дополнительном цифровом блоке клавиатуры. В linux вроде можно использовать сочетание Ctrl+Shift+U и после набирать цифровой код, но не везде и не всегда это работает.
Ну и наконец, самый удобный и наиоблее продвинутый способ — использовать тоже клавиатурные сочетания, но более удобные и более запоминаемые. Для windows в качестве подобного решения может выступать, например, типографская краскладка Ильи Бирмана или программы типа Type it Easy. Для linux же для этого ничего не надо устанавливать, всё уже есть в системе, надо только настроить и научиться пользоваться.

Ну вот, собственно, и подошли к главному. Правда, есть способ — так называемый третий уровень, но я о другом — о клавише Compose. В первую очередь её нужно включить. В средах с большим количеством графических утилит настройки скорее всего это в них и делается, а точнее там же, где добавляются раскладки и выбирается способ их переключения. Настройка прямо так и называется «Положение клавиши Compose».
Если таких удобных инструментов нет, то есть ещё два способа. Один из них — назначить сочетание в иксах в целом (опять же как и для переключения раскладок). Это будет хорошо тем, что по идее должно работать в любой графической среде (допустим, если вы, как я, любите их держать несколько и иногда внезапно устанавливать новые). Но насчёт работоспособности я не очень сейчас уверена. Раньше всё прописывалось в файле /etc/X11/xorg.conf.
Но последний раз работало всё через файл /etc/X11/xorg.conf.d/20-keyboard.conf. Кстати название может быть и не в точности такое, но нужно создать файл с подобным именем и следующим содержанием:

Section "InputClass"
Identifier "evdev keyboard catchall"
MatchIsKeyboard "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
Option "XkbLayout" "us,ru(winkeys)"
Option "XkbOptions" "grp:caps_toggle,grp_led:scroll,compose:ralt,terminate:ctrl_alt_bksp"
EndSection
Сообственно в строке Option "XkbOptions" назначаются клавиши и для смены раскладок, и светодиод для обозначения раскладки, и для завершения сеанса графического сервера, ну и искомая клавиша Compose. В качестве значений для неё могут быть использованы:
  • lalt, ralt — левый и правый Alt соответственно
  • lctrl, rctrl — левый и правый Ctrl
  • lwin, rwin — левый и правый Win
  • menu — клавиша контекстного меню
Можно ещё назначить клавишу не в иксах, а для запускаемой сессии. При этом соответствующую строку нужно прописать или в ~/.xinitrc, если сессия запускается из этого файла, либо использовать специальный файл автозагрузки в зависимости от используемой среды (как, например, файл ~/.config/openbox/autostart для openbox).
В таком случае строка должна выглядеть подобным образом:
setxkbmap -layout us,ru -variant -option grp:caps_toggle,grp_led:scroll,compose:ralt,terminate:ctrl_alt_bksp &
Что тут где, я думаю, уже по аналогии понять легко.

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

  • три дефиса подряд — длинное тире
  • два дефиса и точка — короткое тире
  • два символа меньше — открывающая кавычка ёлочкой «
  • два символа больше — закрывающая кавычка ёлочкой »
  • два пробела — неразрывной пробел
  • две точки — многоточие
  • две буквы o — символ градуса °
  • буквы o и c — знак авторского права ©
  • буква e и равно — знак евро
  • буква L и минус — знак фунта стерлингов £
  • буква Y и равно — знак йены ¥
  • буква c и слеш — знак цента ¢
  • буквы s и o — параграф §
  • знак ^ и 2 — возведение в квадрат ²
  • знак ^ и 3 — возведение в куб ³
Ну и, пожалуй, хватит. Получилось и так много, а на самом деле их по-умолчанию огромное количество, которое ни одному человеку просто не нужно. Но по приведённым примерам должно быть понятно, что сочетания логичны и легкозапоминаемы. Есть и забавное, хоть и малополезное: символ ☭ получается, если после Compose набрать CCCP (латинскими буквами).
Да, и думаю, понятно, что имеет значение, в какой раскладке находится клавиатура и зажимается ли клавиша Shift. В смысле, что например, чтобы получить «ёлочки», надо переключиться в английскую раскладку, да ещё и зажимать Shift, так как именно так можно набрать символы «меньше» и «больше». Точно так же имеет значение, заглавная буква используется или строчная, а чтобы работали обе, символ должен быть настроен на несколько сочетаний и с заглавными и со строчными.
И вот теперь возникает вопрос, где всё это доступное богатство можно посмотреть. В одном из прошлых постов я приводила ссылку на файл с последовательностями, видимо, положенный по стандарту. Символов там действительно нереальное количество, лично у меня для некоторых просто даже нет, видимо, нужных шрифтов в системе.
Ну а на самом деле всё проще. Этот самый файлик, положенный по стандарту, лежит в системе и носит полное имя /usr/share/X11/locale/en_US.UTF-8/Compose. Соответственно, всё, что там прописано, мы сможем набирать этим методом.

Теперь что касается произвольных символов. То есть выбор, конечно, богатый, но вот корейские иероглифы, как раз мало кому нужны, а каких-то нужных символов может и не быть. Ну и самая простая мысль — добавить все свои последовательности в этот же файл, отредактировав его с правами суперпользователя. Однако, это не совсем правильно, да и при обновлении можно всё потерять.
Поэтому сейчас о том, куда и как нужно прописывать пользовательские последовательности. Сначала всё просто — создаём файл ~/.XCompose. Если мы хотим только исключительно свои символы и последовательности, то по аналогии с дефолтным файлом их туда и вносим, а если мы хотим просто добавить несколько своих, при этом и дефолтные оставив, то в начале файла вписываем строку:

include "/usr/share/X11/locale/en_US.UTF-8/Compose"
Насколько я понимаю, если последовательности будут совпадать, приоритет будет за пользовательским файлом. Синтаксис файла простой: пустые строки и строки со знаком решётки в начале игнорируются, в остальных пишутся последовательности и соответствующие им символы. Всё, что в таких строках идёт после решётки, тоже расценивается как комментарий.
Обязательными в строке являются во-первых сама последовательность (только вот судя по дефолтному файлу, непонятно, в каких случаях можно опускать <Multi_key> (собственно Compose), а в каких нет, поэтому проще ставить везде). За ней идёт двоеточие и после него либо сам символ в кавычках, либо без кавычек его юникодный код, который (как и сам символ) можно взять как раз в программах-таблицах символов. Комментарий необязателен, но считается хорошим тоном.

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

<Multi_key> <Cyrillic_be> <Cyrillic_be> : "«" # левая кавычка-ёлочка
<Multi_key> <Cyrillic_yu> <Cyrillic_yu> : "»" # правая кавычка-ёлочка
<Multi_key> <Cyrillic_BE> <Cyrillic_BE> : "„" # левая кавычка-лапка
<Multi_key> <Cyrillic_YU> <Cyrillic_YU> : "“" # правая кавычка-лапка
Во-вторых, всяческие комбинирующиеся знаки (ударение, например):
<Multi_key> <apostrophe> <apostrophe> : "́" U0301 # ударение
<Multi_key> <Cyrillic_e> <Cyrillic_e> : "́" U0301 # ударение
<Multi_key> <z> <z> : "̶" U0336 # горизонтальное зачёркивание
<Multi_key> <Cyrillic_ya> : "̶" # горизонтальное зачёркивание
<Multi_key> <v> <v> : "⃗" U20D7 # вектор
Ну а остальное зависит от потребностей. Могут нужны быть математические символы, буквы греческого алфавита или ещё что-то.
Есть проект на гуглокоде, где содержится неплохой уже готовый пользовательский файл ~/XCompose. Можно дополнять уже его и не мучаться.
Ещё одно применение. Можно ведь не только символы назначать, а несколько сразу. И если приходится вводить часто какую-то длинную последовательность символов, можно её сократить до двух-трёх нажатий. Что-то вроде, например, этого (перед кавычками, входящими как бы в «символ» нужно ставить обратный слеш):
<Multi_key> <a> <h> : "<a href=\"\"></a>"

Ну и напоследок осталась пара совсем мелочей.
Во-первых, созданный пользовательский файл (кстати, после его создания и редактирования изменения вступают в силу для запущенных после этого приложений, зато иксы можно не перезапускать), работает как-то выборочно, а точнее не работает он для gtk-приложений.
Как это исправить. Мне хватило прописать в файле /etc/environment строчку GTK_IM_MODULE=xim. Возможно кому-то может пригодиться и вторая строчка QT_IM_MODULE=xim. Говорят ещё, что для Ubuntu и Debian работает, если установить пакет im-switch, и затем командой im-switch -c переключить метод ввода на default-xim.
Ну и вторая мелочь — откуда берутся названия клавиш в последовательностях в файле (а меня сразу этот вопрос обеспокоил), ну или наоборот, как иногда догадаться по названию, какая это клавиша, если это неочевидно. Впрочем, на второй вопрос всё равно придётся искать ответ перебором, но всё же легче чем просто пытаться угадывать. А узнать вот это наименование клавиши, которое прописывается в треугольных скобках, можно командой xev, а в частности:

xev | fgrep "keysym"
Например при наборе в окне программы символа ^ (а это Shift+6 в английской раскладке, что важно), получим вывод в консоли:
state 0x11, keycode 15 (keysym 0x5e, asciicircum), same_screen YES,
Соответственно, нужное нам слово, которое и будет фигурировать в последовательностях, это asciicircum.
А в википедии есть фотографии клавиатур с клавишей Compose:

Даже со светодиодом тут.

8 комментариев:

  1. Может подскажешь как мне светодиод включить таким образом при переключении в openbox от caps lock из autostart?

    И спасибо за пост, поздравляю что разобралась со всем и вопросов не осталось больше =)

    ОтветитьУдалить
  2. светодиод в смысле чей? у меня на скролле и включается при переключении раскладок капсом.

    ОтветитьУдалить
  3. Спасибо, отличный пост, очень пригодился. Давно собирался разобраться с продвинутыми возможностями Compose Key (простые-то вещи вроде набора длинного тире и кавычек-ёлочек использую давно), да всё руки не доходили.

    ОтветитьУдалить
  4. Ну вот я тоже юзала дефолтно, а тут что-то решила уж досканально изучить)

    ОтветитьУдалить
  5. Большое спасибо за статью! Compose я использую давно, но всё хотелось _и_в_русском_ «такие кавычки». Я читал подобный пост и заметил одну странность.

    Система Linux Mint 10. Compose у меня работает. При этом im-switch -c показывает “none”, а если переключиться на “defaul-xim”, то работать перестаёт ☹

    Когда есть возможность выбирать систему ввода (например, в gedit, на контекстном меню), то работающий метод — «простой».

    Похоже, руки у меня недостаточно прямые ☺

    ОтветитьУдалить
  6. Может, просто в минте чего-то наворотили ещё разрабы?
    А если просто в /etc/environment прописать, не получится?

    ОтветитьУдалить
  7. Содержимое /etc/environment:
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
    LANGUAGE="ru_UA:ru:ru_RU"
    LANG="ru_UA.utf8"

    Открыл в nano, чтобы поправить. Compose даже в терминале, в nano работает.

    После всех этих корректировок, доводок и пере-логинов, всё же заметил, что работают _не_все_ определения, которые я прописал в ~/.XCompose. Почему, не знаю; буду экспериментировать. Давно же хочется кавычки в русском, блин! :D

    ОтветитьУдалить
  8. Ну а именно кавычки-то в русском не работают?)

    ОтветитьУдалить