Der Vertrag

Eine Aktion definiert transform(text). Was sie zurückgibt, wird zu Text und dort eingefügt, wo du schreibst.

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

Gib None zurück, um nichts einzufügen. Für einen schnellen Versuch setze stattdessen eine Variable result auf oberster Ebene, statt eine Funktion zu definieren.

Woher der Text kommt

EingabeWas die Aktion bekommt
NichtsErzeugt Text von Grund auf. transform("").
Aktuelles WortÜbergibt das Wort, das du gerade tippst, an transform(text).
AuswahlÜbergibt den markierten Text – oder nichts, wenn nichts markiert ist.
Aktuelle ZeileÜbergibt die Zeile, in der der Cursor steht.
Aktueller SatzÜbergibt den Satz, in dem der Cursor steht.
Text vor dem CursorÜbergibt alles vor dem Cursor.
Text nach dem CursorÜbergibt alles nach dem Cursor.
Ganzes FeldÜbergibt das ganze Feld, auf beiden Seiten des Cursors.
ZwischenablageÜbergibt den Text aus der Zwischenablage. Benötigt Vollzugriff.

Eingabe ersetzen entscheidet, ob die Ausgabe an die Stelle der Eingabe tritt. Es gilt für jede Quelle, die das Feld liest. Nichts und Zwischenablage haben im Dokument nichts zu ersetzen – ihre Ausgabe wird also immer eingefügt.

def transform(text):
    words = len(text.split())
    return f"{words} words"
Liest den Text vor der Einfügemarke und hängt bei ausgeschaltetem Eingabe ersetzen eine Zählung an.

Die Tastatur bitten

Eine Aktion kann dieselben Befehle verwenden wie ein Panel, statt eine einzelne Zeichenkette zurückzugeben. So macht eine Aktion mehrere Änderungen – oder lässt den Cursor an einer bestimmten Stelle stehen.

def transform(text):
    replace(len(text), "(" + text + ")")
    move_cursor(-1)
Das Wort einklammern und dann wieder in die Klammer zurückspringen.

toast() und close() gehören zu Panels: Eine Aktion hat keine eigene Fläche, auf der eine Meldung erscheinen könnte. In der Konsole beim Schreiben tauchen beide trotzdem auf.

Die Sprache

Skripte laufen auf Clinks eigenem Interpreter statt auf CPython. Er liest eine brauchbare Teilmenge von Python – Comprehensions, Lambdas, Tupel, Mengen, f-String-Formate, try und except – und lehnt den Rest mit einer Meldung ab, die die Zeile nennt.

Typen

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

Schlüsselwörter

  • 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

Eingebaute Funktionen

  • 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

String-Methoden

  • 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

Listen-Methoden

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

Dictionary-Methoden

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

Set-Methoden

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

Tupel-Methoden

  • count
  • index

Methoden eines Regex-Treffers

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

Ausnahmen

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

Abgelehnt

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

Namensräume

Diese Namensräume lassen sich importieren, sonst nichts. Jeder rechnet nur: Es gibt kein Dateisystem, kein Netzwerk und keinen Prozess, an den ein Skript herankäme.

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()
Mehrfache Leerzeichen mit einem regulären Ausdruck zusammenziehen.

Die Engine für reguläre Ausdrücke ist Clinks eigene und verbraucht dasselbe Schrittbudget wie der Rest deines Skripts – ein Muster, das sonst ewig liefe, endet also mit einem Fehler statt mit einer Tastatur, die nicht mehr reagiert. Rückwärtsverweise und Lookaround gibt es nicht.

Warum nicht CPython

Eine Tastaturerweiterung hat eine harte Speichergrenze, und iOS beendet sie ohne Vorwarnung, sobald sie überschritten ist. Eine vollständige Python-Laufzeit passt nicht neben die Tastatur, deshalb bringt Clink einen kleinen Interpreter mit, der für die Aufgabe geschrieben wurde: keine Imports, keine Dateien, kein Netzwerk, und ein Schrittbudget, das dem entlaufenen Skript ein Ende setzt und nicht der Tastatur.

print geht in die Konsole im Editor, nie in das, was du schreibst.

Weitergeben

Teilen-Aktion schreibt eine .clinkext-Datei, und Aktion importieren holt sie mit frischer ID zurück. Eine Aktion bleibt unter 48.000 Bytes und muss def transform( definieren.

Baukasten ›
Im App Store laden