AppleScript

miのAppleScriptの概要

miはAppleScriptに対応しています。(ただし、recordableではないので手動で行った動作を記録することはできません。)
AppleScriptとはアプリケーションやOSの動作をコントロールするための macOS 用のスクリプト言語であり、 OS標準添付の「スクリプトエディタ」("アプリケーション"フォルダの"ユーティリティ"フォルダ内にあります)等を使用して、処理を自動化するスクリプトを記述することができます。

オブジェクトとコマンド

AppleScriptでは、段落や文字といった対象(「オブジェクト」)に対して、 値の設定(set)、値の取得(get)、新規作成(make new)、削除(delete)などの「コマンド」を送ることによって、 編集中のドキュメントの内容を参照・編集することができます。

記述例:"set"がコマンド、"document 1"がオブジェクト

set document 1 to "test"

オブジェクトの指定方法

オブジェクトには、document, paragraph, word, characterなどがあり、通常、オブジェクトはインデックスで指定します。

記述例:最前面のドキュメント

document 1

プロパティ

各オブジェクトは、それぞれ内容や名前などの「プロパティ」情報を保持しています。
プロパティにアクセスするにはofを使います。

記述例:最前面のドキュメントの名前

name of document 1

オブジェクトの階層構造

オブジェクトは「ドキュメント1の中の2段落目」などの、階層構造を持ちます。 親オブジェクトの中に含まれる子オブジェクトを「エレメント」と呼びます。

オブジェクトの中のオブジェクトを指定するときは、ofでつなげて指定するか、tellend tell内に記述します。

記述例:最前面のドキュメントの2段落目を取得する

get paragraph 2 of document 1

上記記述例はtellend tellを使って、以下のようにも記述できます。

記述例:最前面のドキュメントの2段落目を取得する

tell document 1
get paragraph 2
end tell

下図は、1段落目に"abc"、2段落目に"これはサンプルです。"と記述されたドキュメントにおける、各オブジェクトの指定方法の例です。

1つの対象を指定するのに、複数の記述方法があります。たとえば上図において、character 1 of word 1 of paragraph 2 of document 1 と記述しても、character 5 of document 1と記述しても、指し示す対象は同じ「こ」となります。

本ページの説明の記述方法について

「AppleScriptコマンド」と「AppleScriptオブジェクト」の章に分けて説明しています。

「AppleScriptコマンド」の章の「文法」には、コマンドの文法を記述しています。

「記述例」には、サンプルコードを示しています。

AppleScriptコマンド

make new - 新規オブジェクトの作成

新規オブジェクトを作成します。
以下、新規作成するオブジェクトの種類毎に説明します。

1. 新規ドキュメントの作成

文法

make new document
[ with data text ]
[ with properties record ]

説明

新規ドキュメントを作成します。

パラメータ説明

with data text

作成するドキュメントの内容(テキスト)を設定します。

with properties record

作成するドキュメントの各種プロパティを設定します。

記述例

tell application "mi"
make new document with properties¬
{ contents:"test", mode:"HTML" }
end tell

→実行結果:内容が"test"、モードがHTMLの、新規ドキュメントを作成します。

2. 新規段落/単語/文字の作成

文法

make new paragraph/word/character
[ at before/after/beginning of/end of object ]
[ with data text ]
[ with properties record ]

説明

新規段落/単語/文字を作成します。

パラメータ説明

at before object

段落/単語/文字の作成位置を指定します。
objectがparagraphオブジェクトの場合、前の段落の最後に作成されます。
それ以外の場合、オブジェクトobjectの最初に作成されます。

at after object

段落/単語/文字の作成位置を指定します。
objectがparagraphオブジェクトの場合、次の段落の最初に作成されます。
それ以外の場合、オブジェクトobjectの最後に作成されます。

at beginning of object

段落/単語/文字の作成位置を指定します。
オブジェクトobjectの最初に作成されます。

at end of object

段落/単語/文字の作成位置を指定します。
オブジェクトobjectの最後に作成されます。

with data text

作成するドキュメントの内容(テキスト)を設定します。

with properties record

作成するドキュメントの各種プロパティを設定します。ただし、設定可能なプロパティはcontentsプロパティのみです。

記述例

tell application "mi"
tell document 1
make new paragraph with data "test"¬
at after paragraph 1
end tell
end tell

