Minoru 25.12.2009 05:18
На заказ — Compose key
Написано по просьбе idler'а. По мотивам обрывочных воспоминаний о настройке сабжа…Полагаю, если вы читаете это, то знаете, что клавиша Compose используется для ввода символов, которых нет на клавиатуре — например, «длинного тире» («—»), кавычек-елочек (“«” и “»”), символов копирайта («©») и торговой марки («™» и «®»), некоторых дробей (?, ? и т.д.) и проч. Для того, чтобы настроить такую радость у себя на компьютере, достаточно выполнить несколько простых шагов.
Назначение Compose key
В первую очередь нам нужно указать системе, какую клавишу следует понимать как Compose. Выбирать следует ту кнопку, которая не имеет других функций (т.е. вешать Compose на, скажем, «А» нельзя). Лично я использую левую Win-клавишу.Методы настройки Compose key
Стоит отметить, что существует довольно много способов настройки Compose key. Самым универсальным из них является настройка через конфигурационный файл X.Org — его я и приведу. Если вы пользуетесь Gnome или другим DE, вы можете использовать графический интерфейс самого окружения и настроить всё там.Лирическое отступление: как называются клавиши
Собственно, в качестве Compose key могут быть заюзаны следующие кнопки:левый или правий Ctrl (lctrl и rctrl соответственно)левый или правый Alt (lalt и ralt)левая или правая Windows клавиша — клавиша с флажком Windows (lwin и rwin)клавиша контекстного меню — находится между правыми Win и Ctrl (menu)Выбирайте!
Определившись с клавишей, приступаем к правке /etc/X11/xorg.conf:
$ sudoedit /etc/X11/xorg.conf
Здесь надо найти секцию вашей клавиатуры. Выглядит она примерно так:
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us,ua(winkeys),ru(winkeys)"
Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll"
EndSection
Compose key прописывается в поле XkbOptions:
Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll,compose:lwin"
Обратите внимание на код, который я дописал в конце строки — он как раз и говорит системе о том, что функцию Compose теперь выполняет левая win (lwin).
Для тех же пользователей, иксы которых уже перешли на HAL, привожу инструкцию от ZogG:
cat /etc/hal/fdi/policy/10-x11-input.fdi
<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
<match key="info.capabilities" contains="input.keys">
<merge key="input.x11_options.XkbRules" type="string">base</merge>
<merge key="input.x11_options.XkbModel" type="string">evdev</merge>
<merge key="input.x11_options.XkbVariant" type="string">winkeys</merge>
<merge key="input.x11_options.XkbLayout" type="string">us,ru,il</merge>
<merge key="input.x11_options.XkbOptions" type="strlist">grp:caps_toggle</merge>
<append key="input.x11_options.XkbOptions" type="strlist">grp_led:scroll</append>
<append key="input.x11_options.XkbOptions" type="strlist">compose:lwin</append>
</match>
</deviceinfo>Т.е. нужно править файл /etc/hal/fdi/policy/10-x11-input.fdi, добавив в него последнюю строку (там где compose).
Учтите, что для применения изменений в xorg.conf вам потребуется перезапустить иксы. Если же хочется поюзать Compose здесь и немедленно, можете набрать в терминале следующее:
setxkbmap -option "compose:lwin"(с заменой lwin на свою клавишу, естественно). Эта команда назначит Compose key для текущей сессии. Таким методом, кстати, можно попробовать несколько разных клавиш, чтобы определить наиболее удобную.
Настройка работы Compose с GTK приложениями
По умолчанию GTK программы юзают какой-то свой метод ввода, поэтому надо совершить ещё одно телодвижение. В /etc/environment дописываем такую строку:GTK_IM_MODULE="xim"Не забывайте, что права на файлы в /etc принадлежат руту, так что юзайте sudoedit.
Ввод символов, отсутствующих на клавиатуре
Ну что же, клавишу настроили — пора бы научиться ею пользоваться. Все символы вводятся по единой схеме: нажимаете Compose key, а затем вводите два-три символа, в результате получая необходимый знак. Спешу обратить ваше внимание на тот факт, что Compose key достаточно просто нажать, т.е. не обязательно удерживать её на протяжении ввода всей комбинации.Что касается самих цепочек символов, набираемых после нажатия Compose, они достаточно интуитивны и легко запоминаются. Приведу наиболее используемые:
Сочетание | Символ |
Compose - - - | — |
Compose < < | « |
Compose > > | » |
Compose o o | ° |
Compose < " | “ |
Compose > " | ” |
Compose , " | „ |
Compose t m | ™ |
Compose o r | ® |
Compose o c | © |
Этого вам точно хватит на первое время :)
Разучив основные комбинации, вы наверняка захотите узнать больше. Для этого надо почитать списки существующих комбинаций. В следующем разделе мы рассмотрим, где же наша система хранит упомянутые данные.
Где система хранит сочетания для Compose key
Так как за обработку Compose отвечают иксы, идём в /usr/share/X11 и в директории locale находим свою локаль (если не знаете, какая у вас, сделайте echo $LANG — ответом будет искомое значение). Если конкретно вашей нету — ищите ближайшую (у меня, например, локаль ru_UA.UTF-8, но в /usr/share/locales есть только ru_RU.UTF-8). В директории своей локали находим файлик Compose, в котором наверняка будет всего одна строка, а именно:include "/usr/share/X11/locale/en_US.UTF-8/Compose"Несложно догадаться, что теперь мы идём в /usr/share/X11/locale/en_US.UTF-8 и читаем местный Compose. Он содержит записи вида:
<Multi_key> <что-то> <что-то_ещё> : "символ" код # комментарий
Запомните, этот файл — ваш наипервейший источник ответов на вопросы вида «как мне ввести такой-то символ». Если увидели где-то какой-то знак и хотите уметь его вводить, делайте grep 'знак' /usr/share/X11/en_US.UTF-8/Compose и читайте вывод. Думаю, не нужно объяснять, что <что-то> и <что-то_ещё> — это символы, которые следует набрать после нажатия Compose.
Может возникнуть ситуация, когда вы не нашли нужного символа в существующих комбинациях compose. Не нужно отчаиваться — сейчас вы узнаете
Как создавать собственные Compose комбинации
Спешу заявить: не надо править файлы Compose в поддиректориях /usr/share/X11/locales! Для назначения собственных сочетаний достаточно создать в своей домашней директории файлик .XCompose (заметьте, что заглавными являются две первых буквы), который имеет тот же формат, что и рассмотренные выше файлы Compose. Не забудьте о строке include, если не допишете её, общесистемные комбинации задействованы не будут. Идеологически верным вариантом было бы написать в первой строке .XCompose такое:include "/usr/share/X11/locale/ru_RU.UTF-8/Compose"то есть ссылаться на свою (или ближайшую к ней) локаль.
При добавлении собственных правил для Compose вы столкнётесь с одной маленькой проблемкой — вам нужен будет код символа. Тут можно развернуться по полной — гуглите, читайте стандарт Unicode, гадайте :) Лично я использую Unicode Code Converter — вбиваю в поле «Mixed» символ и копирую из поля «Unicode U+hex notation» искомый код (не забывая потом убрать из него плюс, иначе работать не будет).
Собственно, после написания нового правила и сохранения файла изменения вступают в силу немедленно, правда, действуют они только для вновь созданных окон (т.е. в уже запущенных приложениях комбинация работать не будет, пока вы их не перезапустите).
Послесловие
Кто-то может спросить — «а зачем всё это? Зачем мучиться, что-то настраивать, вырабатывать новые привычки?..». Я бы ответил на эти вопросы так: я хочу, чтобы мой текст выглядел грамотно с точки зрения типографики. Если вам интересно почитать о традициях набора русского текста подробнее, советую Параграфы Артемия Лебедева, в частности §97, повествующий о тире, минусе и дефисе, а также §104, рассказывающий о кавычках.Фидбеки и исправления решительно приветствуются. За сим, разрешите откланяться.
Да, в DE Compose может настраиваться какими-то внутренними методами — я приводил вариант настройки через иксы как универсальный рецепт. Надо будет погуглить ссылки на инструкции для Gnome и KDE (а также XFCE и прочих) и добавить в статью — просто как альтернативу. Пока что просто добавлю упоминание о том, что можно настраивать и не через xorg.conf.
хоть и мала вероятность того, что ты будешь часто менять ДЕ, все равно настраивать клавиатуру и вещи, которые не зависимы от ДЕ (в консоли мне тоже может надо два языка или у меня есть брат и он юзает другой ДЕ), не кошерно ИМХО
а у меня, как я писал уже давно через хал настроено.
cat /etc/hal/fdi/policy/10-x11-input.fdi
<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
<match key="info.capabilities" contains="input.keys">
<merge key="input.x11_options.XkbRules" type="string">base</merge>
<merge key="input.x11_options.XkbModel" type="string">evdev</merge>
<merge key="input.x11_options.XkbVariant" type="string">winkeys</merge>
<merge key="input.x11_options.XkbLayout" type="string">us,ru,il</merge>
<merge key="input.x11_options.XkbOptions" type="strlist">grp:caps_toggle</merge>
<append key="input.x11_options.XkbOptions" type="strlist">grp_led:scroll</append>
<b><append key="input.x11_options.XkbOptions" type="strlist">compose:lwin</append></b>
</match>
</deviceinfo>
Кстати, спасибо — о HAL я не знал, как настроить, т.к. у меня в Debian иксы на него пока не пересели :) Добавлю в статью.
Думаю, <b> в последней строке — попытка выделить строку, а вовсе не синтаксис файла, поэтому в статье я этот тег убрал. Если я ошибся — сообщите, верну тег обратно.
setxkbmap -layout us,ru -variant ,winkeys -option grp:caps_toggle,grp_led:scroll,compose:ralt
и ты каждый рестар делаешь?(то что не рестартишь не считается) или же скриптом(зачем делать новый , если есть готовые конфиги для этого?
~/.xinit же... там путь к скрипту... правда сейчас закоменчен ибо hal
зы. не понял чего рестарт и чего конфиг...
зы. не понял чего рестарт и чего конфиг...
слушайте, че-то только щас озадачился. А как набрать, допустим четыре символа после Compose? ну например серп и молот
dumpkeys | grep compose
Не показывает те которые я добавил в .XCompose, даже после перезапуска иксов.
И да. как набирать СССР? :)
я выше писал, для композита имеет различие заглавная буква или нет, я думаю так как он юзает код буквы самой, а у заглавной он другой, потому композит_кей, шифт+c, шифт+c, шифт+c, шифт+p
Он от языка не зависит.
Может глюк какой-то. Хотя этот значок мне и не очень нужен :).
Может глюк какой-то. Хотя этот значок мне и не очень нужен :).
конечно от языка зависит, у каждой буквы свой код, это не по кодам кнопки =) У меня на русском тоже после второй С отваливается, а на латинице все ок.
Точно :) Но блин, я ведь именно ради того, что бы оно было универсальным и от языка не зависело :(
да нет, говорю десятый раз, оно по кодам буквы делает, а не кнопки, потому раскладка решает, даже заглавная буква не одно и тоже, что обычная
То что от регистра зависит очевидно, но
у меня выдаёт одну локаль, а у Вас?
в директории locale находим свою локаль
и
echo $LANG
у меня выдаёт одну локаль, а у Вас?
Не показывает те которые я добавил в .XCompose, даже после перезапуска иксов.
У меня тоже не показывает, тем не менее, сочетания работают.
Да, запросто. В домашней директории создаёшь пустой .XCompose и ничего в него не пишешь. Тогда ничего из стандартных сочетаний работать не будет. Я, кстати, забыл сказать про первую строку в .XCompose — по-хорошему, там надо сделать include. Сейчас поправлю статью.
У меня в .XCompose сейчас только
но почему-то работает и СССР, и кавычки, и тире, и многие другие по умолчанию...
<Multi_key> <o> <c> : "©" copyright
но почему-то работает и СССР, и кавычки, и тире, и многие другие по умолчанию...
Что за система у вас такая хитрая? Просто для справки спрашиваю — на самом деле, не понимаю, как так может быть…
Arch Linux - но какой-то странный.
Я даже переименовывал /usr/share/X11/locale и перезагружался (на всякий случай) и у меня всё-равно дефолтные оставались.
Я даже переименовывал /usr/share/X11/locale и перезагружался (на всякий случай) и у меня всё-равно дефолтные оставались.
У мня на CapsLock стоит =)