Решением для вашего запроса является метод ввода.
То, что вы описали, знакомо большинству пользователей языка CJK. Давайте рассмотрим, как работает метод ввода в современных системах Linux.
Система ввода
Вот простая архитектура для системы с общим методом ввода:
ПРИМЕЧАНИЕ. Я делаю снимок этого изображения из протокола X Input Method Protocol . Некоторые стрелки не имеют отношения к последующему обсуждению.
Исторически XIM (протокол X Input Method) был единственным протоколом. Это слишком сложно и не хватает некоторых желаемых функций. Так что в основном он заброшен, хотя совместимость по-прежнему обеспечивается популярными инструментами, такими как GTK, Qt.
Современная система методов ввода состоит из нескольких частей:
Поддержка клиентской библиотеки
- обычно реализуется как модуль, загружаемый инструментарием (например, для GTK, см.
/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/
)
- Метод ввода сервера
- X сервер
Как эти части соответствуют друг другу?
Пользователь вводит ключ. X-сервер получает аппаратное событие от интерфейса evdev, создает XEvent и отправляет приложение под фокус клавиатуры. Модуль метода ввода инструментария приложения (GTK, Qt) перехватывает событие и передает информацию на сервер метода ввода. Сервер метода ввода вычисляет, что может пожелать пользователь, и передает некоторый текст обратно в модуль IM.
Теперь поговорим об архитектуре IM-сервера.
IM-сервер обычно состоит из двух частей:
- Среда обмена мгновенными сообщениями, которая обрабатывает специфические для платформы сложности и обеспечивает приятный интерфейс для модулей обмена мгновенными сообщениями и инструментария. Он предоставляет механизмы IPC, используемые модулем IM, сервером и механизмом.
- Различные механизмы обмена мгновенными сообщениями выполняют реальную работу по преобразованию пользовательских клавиш в нужный текст. Механизмы IM могут быть общими библиотеками, загруженными сервером IM или независимыми процессами, связывающимися с сервером IM.
- Программы настройки вспомогательного метода ввода обеспечивают дружественный пользовательский интерфейс для настройки IM-сервера и поведения механизма.
В общем, что IM делает, чтобы преобразовать то, что вы печатаете, во что-то другое и, необязательно, обеспечивает прогнозы.
Пример
Мы используем ibus-pinyin
здесь, чтобы напечатать некоторые китайские иероглифы.
Романизация 汉语拼音 есть han yu pin yin
. Сначала вам нужно набрать все эти буквы, чтобы получить четыре китайских иероглифа. Но через несколько раз вам просто нужно ввести четыре начальных символа, h y p y
чтобы получить китайский символ.
В ibus-pinyin
случае, han yu pin yin
сокращается до h y p y
.
Более продвинутые механизмы обмена мгновенными сообщениями используют статистические методы обучения, чтобы обеспечить лучший прогноз. Ничто не может помешать вам написать движок метода ввода на английском языке, чтобы повысить скорость набора текста.
В качестве бонуса, все наборы инструментов имеют поддержку метода ввода, кроме некоторых старых X-программ. Так что это довольно универсальное решение.
Благодарю Андерса ФУ Кира. Особенности / Печатание-Booster | Проект Fedora Wiki должен быть ответом