→実行結果:2段落目に、内容が"test"である新規段落を作成します。

tell application "mi"
tell document 1
make new character with data "test"¬
at beginning of paragraph 2
end tell
end tell

→実行結果:2段落目の最初に、文字列"test"を挿入します。

3. 新規検索結果ウインドウの作成

文法

make new indexwindow
[ with properties record ]

説明

新規検索結果ウインドウを作成します。

パラメータ説明

with properties record

作成するドキュメントの各種プロパティを設定します。書き込み可能なプロパティ全てを設定できます。

4. 新規インデックレコード/インデックスグループの作成

文法

make new indexrecord/indexgroup
[ at before/after/beginning of/end of object ]
[ with properties record ]

説明

新規インデックレコード/インデックスグループを作成します。

パラメータ説明

at before object

インデックレコード/インデックスグループの作成位置を指定します。
objectがindexgroupオブジェクトの場合、前のグループの最後に作成されます。
それ以外の場合、オブジェクトobjectの最初に作成されます。

at after object

インデックレコード/インデックスグループの作成位置を指定します。
objectがindexgroupオブジェクトの場合、次のグループの最初に作成されます。
それ以外の場合、オブジェクトobjectの最後に作成されます。

at beginning of object

インデックレコード/インデックスグループの作成位置を指定します。
オブジェクトobjectの最初に作成されます。

at end of object

インデックレコード/インデックスグループの作成位置を指定します。
オブジェクトobjectの最後に作成されます。

with properties record

作成するドキュメントの各種プロパティを設定します。
indexgroupオブジェクトのプロパティは、comment, contentsが設定可能です。
indexrecordオブジェクトのプロパティの設定方法はindexrecordオブジェクトの説明を参照してください。

set - 設定

文法

set object to anything

説明

オブジェクトやプロパティに値を設定します。
典型的には、以下のような使い方があります。

1. 段落/単語/文字を新しい文字列で置き換えます

記述例

tell application "mi"
tell document 1
set first word of paragraph 3 to "test"
end tell
end tell

→実行結果:3段落目の最初の単語を"test"に置き換えます。

2. 挿入位置に文字列を挿入します

記述例

tell application "mi"
tell document 1
tell paragraph 2
set first insertion point to "test"
end tell
end tell
end tell

→実行結果:2段落目の最初に"test"を挿入します。

3. プロパティの値を設定します

記述例

tell application "mi"
tell document 1
set text encoding to "UTF-8"
end tell
end tell

→実行結果:最前面のドキュメントのテキストエンコーディングをUTF-8に設定します。

4. オブジェクトの値を取得して変数等に設定します

記述例

tell application "mi"
tell document 1
set text1 to paragraph 1
end tell
end tell

→実行結果:変数text1に1段落目の内容を格納します。

get - 取得

文法

get object

説明

オブジェクトやプロパティに値を取得します。
典型的には、以下のような使い方があります。

1. ドキュメント/段落/単語/文字/選択範囲のテキストを取得します

記述例

tell application "mi"
tell document 1
display dialog (get first paragraph)
end tell
end tell

→実行結果:1段落目の内容をダイアログに表示します。

2. プロパティの値を取得します

記述例

tell application "mi"
tell document 1
if((get mode)="HTML") then display dialog "test"
end tell
end tell

→実行結果:最前面のドキュメントのモードがHTMLならダイアログを表示します。

count - オブジェクトの数を数える

文法

count object

説明

オブジェクトの数を数えます。
以下のオブジェクトを数えることができます。

記述例

tell application "mi"
tell document 1
repeat with n from 1 to (count paragraph)
make new character with data (n as string)¬
at beginning of paragraph n
end repeat
end tell
end tell

→実行結果:各段落の頭に1から順に番号文字列を挿入します。

select - オブジェクトを選択する

文法

select object

説明

オブジェクトを選択する。
パラメータ説明

to object

objectまでを選択します。

記述例

tell application "mi"
tell document 1
select paragraph 1 to paragraph 5
end tell
end tell

→実行結果:1段落目から5段落目までを選択します。

delete - オブジェクトの削除

文法

delete object

説明

オブジェクトを削除します。

記述例

tell application "mi"
delete paragraph 1 of document 1
end tell

