Automatizaciones
Usa preajustes o tus propias reglas para cambiar el teclado mientras escribes, sin sustituir tu configuración guardada.
Las reglas de estado aplican ajustes temporales mientras se cumplen sus condiciones. Combina orientación, ancho de ventana, apariencia, idioma, distribución, propiedades del campo de texto, hora o estado declarado por un plugin. Elige si deben cumplirse todas las condiciones o cualquiera de ellas. Un contexto desconocido nunca satisface una condición negativa.
Las reglas de evento se ejecutan cuando se abre el teclado, cambia el idioma o una propiedad del campo, un plugin emite un evento o tocas un atajo. Los comandos se ejecutan una vez por evento. Los ajustes temporales duran hasta que se cierra el teclado, cambia la regla o borras las modificaciones de la sesión.
Tu configuración guardada es la base
Las reglas se aplican sobre tus ajustes guardados actuales. Arrástralas para cambiar la prioridad; prevalecen las últimas. Desactivar una regla retira sus cambios. Los ajustes que guardes siguen disponibles cuando termina una modificación temporal. Una acción de perfil es temporal y no selecciona ni reescribe tu perfil guardado.
El preajuste compacto usa filas de teclas de 28 puntos y el 80% del ancho guardado, dentro de los límites de tamaño existentes. Con la división activada, las teclas más pequeñas dejan más espacio entre las mitades y las mantienen cerca de los bordes. El modo de una mano conserva su alineación. Los porcentajes siempre parten del valor guardado y nunca se acumulan.
La vista previa usa el contexto de ejemplo que elijas. Muestra las condiciones que se cumplen, referencias no válidas y ajustes esperados sin ejecutar comandos. La vista previa de la app es independiente del teclado activo. Añade Automatizaciones a la barra superior para ver las modificaciones activas y ejecutar reglas mediante atajos.
Cuando ocurre un evento
Cuando ocurre un evento
keyboard.openkeyboard.closekeyboard.languageChangedkeyboard.layoutChangedkeyboard.profileChangedkeyboard.planeChangedinput.changedtime.minuteuser.run
Acciones
panel.closeplane.lettersplane.numbersplane.symbolsoverrides.clearpanel.emojipanel.calculatorpanel.conversionpanel.layoutspanel.profiles
La evaluación ocurre mientras el teclado está activo. Las reglas horarias no se ejecutan en segundo plano y los eventos de cierre no están garantizados. Clink no puede identificar la app anfitriona ni cambiar ajustes de iOS. Las reglas conservan los requisitos de Membresía, Acceso total y toque del usuario de las funciones que usan. Importar no concede permisos.
El contrato del plugin
El objeto automation opcional de un archivo .clinkplugin declara eventos, estado, ajustes, comandos, preajustes y espacios para atajos. Cada aportación tiene un identificador estable, una versión de esquema exacta y títulos localizados. El anfitrión crea nombres con el formato plugin/<plugin-id>/<kind>/<id>. Un plugin no puede usar el espacio de nombres del sistema ni el de otro plugin.
El estado publicado, los datos de eventos y los argumentos de comandos admiten booleanos, números acotados y opciones declaradas. Los ajustes también admiten texto limitado. El estado y los ajustes usan claves del diccionario de estado existente del plugin. Los valores temporales se restauran antes de guardar. Los preajustes son reglas normales desactivadas que requieren una selección explícita.
Plugins ›Hooks
| Hook | Cuándo se ejecuta |
|---|---|
on_automation(command, args, state) | on_automation(command, args, state) ejecuta un comando local aprobado en el entorno aislado existente. Puede actualizar el texto de la barra espaciadora, publicar estado declarado o emitir un evento declarado. Este hook no permite insertar texto, acceder al portapapeles, cambiar ajustes persistentes ni hacer peticiones externas. |
automation_emit(name, payload) | Emite un evento declarado con sus datos tipados. El anfitrión añade el espacio de nombres y las versiones de esquema del plugin; el script no puede atribuirse un gesto del usuario ni establecer el historial de la cadena de ejecución. |
automation_publish(name, value) | Publica un valor de estado declarado para las condiciones. Los valores desaparecen al terminar la sesión del teclado o cuando el plugin deja de estar disponible. |
automation_run(slot) | Llama desde el manejador de acción de un control nativo del plugin. El usuario vincula el espacio de atajo declarado a una regla en Automatizaciones. Un plugin no puede elegir la regla por su cuenta ni activar desde un temporizador un comando que requiera un toque. |
Acciones
space_textautomation_emitautomation_publish
Un evento declarado y un comando seguro
Este fragmento de manifiesto va en el campo automation de un archivo de plugin normal. Su script publica si el teclado está listo, emite un evento y actualiza un texto. En el editor, selecciona ese evento, exige el estado ready y elige el comando caption. Leer este ejemplo no instala ni activa ningún plugin.
{
"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 stateEsquema y límites
La versión 1 admite 128 reglas, 24 condiciones y 32 acciones por regla, con importaciones de hasta 1.048.576 bytes. El registro de ajustes ofrece 268 destinos y documenta 39 exclusiones. Los grupos de ajustes no válidos se rechazan completos; los comandos se detienen al primer fallo sin prometer deshacer lo anterior.
Las aportaciones eliminadas, desactivadas o incompatibles de un plugin dejan sus reglas dependientes sin disponibilidad. Los fallos y los tiempos de espera agotados desactivan la aportación afectada durante la sesión. Los comandos tienen un límite de 20.000 pasos y un tiempo breve de ejecución. Las colas acotadas, las pausas entre ejecuciones, los límites de cadena y la estabilización del estado impiden que los eventos repetidos se ejecuten indefinidamente.
Widgets
Clink incluye tres widgets de pantalla de inicio y una Live Activity: un selector de perfiles, tus estadísticas de escritura, dictado rápido y la propia sesión de dictado.
Los widgets leen directamente el archivo de ajustes compartido, así que siguen funcionando con la app cerrada.
App Intents
Hoy se incluyen dos intents, y ninguno abre la app. Switch Keyboard Profile reescribe los ajustes compartidos desde el widget, y un teclado que ya esté en pantalla recoge el cambio al instante. End Dictation alcanza la sesión del micrófono desde la Live Activity, iniciando la app en segundo plano si hace falta.
Cambiar a un perfil creado por ti necesita Membresía, y esa comprobación también se hace dentro del widget. Los perfiles que trae Clink son gratis.
Clink no define frases propias de Atajos, así que no hay nada que decir en voz alta.
Enlaces
Clink responde a su propio esquema de URL clink. Un enlace abre la app en la página que indiques o ejecuta una de las rutas reservadas.
| Enlace | Qué hace |
|---|---|
clink://settings/<page> | Abre una página de ajustes. Añade ?anchor=<id> para caer en una fila. |
clink://<page> | La misma página, escrita en corto. |
clink://search?q=<text> | Abre la búsqueda con la consulta ya escrita. |
clink://analytics | Abre las estadísticas de escritura. |
clink://dictation/start | Inicia una sesión de dictado. |
clink://dictation/stop | Termina la sesión y retira la Live Activity. |
clink://paywall | Abre Membresía. |
clink://verify | Vuelve a comprobar tu membresía, para cuando un derecho se ha quedado obsoleto. |
Dictado, membresía y verificación están reservados, así que no pueden usarse como nombres de página.
Abrir archivos
Clink registra sus tipos de archivo en iOS, así que Archivos, AirDrop, Mensajes y cualquier hoja de compartir ofrecen abrirlos en Clink.