Script CotEditor on Mac with UNIX script

This page explains how to pass your document’s text to UNIX scripts that are executable from the Script menu, or how to receive the outputs from them.

Refer to the document file path

If the frontmost document has already been saved, the absolute file path of the document is referred to as an argument.

Pass text data to a script

A script can receive the contents of the frontmost document on STDIN (standard in). To pass text data from CotEditor to your script, you need to put a comment at the beginning of the script and write “%%%{CotEditorXInput=xxxx}%%%” inside. Replace “xxxx” with one of the parameters below. With no parameters, CotEditor passes nothing just like when you put “None.”

KeywordDescription
SelectionTo pass the text you are currently selecting.
AllTextTo pass the whole text of your document.
NoneTo pass nothing (default).

Receive output data from a script

CotEditor can receive the output text from the script on STDOUT (standard out) and apply it to the document and so on. To make CotEditor receive output data from a script, you need to put a comment at the beginning of the script and write “%%%{CotEditorXOutput=xxxx}%%%” inside. Replace xxxx with one of the parameters below. Without parameters, CotEditor does nothing just like when you put “Discard.”

KeywordDescription
ReplaceSelectionTo replace the current selection with the contents of the output data.
ReplaceAllTextTo replace the whole text of your document with the contents of the output data.
InsertAfterSelectionTo insert the contents of the output data right after the current selection.
AppendToAllTextTo insert the contents of the output data at the end of your document.
NewDocumentTo create a new document and insert the contents to it.
PasteboardputsTo store the contents of the output data in the Clipboard.
DiscardTo do nothing (default).

Print text to the Console

The strings thrown to the standard error are printed in the Console window.

Example

The following Python script prepends the “>” character to every line in the selection of the frontmost document, and then prints the number of the processed lines to the Console.

#!/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))
Output to the Console
[2022-05-06 18:35:00] Example Code
Processed 5 lines.

You can get more sample scripts on:
coteditor/SampleScripts -GitHub

See also