→実行結果:最初の段落を削除します。

open - ファイルを開く

文法

open alias
[ as encoding ]

説明

ファイルを開きます。

パラメータ説明

as encoding

テキストエンコーディングを指定します。
(開くファイルがencodingで記述されているとみなして開きます。)
ただし、そのファイルが指定テキストエンコーディングで正しくエンコードされていないときは、 別のテキストエンコーディングで開きます。

記述例

set file1 to (POSIX file "/Users/daisuke/test.html")
tell application "mi"
open file1
end tell

→実行結果:ユーザーdaisukeのホームフォルダにあるtest.htmlという名前のファイルをmiで開きます。

close - オブジェクトを閉じる

文法

close object
[ saving yes/no/ask ]
[ in alias/text ]

説明

ドキュメント/検索結果ウインドウを閉じます。

パラメータ説明

saving yes

未保存(dirty)の場合、保存します。

saving no

未保存(dirty)の場合でも、保存しません。

saving ask

未保存(dirty)の場合、保存するかどうかユーザーに確認します。
saving節を省略した場合は、この動作になります。

in alias/text

保存先のファイルを設定します。
ファイル指定は、aliasタイプ、または、絶対パスを記述した文字列が使用可能です。
既存ファイルをワーニング無しで上書きしますので、注意して使用して下さい。
(必要であれば、スクリプト内でワーニングを表示してください。)

記述例

tell application "mi"
close first document saving yes
end tell

→実行結果:最前面のドキュメントを強制保存して閉じます。

save - 保存

文法

save object
[ in alias/text ]
[ as type ]

説明

ドキュメント/検索結果ウインドウを保存します。

パラメータ説明

in alias/text

保存先のファイルを設定します。
ファイル指定は、aliasタイプ、または、絶対パスを記述した文字列が使用可能です。
既存ファイルをワーニング無しで上書きしますので、注意して使用して下さい。
(必要であれば、スクリプト内でワーニングを表示してください。)

as type

ファイルタイプ("TEXT"等)を設定します。

記述例

tell application "mi"
save first document
end tell

→実行結果:最前面のドキュメントを保存します。

exists - オブジェクトが存在するかどうかを取得

文法

object exists

説明

オブジェクトが存在するかどうかを取得します。

記述例

tell application "mi"
tell document 1
if( paragraph 2 exists ) then delete paragraph 2
end tell
end tell

→実行結果:2段落目が存在していたら、それを削除します。

collapse

文法

collapse object

説明

検索結果ウインドウのグループ内の行を折りたたんだ状態にします。

記述例

tell application "mi"
collapse indexgroup 1 of indexwindow 1
end tell

→実行結果:検索結果ウインドウの最初のグループの行を折りたたんだ状態にします。

expand

文法

expand object

説明

検索結果ウインドウのグループ内の行を広げた状態にします。

記述例

tell application "mi"
expand indexgroup 1 of indexwindow 1
end tell

→実行結果:検索結果ウインドウの最初のグループの行を広げた状態にします。

AppleScriptオブジェクト

document

説明

ドキュメントのオブジェクトです。

指定方法

指定方法説明

インデックス

ウインドウ/タブの最前面からの順番で指定します。(ドキュメント以外のウインドウはカウントしません。)
最前面のインデックスが1です。
first, lastでの指定が可能です。

記述例:

document 1

名前

ドキュメントの名前(ファイル名)で指定します。
同じ名前のドキュメントが複数存在した場合、先に開かれた方を選択します。

記述例:

document "test.c"

エレメント

paragraph, word, character, insertion point, selection object

プロパティ

プロパティ説明書込

file

alias

ドキュメントのファイルです。

×

name

text

ドキュメントの名前です。

modified

boolean

編集後未保存の場合trueとなります。

×

contents

text

ドキュメントの内容(テキスト)です。

index

integer

ドキュメントのインデックスです。
(ドキュメントウインドウ中での最前面からの順番)

selection

text

選択範囲のテキストです。

mode

text

ドキュメントのモードです。

text encoding

text

ドキュメントのテキストエンコーディングです。
ドキュメント→テキストエンコーディングで表示されている文字列("UTF-8"等)で設定・取得します。)

記述例:

set text encoding of¬
document 1 to "UTF-8"

return code

