契約
アクションは transform(text) を定義します。返した値はテキストに変換され、入力中の場所に挿入されます。
def transform(text):
return text.upper()何も挿入したくないときは None を返します。手早く試すなら、関数を定義せずトップレベルの result 変数に代入しても構いません。
テキストの出どころ
| 入力 | アクションが受け取るもの |
|---|---|
| なし | ゼロからテキストを生成します。transform("")。 |
| 現在の単語 | 入力中の単語をtransform(text)に渡します。 |
| 選択範囲 | 選択しているテキストを渡します。選択がなければ何も渡しません。 |
| 現在の行 | カーソルがある行を渡します。 |
| 現在の文 | カーソルがある文を渡します。 |
| カーソルより前のテキスト | カーソルより前のすべてを渡します。 |
| カーソル以降のテキスト | カーソルより後のすべてを渡します。 |
| 入力欄全体 | カーソルの前後を含め、フィールド全体を渡します。 |
| クリップボード | クリップボードのテキストを渡します。フルアクセスが必要です。 |
「入力を置き換える」は、出力が入力の場所に収まるかどうかを決めます。入力欄を読むすべてのソースに当てはまります。「なし」と「クリップボード」は文書の中に置き換える相手がないので、出力はつねに挿入されます。
def transform(text):
words = len(text.split())
return f"{words} words"キーボードに頼む
アクションは 1 つの文字列を返す代わりに、パネルと同じコマンドを使えます。編集を 2 つ以上行ったり、カーソルを狙った位置に残したりできるのはこのためです。
def transform(text):
replace(len(text), "(" + text + ")")
move_cursor(-1)toast() と close() はパネルのものです。アクションにはメッセージを出す自前の画面がありません。書いている間はどちらもコンソールには表示されます。
言語
スクリプトは CPython ではなく Clink 自前のインタプリタで動きます。内包表記、lambda、タプル、集合、f 文字列の書式、try と except といった Python の使いどころのある部分を読み、それ以外は行番号を示すメッセージで断ります。
型
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 自前のもので、スクリプトの他の部分と同じステップ予算を使います。だから、ほうっておけば終わらないようなパターンも、キーボードが応答しなくなるのではなくエラーで終わります。後方参照と先読み・後読みには対応していません。
CPythonを使わない理由
キーボード拡張のメモリ上限は厳しく、超えるとiOSは予告なく終了させます。Pythonのランタイム一式はキーボードの隣に収まりません。そこでClinkは、この用途のために書いた小さなインタプリタを積んでいます。import もファイルもネットワークもなく、暴走したスクリプトのほうを止めるステップ上限があります。
print はエディタのコンソールへ出ます。書いている文章に入ることはありません。