Контракт
Действие определяет transform(text). То, что оно вернёт, превращается в текст и вставляется туда, где вы пишете.
def transform(text):
return text.upper()Верните None, чтобы не вставлять ничего. Для быстрой пробы задайте переменную result на верхнем уровне вместо функции.
Откуда берётся текст
| Ввод | Что получает действие |
|---|---|
| Ничего | Создаёт текст с нуля. transform(""). |
| Текущее слово | Передаёт слово, которое вы набираете, в transform(text). |
| Выделение | Передаёт выделенный текст или ничего, если ничего не выделено. |
| Текущая строка | Передаёт строку, на которой стоит курсор. |
| Текущее предложение | Передаёт предложение, в котором стоит курсор. |
| Текст перед курсором | Передаёт всё, что до курсора. |
| Текст после курсора | Передаёт всё, что идёт после курсора. |
| Всё поле | Передаёт всё поле — по обе стороны от курсора. |
| Буфер обмена | Передаёт текст из буфера обмена. Требуется полный доступ. |
«Заменять ввод» решает, встанет ли результат на место того, что пришло. Это касается каждого источника, который читает поле. У «Ничего» и «Буфера обмена» в документе заменять нечего, поэтому их результат всегда вставляется.
def transform(text):
words = len(text.split())
return f"{words} words"Просьба к клавиатуре
Действие может пользоваться теми же командами, что и панель, вместо возврата одной строки. Так действие делает больше одной правки или оставляет курсор в нужном месте.
def transform(text):
replace(len(text), "(" + text + ")")
move_cursor(-1)toast() и close() принадлежат панелям: у действия нет своей поверхности, чтобы показать сообщение. В консоли при написании оба всё равно видны.
Язык
Скрипты работают на собственном интерпретаторе Clink, а не на CPython. Он читает полезное подмножество Python: списковые включения, lambda, кортежи, множества, форматы f-строк, try и except. Остальное он отвергает сообщением с номером строки.
Типы
intfloatstrboolNonelisttupledictset
Ключевые слова
ifelifelsewhileforindefreturnbreakcontinuepassTrueFalseNoneandornotlambdatryexceptfinallyraiseimportfromasisdelglobal
Встроенные функции
lenstrreprprintintfloatboolabsroundminmaxsumrangesortedreversedlistdictsettupleenumeratezipordchranyalltypemapfilterdivmodpowhexbinoctformatisinstancecallable
Методы строк
upperlowercasefoldtitlecapitalizeswapcasestriplstriprstripreplacesplitrsplitsplitlinesjoinstartswithendswithfindrfindindexrindexcountpartitionrpartitionzfillljustrjustcenterisdigitisnumericisalphaisalnumisspaceisupperisloweristitleremoveprefixremovesuffixformat
Методы списков
appendextendpopinsertremoveindexcountsortreverseclearcopy
Методы словарей
keysvaluesitemsgetpoppopitemsetdefaultupdateclearcopy
Методы множеств
adddiscardremovepopclearcopyupdateunionintersectiondifferencesymmetric_differenceissubsetissupersetisdisjoint
Методы кортежей
countindex
Методы совпадения регулярного выражения
groupgroupsgroupdictstartendspan
Исключения
ExceptionValueErrorTypeErrorKeyErrorIndexErrorNameErrorZeroDivisionErrorAttributeErrorRuntimeErrorStopIteration
Отклоняется
classwithnonlocalassertyieldasyncawaitmatch
Пространства имён
Импортировать можно эти пространства имён и ничего больше. Каждое только вычисляет: файловой системы, сети и процессов для скрипта попросту нет.
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()Движок регулярных выражений у Clink собственный, и он тратит тот же бюджет шагов, что и остальной скрипт: шаблон, который иначе работал бы вечно, заканчивается ошибкой, а не клавиатурой, переставшей отвечать. Обратные ссылки и lookaround не поддерживаются.
Почему не CPython
У расширения клавиатуры жёсткий потолок памяти, и iOS завершает его без предупреждения, как только он превышен. Полноценная среда Python рядом с клавиатурой не поместится, поэтому Clink несёт маленький интерпретатор, написанный под эту задачу: без импортов, без файлов, без сети и с бюджетом шагов, который останавливает сорвавшийся скрипт, а не клавиатуру.
print уходит в консоль редактора и никогда в то, что вы пишете.