Automationen
Nutze Vorlagen oder eigene Regeln, um die Tastatur beim Tippen anzupassen, ohne deine gespeicherten Einstellungen zu ersetzen.
Zustandsregeln wenden vorübergehende Einstellungen an, solange ihre Bedingungen erfüllt sind. Kombiniere Ausrichtung, Fensterbreite, Erscheinungsbild, Sprache, Layout, Textfeldeigenschaften, Uhrzeit oder deklarierten Plugin-Zustand. Wähle, ob alle Bedingungen oder eine beliebige Bedingung gelten müssen. Unbekannter Kontext erfüllt niemals eine negative Bedingung.
Ereignisregeln laufen beim Öffnen der Tastatur, bei einem Sprach- oder Textfeldeigenschaftswechsel, bei einem Plugin-Ereignis oder beim Antippen eines Kurzbefehls. Befehle laufen einmal pro Ereignis. Vorübergehende Einstellungen gelten bis zum Schließen der Tastatur, bis die Regel geändert wird oder bis du die Sitzungsänderungen löschst.
Deine gespeicherten Einstellungen bleiben die Basis
Regeln legen sich über die aktuell gespeicherten Einstellungen. Ziehe sie in eine andere Reihenfolge, um ihre Priorität zu ändern; spätere Regeln gewinnen. Beim Ausschalten einer Regel werden ihre Änderungen entfernt. Neu gespeicherte Einstellungen bleiben nach dem Ende einer vorübergehenden Änderung erhalten. Eine Profilaktion ist vorübergehend und wählt oder überschreibt dein gespeichertes Profil nicht.
Die Kompaktvorlage verwendet Tastenreihen mit 28 Punkten Höhe und 80% der gespeicherten Breite innerhalb der bestehenden Größenlimits. Bei aktivierter Teilung schaffen kleinere Tasten mehr Platz zwischen den Hälften und halten sie nahe an den Rändern. Der Einhandmodus behält seine Ausrichtung. Prozentwerte beziehen sich immer auf den gespeicherten Wert und werden nie wiederholt auf das Ergebnis angewendet.
Die Vorschau nutzt von dir gewählten Beispielkontext. Sie zeigt passende Bedingungen, ungültige Verweise und erwartete Einstellungen, ohne Befehle auszuführen. Die App-Vorschau ist von der aktiven Tastatur getrennt. Füge Automationen zur oberen Leiste hinzu, um dort aktive Änderungen zu sehen und Kurzbefehlsregeln zu starten.
Wenn ein Ereignis eintritt
Wenn ein Ereignis eintritt
keyboard.openkeyboard.closekeyboard.languageChangedkeyboard.layoutChangedkeyboard.profileChangedkeyboard.planeChangedinput.changedtime.minuteuser.run
Aktionen
panel.closeplane.lettersplane.numbersplane.symbolsoverrides.clearpanel.emojipanel.calculatorpanel.conversionpanel.layoutspanel.profiles
Die Auswertung findet bei aktiver Tastatur statt. Zeitregeln laufen nicht im Hintergrund, und Schließereignisse sind nicht garantiert. Clink kann weder die Host-App erkennen noch iOS-Einstellungen ändern. Die Anforderungen der genutzten Funktionen an Mitgliedschaft, vollen Zugriff und Antippen durch den Nutzer bleiben bestehen. Ein Import erteilt keine Berechtigungen.
Die Plugin-Schnittstelle
Das optionale automation-Objekt in einer .clinkplugin-Datei deklariert Ereignisse, Zustand, Einstellungen, Befehle, Vorlagen und Kurzbefehlplätze. Jeder Beitrag hat eine stabile ID, eine genau passende Schemaversion und lokalisierte Titel. Der Host erstellt Namen nach plugin/<plugin-id>/<kind>/<id>. Ein Plugin kann keinen System-Namensraum und keinen Namensraum eines anderen Plugins beanspruchen.
Veröffentlichter Zustand, Ereignisdaten und Befehlsargumente erlauben boolesche Werte, begrenzte Zahlen und deklarierte Auswahlwerte. Einstellungen können auch begrenzten Text verwenden. Zustand und Einstellungen verwenden Schlüssel im vorhandenen Zustandswörterbuch des Plugins. Vorübergehende Werte werden vor dem Speichern zurückgesetzt. Vorlagen sind gewöhnliche ausgeschaltete Regeln und müssen ausdrücklich ausgewählt werden.
Plugins ›Hooks
| Hook | Wann er läuft |
|---|---|
on_automation(command, args, state) | on_automation(command, args, state) führt einen zugelassenen lokalen Befehl in der bestehenden Sandbox aus. Der Hook darf die Beschriftung der Leertaste aktualisieren, deklarierten Zustand veröffentlichen oder deklarierte Ereignisse auslösen. Texteingabe, Zwischenablagezugriff, dauerhafte Einstellungsänderungen und externe Anfragen sind hier nicht erlaubt. |
automation_emit(name, payload) | Löse ein deklariertes Ereignis mit typisierten Daten aus. Der Host ergänzt Plugin-Namensraum und Schemaversionen; das Skript kann weder eine Nutzergeste noch die Vorgeschichte der Ausführungskette vorgeben. |
automation_publish(name, value) | Veröffentliche einen deklarierten Zustandswert für Bedingungen. Die Werte verschwinden am Ende der Tastatursitzung oder wenn das Plugin nicht mehr verfügbar ist. |
automation_run(slot) | Rufe die Funktion im Aktionshandler eines nativen Plugin-Bedienelements auf. Der Nutzer ordnet den deklarierten Kurzbefehlplatz in Automationen einer Regel zu. Ein Plugin kann die Regel nicht unbemerkt selbst wählen oder über einen Timer einen Befehl auslösen, der Antippen erfordert. |
Aktionen
space_textautomation_emitautomation_publish
Ein deklariertes Ereignis und ein sicherer Befehl
Dieses Manifestfragment gehört in das automation-Feld einer normalen Plugin-Datei. Das Skript veröffentlicht die Bereitschaft der Tastatur, löst ein Ereignis aus und aktualisiert eine Beschriftung. Wähle im Editor dieses Ereignis, verlange den Zustand ready und wähle den Befehl caption. Durch das Lesen dieses Beispiels wird kein Plugin installiert oder aktiviert.
{
"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 und Grenzen
Version 1 unterstützt 128 Regeln, 24 Bedingungen und 32 Aktionen pro Regel sowie Importe bis 1.048.576 Byte. Das Einstellungsregister bietet 268 Ziele und dokumentiert 39 Ausnahmen. Ungültige Einstellungsgruppen werden vollständig abgelehnt; Befehle stoppen beim ersten Fehler, ohne ein Rückgängigmachen früherer Effekte zu versprechen.
Entfernte, deaktivierte oder inkompatible Plugin-Beiträge machen abhängige Regeln unverfügbar. Abstürze und Zeitüberschreitungen deaktivieren den betroffenen Beitrag für die Sitzung. Befehle erhalten 20.000 Schritte und ein kurzes Zeitlimit. Begrenzte Warteschlangen, Abkühlzeiten, Kettenlimits und Zustandsstabilisierung verhindern endlose Wiederholungen.
Widgets
Clink bringt drei Home-Bildschirm-Widgets und eine Live Activity mit: einen Profilwechsler, deine Tippstatistik, Schnelldiktat und die Diktatsitzung selbst.
Die Widgets lesen die geteilte Einstellungsdatei direkt, sie funktionieren also auch bei geschlossener App.
App Intents
Heute sind zwei Intents dabei, und keiner öffnet die App. Switch Keyboard Profile schreibt die geteilten Einstellungen aus dem Widget neu, und eine Tastatur, die schon auf dem Bildschirm ist, übernimmt die Änderung sofort. End Dictation erreicht die Mikrofonsitzung aus der Live Activity und startet die App notfalls im Hintergrund.
Der Wechsel zu einem selbst gebauten Profil braucht eine Mitgliedschaft, und diese Prüfung läuft auch im Widget. Die Profile, die Clink mitbringt, sind kostenlos.
Clink definiert keine eigenen Kurzbefehl-Sätze, es gibt also nichts laut zu sagen.
Links
Clink beantwortet sein eigenes URL-Schema clink. Ein Link öffnet die App auf der Seite, die du nennst, oder löst eine der reservierten Routen aus.
| Link | Was er tut |
|---|---|
clink://settings/<page> | Öffnet eine Einstellungsseite. Hänge ?anchor=<id> an, um direkt auf einer Zeile zu landen. |
clink://<page> | Dieselbe Seite, kurz geschrieben. |
clink://search?q=<text> | Öffnet die Suche mit bereits eingetragener Anfrage. |
clink://analytics | Öffnet die Tippstatistik. |
clink://dictation/start | Startet eine Diktatsitzung. |
clink://dictation/stop | Beendet die Sitzung und räumt die Live Activity weg. |
clink://paywall | Öffnet die Mitgliedschaft. |
clink://verify | Prüft deine Mitgliedschaft erneut, wenn eine Berechtigung veraltet ist. |
Diktat, Mitgliedschaft und Prüfung sind reserviert und taugen deshalb nicht als Seitennamen.
Dateien öffnen
Clink meldet seine Dateitypen bei iOS an, deshalb bieten Dateien, AirDrop, Nachrichten und jedes Teilen-Menü an, sie in Clink zu öffnen.