# MacのCotEditorをUNIXスクリプトで操作する

このページではスクリプトメニューから実行するUNIXスクリプトにCotEditorで編集中の書類の情報やテキストを渡したり、スクリプトの実行結果を書類に反映する方法を説明します。

- スクリプトメニューに登録できるスクリプトの拡張子は.sh、.pl、.php、.rb、.py、.js、.awk、.swiftです（言語は関係ありません）。
- スクリプトには実行権限がなければなりません。

## ファイルパスの受け取り

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

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

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

- スクリプトに渡されるテキストのテキストエンコーディングはUTF-8です。

キーワード | 説明
--- | ---
`Selection` | 現在選択しているテキスト
`AllText` | 書類のすべてのテキスト
`None` | 何も渡さない（デフォルト）

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

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

- CotEditorに返すテキストのテキストエンコーディングはUTF-8でなければなりません。

キーワード | 説明
--- | ---
`ReplaceSelection` | 現在選択しているテキストを出力内容で置き換えます。
`ReplaceAllText` | 書類のすべてのテキストを出力内容で置き換えます。
`InsertAfterSelection` | 選択範囲の直後に出力内容を挿入します。
`AppendToAllText` | 書類の末尾に出力内容を挿入します。
`NewDocument` | 新規書類を作成し、そこに出力内容を挿入します。
`Pasteboard puts` | クリップボードに出力内容を格納します。
`Discard` | 何もしない（デフォルト）

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

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

## 例

以下の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/SampleScripts -GitHub

## 関連項目

- CotEditorスクリプトを使う