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でつなげて指定するか、tell
〜end tell
内に記述します。
記述例:最前面のドキュメントの2段落目を取得する
get paragraph 2 of document 1
上記記述例はtell
〜end 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コマンド」の章の「文法」には、コマンドの文法を記述しています。
[ ]
内は省略可能です。/
で区切った単語・節はいずれかを記述します。- 斜体で示した部分には、実際にスクリプトを記述する際には、状況に応じたオブジェクトや値などを記述します。
- 複数行に分けて記述していますが、実際にスクリプトを記述する際には、1行(1段落)で記述してください。
「記述例」には、サンプルコードを示しています。
- 「AppleScriptコマンド」の章のサンプルコードは、「スクリプトエディタ」にそのままコピー&ペーストして実行できるようになっています。
- ¬ という記号は、文が次の行に続くことを意味する記号です。 ¬ を削除して同じ行に続けて書いても全く同じ動作となります。
AppleScriptコマンド
make new - 新規オブジェクトの作成
新規オブジェクトを作成します。
以下、新規作成するオブジェクトの種類毎に説明します。
1. 新規ドキュメントの作成
文法
[ with data text ]
[ with properties record ]
説明
新規ドキュメントを作成します。
パラメータ | 説明 |
---|---|
with data text |
作成するドキュメントの内容(テキスト)を設定します。 |
with properties record |
作成するドキュメントの各種プロパティを設定します。 |
- with data textは with properties {contents:text}と同じ動作になります。
- パラメータat before/after/beginning of/end of object には未対応です。
- make new window でドキュメントを作成することはできません。
記述例
tell application "mi"
make new document with properties¬
{ contents:"test", mode:"HTML" }
end tell
→実行結果:内容が"test"、モードがHTMLの、新規ドキュメントを作成します。
2. 新規段落/単語/文字の作成
文法
[ at before/after/beginning of/end of object ]
[ with data text ]
[ with properties record ]
説明
新規段落/単語/文字を作成します。
パラメータ | 説明 |
---|---|
at before object |
段落/単語/文字の作成位置を指定します。 |
at after object |
段落/単語/文字の作成位置を指定します。 |
at beginning of object |
段落/単語/文字の作成位置を指定します。 |
at end of object |
段落/単語/文字の作成位置を指定します。 |
with data text |
作成するドキュメントの内容(テキスト)を設定します。 |
with properties record |
作成するドキュメントの各種プロパティを設定します。ただし、設定可能なプロパティはcontentsプロパティのみです。 |
- at before/after/beginning of/end of object のobjectには、paragraph, word, characterオブジェクトが使用可能です。
- with data textは with properties {contents:text}と同じ動作になります。
- 単語/文字を作成する場合、with data textまたは with properties {contents:text} を必ず指定しなくてはなりません。
- 単語を作成する場合、前後の文字がアルファベットのときは、半角スペースが自動的に挿入されます。
- 文字を作成する場合、with data text等で指定するテキストには、一文字だけでなく、複数の文字からなる文字列を指定可能です。
記述例
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. 新規検索結果ウインドウの作成
文法
[ with properties record ]
説明
新規検索結果ウインドウを作成します。
パラメータ | 説明 |
---|---|
with properties record |
作成するドキュメントの各種プロパティを設定します。書き込み可能なプロパティ全てを設定できます。 |
- パラメータat before/after/beginning of/end of object には未対応です。
- パラメータwith data text には未対応です。
4. 新規インデックレコード/インデックスグループの作成
文法
[ at before/after/beginning of/end of object ]
[ with properties record ]
説明
新規インデックレコード/インデックスグループを作成します。
パラメータ | 説明 |
---|---|
at before object |
インデックレコード/インデックスグループの作成位置を指定します。 |
at after object |
インデックレコード/インデックスグループの作成位置を指定します。 |
at beginning of object |
インデックレコード/インデックスグループの作成位置を指定します。 |
at end of object |
インデックレコード/インデックスグループの作成位置を指定します。 |
with properties record |
作成するドキュメントの各種プロパティを設定します。 |
- at before/after/beginning of/end of object のobjectには、indexgroup, indexrecordオブジェクトが使用可能です。
- パラメータwith data text には未対応です。
set - 設定
文法
説明
オブジェクトやプロパティに値を設定します。
典型的には、以下のような使い方があります。
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 - 取得
文法
説明
オブジェクトやプロパティに値を取得します。
典型的には、以下のような使い方があります。
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 - オブジェクトの数を数える
文法
説明
オブジェクトの数を数えます。
以下のオブジェクトを数えることができます。
- ドキュメントの中の段落/単語/文字
- 段落の中の単語/文字
- 単語の中の文字
- ドキュメント
- 検索結果ウインドウ
- ウインドウ
記述例
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 - オブジェクトを選択する
文法
説明
オブジェクトを選択する。
パラメータ | 説明 |
---|---|
to object |
objectまでを選択します。 |
記述例
tell application "mi"
tell document 1
select paragraph 1 to paragraph 5
end tell
end tell
→実行結果:1段落目から5段落目までを選択します。
delete - オブジェクトの削除
文法
説明
オブジェクトを削除します。
記述例
tell application "mi"
delete paragraph 1 of document 1
end tell
→実行結果:最初の段落を削除します。
open - ファイルを開く
文法
[ as encoding ]
説明
ファイルを開きます。
パラメータ | 説明 |
---|---|
as encoding |
テキストエンコーディングを指定します。 |
記述例
set file1 to (POSIX file "/Users/daisuke/test.html")
tell application "mi"
open file1
end tell
→実行結果:ユーザーdaisukeのホームフォルダにあるtest.htmlという名前のファイルをmiで開きます。
close - オブジェクトを閉じる
文法
[ saving yes/no/ask ]
[ in alias/text ]
説明
ドキュメント/検索結果ウインドウを閉じます。
パラメータ | 説明 |
---|---|
saving yes |
未保存(dirty)の場合、保存します。 |
saving no |
未保存(dirty)の場合でも、保存しません。 |
saving ask |
未保存(dirty)の場合、保存するかどうかユーザーに確認します。 |
in alias/text |
保存先のファイルを設定します。 |
記述例
tell application "mi"
close first document saving yes
end tell
→実行結果:最前面のドキュメントを強制保存して閉じます。
save - 保存
文法
[ in alias/text ]
[ as type ]
説明
ドキュメント/検索結果ウインドウを保存します。
パラメータ | 説明 |
---|---|
in alias/text |
保存先のファイルを設定します。 |
as type |
ファイルタイプ("TEXT"等)を設定します。 |
記述例
tell application "mi"
save first document
end tell
→実行結果:最前面のドキュメントを保存します。
exists - オブジェクトが存在するかどうかを取得
文法
説明
オブジェクトが存在するかどうかを取得します。
記述例
tell application "mi"
tell document 1
if( paragraph 2 exists ) then delete paragraph 2
end tell
end tell
→実行結果:2段落目が存在していたら、それを削除します。
collapse
文法
説明
検索結果ウインドウのグループ内の行を折りたたんだ状態にします。
記述例
tell application "mi"
collapse indexgroup 1 of indexwindow 1
end tell
→実行結果:検索結果ウインドウの最初のグループの行を折りたたんだ状態にします。
expand
文法
説明
検索結果ウインドウのグループ内の行を広げた状態にします。
記述例
tell application "mi"
expand indexgroup 1 of indexwindow 1
end tell
→実行結果:検索結果ウインドウの最初のグループの行を広げた状態にします。
AppleScriptオブジェクト
document
説明
ドキュメントのオブジェクトです。
指定方法
指定方法 | 説明 |
---|---|
インデックス |
ウインドウ/タブの最前面からの順番で指定します。(ドキュメント以外のウインドウはカウントしません。) 記述例:
|
名前 |
ドキュメントの名前(ファイル名)で指定します。 記述例:
|
エレメント
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 |
ドキュメントのテキストエンコーディングです。 記述例:
|
○ |
return code |
enum |
ドキュメントの改行コードです。 記述例:
|
○ |
font |
text |
ドキュメントのフォントです。 記述例:
|
○ |
size |
integer |
ドキュメントのフォントサイズです。 記述例:
|
○ |
type |
text |
ファイルのタイプです。 |
○ |
creator |
text |
ファイルのクリエータです。 |
○ |
windowindex |
integer |
mi内の全てのウインドウの最前面からのインデックスです。 記述例:
|
○ |
header |
text |
情報欄に表示されるテキストです。 |
○ |
paragraph
説明
段落のオブジェクトです。(最後の改行コードを含みます。)
指定方法
指定方法 | 説明 |
---|---|
インデックス |
親オブジェクト(ドキュメント/選択部分)の中の、段落番号で指定します。 記述例:
|
エレメント
word, character, insertion point
プロパティ
プロパティ | 型 | 説明 | 書込 |
---|---|---|---|
contents |
text |
内容(テキスト)です。 |
○ |
index |
integer |
ドキュメントの最初の段落からのインデックスです。 |
× |
word
説明
単語のオブジェクトです。
単語=ダブルクリック時に選択される範囲、となります。
記号やスペースなども1単語として数えます。
指定方法
指定方法 | 説明 |
---|---|
インデックス |
親オブジェクト(ドキュメント/段落/選択部分)の中の単語の位置で指定します。 記述例:
|
エレメント
character, insertion point
プロパティ
プロパティ | 型 | 説明 | 書込 |
---|---|---|---|
contents |
text |
内容(テキスト)です。 |
○ |
index |
integer |
ドキュメントの最初の単語からのインデックスです。 |
× |
character
説明
文字のオブジェクトです。
1つの文字(Unicode文字)が1つのオブジェクトに対応します。
改行コードも1文字に含まれます。
指定方法
指定方法 | 説明 |
---|---|
インデックス |
親オブジェクト(ドキュメント/段落/単語)の中の文字の位置で指定します。 記述例:
|
エレメント
insertion point
プロパティ
プロパティ | 型 | 説明 | 書込 |
---|---|---|---|
contents |
text |
内容(テキスト)です。 |
○ |
index |
integer |
ドキュメントの最初からのインデックスです。 |
× |
insertion point
説明
挿入位置(=文字と文字の間)のオブジェクトです。
指定方法
指定方法 | 説明 |
---|---|
インデックス |
親オブジェクト(ドキュメント/段落/単語)の中の挿入位置の位置で指定します。 記述例:
|
エレメント
なし
プロパティ
プロパティ | 型 | 説明 | 書込 |
---|---|---|---|
contents |
text |
内容(テキスト)です。 |
○ |
index |
integer |
ドキュメントの最初からのインデックスです。 |
× |
selection object
説明
選択部分のオブジェクトです。
ドキュメント上の現在の選択範囲、または、キャレット位置を指します。
1つのドキュメントには、1つの選択部分オブジェクトが存在します。
指定方法
指定方法 | 説明 |
---|---|
インデックス |
1のみ指定可能です。 記述例:
|
エレメント
paragraph, word, character, insertion point
プロパティ
プロパティ | 型 | 説明 | 書込 |
---|---|---|---|
contents |
text |
内容(テキスト)です。 |
○ |
参考
document, paragraph, word, character, insertion point, selection objectのオブジェクト間の関係を UMLクラス図で示すと下図のようになります。
window
説明
ウインドウのオブジェクトです。
documentやindexwindowの内容を表示するためのウインドウです。
ウインドウの表示位置やサイズなどを制御するときに使用します。
指定方法
指定方法 | 説明 |
---|---|
インデックス |
アプリケーション内のすべてのウインドウの中での最前面からの順番で指定します。 |
エレメント
なし
プロパティ
プロパティ | 型 | 説明 | 書込 |
---|---|---|---|
bounds |
rect |
ウインドウの表示位置です。 記述例:
|
○ |
zoomed |
boolean |
ウインドウがズームされている状態がtrueとなります。 記述例:
|
○ |
name |
text |
ウインドウの名前です。 |
○ |
index |
integer |
mi内の全てのウインドウの最前面からのインデックスです。 |
○ |
indexwindow
説明
検索結果ウインドウのオブジェクトです。
指定方法
指定方法 | 説明 |
---|---|
インデックス |
ウインドウの最前面からの順番で指定します。(検索結果ウインドウ以外のウインドウはカウントしません。) |
名前 |
検索結果ウインドウの名前で指定します。 |
エレメント
なし
プロパティ
プロパティ | 型 | 説明 | 書込 |
---|---|---|---|
file |
alias |
ドキュメントのファイルです。 |
× |
name |
text |
ドキュメントの名前です。 |
○ |
modified |
boolean |
編集後未保存の場合trueとなります。 |
○ |
contents |
list |
検索結果ウインドウに含まれるインデックスレコードです。 |
○ |
filewidth |
integer |
ファイルフィールドの幅です。 |
○ |
infowidth |
integer |
情報フィールドの幅です。 |
○ |
index |
integer |
検索結果ウインドウのインデックスです。 |
○ |
windowindex |
text |
mi内の全てのウインドウの最前面からのインデックスです。 |
× |
indexrecord
説明
検索結果ウインドウの各行のオブジェクトです。
グループ行はindexrecordオブジェクトに含まれません。indexgroupオブジェクトを使用します。
指定方法
指定方法 | 説明 |
---|---|
インデックス |
リスト上部からのインデックスで指定します。 |
エレメント
なし
プロパティ
プロパティ | 型 | 説明 | 書込 |
---|---|---|---|
file |
alias |
各行からリンクされるファイルです。 |
○ |
paragraph |
text |
各行からリンクされる部分の段落番号です。 |
○ |
startposition |
text |
各行からリンクされる部分の開始位置です。 |
○ |
endposition |
text |
各行からリンクされる部分の終了位置です。 |
○ |
comment |
text |
各行に表示されるコメントです。 |
○ |
パラメータfile, paragraph, startposition, endpositionへの書き込みは、
以下のいずれかのセットで、レコード形式({}
内にカンマで区切って「プロパティ:値」を記述します。記述例を参考にして下さい。)で設定してください。
プロパティのセット | 説明 |
---|---|
fileのみ |
クリックすると、指定ファイルの1段落目を選択するインデックス行となります。 記述例:
→実行結果:最前面のドキュメントの1段落目を選択するインデックス行を作成します。 |
file, paragraph |
クリックすると、指定ファイルの指定段落を選択するインデックス行となります。 記述例:
→実行結果:最前面のドキュメントの3段落目を選択するインデックス行を作成します。 |
file, startposition, endposition |
クリックすると、指定ファイルのstartpositionバイト目〜endpositionバイト目を選択するインデックス行となります。 記述例:
→実行結果:最前面のドキュメントの3バイト目〜5バイト目を選択するインデックス行を作成します。 |
indexgroup
説明
検索結果ウインドウの各行をまとめるグループのオブジェクトです。
指定方法
指定方法 | 説明 |
---|---|
インデックス |
リスト上部からのインデックスで指定します。 |
エレメント
なし
プロパティ
プロパティ | 型 | 説明 | 書込 |
---|---|---|---|
comment |
text |
各行に表示されるコメントです。 |
○ |