Композинг, или расширенный ввод символов

Долгое время в текстах, набранных на компьютере, было довольно сложно использовать нормальную типографику. Например «кавычки», тире, ударения, различные математические символы и т.п. К этому уже довольно привыкли, и такое считается нормальным. Однако с появлением юникода использовать такие символы стало возможно, а, так как большинство ОС и программ юникод поддерживают, и вполне нормально.

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

  • alt-последовательности (нажать на клавиатуре кнопку alt, набрать на цифровой клавиатуре код символа и отпустить alt) позволяют вводить любые символы, однако помнить коды всех используемых символов не реально. Также подобный ввод требует довольно много нажатий ради одного символа (например открывающая кавычка лапка имеет код 8222, что соответственно приводит к нажатию 5 клавиш для ее ввода);
  • «таблица символов» позволяет методом copy-paste копировать нужные символы в нужное место. По сравнению с alt-последовательностями запоминать код не требуется (но желательно хоть примерно предполагать диапазон, в котором нужно искать), однако нажатий и прочих телодвижений требуется еще больше;
  • автозамена в некоторых офисных программах типа ворда. Довольно удобно, но существует только в этих программах и имеет довольно ограниченный ассортимент автозамен;
  • типографические раскладки клавиатуры (например от Ильи Бирмана) обладают относительным удобством, но опять же имеют довольно ограниченный ассортимент символов, а также обновление и добавление недостающих символов довольно затруднено.

Исходя из неудобности и сложности всех предложенных решений пользователи виндоузов обычно даже не задумываются об их использовании (ну естественно не считая различные автозамены). И альтернатив у них на самом деле практически нет. А в линуксе (да и вообще в X11) есть более удобное средство, о котором я и хочу рассказать. Заключается оно в использовании compose последовательностей. Например для ввода открывающей кавычки-елочки достаточно нажать «compose», «<», «<» — 3 клавиши, причем последовательно, зажимать какую-либо не нужно, благодаря чему можно вводить символы даже одной рукой. Такие последовательности легко запоминаются мнемонически, а добавление новых элементарно.

Специальной кнопки compose на типичной клавиатуре нет, но ее можно назначить через настройки раскладки. Я использую в этой роли правую клавишу win.

Для такого набора следует использовать XIM (X Input Method), переключиться в который можно через контекстное меню поля ввода, или воспользовавшись скриптом im-switch. Вообще метод ввода по умолчанию можно указывать в переменных окружения GTK_IM_MODULE и QT_IM_MODULE для gtk и qt программ соответственно. Для удобства пользователи KDE могут создать файл «~/.kde/env/xim.sh» (с правами на исполнение конечно) следующего содержания:

#!/bin/sh
export GTK_IM_MODULE=xim
export QT_IM_MODULE=xim

По умолчанию используется системная таблица последовательностей, но если создать в домашнем каталоге файл «.XCompose», то будет использоваться он. В начале своего файла рекомендуется написать строку «include "/usr/share/X11/locale/en_US.UTF-8/Compose"» для включения системной таблицы. Уже имеющиеся в ней последовательности можно переназначать.

Могу порекомендовать к использованию мой собственный файл последовательностей, которым я с удовольствием пользуюсь: http://ololo.cc/files/XCompose. Напоминаю, что имя файла должно начинаться с точки, поэтому не забудьте его переименовать. Он базируется на файле из этой статьи: http://sovety.blogspot.com/2008/02/compose.html и отличается лишь дополнительными последовательностями. Рекомендую, если вы хотите разместить этот файл на своем ресурсе, ссылку на мой все-таки оставить: я регулярно добавляю туда дополнительные последовательности. Также можете почитать ту статью для получения дополнительной информации о композинге.

Список (не полный) стандартных последовательностей можно посмотреть тут: http://hermit.org/Linux/ComposeKeys.html. Краткое описание дополнительных последовательностей (первоначальное нажатие кнопки compose я опускаю, клавиша «пробел» обозначена символом «␣», для комбинирующихся символов представлено их воздействие на символ «□». Также включены стандартные комбинации для набора, если таковые имеются):

