Automações
Usa predefinições ou regras próprias para alterar o teclado enquanto escreves, sem substituir a configuração guardada.
As regras de estado aplicam definições temporárias enquanto as condições forem cumpridas. Combina orientação, largura da janela, aspeto, idioma, disposição, propriedades do campo, hora ou estado declarado por um plugin. Escolhe se todas as condições ou qualquer uma delas devem ser cumpridas. Um contexto desconhecido nunca satisfaz uma condição negativa.
As regras de evento executam-se quando o teclado abre, muda o idioma ou uma propriedade do campo, um plugin emite um evento ou tocas num atalho. Os comandos executam-se uma vez por evento. As definições temporárias duram até o teclado fechar, a regra mudar ou limpares as alterações da sessão.
A configuração guardada continua a ser a base
As regras sobrepõem-se às definições guardadas atuais. Arrasta-as para mudar a prioridade; as últimas prevalecem. Desativar uma regra retira as suas alterações. As mudanças que guardares continuam disponíveis quando termina uma alteração temporária. Uma ação de perfil é temporária e não seleciona nem reescreve o perfil guardado.
A predefinição compacta usa filas de teclas com 28 pontos e 80% da largura guardada, dentro dos limites existentes. Com a divisão ativa, teclas mais pequenas deixam mais espaço entre as metades e mantêm-nas junto às bordas. O modo de uma mão conserva o seu alinhamento. As percentagens partem sempre do valor guardado e nunca se acumulam.
A pré-visualização usa o contexto de exemplo que escolheres. Mostra condições cumpridas, referências inválidas e definições esperadas sem executar comandos. A pré-visualização da app é independente do teclado ativo. Adiciona Automações à barra superior para veres as alterações ativas e executares regras por atalho.
Quando ocorre um evento
Quando ocorre um evento
keyboard.openkeyboard.closekeyboard.languageChangedkeyboard.layoutChangedkeyboard.profileChangedkeyboard.planeChangedinput.changedtime.minuteuser.run
Ações
panel.closeplane.lettersplane.numbersplane.symbolsoverrides.clearpanel.emojipanel.calculatorpanel.conversionpanel.layoutspanel.profiles
A avaliação ocorre enquanto o teclado está ativo. As regras horárias não se executam em segundo plano e os eventos de fecho não são garantidos. O Clink não pode identificar a app anfitriã nem alterar definições do iOS. As regras mantêm os requisitos de Adesão, Acesso completo e toque do utilizador das funções usadas. Importar não concede permissões.
O contrato do plugin
O objeto automation opcional de um ficheiro .clinkplugin declara eventos, estado, definições, comandos, predefinições e espaços para atalhos. Cada contribuição tem um ID estável, uma versão exata do esquema e títulos localizados. O anfitrião cria nomes no formato plugin/<plugin-id>/<kind>/<id>. Um plugin não pode usar o espaço de nomes do sistema nem o de outro plugin.
O estado publicado, os dados de eventos e os argumentos de comandos aceitam booleanos, números limitados e opções declaradas. As definições também podem usar texto de comprimento limitado. Estado e definições usam chaves do dicionário de estado existente do plugin. Os valores temporários são repostos antes de guardar. As predefinições são regras normais desativadas e exigem seleção explícita.
Plugins ›Hooks
| Hook | Quando é executado |
|---|---|
on_automation(command, args, state) | on_automation(command, args, state) executa um comando local aprovado na sandbox existente. Pode atualizar o texto da barra de espaço, publicar estado declarado ou emitir um evento declarado. Este hook não permite inserir texto, aceder à área de transferência, alterar definições persistentes ou fazer pedidos externos. |
automation_emit(name, payload) | Emita um evento declarado com os seus dados tipados. O anfitrião acrescenta o espaço de nomes do plugin e as versões do esquema; o script não pode fornecer um gesto do utilizador nem os antecedentes da cadeia de execução. |
automation_publish(name, value) | Publique um valor de estado declarado para as condições. Os valores desaparecem quando termina a sessão do teclado ou quando o plugin deixa de estar disponível. |
automation_run(slot) | Chame a partir do gestor de ação de um controlo nativo do plugin. O utilizador associa o espaço de atalho declarado a uma regra em Automações. Um plugin não pode escolher a regra sem o utilizador saber nem acionar por temporizador um comando que exija um toque. |
Ações
space_textautomation_emitautomation_publish
Um evento declarado e um comando seguro
Este fragmento de manifesto pertence ao campo automation de um ficheiro de plugin normal. O script publica se o teclado está pronto, emite um evento e atualiza um texto. No editor, selecione esse evento, exija o estado ready e escolha o comando caption. Ler este exemplo não instala nem ativa qualquer 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 e limites
A versão 1 permite 128 regras, 24 condições e 32 ações por regra, com importações até 1.048.576 bytes. O registo de definições disponibiliza 268 destinos e documenta 39 exclusões. Os grupos de definições inválidos são rejeitados por inteiro; os comandos param na primeira falha sem prometer anular efeitos anteriores.
Contribuições removidas, desativadas ou incompatíveis de um plugin tornam indisponíveis as regras dependentes. Falhas e tempos limite desativam a contribuição afetada durante a sessão. Os comandos dispõem de 20.000 passos e de um curto tempo de execução. Filas limitadas, intervalos entre execuções, limites de cadeia e estabilização do estado impedem repetições indefinidas.
Widgets
O Clink traz três widgets de ecrã principal e uma Live Activity: um seletor de perfis, as suas estatísticas de escrita, ditado rápido e a própria sessão de ditado.
Os widgets leem diretamente o ficheiro de definições partilhado, por isso continuam a funcionar com a app fechada.
App Intents
Hoje existem dois intents e nenhum abre a app. Switch Keyboard Profile reescreve as definições partilhadas a partir do widget, e um teclado que já esteja no ecrã apanha a mudança de imediato. End Dictation alcança a sessão do microfone a partir da Live Activity, iniciando a app em segundo plano se for preciso.
Mudar para um perfil criado por si precisa de Subscrição, e essa verificação também corre dentro do widget. Os perfis que vêm com o Clink são gratuitos.
O Clink não define frases próprias nos Atalhos, por isso não há nada para dizer em voz alta.
Links
O Clink responde ao seu próprio esquema de URL clink. Um link abre a app na página que indicar, ou executa uma das rotas reservadas.
| Link | O que faz |
|---|---|
clink://settings/<page> | Abre uma página de definições. Acrescente ?anchor=<id> para cair numa linha. |
clink://<page> | A mesma página, escrita em curto. |
clink://search?q=<text> | Abre a pesquisa com a consulta já preenchida. |
clink://analytics | Abre as estatísticas de escrita. |
clink://dictation/start | Inicia uma sessão de ditado. |
clink://dictation/stop | Termina a sessão e retira a Live Activity. |
clink://paywall | Abre a subscrição. |
clink://verify | Volta a verificar a sua subscrição, para quando um direito ficou desatualizado. |
Ditado, subscrição e verificação estão reservados, por isso não servem como nomes de página.
Abrir ficheiros
O Clink regista os seus tipos de ficheiro no iOS, por isso Ficheiros, AirDrop, Mensagens e qualquer folha de partilha oferecem abri-los no Clink.