enum
(CR / LF / CRLF)

ドキュメントの改行コードです。

記述例:

set return code of¬
document 1 to CRLF

font

text

ドキュメントのフォントです。

記述例:

set font of document 1¬
to "Monaco"

size

integer

ドキュメントのフォントサイズです。

記述例:

set size of document 1¬
to 9

type

text

ファイルのタイプです。

creator

text

ファイルのクリエータです。

windowindex

integer

mi内の全てのウインドウの最前面からのインデックスです。
windowオブジェクトにアクセスするには、このインデックスを使ってwindowオブジェクトを指定してください。

記述例:

set bounds of window ¬
(get windowindex of document 1)¬
to {100,100,400,300}

header

text

情報欄に表示されるテキストです。

paragraph

説明

段落のオブジェクトです。(最後の改行コードを含みます。)

指定方法

指定方法説明

インデックス

親オブジェクト(ドキュメント/選択部分)の中の、段落番号で指定します。
最初の段落のインデックスが1です。
first, lastでの指定が可能です。

記述例:

paragraph 1

エレメント

word, character, insertion point

プロパティ

プロパティ説明書込

contents

text

内容(テキスト)です。

index

integer

ドキュメントの最初の段落からのインデックスです。

×

word

説明

単語のオブジェクトです。
単語=ダブルクリック時に選択される範囲、となります。
記号やスペースなども1単語として数えます。

指定方法

指定方法説明

インデックス

親オブジェクト(ドキュメント/段落/選択部分)の中の単語の位置で指定します。
最初の単語のインデックスが1です。
first, lastでの指定が可能です。

記述例:

word 1 of paragraph 1

エレメント

character, insertion point

プロパティ

プロパティ説明書込

contents

text

内容(テキスト)です。

index

integer

ドキュメントの最初の単語からのインデックスです。

×

character

説明

文字のオブジェクトです。
1つの文字(Unicode文字)が1つのオブジェクトに対応します。
改行コードも1文字に含まれます。

指定方法

指定方法説明

インデックス

親オブジェクト(ドキュメント/段落/単語)の中の文字の位置で指定します。
最初の文字のインデックスが1です。
first, lastでの指定が可能です。

記述例:

character 1 of paragraph 1

エレメント

insertion point

プロパティ

プロパティ説明書込

contents

text

内容(テキスト)です。

index

integer

ドキュメントの最初からのインデックスです。

×

insertion point

説明

挿入位置(=文字と文字の間)のオブジェクトです。

指定方法

指定方法説明

インデックス

親オブジェクト(ドキュメント/段落/単語)の中の挿入位置の位置で指定します。
最初の挿入位置のインデックスが1です。
各オブジェクトの前後の挿入位置がそれぞれ最初と最後の挿入位置であり、first, lastで指定可能です。 たとえば1つの文字であれば、文字の前後に2つの挿入位置があります。

記述例:

insertion point 30 of document 1

エレメント

なし

プロパティ

プロパティ説明書込

contents

text

内容(テキスト)です。
読み込んだ(取得した)場合は空のテキストとなります。
書き込んだ(設定した)場合は挿入位置にテキストを追加することとなります。

index

integer

ドキュメントの最初からのインデックスです。

×

selection object

説明

選択部分のオブジェクトです。
ドキュメント上の現在の選択範囲、または、キャレット位置を指します。
1つのドキュメントには、1つの選択部分オブジェクトが存在します。

指定方法

指定方法説明

インデックス

1のみ指定可能です。

記述例:

selection object 1 of document 1

エレメント

paragraph, word, character, insertion point

プロパティ

プロパティ説明書込

contents

text

内容(テキスト)です。

参考

document, paragraph, word, character, insertion point, selection objectのオブジェクト間の関係を UMLクラス図で示すと下図のようになります。

window

説明

ウインドウのオブジェクトです。
documentやindexwindowの内容を表示するためのウインドウです。
ウインドウの表示位置やサイズなどを制御するときに使用します。

指定方法

指定方法説明

インデックス

アプリケーション内のすべてのウインドウの中での最前面からの順番で指定します。

エレメント

なし

プロパティ

プロパティ説明書込

bounds

rect

ウインドウの表示位置です。
rect型は下記例のように記述し、左端、上端、右端、下端の順です。

記述例:

