MacのCotEditorでAppleScriptを使って作業を自動化する

AppleScriptやJavaScript for Automation(JXA)を使って、書類の作成や編集、選択範囲の操作、エディタウインドウの制御など、CotEditorのさまざまな作業を自動化できます。このページでは、CotEditorが提供するスクリプトインターフェイスについて、利用できるクラスやコマンドを説明します。

CotEditorは、システム標準のスクリプティング用語に加えて、独自のクラスやコマンドを提供しています。これにより、スクリプトからCotEditorの書類や機能をより直接的に操作できます。また、特定のイベントに応じてスクリプトを自動的に実行するためのスクリプトフックも利用できます。詳しくは、特定のイベントでスクリプトを実行するを参照してください。

CotEditorにおけるAppleScriptサポートの仕様は、スクリプトエディタのライブラリでも確認できます。用語解説を開くには次のようにします:

  1. MacでCotEditorアプリに移動します。

  2. 「ヘルプ」>「CotEditorスクリプトガイド」>「AppleScript用語説明」と選択します。

CotEditorでのAppleScript対応のバージョン履歴については、AppleScriptで異なるバージョンのCotEditorに対応するを参照してください。

クラス

document

CotEditor書類

プロパティ
  • contents: 書類の内容テキスト(text型)

  • text: 書類の内容テキスト(text型)

  • editable: 書類が編集可能かどうか(boolean型)CotEditor 5.1で追加

  • length: 書類のUTF-16単位の字数(int型)CotEditor 4.4で廃止

  • selection: 書類の選択内容オブジェクト(text selection型)

  • encoding: テキストエンコーディング(text型)

  • IANA charset: テキストエンコーディングのIANA charset名(text型、Shift_JIS, EUC-JPなど)

  • has BOM: テキストエンコーディングでBOMがあるかどうか(boolean型)CotEditor 4.1で追加

  • line ending: 改行コード(CR / LF / CRLF / NEL / LS / PS

  • tab width: スペース幅換算のタブ幅(int型)CotEditor 2.1で追加

  • expands tab: タブをスペースに展開するかどうか(boolean型)

  • wrap lines: 折り返しているかどうか(boolean型)

  • coloring style: シンタックス(text型)

クラス

folder document

CotEditorフォルダ書類

プロパティ
  • current document: 現在表示されている書類(document型)

フォルダを開いた書類はfolder documentクラスとして扱われ、current documentプロパティからフォルダ書類で現在開いている書類を取得できます。さらに、folder documentに対して直接送ったdocumentのAPIは、そのままcurrent documentを対象に実行されます。ただし、current documentが存在しない場合、documentを対象とするコマンドはエラーになります。

以下の2つのコマンドは同じ結果になります。

if front document is folder document then
	set theDocument to front document's current document
else
	set theDocument to front document
end if

tell theDocument
	set theText to contents of selection
end tell
最前面のテキスト書類を取得して、その選択部分をセットします。
tell front document
	set theText to contents of selection
end tell
最前面の書類の選択部分をセットします。

クラス

text selection

選択部分オブジェクト

プロパティ
  • contents: 選択内容テキスト

  • range: 文字単位での選択位置({location, length}の型)

  • line range: 行単位での選択位置({location, length}の型、length省略可。また、lengthは0でも1でも、1行を選択する)

contents of selection of document 1
最前面の書類選択部分のテキストを返します。
set contents of selection of front document to "Apple"
選択部分を「Apple」に置換します。
range of selection of front document
選択位置を{location, length}のリスト型で返します。
set range of selection of front document to {1, 12}
1文字目から12文字を選択します。
set line range of selection of front document to 10
10行目を選択します。
set range of selection of front document to {-15, -1}
最後から15文字目から、最後から1文字目を残して選択します。

詳細

「selection」は単独では意味を持ちません。contentsなどのプロパティとともに使用します。

CotEditor 5.0以降、文字はUnicode書記素クラスタ単位でカウントします。これはAppleScript 2.0の仕様と同一です。

locationが負のとき、対象書類のテキストの後ろから数えてlocation番目から始まる範囲となります。lengthが対象書類のテキストの長さを超えて入力された場合、末尾までが範囲となります。lengthが負のとき、指定される範囲は対象書類のテキストの後ろから数えてlength文字までとなります。もし、lengthの絶対値がlocationよりも小さい(locationよりも前に終了位置がある)場合には、locationが優先されlocation位置に挿入ポイントが移動します({location, 0}が入力されたのと同じ)。

この指定方法はPHPのsubstrのそれにならっています。

選択位置を変える命令だけでは画面のスクロールは行われません。選択位置を見えるようにするにはscroll to caretコマンドかjumpコマンドを使用します。

コマンド

write to console

テキストをCotEditorのコンソールウインドウに表示します。

パラメータ
  • [title (boolean)]: スクリプト名を表示するか (CotEditor 5.0.7で追加)

  • [timestamp (boolean)]: タイムスタンプを表示するか (CotEditor 5.0.7で追加)

対応バージョン
CotEditor 3.2.0以降

write to console "Script failed."
「Script failed.」というテキストをコンソールで表示します。
write to console "calculating…" without title and timestamp
タイトルやタイムスタンプは表示せず「calculating…」というテキストのみをコンソールで表示します。

コマンド

find

検索し、対象テキストがあれば選択状態にしてtrueを返します。見つからなければfalseを返します。

パラメータ
  • for (text): 検索対象テキスト

  • [RE (boolean)]: 正規表現検索か

  • [wrap (boolean)]: ラップサーチか

  • [ignore case (boolean)]: 大文字/小文字を無視するか

  • [backwards (boolean)]: 後ろから検索するか

返り値
boolean型
対象
documentオブジェクト

find front document for "Apple" with ignore case
最前面の書類内の選択位置以降で「Apple」を大文字/小文字を無視して検索して、結果を返します。

詳細

検索は、現在の挿入ポイントの位置を基準に行われます。例えば、wrapbackwardsが指定されていなかったとき、選択位置以降に対象テキストがないときは、falseを返します。

RE(正規表現検索)のときは、backwards(後方からの検索)ができません。同時に指定されたときは、REが優先され、backwardsは無視されます。

コマンド

replace

検索し、対象テキストがあれば置換して置換された回数を返します。見つからなければ0を返します。

パラメータ
  • for (text): 置換対象テキスト

  • to (text): 置換後のテキスト

  • [all (boolean)]: 書類全体を対象とするか

  • [RE (boolean)]: 正規表現検索か

  • [wrap (boolean)]: ラップサーチか

  • [ignore case (boolean)]: 大文字/小文字を無視するか

  • [backwards (boolean)]: 後ろから検索するか

返り値
int型
対象
documentオブジェクト

replace front document for "Apple" to "Orange" with all and ignore case
最前面の書類内で「Apple」を大文字/小文字を無視して検索して、「Orange」に置換して置換した数を返します。

詳細

find同様、命令実行前の挿入ポイントの位置を基準に置換が行われます。書類全体を対象に実行するときはallを指定します。

allオプションを付けて書類全体を対象に実行され置換が行われたとき、実行後の挿入ポイントの位置は書類の先頭になります。ただし、対象テキストが見つからなかったときは挿入ポイントの位置は変更されません。

RE(正規表現検索)のときは、backwards(後方からの検索)ができません。同時に指定されたときはREが優先され、backwardsは無視されます。

コマンド

scroll to caret

挿入ポイントが見えるようにスクロールします。

対象
documentオブジェクト

scroll to caret front document
挿入ポイントが見えるようにスクロールします。

コマンド

jump

指定した行に挿入ポイントを移動しその部分が見えるようにスクロールします。

パラメータ
  • to line (int): 移動先の行番号

  • [column (int)]: 移動先の(行内の)列番号

対象
documentオブジェクト
対応バージョン
CotEditor 2.1.0以降

jump front document to line -1
最終行に挿入ポイントを移動しその部分が見えるようにスクロールします。

詳細

行番号や列番号に負の数が指定されたときは、最終行(文字)から数えた位置に移動します。

コマンド

convert

書類のテキストエンコーディングを変換します。

パラメータ
  • to (text): 新しいテキストエンコーディング(ローカライズされたエンコーディング名かIANA charset名で指定)

  • [lossy] (boolean): エンコーディング適用によって一部のテキストが失われても良いか

  • [BOM] (boolean): エンコーディングにBOMを付けるかどうか (CotEditor 4.1で追加)

返り値
boolean型
対象
documentオブジェクト

convert front document to "Unicode (UTF-8)" with BOM without lossy
Unicode (UTF-8)BOM付きに変換し、変換できたかどうかを返します。

詳細

CotEditor 4.0.7以降は、新しいテキストエンコーディングの指定にIANA charset nameも使えます。

コマンド

reinterpret

書類を指定されたエンコーディングでファイル内容を再解釈します。

パラメータ
  • as (text): 新しいエンコーディング(ローカライズされたエンコーディング名かIANA charset名で指定)

返り値
boolean型
対象
documentオブジェクト

reinterpret front document as "Japanese (EUC)"
EUCで解釈し直し、解釈できたかどうかを返します。

詳細

書類そのものが未保存の場合は、falseを返します。

保存されていない変更部分は失われます。

CotEditor 4.0.7以降は、新しいエンコーディングの指定にIANA charset nameも使えます。

コマンド

shift left

選択位置のある行を左にシフトします。

対象
selectionオブジェクト

コマンド

shift right

選択位置のある行を右にシフトします。

対象
selectionオブジェクト

shift right selection of front document
挿入ポイントのある行を右にシフトします。

コマンド

comment out

選択範囲にコメント記号をつけてコメント化します。

対象
selectionオブジェクト
対応バージョン
CotEditor 2.0.1以降

comment out selection of front document
選択位置をコメントアウトします。

詳細

現在のシンタックスにコメント記号が設定されていない、選択範囲にコメント記号がないなど、コマンドが実行できないときは何も行いません。

コマンド

uncomment

選択範囲のコメント記号を取り去りコメント解除をします。

対象
selectionオブジェクト
対応バージョン
CotEditor 2.0.1以降

詳細

現在のシンタックスにコメント記号が設定されていない、選択範囲にコメント記号がないなど、コマンドが実行できないときは何も行いません。

コマンド

string

選択範囲に関係なく、書類中の指定された範囲のテキストを返します。

パラメータ
  • in (list): 範囲

返り値
text型
対象
selectionオブジェクト

string front document in {0, 10}
書類の最初から10文字を返します。

詳細

無効な範囲を指定した場合などは、空のテキストを返します。

このコマンドは指定された選択範囲を変更しません。

コマンド

change case

大文字、小文字、または語頭を大文字に置き換えます。

パラメータ
  • to upper / lower / capitalized: 置き換えるスタイル

対象
selectionオブジェクト

change case selection of front document to upper
選択位置の英単語を大文字にします。

詳細

対象にできるのは`selection`オブジェクトだけです。

コマンド

change roman width

英数テキストを半角または全角に変換します。

パラメータ
  • to half / full: 置き換えるスタイル

対象
selectionオブジェクト

change roman width selection of front document to full
選択位置の英数テキストを全角にします。

コマンド

smarten quotes

まっすぐな引用符をカールした引用符に変換します。

対象
selectionオブジェクト
対応バージョン
CotEditor 3.9.7以降

smarten quotes selection of front document
選択位置の引用符をカールしたものに変換します。

コマンド

straighten quotes

カールした引用符をまっすぐな引用符に変換します。

対象
selectionオブジェクト
対応バージョン
CotEditor 3.9.7以降

コマンド

smarten dashes

連続したハイフンをダッシュ記号に変換します。

対象
selectionオブジェクト
対応バージョン
CotEditor 3.9.7以降

smarten dashes selection of front document
選択位置の連続したハイフンをダッシュ記号に変換します。

コマンド

normalize unicode

Unicode正規化を行います。

パラメータ
  • to NFKC / NFD / NFC / NFKD / NFKC Casefold / Modified NFC / Modified NFD: 正規化方式

対象
selectionオブジェクト
対応バージョン
CotEditor 2.0.0以降

normalize unicode selection of front document to NFC
選択位置のテキストをUnicode正規化します。

コマンド

move line up

選択行を一つ上の行と入れ替えます。

対象
selectionオブジェクト
対応バージョン
CotEditor 2.3.0以降

コマンド

move line down

選択行を一つ下の行と入れ替えます。

対象
selectionオブジェクト
対応バージョン
CotEditor 2.3.0以降

コマンド

reverse lines

選択範囲の行を昇順に並び替えます。

対象
selectionオブジェクト
対応バージョン
CotEditor 2.3.0以降

コマンド

reverse lines

選択範囲の行を逆順にします。

対象
selectionオブジェクト
対応バージョン
CotEditor 2.3.0以降

コマンド

delete duplicate line

選択行に含まれる重複行を削除します。

対象
selectionオブジェクト
対応バージョン
CotEditor 2.3.0以降

関連項目