Намутила программку для ввода более 5500 символов Юникода с клавиатуры
Возможно тема и крайне узкоспециализированная и не найдёт широкого отклика, но… с августа 2024‐го года вела и веду разработку сего проекта, цель которого — расширить арсенал пользователя как можно большим набором символов без надобности во множествах языковых раскладках.
Программка позволяет писать на обширном перечне языков с алфавитами на базе кириллицы или латиницы, например:
- [Английская раскладка] Ænglisċ sprǣċ, Français, Tiếng Việt, Hànyǔ Pīnyīn, Norrœnt mál, Føroyskt mál, Limba Română, Español, Język polski, Čeština, Bokmål, Tamaziɣt, Türkçe, Sää’mǩiõll, Lietùvių kalbà, Māori…
- [Русская раскладка] Қазақ тілі, Хуэйзў йүян, Забони тоҷикӣ, Йағнобӣ зивок, Аԥсуа бызшәа (Аҧсуа бызꚗа), Авар мацӏ, Українська мова, Словѣньскъ ѩꙁꙑкъ, Црногорски језик, Лимба Рꙋмѫнѣскъ, Итәнмәӈин крвэԓхатас, Даһур Усүүэ, Азәрбајҹанҹа, Башҡорт теле, Тэлэңгэт, Чӑваш чӗлхи…
Краткий экскурс
Идея для программы возникла из-за собственной нужды в разных «необычных» символах. Я уже знала о «Типографской раскладке», позже наткнулась на «WinCompose», находила и какие-то другие решения, названия которых не запомнила, но все они не удовлетворяли моим потребностям и интересу.
Я писала книгу (которую благополучно, пока что, забросила…), и в ней использовала «Ў», «Ӯ», «Ӣ», «Ō» для японских слов. Например: Фӯдзин, Ōдатэ, Сюнсўкэ. Использовала и ряд других символов, как круглая, полукруглая шпации (для организации нужных отступов там, где нет технической возможности их реализовать иначе, чем символами [например, Фикбук]), комбинируемая диакритика для случаев, когда нет готовой буквы нужного вида и прочие разные знаки (¹²³⁴⁵⁶⁷⁸⁹⁰⁻⁼⁺⁽⁾₁₂₃₄₅₆₇₈₉₀₋₌₊₍₎ ⁑ ⁂ ⁎ † ‡ 「」『』〈〉《》…).
В какой-то момент мне надоело копипастить эти символы. Я вспомнила о такой штуке, как AutoHotkey и пошла делать небольшой скрипт. В последствии он вырос в целый «инструмент». Изначально он был примитивнее некуда, состоял из подобных клавиатурных привязок:
Мне не хотелось останавливаться на этом. Меня посещали разные идеи: «а что если сделать вот так», «а что если ввести такую возможность», «а что если…». Тяга попробовать реализовать «что-либо» заставила меня создать избыточный для себя, но возможно способный стать полезным и для других инструмент.
Я не программист и не владела пониманием того, как работает автохоткей. Это сказалось на времени разработки — одновременно осваивать язык и делать на нём же софт… Несколько тягомотных рефакторингов сказали мне привет.
Краткий перечень возможностей
- Поддержка более 5500 символов Юникода, включая: пунктуацию, математические символы, символы валют, специальные символы, алхимические и т.д.
- «Многослойный» набор привязок, в основном — раздельных для английского и русского языков ([англ.] RAlt + A → Ă, RAlt + Z → Ż; [рус.] RAlt + Ф → Ѳ, RAlt + Я → Ѧ). Включает поддержку пользовательских привязок в JSON‐формате.
- Режим композиции — активируется двойным нажатием RAlt и позволяет получать одни символы из последовательности других («рецепта») (AE → Æ; OE → Œ; ІѪ → Ѭ; ДЧ → Ԭ; ΣΤ → Ϛ, αͺ → ᾳ). Включает поддержку пользовательских рецептов в INI/JSON/XCompose форматах.
- Альтернативные режимы ввода для форм письменности, отличных от латиницы и кириллицы (см. перечень ниже).
- Вариации глифов — режимы, позволяющие вводить альтернативные варианты символов (A → ᴬ 𝐴 𝐀 𝑨 𝖠 𝘈 𝗔 𝘼 𝙰 ᴀ 𝔄 𝕬 𝒜 𝓐 𝔸 Ⓐ 🅐 🄰 🅰 🄐 ⒈ 🄂 ⓵). Включает «региональные индикаторы» и «теги» (формируют флаги стран/регионов).
- Переключение режима ввода между символами Юникода [Ă Ǣ], HTML-энтити/мнемоники [Ă Ǣ] и LaTeX [\u{A} \={\AE}] (если LaTeX команды нет — введёт символ Юникода) (RAlt + RShift + F1).
- Поиск символов по «тегам». У большинства из символов локальной библиотеки есть два и более тегов, по сути, представляющих из себя варианты названий, которые можно вводить как полностью, так и частично, чтобы получить результат (прописная буква Еры глаголицы или гла еры → ⰟⰊ).
- Внутренние раскладки клавиатуры, позволяющие использовать отличное от QWERTY/ЙЦУКЕН расположение привязок. Включает поддержку пользовательских раскладок в JSON‐формате.
- Вспомогательные TELEX/VNI-подобные режимы ввода для вьетнамского языка (с щепоткой джарайского) и для пиньиня.
- Мини-режимы для ввода надстрочных/подстрочных символов цифрового ряда (LWin LAlt + ↑/↓), при этом CapsLock зеркалит вводимые символы (при активном надстрочном режиме — активация CapsLock заставит вводиться подстрочные, и наоборот).
- Мини-режим для ввода римских цифр (отдельных символов Юникода) (LWin LAlt RShift + ↑): ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ…
- Возможность добавлять символы в избранное. Избранный символ будет выделяться в списке символом ★, а его рецепт (если он есть) будет всегда отображаться в подсказке режима композиции.
- Поддержка модификаций. Возможно добавление, например, собственного «Альтернативного» или TELEX/VNI-подобного режима к уже существующим.
- И другие, менее значимые возможности…
Ниже описаны подробности главных возможностей.
Главное окно
Содержит перечень рецептов «Композиции» и клавиатурных привязок (стандартных, альтернативных режимов, TELEX/VNI-подобных режимов), а так же вкладку «помощь» со вспомогательной информацией по использованию программы.
Вызывается из контекстного меню иконки в трее либо комбинацией LWin + LAlt + Home.
Примечание: вкладки «МФА-ключи» и «МФА-рецепты» — часть будущего обновления версии 0.1.6.3 α.
Окно настроек
Вызывается из контекстного меню иконки в трее либо комбинацией RCtrl + F9.
Многослойные привязки, они же «Быстрые ключи»
Их очень и очень много. На одну клавишу может приходиться до десяти–одиннадцати комбинаций (если не считать комбинации с CapsLock за отдельные), но в основном их около восьми (латинская I в этом чемпион: Ĭ Ï Ī Ĩ Î Ǐ Į İ Í Ì Ȉ).
В случае необходимости их можно отключить/включить через RAlt + F1. Состояние сохраняется в файле настроек.
Инструмент создавался под полноразмерную клавиатуру — со стрелками, нампадом и т.д. Это может вызывать неудобства у пользователей других вариантов клавиатур, однако это можно сгладить через пользовательские привязки.
Некоторые комбинации были унаследованы от «Типографской раскладки».
Карты некоторых привязок кириллицы:
И для латиницы:
Диакритикческие знаки:
Пояснение к клавишам стрелок с RAlt: символы ↖↗↙↘↔↕ вводятся через комбинации нескольких стрелок, например, RAlt + стрелока влево + стрелка вправо = ↔.
Схожая «механика» есть у некоторых клавиш нампада:
Последовательность ×÷ (*/) даёт ⋇, −+ и +− дают ±∓ соответственно.
Режим композиции
Вдохновлён клавишей Compose из Linux и WinCompose. Преобразует последовательность одних символов во что-то другое.
Активируется двойным нажатием RAlt. Ввод пользователя будет отображаться во всплывающей подсказке вместе с предложениями совпадений и списком рецептов избранных символов.
Срабатывает на первое точное совпадение рецепта. Это и плюс и немного минус — такое поведение не позволит ввести, например, Ǣ из-за автоматического срабатывания AE → Æ. Для решения этой проблемы я ввела режим удержания (клавиша Pause), при котором композиция ждёт нажатия Enter или снятия с удержания.
Помимо режима удержания можно использовать «оператор» гравис [ ` ]. Он не отменяет автоматическое срабатывание, но сохраняет его результат в переменной активной композиции вместо отправки в окно приложения. Это позволяет продолжить последовательности, если есть рецепты, начинающиеся с полученного результата. Ǣ = A`E → Æ → Æ<МАКРОН>.
Общий перечень клавиш:
- Enter — подтвердить ввод.
- Escape — отменить режим композиции.
- Backspace — стереть последний символ.
- Insert — вставка содержимого буфера обмена.
- Pause — переключение удержания.
Операторы
- Гравис [ ` ] — описан выше.
- (ЧИСЛО) — при начале ввода с такого оператора результат рецепта будет продублирован указанное число раз, «(5) TH» → «ÞÞÞÞÞ».
- (~) — при начале ввода с такого оператора можно вводить целые слова, внутри которых будут обработаны рецепты, «(~) T<ЗАПЯТАЯ СНИЗУ>ara Roma<ЦИРКУМФЛЕКС>neasca<КРАТКА>» → «Țara Românească».
- (ЧИСЛО~) — объединение предыдущих операторов.
- ## — позволяет предотвратить обработку нежелательных последовательностей, «(~) tho<АКУТ>rr» → «þórr», «(~) t##ho<АКУТ>rr» → «thórr».
Ввод кодовых точек Юникода и Альт-кодов
Режим композиции можно использовать для вставки символов по их кодам. Ввод начинается с U+/Ю+ или A+/А+, а после — значение. Можно указывать множество значений, разделяя их пробелом.
Пользовательские рецепты
Как «вручную», так и через окно интерфейса можно создавать свои рецепты для композиции. Результат может быть сколько угодно объёмным многострочным текстом, но не рекомендую вставлять туда через чур большой текст.
Поддерживается подгрузка простых последовательностей из файлов формата XCompose. Их небходимо помещать в директорию «DSLKeyPad\User\profile-<ПРОФИЛЬ>\XCompose\». Файл должен заканчиваться расширением «.XCompose».
Кроме простого текста, в результате и рецепте можно ссылаться на записи локальной библиотеки символов:
Например, если создать рецепт «white_heart» с символом 🤍, а потом создать рецепт с результатом «Это три белых сердца: ${white_heart×3} ${lat_s_let_\w,h,i,t,e/::script}», выводом последнего станет «Это три белых сердца: 🤍🤍🤍 𝓌𝒽𝒾𝓉ℯ». «\/» используются внутри ссылки для указания множественных записей по части их названий:
=
Альтернативный ввод
Комбинация: LWin + LAlt + S (селектор)
По сути — просто наборы активируемых привязок для целого перечня форм письменности/алфавитов, в основном отличных от латиницы и кириллицы.
Некоторые формы письменности активируются парами — одна письменность работает на латинской раскладке, другая на кириллической. В остальном режимы одиночны, работают сразу на нескольких языковых раскладках, но предназначены именно для латинской (в особенности режимы с вводом слогов).
На момент релиза версии 0.1.5.3 α доступны следующие наборы:
- Международный фонетический алфавит
- Математический ввод
- Греческий (включает древние символы: ϷϜͶϞϘϺϡͲ…)
- Германские руны
- Глаголица
- Древнетюркское письмо
- Древнепермское письмо
- Секейское письмо
- Готское письмо
- Агванское письмо
- Древнеиталийское письмо
- Финикийское письмо
- Самаритянское письмо
- Южно- и североаравийское письмо
- Карийское письмо
- Ликийское письмо
- Лидийское письмо
- Сидетское письмо
- Кипрское слоговое письмо
- Тифинаг
- Угаритское письмо
- Древнеперсидское письмо
- Имперский арамейский
- Пальмирское письмо
- Парфянское письмо
- Манихейское письмо
- Дезеретский алфавит
- Алфавит Шоу
Вариации глифов
Комбинация: LWin + LAlt + A (селектор)
Имеет такой же селектор, как у «Альтернативного ввода», но вместо набора привязок указывает программе, какой вариант символа нужно использовать. У записей библиотеки есть атрибут, в котором прописаны варианты — полужирный, курсивный, капитель и т.д. Такие символы не представлены отдельными записями, являясь лишь свойством. Это делает «Вариации глифов» легко совместимыми с фичами, полагающимися на создание привязок.
Если в записи символа отсутствует указанный вариант — будет послан «обычный» символ.
TELEX/VNI-подобный ввод
Режимы, основанные на вьетнамских TELEX и VNI раскладках для облегчения ввода, собственно, вьетнамского (с добавлением букв джарайского алфавита) и пиньиня. Несовместимы с режимами Альтернативного ввода.
Комбинации: RAlt + F2 (Вьетнамский), RAlt + RShift + F2 (Пиньинь) / LWin + LAlt + D (селектор)
Нюансы
Работает, пока что, не так хорошо, как настоящая вьетнамская языковая раскладка — не учитывает контекст поля ввода и перемещение каретки в нём.
Если по какой-то причине «локальный» контекст (видимый во всплывающей подсказке) не совпадает с контекстом поля ввода — его можно сбросить нажатием RCtrl.
Поиск
Комбинация: LWin + LAlt + F
Как уже упоминалось — у каждого символа есть набор «тегов», и они могут быть весьма длинными. Например, «строчная буква омега с псили, периспомени и ипогеграммени эллиницы» даст символ «ᾦ».
Вводить полный тег не обязательно — «омег пс пе ип» даст тот же «ᾦ». Однако чем короче запрос, тем менее точный будет результат. Через запятую можно вводить множество запросов:
- «дез ди, !дез ди, lamb, !lamb» → «𐐔𐐼Λλ»
- «ref, obe, psms, msps» → «※÷±∓»
Вместо тега можно ввести имя записи, например «hel_c_let_l_lambda» → «Λ».
Можно использовать регулярные выражения, например:
- «fut.*?al» (ищем тег с любыми символами и пробелами между fut и al) → «ᚺ» (руна Хагалаз), полный тег: «germanic rune elder futhark Hagalaz».
- «az$» (ищем тег с az в конце) → «ᛞ» (руна Манназ), полный тег: «germanic rune elder futhark Mannaz».
- «^фра» (ищем тег с фра в начале) → «₣» (Франк).
Поддерживается и указание вариации глифа, добавляя ::<ВАРИАНТ> в конец запроса:
- «лигатура ae, лигатура ae::капитель, !латин h::фрактур» → «Æᴁ𝔥»
Внутренние раскладки клавиатуры
Возможно они могли бы показаться лишними, но они необходимы — привязки прибиваются гвоздями к скан-кодам клавиш (что я посчитала более надёжным, чем к «абстракции» в виде буквы/названия клавиши). Из-за этого переключение системной раскладки не изменит положение привязок программы. Однако в настройках можно выбрать соответствующие внутренние раскладки и тогда привязки будут на корректных местах для отличных от QWERTY/ЙЦУКЕН раскладок.
Поддерживаемую раскладку можно «эмулировать» через включение «ремаппинга» в окне настроек, но лучше установить-использовать системную раскладку вместо этого.
Установка:
Во-первых, необходимо установить сам AuotHotkey 2.*, скачав с соответствующего сайта или через терминал:
Затем:
- Выбрать самую последнюю версию DSL KeyPad из релизов репозитория или скачать с SourceForge.
- Распаковать содержимое архива куда угодно — это и будет директорией установки.
- Запустить DSLKeyPad.exe или DSLKeyPad.ahk файл.
- При необходимости в настройках можно установить автозагрузку при старте системы. *При перемещении папки необходимо будет снова установить автозагрузку, т.к. путь не обновляется автоматически.
- Необходимы шрифты Noto Serif, Noto Sans, Noto Sans Symbols. Опциональные шрифты (для письменностей) указаны в заметках релиза.
Ограничения и нюансы
- Инструмент всё ещё находится в стадии разработки, но уже может быть полноценно использован.
- Антиничиты в играх могут триггериться от использования автохоткея, так как немало людей создают на автохоткее разного рода макросы. Перед заходом в любую многопользовательскую игру лучше закрывать все процессы автохоткея.
- Потребляет ~140–180 МБ ОЗУ (без учёта модов и пользовательских рецептов). По возможности буду пытаться оптимизировать использование памяти.
- Автохоткей перехватывает клавиши, т.е. это может приводить к блокировке стандартных привязок приложений. Чтобы избежать этого, можно использовать комбинацию RAlt + F1 для приостановки «Быстрых ключей» (оставляя ряд функций доступными), либо RCtrl + F10 для приостановки всех привязок, кроме самой RCtrl + F10.
- Программа плохо совместима с быстрой печатью. Если вам необходима высокая скорость ввода символов — это не тот инструмент, лучше использовать раскладки для отдельных языков.
- Программа ограничена работой на английских и русских раскладках. При обнаружении другого языка клавиатуры (например, японский) — все привязки автоматически приостановятся, так как будут мешать этому языку (в примере с японским — невозможность использовать катакану при зажатии LShift). При возврате на английский/русский — автоматически восстановятся.
- Не все привязки могут работать на той или иной мембранной клавиатуре. Полноценно проверить работоспособность привязок на механической клавиатуре не удалось (по причине её полурабочего состояния), но она помогла понять, что некоторые привязки не работают из-за основной, мембранной, клавиатуры, а не косяка в коде.
- Не во всех приложениях комбинации будут работать или работать стабильно. Например, в Adobe Illustrator что-то вводит символ, что-то нет, а что-то вводит, но он не появляется, пока не нажмёшь на клавишу стрелки.
Благодарю, если дочитали. Надеюсь это будет кому-то полезно.
Не уверена, стоило ли бы растягивать статью ещё сильнее информацией по кастомизации (пользовательские раскладки, привязки, модификации). Решила не включать из-за сомнений в её надобности. В любом случае, в будущем планирую сделать отдельный сайт с документацией, где будет расписано что и как можно делать.
Постаралась сосредоточить информацию лишь на самом главном… и то вышло многовато букв.