MacのCotEditorでUNIXスクリプトを使って作業を自動化する

CotEditorのスクリプトメニューからUNIXスクリプトを実行して、CotEditorで編集中の書類の情報やテキストをスクリプトに渡したり、スクリプトの実行結果をその書類に反映したりできます。

スクリプトメニュー用のUNIXスクリプトを作成する

CotEditor用のUNIXスクリプトは、実行環境がMacに用意されていればどんなスクリプト言語でも作成できます。ただし、スクリプトファイルは、.sh、.pl、.php、.rb、.py、.js、.awk、または.swiftのいずれかの拡張子を付ける必要があります。

スクリプトを正しく実行するには、使用するインタープリタを指定する#!(shebang)行をスクリプトに含め、スクリプトファイルが実行可能である必要があります。例えば、Macの「ターミナル」でファイルを実行可能ファイルにすることができます。

ファイルパスを参照する

現在の書類が保存済みのときは、その書類の絶対ファイルパスが引数 (argv) としてスクリプトに渡されます。

スクリプトにテキストを渡す

現在の書類の内容を標準入力としてスクリプトに渡すことができます。スクリプトにCotEditorからデータを渡すには、スクリプトの冒頭にコメントを置き、固定テキスト「%%%{CotEditorXInput=xxxx}%%%」を埋め込みます。「xxxx」で、受け渡すデータを指定します。このコメントを記述しなかった場合は「None」と同等の処理となり何もスクリプトに渡されません。

xxxx」には以下のいずれかの入力元を指定することができます:

キーワード説明
Selection

現在選択しているテキスト

AllText

書類のすべてのテキスト

None

何も渡さない(デフォルト)

スクリプトに渡されるテキストのエンコーディングは、書類のテキストエンコーディングに関わらず常にUTF-8です。

スクリプトの出力を受け取る

スクリプトから標準出力に送ったテキストはCotEditorで受け取り書類などに反映できます。CotEditorでスクリプトの出力を受け取るには、スクリプトの冒頭にコメントとして固定テキスト「%%%{CotEditorXOutput=xxxx}%%%」を埋め込み、「xxxx」で受け取ったあとの処理を指定します。このコメントを記述しなかった場合は「Discard」と同等の処理となり出力は無視されます。

xxxx」には以下のいずれかの出力先を指定することができます:

キーワード説明
ReplaceSelection

現在選択しているテキストを出力内容で置き換えます。

ReplaceAllText

書類のすべてのテキストを出力内容で置き換えます。

InsertAfterSelection

選択範囲の直後に出力内容を挿入します。

AppendToAllText

書類の末尾に出力内容を挿入します。

NewDocument

新規書類を作成し、そこに出力内容を挿入します。

Pasteboard

クリップボードに出力内容を格納します。

Discard

何もしない(デフォルト)

スクリプトからCotEditorに返すテキストのエンコーディングは、書類のテキストエンコーディングに関わらず常にUTF-8でなければなりません。

コンソールにテキストを表示する

標準エラー出力に投げられたテキストはコンソールウインドウに出力されます。

スクリプトを書く

例えば、以下のPythonスクリプトは、現在の書類の選択範囲内のすべての行の行頭に「>」を追加し、さらに処理した行数をコンソールに表示します。

#!/usr/bin/env python3
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%

import sys

count = 0
for line in sys.stdin:
    count += 1
    print(">" + line.rstrip())
sys.stderr.write("Processed {} lines.".format(count))

このスクリプトをCotEditorのスクリプトメニューから実行すると、以下のメッセージがコンソールに表示されます:

[2022-05-06 18:35:00] Example Code
Processed 3 lines.

関連項目