契約

アクションは 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 の使いどころのある部分を読み、それ以外は行番号を示すメッセージで断ります。

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

キーワード

  • 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

組み込み関数

  • 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

文字列のメソッド

  • 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

リストのメソッド

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

辞書のメソッド

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

集合のメソッド

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

タプルのメソッド

  • count
  • index

正規表現マッチのメソッド

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

例外

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

拒否

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

名前空間

インポートできる名前空間は次のものだけで、ほかはありません。どれも計算をするだけで、スクリプトから触れるファイルシステムもネットワークもプロセスもありません。

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()
連続した空白を正規表現でひとつにまとめます。

正規表現エンジンは Clink 自前のもので、スクリプトの他の部分と同じステップ予算を使います。だから、ほうっておけば終わらないようなパターンも、キーボードが応答しなくなるのではなくエラーで終わります。後方参照と先読み・後読みには対応していません。

CPythonを使わない理由

キーボード拡張のメモリ上限は厳しく、超えるとiOSは予告なく終了させます。Pythonのランタイム一式はキーボードの隣に収まりません。そこでClinkは、この用途のために書いた小さなインタプリタを積んでいます。import もファイルもネットワークもなく、暴走したスクリプトのほうを止めるステップ上限があります。

print はエディタのコンソールへ出ます。書いている文章に入ることはありません。

共有

「共有アクション」は .clinkext ファイルを書き出し、「アクションを読み込む」は新しいIDで戻します。アクションは 48,000 バイト未満で、def transform( を定義する必要があります。

クリエイター ›
App Storeでダウンロード