# MacのCotEditorをAppleScriptで操作する

CotEditorはAppleScriptおよびJXA (JavaScript for Automation)をサポートしています。

以下で説明するCotEditorのクラス・コマンド以外にも、AppleScriptで標準的に実装されている語句を使用することができます。CotEditorにおけるAppleScriptサポートの詳細な仕様については、辞書ライブラリを参照してください。ライブラリを参照するにはCotEditor上で次のようにします:

- 「ヘルプ」メニューの「AppleScript辞書」を選択します。

また、スクリプトフックを使って特定のイベントで自動的にスクリプトを実行することができます。詳しくは「特定のイベントでスクリプトを実行する」を参照してください。

CotEditorでのAppleScriptサポートのバージョン履歴を確認するには、「AppleScriptで異なるバージョンのCotEditorに対応する」を参照してください。

## クラス

CotEditorで独自に定義されているクラス・プロパティです。

### Application

CotEditorアプリケーション

### Window

CotEditorウインドウ

### Document

CotEditor書類

プロパティ
  `contents`
    書類の内容文字列（text型）
  `text`
    書類の内容文字列（text型）
  `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型）

### 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が正である場合、指定される範囲はlocationから数えてlength文字数分となります。また、対象書類の文字列の長さを超えてlengthが入力された場合、末尾までが範囲となります。
lengthが負である場合、指定される範囲は対象書類の文字列の後ろから数えてlength文字までとなります。もし、lengthの絶対値がlocationよりも小さい（locationよりも前に終了位置がある）場合には、locationが優先されlocation位置に挿入ポイントが移動します（`{location, 0}`が入力されたのと同じ）。

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

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

## コマンド

CotEditorで独自に定義されているコマンドです。
（[]で囲まれたものはオプションです）

### write to console

`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

`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」を大文字/小文字を無視して検索し、結果を返す。

#### 詳細

検索は、現在の挿入ポイントの位置を基準に行われます。
例えば、`wrap`や`backwards`が指定されていなかったとき、選択位置以降に対象文字列がない場合には`false`を返します。

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

### replace

`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

`scroll to caret`
  挿入ポイントが見えるようにスクロールする。
  対象
    documentオブジェクト

#### 例

    scroll to caret front document

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

### jump

`jump`
  指定した行に挿入ポイントを移動しその部分が見えるようにスクロールする。
  `to line` (int)
    移動先の行番号
  [`column` (int)]
    移動先の（行内の）列番号
  対象
    documentオブジェクト

#### バージョン

CotEditor 2.1.0以降

#### 例

    jump front document to line -1

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

#### 詳細

行番号や列番号に負の数が指定された場合は、最終行（文字）から数えた位置に移動する。

### convert

`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

`reinterpret`
  書類を指定されたエンコーディングでファイル内容を再解釈する。
  `as` (text)
    新しいエンコーディング（ローカライズされたエンコーディング名かIANA charset名で指定）
  返り値
    boolean型
  対象
    documentオブジェクト

#### 例

    reinterpret front document as "Japanese (EUC)"

EUCで解釈し直し、解釈できたかどうかを返す。

#### 詳細

ファイルそのものが未保存の場合は、`false`を返します。

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

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

### shift

`shift left`
  選択位置のある行を左にシフト
`shift right`
  選択位置のある行を右にシフト
  対象
    selectionオブジェクト

#### 例

    shift right selection of front document

挿入ポイントのある行を右にシフト。

### comment out

`comment out`
  選択範囲にコメント記号をつけてコメント化
`uncomment`
  選択範囲のコメント記号を取り去りコメント解除
  対象
    selectionオブジェクト

#### バージョン

CotEditor 2.0.1以降

#### 例

    comment out selection of front document

選択位置をコメントアウト。

#### 詳細

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

### string

`string`
  選択範囲に関係なく、書類中の指定された範囲の文字列を返す。
  `in` (list)
    範囲
  返り値
    text型
  対象
    selectionオブジェクト

#### 例

    string front document in {0, 10}

書類の最初から10文字を返す。

#### 詳細

無効な範囲を指定した場合などは、空の文字列を返します。

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

### change case

`change case`
  大文字/小文字/キャピタライズ（単語のアタマだけ大文字）に置き換える。
  `to` `upper`/`lower`/`capitalized`
    置き換えるスタイル
  対象
    selectionオブジェクト

#### 例

    change case selection of front document to upper

選択位置の英単語を大文字にする。

#### 詳細

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

### change roman width

`change roman width`
  半角/全角を変換する。
  `to` `half`/`full`
    置き換えるスタイル
  対象
    selectionオブジェクト

#### 例

    change roman width selection of front document to full

選択位置の英単語を全角にする。

### change kana

`change kana`
  ひらがな/カタカナを変換する。
  `to` `hiragana`/`katakana`
    置き換えるスタイル
  対象
    selectionオブジェクト

#### 例

    change kana selection of front document to katakana

選択位置のひらがなをカタカナに変換する。

### スマート引用符

`smarten quotes`
  まっすぐな引用符をカールした引用符に変更する。
`straighten quotes`
  カールした引用符をまっすぐな引用符に変更する。
  対象
    selectionオブジェクト

#### バージョン

CotEditor 3.9.7以降

#### 例

    smarten quotes selection of front document

選択位置の引用符をカールしたものに変換する。

### スマートダッシュ

`smarten dashes`
  連続したハイフンをダッシュ記号に変更する。
  対象
    selectionオブジェクト

#### バージョン

CotEditor 3.9.7以降

#### 例

    smarten dashes selection of front document

選択位置の連続したハイフンをダッシュ記号に変換する。

### normalize unicode

`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

`move line up`
  選択行を一つ上の行と入れ替える。
`move line down`
  選択行を一つ下の行と入れ替える。
  対象
    selectionオブジェクト

#### バージョン

CotEditor 2.3.0以降

### sort lines

`sort lines`
  選択行を昇順に並び替える。
`reverse lines`
  選択行を逆順にする。
  対象
    selectionオブジェクト

#### バージョン

CotEditor 2.3.0以降

### delete duplicate line

`delete duplicate line`
  選択行に含まれる重複行を削除する。
  対象
    selectionオブジェクト

#### バージョン

CotEditor 2.3.0以降

## 関連項目

- CotEditorスクリプトを使う
- AppleScriptで異なるバージョンのCotEditorに対応する
- 特定のイベントでスクリプトを実行する