Автоматизации
Используйте готовые или собственные правила, чтобы менять клавиатуру во время набора, сохраняя основные настройки.
Правила состояния применяют временные настройки, пока выполняются условия. Можно сочетать ориентацию, ширину окна, оформление, язык, раскладку, свойства поля ввода, время и объявленное состояние плагина. Выберите, должны ли выполняться все условия или хотя бы одно. Неизвестный контекст никогда не считается выполнением отрицательного условия.
Правила событий срабатывают при открытии клавиатуры, смене языка или свойств поля, событии плагина либо нажатии кнопки запуска. Команды выполняются один раз на событие. Временные настройки действуют до закрытия клавиатуры, изменения правила или очистки изменений сеанса.
Сохранённые настройки остаются основой
Правила накладываются на текущие сохранённые настройки. Перетаскивайте их, чтобы менять приоритет: более поздние правила имеют преимущество. Отключение правила убирает его изменения. Новые сохранённые настройки остаются доступными после завершения временного изменения. Действие с профилем временное: оно не выбирает и не перезаписывает сохранённый профиль.
Готовое компактное правило задаёт высоту рядов 28 пунктов и 80% сохранённой ширины в пределах допустимых размеров. При включённом разделении маленькие клавиши оставляют больше места между половинами и сохраняют их у краёв. Режим одной руки сохраняет своё выравнивание. Проценты всегда вычисляются от сохранённого значения и не накапливаются.
Предпросмотр использует выбранный вами пример контекста. Он показывает выполненные условия, недействительные ссылки и ожидаемые настройки без запуска команд. Предпросмотр в приложении не связан с текущим состоянием клавиатуры. Добавьте «Автоматизации» на верхнюю панель, чтобы видеть активные изменения и запускать правила кнопкой.
При наступлении события
При наступлении события
keyboard.openkeyboard.closekeyboard.languageChangedkeyboard.layoutChangedkeyboard.profileChangedkeyboard.planeChangedinput.changedtime.minuteuser.run
Действия
panel.closeplane.lettersplane.numbersplane.symbolsoverrides.clearpanel.emojipanel.calculatorpanel.conversionpanel.layoutspanel.profiles
Условия проверяются при активной клавиатуре. Правила по времени не работают в фоне, а событие закрытия не гарантируется. Clink не может определить приложение, в котором открыт, или менять настройки iOS. Требования используемых функций к подписке, полному доступу и нажатию пользователя сохраняются. Импорт не выдаёт разрешений.
Контракт плагина
Необязательный объект automation в файле .clinkplugin объявляет события, состояние, настройки, команды, готовые правила и слоты запуска. У каждого компонента есть стабильный ID, точная версия схемы и локализованные названия. Хост создаёт имена plugin/<plugin-id>/<kind>/<id>. Плагин не может занять системное пространство имён или пространство другого плагина.
Публикуемое состояние, данные событий и аргументы команд допускают логические значения, числа в заданных пределах и объявленные варианты. Настройки также допускают текст ограниченной длины. Состояние и настройки используют ключи существующего словаря состояния плагина. Временные значения восстанавливаются перед сохранением. Готовые правила являются обычными выключенными правилами и требуют явного выбора.
Плагины ›Хуки
| Хук | Когда вызывается |
|---|---|
on_automation(command, args, state) | on_automation(command, args, state) выполняет разрешённую локальную команду в существующей песочнице. Обработчик может обновить подпись пробела, опубликовать объявленное состояние или вызвать объявленное событие. Вставка текста, доступ к буферу обмена, постоянное изменение настроек и внешние запросы в этом обработчике запрещены. |
automation_emit(name, payload) | Вызовите объявленное событие с типизированными данными. Хост добавит пространство имён плагина и версии схем; скрипт не может выдать своё действие за жест пользователя или задать предысторию цепочки выполнения. |
automation_publish(name, value) | Опубликуйте одно объявленное значение состояния для условий. Значения исчезают в конце сеанса клавиатуры или когда плагин становится недоступным. |
automation_run(slot) | Вызывайте из обработчика действия нативного элемента управления плагина. Пользователь связывает объявленный слот запуска с правилом в «Автоматизациях». Плагин не может незаметно выбрать правило или по таймеру запустить команду, требующую нажатия. |
Действия
space_textautomation_emitautomation_publish
Объявленное событие и безопасная команда
Этот фрагмент манифеста помещается в поле automation обычного файла плагина. Скрипт публикует готовность клавиатуры, вызывает событие и обновляет подпись. В редакторе выберите это событие, задайте условие ready и команду caption. Чтение примера не устанавливает и не включает плагины.
{
"schemaVersion": 1,
"events": [
{
"id": "ready",
"title": {
"en": "Keyboard ready"
},
"version": 1,
"payload": [
{
"id": "ready",
"key": "ready",
"title": {
"en": "Ready"
},
"version": 1,
"type": "bool",
"choices": [],
"minimum": 0,
"maximum": 100,
"defaultValue": null
}
]
}
],
"state": [
{
"id": "ready",
"key": "ready",
"title": {
"en": "Ready"
},
"version": 1,
"type": "bool",
"choices": [],
"minimum": 0,
"maximum": 100,
"defaultValue": null
}
],
"settings": [
{
"id": "show_caption",
"key": "show_caption",
"title": {
"en": "Show caption"
},
"version": 1,
"type": "bool",
"choices": [],
"minimum": 0,
"maximum": 100,
"defaultValue": true
}
],
"commands": [
{
"id": "caption",
"title": {
"en": "Refresh caption"
},
"version": 1,
"arguments": [],
"behavior": "localUI",
"requiresUserGesture": false,
"requiresFullAccess": false
}
],
"presets": [],
"shortcuts": [
"run"
]
}def initial():
return {"ready": False, "show_caption": True}
def on_open(state):
state["ready"] = True
automation_publish("ready", True)
automation_emit("ready", {"ready": True})
return state
def on_automation(command, args, state):
if command == "caption":
space_text("Clink" if state["show_caption"] else None)
return state
def bar_items(state):
return [bar_button("run", "Run automation", icon="bolt.circle")]
def on_action(action, value, state):
if action == "run":
automation_run("run")
return stateСхема и ограничения
Версия 1 поддерживает 128 правил, 24 условий и 32 действий в каждом правиле, размер импорта до 1 048 576 байт. Реестр настроек содержит 268 целей и описывает 39 исключений. Недопустимые группы настроек отклоняются целиком; команды останавливаются при первой ошибке без обещания отменить предыдущие эффекты.
Удалённые, отключённые или несовместимые компоненты плагина делают зависимые правила недоступными. Сбой или превышение времени отключает проблемный компонент до конца сеанса. Командам отведено 20 000 шагов и небольшой срок выполнения. Ограниченные очереди, паузы, пределы цепочек и стабилизация состояния предотвращают бесконечные повторы событий.
Виджеты
В Clink есть три виджета для домашнего экрана и одна Live Activity: переключатель профилей, статистика набора, быстрая диктовка и сама сессия диктовки.
Виджеты читают общий файл настроек напрямую, поэтому работают и при закрытом приложении.
App Intents
Сегодня их два, и ни один не открывает приложение. Switch Keyboard Profile переписывает общие настройки прямо из виджета, и клавиатура, уже открытая на экране, подхватывает изменение сразу. End Dictation добирается до сессии микрофона из Live Activity, при необходимости запуская приложение в фоне.
Переключение на собственный профиль требует подписки, и эта проверка выполняется в том числе внутри виджета. Профили, которые идут с Clink, бесплатны.
Clink не задаёт собственных фраз для «Команд», так что произносить вслух нечего.
Ссылки
Clink отвечает на собственную схему URL clink. Ссылка открывает приложение на названной вами странице или запускает один из зарезервированных маршрутов.
| Ссылка | Что делает |
|---|---|
clink://settings/<page> | Открывает страницу настроек. Добавьте ?anchor=<id>, чтобы попасть на нужную строку. |
clink://<page> | Та же страница, записанная коротко. |
clink://search?q=<text> | Открывает поиск с уже введённым запросом. |
clink://analytics | Открывает статистику набора. |
clink://dictation/start | Начинает сессию диктовки. |
clink://dictation/stop | Завершает сессию и убирает Live Activity. |
clink://paywall | Открывает подписку. |
clink://verify | Перепроверяет подписку, если запись о правах устарела. |
Диктовка, подписка и проверка зарезервированы, поэтому их нельзя использовать как названия страниц.
Открытие файлов
Clink регистрирует свои типы файлов в iOS, поэтому «Файлы», AirDrop, «Сообщения» и любое меню «Поделиться» предлагают открыть их в Clink.