O contrato

Uma ação define transform(text). O que devolver é convertido em texto e inserido onde está a escrever.

def transform(text):
    return text.upper()

Devolva None para não inserir nada. Para uma experiência rápida, atribua uma variável result no nível principal em vez de definir uma função.

De onde vem o texto

EntradaO que a ação recebe
NadaGera texto do zero. transform("").
Palavra atualPassa a palavra que estás a escrever para transform(text).
SeleçãoPassa o texto selecionado, ou nada se não houver seleção.
Linha atualPassa a linha onde está o cursor.
Frase atualPassa a frase onde está o cursor.
Texto antes do cursorPassa tudo o que está antes do cursor.
Texto depois do cursorPassa tudo o que vem depois do cursor.
Todo o campoPassa o campo inteiro, dos dois lados do cursor.
Área de transferênciaPassa o texto da área de transferência. Requer acesso total.

Substituir a entrada decide se a saída toma o lugar do que entrou. Aplica-se a todas as fontes que leem o campo. Nada e Área de transferência não têm nada para substituir no documento, por isso a sua saída é sempre inserida.

def transform(text):
    words = len(text.split())
    return f"{words} words"
A ler o texto antes do cursor com Substituir entrada desligado, isto acrescenta uma contagem.

Pedir ao teclado

Uma ação pode usar os mesmos comandos de um painel, em vez de devolver uma única cadeia. É assim que uma ação faz mais do que uma edição, ou deixa o cursor num sítio específico.

def transform(text):
    replace(len(text), "(" + text + ")")
    move_cursor(-1)
Pôr a palavra entre parênteses e voltar para dentro do parêntese.

toast() e close() pertencem aos painéis: uma ação não tem superfície própria onde mostrar uma mensagem. Ainda assim, ambos aparecem na consola enquanto a escreve.

A linguagem

Os scripts correm no interpretador do próprio Clink, não em CPython. Lê um subconjunto útil de Python: compreensões, lambdas, tuplos, conjuntos, formatos de f-string, try e except. Recusa o resto com uma mensagem que indica a linha.

Tipos

  • int
  • float
  • str
  • bool
  • None
  • list
  • tuple
  • dict
  • set

Palavras-chave

  • if
  • elif
  • else
  • while
  • for
  • in
  • def
  • return
  • break
  • continue
  • pass
  • True
  • False
  • None
  • and
  • or
  • not
  • lambda
  • try
  • except
  • finally
  • raise
  • import
  • from
  • as
  • is
  • del
  • global

Funções integradas

  • len
  • str
  • repr
  • print
  • int
  • float
  • bool
  • abs
  • round
  • min
  • max
  • sum
  • range
  • sorted
  • reversed
  • list
  • dict
  • set
  • tuple
  • enumerate
  • zip
  • ord
  • chr
  • any
  • all
  • type
  • map
  • filter
  • divmod
  • pow
  • hex
  • bin
  • oct
  • format
  • isinstance
  • callable

Métodos de string

  • upper
  • lower
  • casefold
  • title
  • capitalize
  • swapcase
  • strip
  • lstrip
  • rstrip
  • replace
  • split
  • rsplit
  • splitlines
  • join
  • startswith
  • endswith
  • find
  • rfind
  • index
  • rindex
  • count
  • partition
  • rpartition
  • zfill
  • ljust
  • rjust
  • center
  • isdigit
  • isnumeric
  • isalpha
  • isalnum
  • isspace
  • isupper
  • islower
  • istitle
  • removeprefix
  • removesuffix
  • format

Métodos de lista

  • append
  • extend
  • pop
  • insert
  • remove
  • index
  • count
  • sort
  • reverse
  • clear
  • copy

Métodos de dicionário

  • keys
  • values
  • items
  • get
  • pop
  • popitem
  • setdefault
  • update
  • clear
  • copy

Métodos de conjunto

  • add
  • discard
  • remove
  • pop
  • clear
  • copy
  • update
  • union
  • intersection
  • difference
  • symmetric_difference
  • issubset
  • issuperset
  • isdisjoint

Métodos de tuplo

  • count
  • index

Métodos de uma correspondência regex

  • group
  • groups
  • groupdict
  • start
  • end
  • span

Exceções

  • Exception
  • ValueError
  • TypeError
  • KeyError
  • IndexError
  • NameError
  • ZeroDivisionError
  • AttributeError
  • RuntimeError
  • StopIteration

Recusado

  • class
  • with
  • nonlocal
  • assert
  • yield
  • async
  • await
  • match

Espaços de nomes

Podem importar-se estes espaços de nomes, e mais nada. Cada um apenas calcula: não há sistema de ficheiros, nem rede, nem processo ao alcance de um script.

import json

  • dumps
  • loads

import math

  • acos
  • asin
  • atan
  • atan2
  • ceil
  • comb
  • copysign
  • cos
  • degrees
  • e
  • exp
  • fabs
  • factorial
  • floor
  • fmod
  • gcd
  • hypot
  • inf
  • isfinite
  • isinf
  • isnan
  • lcm
  • log
  • log10
  • log2
  • nan
  • pi
  • pow
  • prod
  • radians
  • sin
  • sqrt
  • tan
  • tau
  • trunc

import random

  • choice
  • choices
  • randint
  • random
  • randrange
  • sample
  • seed
  • shuffle
  • uniform

import re

  • DOTALL
  • I
  • IGNORECASE
  • M
  • MULTILINE
  • S
  • escape
  • findall
  • finditer
  • fullmatch
  • match
  • search
  • split
  • sub
  • subn

import sys

  • version

import time

  • format
  • monotonic
  • parts
  • time
import re

def transform(text):
    return re.sub(r"\s+", " ", text).strip()
Reduzir sequências de espaços com uma expressão regular.

O motor de expressões regulares é o do próprio Clink e gasta o mesmo orçamento de passos que o resto do script, por isso um padrão que de outro modo demoraria uma eternidade acaba num erro, e não num teclado que deixa de responder. Retrorreferências e lookaround não existem.

Porquê não CPython

Uma extensão de teclado tem um limite de memória rígido e o iOS termina-a sem aviso quando o ultrapassa. Um runtime completo de Python não caberia ao lado do teclado, por isso o Clink traz um interpretador pequeno escrito para a tarefa: sem imports, sem ficheiros, sem rede, e com um orçamento de passos que termina o script descontrolado em vez do teclado.

print vai para a consola do editor, nunca para aquilo que está a escrever.

Partilhar

Ação de partilha cria um ficheiro .clinkext, e Importar ação traz um de volta com um id novo. Uma ação fica abaixo de 48.000 bytes e tem de definir def transform(.

Criador ›
Descarregar na App Store