set bounds of window 1¬
to {100,100,600,400}

zoomed

boolean

ウインドウがズームされている状態がtrueとなります。

記述例:

set zoomed of window 1 to true

name

text

ウインドウの名前です。

index

integer

mi内の全てのウインドウの最前面からのインデックスです。

indexwindow

説明

検索結果ウインドウのオブジェクトです。

指定方法

指定方法説明

インデックス

ウインドウの最前面からの順番で指定します。(検索結果ウインドウ以外のウインドウはカウントしません。)
最前面のインデックスが1です。
first, lastでの指定が可能です。

名前

検索結果ウインドウの名前で指定します。
同じ名前のドキュメントが複数存在した場合、先に開かれた方を選択します。

エレメント

なし

プロパティ

プロパティ説明書込

file

alias

ドキュメントのファイルです。

×

name

text

ドキュメントの名前です。

modified

boolean

編集後未保存の場合trueとなります。

contents

list

検索結果ウインドウに含まれるインデックスレコードです。

filewidth

integer

ファイルフィールドの幅です。

infowidth

integer

情報フィールドの幅です。

index

integer

検索結果ウインドウのインデックスです。
(検索結果ウインドウ中での最前面からの順番)

windowindex

text

mi内の全てのウインドウの最前面からのインデックスです。
windowオブジェクトにアクセスするには、このインデックスを使ってwindowオブジェクトを指定してください。

×

indexrecord

説明

検索結果ウインドウの各行のオブジェクトです。
グループ行はindexrecordオブジェクトに含まれません。indexgroupオブジェクトを使用します。

指定方法

指定方法説明

インデックス

リスト上部からのインデックスで指定します。
グループ行はカウントされません。
最初の行のインデックスが1です。
first, lastでの指定が可能です。

エレメント

なし

プロパティ

プロパティ説明書込

file

alias

各行からリンクされるファイルです。

paragraph

text

各行からリンクされる部分の段落番号です。

startposition

text

各行からリンクされる部分の開始位置です。
ファイルの最初からのバイト数のインデックス(1〜)で指定します。

endposition

text

各行からリンクされる部分の終了位置です。
ファイルの最初からのバイト数のインデックス(1〜)で指定します。

comment

text

各行に表示されるコメントです。

パラメータfile, paragraph, startposition, endpositionへの書き込みは、 以下のいずれかのセットで、レコード形式({}内にカンマで区切って「プロパティ:値」を記述します。記述例を参考にして下さい。)で設定してください。

プロパティのセット説明

fileのみ

クリックすると、指定ファイルの1段落目を選択するインデックス行となります。

記述例:

tell application "mi"
set file1 to (file of document 1)
make new indexwindow
tell indexwindow 1
make new indexrecord ¬
at beginning of indexgroup 1
set indexrecord 1 to ¬
{file:file1}
end tell
end tell

→実行結果:最前面のドキュメントの1段落目を選択するインデックス行を作成します。

file, paragraph

クリックすると、指定ファイルの指定段落を選択するインデックス行となります。

記述例:

tell application "mi"
set file1 to (file of document 1)
make new indexwindow
tell indexwindow 1
make new indexrecord ¬
at beginning of indexgroup 1
set indexrecord 1 to ¬
{file:file1, paragraph:3}
end tell
end tell

→実行結果:最前面のドキュメントの3段落目を選択するインデックス行を作成します。

file, startposition, endposition

クリックすると、指定ファイルのstartpositionバイト目〜endpositionバイト目を選択するインデックス行となります。

記述例:

tell application "mi"
set file1 to (file of document 1)
make new indexwindow
tell indexwindow 1
make new indexrecord ¬
at beginning of indexgroup 1
set indexrecord 1 to ¬
{file:file1, ¬
startposition:3, ¬
endposition:5}
end tell
end tell

→実行結果:最前面のドキュメントの3バイト目〜5バイト目を選択するインデックス行を作成します。

indexgroup

説明

検索結果ウインドウの各行をまとめるグループのオブジェクトです。

指定方法

指定方法説明

インデックス

リスト上部からのインデックスで指定します。
最初のグループのインデックスが1です。
first, lastでの指定が可能です。

エレメント

なし

プロパティ

プロパティ説明書込

comment

text

各行に表示されるコメントです。