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
| Origine | Cosa riceve l’azione |
|---|---|
| Niente | Genera testo da zero. transform(""). |
| Parola attuale | Passa la parola che stai scrivendo a transform(text). |
| Selezione | Passa il testo selezionato, o niente se non c'è selezione. |
| Riga corrente | Passa la riga su cui si trova il cursore. |
| Frase corrente | Passa la frase in cui si trova il cursore. |
| Testo prima del cursore | Passa tutto ciò che si trova prima del cursore. |
| Testo dopo il cursore | Passa tutto ciò che segue il cursore. |
| Tutto il campo | Passa l'intero campo, da entrambi i lati del cursore. |
| Appunti | Passa 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"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)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
intfloatstrboolNonelisttupledictset
Parole chiave
ifelifelsewhileforindefreturnbreakcontinuepassTrueFalseNoneandornotlambdatryexceptfinallyraiseimportfromasisdelglobal
Funzioni integrate
lenstrreprprintintfloatboolabsroundminmaxsumrangesortedreversedlistdictsettupleenumeratezipordchranyalltypemapfilterdivmodpowhexbinoctformatisinstancecallable
Metodi delle stringhe
upperlowercasefoldtitlecapitalizeswapcasestriplstriprstripreplacesplitrsplitsplitlinesjoinstartswithendswithfindrfindindexrindexcountpartitionrpartitionzfillljustrjustcenterisdigitisnumericisalphaisalnumisspaceisupperisloweristitleremoveprefixremovesuffixformat
Metodi delle liste
appendextendpopinsertremoveindexcountsortreverseclearcopy
Metodi dei dizionari
keysvaluesitemsgetpoppopitemsetdefaultupdateclearcopy
Metodi degli insiemi
adddiscardremovepopclearcopyupdateunionintersectiondifferencesymmetric_differenceissubsetissupersetisdisjoint
Metodi delle tuple
countindex
Metodi di una corrispondenza regex
groupgroupsgroupdictstartendspan
Eccezioni
ExceptionValueErrorTypeErrorKeyErrorIndexErrorNameErrorZeroDivisionErrorAttributeErrorRuntimeErrorStopIteration
Rifiutato
classwithnonlocalassertyieldasyncawaitmatch
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
dumpsloads
import math
acosasinatanatan2ceilcombcopysigncosdegreeseexpfabsfactorialfloorfmodgcdhypotinfisfiniteisinfisnanlcmloglog10log2nanpipowprodradianssinsqrttantautrunc
import random
choicechoicesrandintrandomrandrangesampleseedshuffleuniform
import re
DOTALLIIGNORECASEMMULTILINESescapefindallfinditerfullmatchmatchsearchsplitsubsubn
import sys
version
import time
formatmonotonicpartstime
import re
def transform(text):
return re.sub(r"\s+", " ", text).strip()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.