Il contratto

Un'azione definisce transform(text). Quello che restituisce diventa testo e viene inserito dove stai scrivendo.

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

Restituisci None per non inserire nulla. Per una prova veloce assegna una variabile result al livello principale invece di definire una funzione.

Da dove arriva il testo

OrigineCosa riceve l’azione
NienteGenera testo da zero. transform("").
Parola attualePassa la parola che stai scrivendo a transform(text).
SelezionePassa il testo selezionato, o niente se non c'è selezione.
Riga correntePassa la riga su cui si trova il cursore.
Frase correntePassa la frase in cui si trova il cursore.
Testo prima del cursorePassa tutto ciò che si trova prima del cursore.
Testo dopo il cursorePassa tutto ciò che segue il cursore.
Tutto il campoPassa l'intero campo, da entrambi i lati del cursore.
AppuntiPassa il testo degli appunti. Richiede accesso completo.

Sostituisci l'input decide se l'output prende il posto di ciò che è entrato. Vale per ogni sorgente che legge il campo. Niente e Appunti non hanno nulla da sostituire nel documento, quindi il loro output viene sempre inserito.

def transform(text):
    words = len(text.split())
    return f"{words} words"
Leggendo il testo prima del cursore con Sostituisci input disattivato, questo aggiunge un conteggio.

Chiedere alla tastiera

Un'azione può usare gli stessi comandi di un pannello, invece di restituire una sola stringa. È così che un'azione fa più di una modifica, o lascia il cursore in un punto preciso.

def transform(text):
    replace(len(text), "(" + text + ")")
    move_cursor(-1)
Mettere la parola fra parentesi e poi tornare dentro la parentesi.

toast() e close() appartengono ai pannelli: un'azione non ha una superficie propria su cui mostrare un messaggio. Entrambi compaiono comunque nella console mentre la scrivi.

Il linguaggio

Gli script girano sull'interprete di Clink, non su CPython. Legge un sottoinsieme utile di Python: comprensioni, lambda, tuple, insiemi, formati f-string, try ed except. Rifiuta il resto con un messaggio che indica la riga.

Tipi

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

Parole chiave

  • 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

Funzioni integrate

  • 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

Metodi delle stringhe

  • 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

Metodi delle liste

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

Metodi dei dizionari

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

Metodi degli insiemi

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

Metodi delle tuple

  • count
  • index

Metodi di una corrispondenza regex

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

Eccezioni

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

Rifiutato

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

Spazi dei nomi

Si possono importare questi spazi dei nomi, e nient'altro. Ciascuno si limita a calcolare: non c'è filesystem, non c'è rete e non c'è processo che uno script possa raggiungere.

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()
Comprimere le sequenze di spazi con un'espressione regolare.

Il motore delle espressioni regolari è quello di Clink e consuma lo stesso budget di passi del resto dello script: un pattern che altrimenti girerebbe all'infinito finisce con un errore, non con una tastiera che smette di rispondere. Retroriferimenti e lookaround non ci sono.

Perché non CPython

Un'estensione tastiera ha un tetto di memoria rigido e iOS la chiude senza preavviso quando lo supera. Un runtime Python completo non starebbe accanto alla tastiera, quindi Clink porta con sé un piccolo interprete scritto per questo compito: niente import, niente file, niente rete, e un budget di passi che ferma lo script impazzito invece della tastiera.

print finisce nella console dell'editor, mai in quello che stai scrivendo.

Condivisione

Azione di condivisione crea un file .clinkext, e Importa azione lo riprende con un id nuovo. Un'azione resta sotto 48.000 byte e deve definire def transform(.

Creatore ›
Scarica dall’App Store