From e8051533e9e525c422c45adc01dc1376663f5b96 Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Sat, 1 Jul 2017 18:23:54 +1000 Subject: [PATCH] + /articles/2017/07/01/eastern-input-on-linux/ --- .../eastern-input-on-linux/ime-panel-tray.png | Bin 0 -> 6739 bytes .../01/eastern-input-on-linux/index.markdown | 112 ++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 articles/2017/07/01/eastern-input-on-linux/ime-panel-tray.png create mode 100644 articles/2017/07/01/eastern-input-on-linux/index.markdown diff --git a/articles/2017/07/01/eastern-input-on-linux/ime-panel-tray.png b/articles/2017/07/01/eastern-input-on-linux/ime-panel-tray.png new file mode 100644 index 0000000000000000000000000000000000000000..1fcb49a87b495b71e17d6cafd4e7ce5d1681c19e GIT binary patch literal 6739 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
}? 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 literal 0 HcmV?d00001 diff --git a/articles/2017/07/01/eastern-input-on-linux/index.markdown b/articles/2017/07/01/eastern-input-on-linux/index.markdown new file mode 100644 index 0000000..a3c20ca --- /dev/null +++ b/articles/2017/07/01/eastern-input-on-linux/index.markdown @@ -0,0 +1,112 @@ +--- +title: Поддержка ввода восточных языков в линуксе +tags: linux, репост +--- + +Как многие знают, сестра у меня учится на восточке, и поддержка ввода иероглифов для неё - необходимая вещь. +Мне это не особо нужно, хватает гугло-транслейта. Поэтому, чтобы не забыть, как настраивать - пишу этот пост. + +Сразу оговорюсь, что это - своеобразная шпаргалка по настройке и на полноценное исследование не претендует. + +--- + +Теоретическая часть +------------------- + +Вообще, в линуксе традиционно существует зоопарк велосипедов, независимо от выбранной области. +Буйство альтернатив ограничивается разве что сложностью подсистемы, например видео-. +Но и там умудряются выкатить минимум две альтернативы. + +Область ввода не стала исключением, и здесь существует несколько вариантов реализации, +разной степени универсальности, качества и удобства. + +Суть проблемы. В языке "европейского" типа у нас есть алфавит, достаточно короткий набор символов (в среднем - 30). +На обычной клавиатуре, заточенной под такие языки - чуть больше сотни кнопок. +Их с лихвой хватает на сам алфавит языка, сервисные знаки (диакритика, пунктуация), +остаётся на цифры, управляющие клавиши и даже на спецфункции. +Система проста как лом: давишь нужную клавишу - получаешь нужный символ. + +В восточных языках не так. Там есть не только алфавит (и даже не один), +но и большой набор графем для обозначения устоявшихся терминов. +Графемы эти могут *комбинироваться* между собой, образуя графемы второго порядка - иероглифы[^fn1], +но всё так же занимая при этом одно знакоместо. +[Подробнее](https://anashina.com/ieroglify/), на примере китайского. +Суть в том, что этот набор иероглифов не влезет ни на одну клавиатуру разумного размера. +В обычной новости из японской газеты, в тексте могут использоваться обе слоговые азбуки, цифры, иероглифы и латиница. + +Следовательно, чтобы как-то набирать всё это, метод ввода должен стать значительно умнее. +Как минимум, он должен уметь воспринимать последовательности символов, для образования графем первого порядка - ключей, +уметь "сворачивать" последовательность ключей в графемы второго порядка - иероглифы, +попутно предлагая *варианты* начертания итогового символа в случае неоднозначности. + +То есть, нам мало переключения просто языка - русский, английский, японский. +Для последнего нам нужен ещё как минимум переключатель режимов ввода: две слоговые азбуки и прямой ввод. + +Но хватит теории. + +Варианты реализации +------------------- + +Такая сложная система ввода традиционно строится двухуровневой: фреймворк и модуль поддержки конкретного языка. + +Первый реализует поддержку ввода из различных источников (gtk/qt/x11/curses/...), отображение подсказок, +значки в трее, хранение настроек, и т.д. +Фреймворки, в порядке появления[^fn2]: scim, ibus, fcitx, uim. + +Второй непосредственно преобразует ввод в ключи и иероглифы, выдаёт варианты для подсказки и т.д.. +Модули поддержки: anthy (японский), byeoru (корейский), canna (японский), chewing (китайский), m17n (мультиязычный), mozc (японский), pinyin (китайский), skk (японский), viqr (вьетнамский). + +Немного по истории фреймворков. +Наиболее старый - SCIM. Со временем был заброшен, что привело к потребности в его замене на что-то более свежее. +Гномеры, в своей обычной манере написали "замену" - IBUS. Название вполне соответствует, он прибит гвоздями к dbus, gconf и работает без нареканий по большей частью только в gtk. +Остальные, кто гном на дух не переносил и не хотел от него зависеть, пошли оживлять FCITX. Этот фреймворк появился примерно в одно время со scim, но был менее фичастым на тот момент. +Ещё позже появился UIM. Этот позиционируется ещё более модульным и даже кроссплатформенным. + +В теории, для беспроблемной работы может использоваться любой из последних трёх. +На практике, гномософта я стараюсь избегать, FCITX пилится в основном китайцами и в первую очередь под них, поэтому беру UIM, который пилится в основном японцами. :-) + +Практическая часть +------------------ + + # apt-get install uim uim-mozc im-switch unifont + +Тут есть одна тонкость - uim на самом деле это метапакет. Он притащит модули для поддержки gtk2, gtk3, qt4 и qt5. +Если что-то из этого у вас не стоит - значит будет. Вместо этого, можно ставить не сам метапакет, а только нужные зависимости. +`im-switch` облегчает первоначальную настройку, `unifont` нужен для отображения иероглифов, если у вас нет ни одного другого шрифта с нужным символом. + +Рекомендую прочитать `/usr/share/doc/im-config/README.Debian.gz` для понимания, что в данном конкретном случае вам стоит использовать. + +Потребуется также сгенерить нужную локаль. + + $ su - + # sed -i -e '/ja_JP.UTF-8/ s/^# *//' /etc/locale.gen + # locale-gen + +Запускаем `im-config`, выбираем нужный метод ввода. Перелогиниваемся, чтобы сработал автостарт для демона IME. +После логина в трее должна появиться панелька с иконками метода: + +![](ime-panel-tray.png) + +Здесь выбран японский язык (самый левая иконка - переключатель раскладок), IME - mozc в режиме хираганы и методом ввода иероглифов с клавиатуры - romaji +(1, 2 и 3 иконки в блоке, выделенной чёрной рамкой, 4 - это доп. утилиты модуля mozc, 5 - настройки самого uim). + +Запускаем uim-pref-{gtk,gtk3,qt}, и немного подправим настройки. + + Global Settings > [x] Specify default IM + Default input method [Direct] + [x] Enable IM switching by hotkey + IM switching key ["Shift_key", "Control_key"] + Alternative input method [Mozc] + Mozc > Default input method [Hiragana] + +Работает это так: на Alt-Shift вешается изменение языка: en/ru/jp. На Ctrl-Shift вешается изменение метода ввода: direct/mozc. +direct выключает всю эвристику и печатает "как есть". По опыту, лучше по умолчанию держать включенным его, а не IME. +А вот если мы включили IME, то наверное хотим сразу и какой-то метод ввода IME, отличный от direct, что и выставляется последней строчкой. + +Т.е. по факту получается трёхуровневая иерархия: [lang: en/ru/jp] > [IME: direct/mozc] > [method: direct/hiragana/katakana/...] + +Вот как-то так. + +[^fn1]: В качестве самого известного примера (на китайском): [女](https://en.wiktionary.org/wiki/%E5%A5%B3) - женщина; [奻](https://en.wiktionary.org/wiki/%E5%A5%BB) - ссора, глупый; [姦](https://en.wiktionary.org/wiki/%E5%A7%A6) - зло, вероломство + +[^fn2]: Только живые, рабочие и с поддержкой большинства языков. [Полный список](https://en.wikipedia.org/wiki/List_of_input_methods_for_Unix_platforms).