Последовательность Код получающегося символа Результат Примечание
«.-», «.␣», «.:», «..» U+2026 Многоточие
«?!» U+2048  
«z␣» U+2060 Word Joiner (неразрывный пробел нулевой ширины)
«Z␣» U+FEFF  Zero width no-break space (неразрывный пробел нулевой ширины, byte-order mark)
«_␣», «␣_» U+2423 Графическое изображение, принятое для пробела.
«m-», «-.» U+2212 Минус
«-д» U+2010 Дефис
«-ф» U+2012 Figure dash, цифровая черточка
«эм» U+2032 Угловая минута
«эс» U+2033 Угловая секунда
«эа», «ЭЭ» U+2019 Апостроф
«''», «ээ» U+0301 □́ Комбинирующийся акут (ударение)
«vv» U+20D7 □⃗⃗ Комбинирующийся знак вектора
«zz», «я» U+0336 □̶ Комбинирующееся зачеркивание
«``» U+0300 □̀ Комбинирующийся гравис
«бб» U+201E Открывающая кавычка-лапка
«юю», «ёё» U+201C Закрывающая кавычка-лапка
«//», «ББ», «<<» U+00AB «  
«||», «ЮЮ», «>>» U+00BB »  
«Ь-» U+0462 Ѣ Ять прописная (первый символ последовательности — прописной мягкий знак)
«ь-» U+0463 ѣ Ять строчная (первый символ последовательности — строчный мягкий знак)
«О-» U+0472 Ѳ Фита прописная (первый символ последовательности — прописная русская О)
«о-» U+0473 ѳ Фита строчная (первый символ последовательности — строчная русская О)
«rr» U+221A Корень квадратный
«r3» U+221B Корень кубический
«/8» U+221E Бесконечность
«mA» U+2200 «Для любого»
«mE» U+2203 «Существует»
«mi» U+220A «принадлежит», «элемент множества»
«md» U+2202 Частичный дифференциал
«mD» U+2206 Инкремент, оператор Лапласа, лапласиан
«mS» U+2211 Сумма
«mI» U+222B Интеграл
«^-» U+207B Надстрочный минус
«~=», «=~» U+2248 Примерно равно
«__» U+023E Макрон, черта сверху
«=/», «/=» U+2060 Не равно
«=-», «-=» U+2061 Тождественно равно
«&a», «&A» U+03B1, U+0391 α, Α Греческая альфа (строчная, прописная)
«&b», «&B» U+03B2, U+0392 β, Β Греческая бета (строчная, прописная)
«&g», «&G» U+03B3, U+0393 γ, Γ Греческая гамма (строчная, прописная)
«&d», «&D» U+03B4, U+0394 δ, Δ Греческая дельта (строчная, прописная)
«&e», «&E» U+03B5, U+0395 ε, Ε Греческий эпсилон (строчный, прописной)
«&z», «&Z» U+03B6, U+0396 ζ, Ζ Греческая дзета/зита (строчная, прописная)
«&h», «&H» U+03B7, U+0397 η, Η Греческая эта/ита (строчная, прописная)
«&q», «&Q» U+03B8, U+0398 θ, Θ Греческая тэта/фита (строчная, прописная)
«&i», «&I» U+03B9, U+0399 ι, Ι Греческая йота (строчная, прописная)
«&k», «&K» U+03BA, U+039A κ, Κ Греческая каппа (строчная, прописная)
«&l», «&L» U+03BB, U+039B λ, Λ Греческая лямбда/лямда (строчная, прописная)
«&m», «&M» U+03BC, U+039C μ, Μ Греческая мю/ми (строчная, прописная)
«&n», «&N» U+03BD, U+039D ν, Ν Греческая ню/ни (строчная, прописная)
«&x», «&X» U+03BE, U+039E ξ, Ξ Греческая кси (строчная, прописная)
«&o», «&O» U+03BF, U+039F ο, Ο Греческий омикрон (строчный, прописной)
«&p», «&P» U+03C0, U+03A0 π, Π Греческая пи (строчная, прописная)
«&r», «&R» U+03C1, U+03A1 ρ, Ρ Греческая ро (строчная, прописная)
«&s», «&S» U+03C2, U+03A2 σ, Σ Греческая сигма (строчная, прописная)
«&t», «&T» U+03C3, U+03A3 τ, Τ Греческая тау/таф (строчная, прописная)
«&u», «&U» U+03C4, U+03A4 υ, Υ Греческий ипсилон (строчный, прописной)
«&f», «&F» U+03C5, U+03A5 φ, Φ Греческая фи (строчная, прописная)
«&c», «&C» U+03C6, U+03A6 χ, Χ Греческая хи (строчная, прописная)
«&y», «&Y» U+03C7, U+03A7 ψ, Ψ Греческая пси (строчная, прописная)
«&w», «&W» U+03C8, U+03A8 ω, Ω Греческая омега (строчная, прописная)
«:)», «=)» U+263A, U+263B ☺, ☻ Смайлики
«[␣]», «[v]», «[x]» U+2610, U+2611, U+2612 ☐, ☑, ☒ Квадратики
«**» U+2605 Звездочки
«*0», «st» U+2606  
«tt», «kb», «nn» U+260E, U+2328, U+266B ☎, ⌨, ♫  
«<3», «<0» U+2665, U+2661 ♥, ♡  
«33», «~~» U+2618, U+2619 ☘, ☙  
«ww», «bh», «ra» U+26A0, U+2623, U+2622 ⚠, ☣, ☢  
«pe», «%%», «rc» U+262E, U+2318, U+2672 ☮, ⌘, ♲  
«kz», «CCCP» U+262D  
«++», «(*», «bb» U+2626, U+262A, U+534D ☦, ☪, 卍  
«BB», «66», «yy» U+2638, U+2721, U+262F ☸, ✡, ☯  
«sa» U+FDFA ṣallā llahu ʿalayhi wa sallam
«al» U+FDF2 al-Lāh
«ak» U+FDF3 akbar
«<-», «l^», «->», «lv»   ←, ↑, →, ↓ Стрелки
«-<>», «v^»   ↔, ↕  
«\^», «/^», «\v», «/v»   ↖, ↗, ↘, ↙  
Ka, Ki, Ku, Ke, Ko   ア, イ, ウ, エ, オ  Катакана
Kya, Kyu, Kyo   ヤ, ユ, ヨ  
Kka, Kki, Kku, Kke, Kko   カ, キ, ケ, ケ, コ  
Kkya, Kkyu, Kkyo   キャ, キュ, キョ  
Ksa, Ksi, Ksu, Kse, Kso   サ, シ, ス, セ, ソ  
Ksya, Ksyu, Ksyo   シャ, シュ, ショ  
Kta, Kti, Ktu, Kte, Kto   タ, チ, ツ, テ, ト  
Ktya, Ktyu, Ktyo   チャ, チュ, チョ  
Kna, Kni, Knu, Kne, Kno   ナ, ニ, ヌ, ネ, ノ  
Knya, Knyu, Knyo   ニャ, ニュ, ニョ  
Kha, Khi, Khu, Khe, Kho   ハ, ヒ, フ, ヘ, ホ  
Khya, Khyu, Khyo   ヒャ, ヒュ, ヒョ  
Kma, Kmi, Kmu, Kme, Kmo   マ, ミ, ム, メ, モ  
Kmya, Kmyu, Kmyo   ミャ, ミュ, ミョ  
Kra, Kri, Kru, Kre, Kro   ラ, リ, ル, レ, ロ  
Krya, Kryu, Kryo   リャ, リュ, リョ  
Kwa, Kwi, Kwu, Kwe, Kwo   ワ, ヰ, ヴ, ヱ, ヲ  
Kwya, Kwyu, Kwyo   ヰャ, ヰュ, ヰョ  
Kga, Kgi, Kgu, Kge, Kgo   ガ, ギ, グ, ゲ, ゴ  
Kgya, Kgyu, Kgyo   ギャ, ギュ, ギョ  
Kza, Kzi, Kzu, Kze, Kzo   ザ, ジ, ズ, ゼ, ゾ  
Kzya, Kzyu, Kzyo   ジャ, ジュ, ジョ  
Kda, Kdi, Kdu, Kde, Kdo   ダ, ヂ, ヅ, デ, ド  
Kdya, Kdyu, Kdyo   ヂャ, ヂュ, ヂョ  
Kba, Kbi, Kbu, Kbe, Kbo   バ, ビ, ブ, ベ, ボ  
Kbya, Kbyu, Kbyo   ビャ, ビュ, ビョ  
Kpa, Kpi, Kpu, Kpe, Kpo   パ, ピ, プ, ペ, ポ  
Kpya, Kpyu, Kpyo   ピャ, ピュ, ピョ  
Kva, Kvi, Kvu, Kve, Kvo   ヴァ, ヴィ, ヴ, ヴェ, ヴォ  
Kvya, Kvyu, Kvyo   ビャ, ヴュ, ヴョ  
Knn, K-, Kdd   ン, ー, ッ  
KYa, KYu, KYo   ャ, ュ, ョ  
G1, G2, G3, G4, G5   └, ┴, ┘, ├, ┼ Псевдографика (см. цифровую клавиатуру для понимания принципа построения)
G6, G7, G8, G9, G0, G-   ┤, ┌, ┬, ┐, │, ─  
GG1, GG2, GG3, GG4, GG5   ╚, ╩, ╝, ╠, ╬  
GG6, GG7, GG8, GG9, GG0, GG-   ╣, ╔, ╦, ╗, ║, ═  

 Используемые стандартные последовательности:

Последовательность Код получающегося символа Результат Примечание
«+-», «-+» U+00B1 ±  
«---» U+2014 Тире, em-dash
«--.» U+2013 En-dash (короткое тире)
«..» U+2026 Многоточие
«^0»…«^9»   ⁰…⁹ Надстрочные цифры
«xx» U+00D7 × Крестик-умножение
«12», «13», «14», «15», «16», «18»   ½, ⅓, ¼, ⅕, ⅙, ⅛ Дроби
«'a», «`e», «"y», «~o», «^u», «_i», …   á, è, ÿ, õ, û, ī, … Некомбинированные символы с различными диакритическими знаками. Довольно много всевозможных комбинаций.
«tm», «oc», «or», «sm» U+2122, U+00A9, U+00AE, U+2120 ™, ©, ®, ℠  
«^_a», «^_x», «^_y»   ª, ˣ, ʸ Надстрочные латинские буквы. Их тоже относительно много, но не все латинские буквы могут быть надстрочными.
«_0»…«_9» U+2080 … U+2089 ₀…₉ Подстрочные цифры
«<=», «>=» U+2264, U+2265 ≤, ≥  
«ae», «oe» «AE», «OE»   æ, œ, Æ, Œ Лигатуры
«<"», «>"», «<'», «>'» U+201C, U+201D, U+2018, U+2019 “, ”, ‘, ’ Кавычки английские
«%o», «oo», «O/», «o/» U+2030, U+00B0, U+00D8, U+00F8 ‰, °, Ø, ø Промилле, градус, диаметр
«c=», «L-», «L=», «Y=», «c|»   €, £, ₤, ¥, ¢ Символы валют (их тоже довольно много)
«#b», «#f», «##» U+266D, U+266E, U+266F ♭, ♮, ♯ Музыкальные значки
«so», «os», «па» U+00A7 § Параграф
«PP», «P!», «p!» U+00B6  
«.<», «.>» U+2039, U+203A ‹, ›  
«.=» U+2022 Буллит-точка
«mu» U+03BC µ Греческая строчная мю
«(0)», «(1)» … «(20)»   ⓪, ① … ⑳ Цифры в кружочках
«(a)», «(A)» … «(z)», «(Z)»   ⓐ, Ⓐ … ⓩ, Ⓩ Буквы в кружочках, и строчные и прописные
«␣␣» U+00A0   Неразрывный пробел
«␣.» U+2008 Пунктуационный пробел