Automazioni
Usa preimpostazioni o regole personali per cambiare la tastiera mentre scrivi, senza sostituire la configurazione salvata.
Le regole di stato applicano impostazioni temporanee finché le condizioni sono soddisfatte. Combina orientamento, larghezza della finestra, aspetto, lingua, layout, proprietà del campo, ora o stato dichiarato da un plugin. Scegli se devono valere tutte le condizioni o almeno una. Un contesto sconosciuto non soddisfa mai una condizione negativa.
Le regole di evento si eseguono all’apertura della tastiera, quando cambia la lingua o una proprietà del campo, quando un plugin emette un evento o tocchi una scorciatoia. I comandi si eseguono una volta per evento. Le impostazioni temporanee durano fino alla chiusura della tastiera, alla modifica della regola o alla cancellazione delle modifiche di sessione.
La configurazione salvata resta la base
Le regole si sovrappongono alle impostazioni attualmente salvate. Trascinale per cambiarne la priorità; prevalgono le ultime. Disattivare una regola rimuove il suo contributo. Le modifiche salvate restano disponibili al termine di una modifica temporanea. Un’azione di profilo è temporanea e non seleziona né riscrive il profilo salvato.
La preimpostazione compatta usa righe di tasti alte 28 punti e il 80% della larghezza salvata, entro i limiti esistenti. Con la divisione attiva, i tasti più piccoli lasciano più spazio tra le due metà e le mantengono vicino ai bordi. La modalità a una mano conserva il proprio allineamento. Le percentuali partono sempre dal valore salvato e non si accumulano mai.
L’anteprima usa il contesto di esempio che scegli. Mostra le condizioni soddisfatte, i riferimenti non validi e le impostazioni previste senza eseguire comandi. L’anteprima dell’app è separata dalla tastiera attiva. Aggiungi Automazioni alla barra superiore per vedere le modifiche attive ed eseguire le regole tramite scorciatoie.
Quando si verifica un evento
Quando si verifica un evento
keyboard.openkeyboard.closekeyboard.languageChangedkeyboard.layoutChangedkeyboard.profileChangedkeyboard.planeChangedinput.changedtime.minuteuser.run
Azioni
panel.closeplane.lettersplane.numbersplane.symbolsoverrides.clearpanel.emojipanel.calculatorpanel.conversionpanel.layoutspanel.profiles
La valutazione avviene mentre la tastiera è attiva. Le regole orarie non si eseguono in background e gli eventi di chiusura non sono garantiti. Clink non può identificare l’app ospitante né modificare le impostazioni di iOS. Le regole mantengono i requisiti di Abbonamento, Accesso completo e tocco dell’utente delle funzioni utilizzate. Importare non concede permessi.
Il contratto del plugin
L’oggetto automation facoltativo in un file .clinkplugin dichiara eventi, stato, impostazioni, comandi, preimpostazioni e slot per scorciatoie. Ogni contributo ha un ID stabile, una versione esatta dello schema e titoli localizzati. L’host crea nomi nel formato plugin/<plugin-id>/<kind>/<id>. Un plugin non può usare lo spazio dei nomi del sistema o di un altro plugin.
Stato pubblicato, dati degli eventi e argomenti dei comandi accettano booleani, numeri entro limiti definiti e scelte dichiarate. Le impostazioni possono usare anche testo di lunghezza limitata. Stato e impostazioni usano chiavi del dizionario di stato esistente del plugin. I valori temporanei vengono ripristinati prima del salvataggio. Le preimpostazioni sono normali regole disattivate da selezionare esplicitamente.
Plugin ›Hook
| Hook | Quando viene eseguito |
|---|---|
on_automation(command, args, state) | on_automation(command, args, state) esegue un comando locale approvato nella sandbox esistente. Può aggiornare la scritta sulla barra spaziatrice, pubblicare uno stato dichiarato o emettere un evento dichiarato. Questo hook non consente inserimento di testo, accesso agli appunti, modifiche persistenti alle impostazioni o richieste esterne. |
automation_emit(name, payload) | Emetti un evento dichiarato con i suoi dati tipizzati. L’host aggiunge lo spazio dei nomi del plugin e le versioni dello schema; lo script non può attribuirsi un gesto dell’utente né definire gli antecedenti della catena di esecuzione. |
automation_publish(name, value) | Pubblica un valore di stato dichiarato per le condizioni. I valori scompaiono alla fine della sessione della tastiera o quando il plugin non è più disponibile. |
automation_run(slot) | Chiama dal gestore di azione di un controllo nativo del plugin. L’utente associa lo slot di scorciatoia dichiarato a una regola in Automazioni. Un plugin non può scegliere la regola di nascosto né attivare da un timer un comando che richiede un tocco. |
Azioni
space_textautomation_emitautomation_publish
Un evento dichiarato e un comando sicuro
Questo frammento di manifesto va nel campo automation di un normale file di plugin. Lo script pubblica se la tastiera è pronta, emette un evento e aggiorna una scritta. Nell’editor, seleziona quell’evento, richiedi lo stato ready e scegli il comando caption. Leggere questo esempio non installa né attiva alcun 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 stateSchema e limiti
La versione 1 supporta 128 regole, 24 condizioni e 32 azioni per regola, con importazioni fino a 1.048.576 byte. Il registro delle impostazioni espone 268 destinazioni e documenta 39 esclusioni. I gruppi di impostazioni non validi vengono rifiutati per intero; i comandi si fermano al primo errore senza promettere di annullare gli effetti precedenti.
Contributi del plugin rimossi, disattivati o incompatibili rendono indisponibili le regole dipendenti. Arresti anomali e timeout disattivano il contributo interessato per la sessione. I comandi hanno un limite di 20.000 passaggi e un breve tempo di esecuzione. Code limitate, intervalli tra esecuzioni, limiti alle catene e stabilizzazione dello stato impediscono ripetizioni infinite.
Widget
Clink porta tre widget per la schermata Home e una Live Activity: un selettore di profili, le tue statistiche di digitazione, la dettatura rapida e la sessione di dettatura stessa.
I widget leggono direttamente il file di impostazioni condiviso, quindi continuano a funzionare con l'app chiusa.
App Intents
Oggi ci sono due intent e nessuno dei due apre l'app. Switch Keyboard Profile riscrive le impostazioni condivise dal widget, e una tastiera già a schermo recepisce subito il cambiamento. End Dictation raggiunge la sessione del microfono dalla Live Activity, avviando l'app in background se serve.
Passare a un profilo creato da te richiede l'Abbonamento, e quel controllo avviene anche dentro il widget. I profili inclusi in Clink sono gratuiti.
Clink non definisce frasi proprie per Comandi rapidi, quindi non c'è nulla da dire a voce.
Link
Clink risponde al suo schema di URL clink. Un link apre l'app sulla pagina che indichi, oppure esegue una delle rotte riservate.
| Link | Cosa fa |
|---|---|
clink://settings/<page> | Apre una pagina di impostazioni. Aggiungi ?anchor=<id> per arrivare su una riga. |
clink://<page> | La stessa pagina, scritta in breve. |
clink://search?q=<text> | Apre la ricerca con la query già inserita. |
clink://analytics | Apre le statistiche di digitazione. |
clink://dictation/start | Avvia una sessione di dettatura. |
clink://dictation/stop | Chiude la sessione e rimuove la Live Activity. |
clink://paywall | Apre l'abbonamento. |
clink://verify | Ricontrolla il tuo abbonamento, quando un diritto è rimasto indietro. |
Dettatura, abbonamento e verifica sono riservati, quindi non si possono usare come nomi di pagina.
Aprire i file
Clink registra i suoi tipi di file su iOS, quindi File, AirDrop, Messaggi e qualsiasi pannello di condivisione propongono di aprirli in Clink.