ツールをJavaScriptで記述する

miのツールを、JavaScriptで記述することが出来ます。
ツールの拡張子を.jsにすると、JavaScriptファイルとして実行します。
JavaScriptからは、miのテキストや各種情報を取得/変更するmi テキストエディタ APIが使用可能です。

標準モードのツールのいくつか(「選択範囲の数値を順に+1する」など)はJavaScriptで記述されていますので、ご参考にしてください。
(ツールメニューの項目をoptionキーを押しながら選択すると、中身を参照することができます。)

HTML5モードのキーワードカテゴリー「mi JavaScript」を有効にすると、mi テキストエディタ APIの関数が色付け、キーワード情報表示されます。

プラグインをJavaScriptで記述する

miのプラグインを、JavaScriptで記述することが出来ます。
拡張子.jsのファイルをモード設定フォルダの"plugins"フォルダに格納することで、mi起動時に自動的に実行されます。
このプラグインファイルに、イベントリスナーを登録するコードを記述することで、ファイルオープン時や保存時に 特定のJavaScriptコードを実行することが出来ます。

mi テキストエディタ API

アプリケーションクラス

miアプリケーションに対応するクラスです。
あらかじめ、グローバル変数"mi"にインスタンス(唯一のインスタンス)が生成済みです。

ドキュメント制御

関数説明

getCurrentDocument()

現在編集中のドキュメントオブジェクトを取得します。

コード例:

doc = mi.getCurrentDocument();

createDocument()

新規ドキュメントを生成して、そのドキュメントオブジェクトを取得します。

コード例:

doc = mi.createDocument();

ダイアログの表示

関数説明

showDialog(title, message)

title: String : タイトル
message: String : メッセージ

OKボタンを持つダイアログを表示します。
(ダイアログの左下に、ツール実行を中断するボタンも表示されます。)

コード例:

mi.showDialog("タイトル","メッセージ");

showDialog(title, message, okButton)

title: String : タイトル
message: String : メッセージ
okButton: String : OKボタンのタイトル

OKボタンを持つダイアログを表示します。
OKボタンのタイトルを指定できます。
(ダイアログの左下に、ツール実行を中断するボタンも表示されます。)

コード例:

mi.showDialog("タイトル","メッセージ","おっけー");

showDialog(title, message, okButton, cancelButton)

title: String : タイトル
message: String : メッセージ
okButton: String : OKボタンのタイトル
cancelButton: String : Cancelボタンのタイトル
返り値: String : クリックされたボタンのタイトル

OK, Cancelボタンを持つダイアログを表示します。
OK, Cancelボタンのタイトルを指定できます。
(ダイアログの左下に、ツール実行を中断するボタンも表示されます。)

コード例:

if( mi.showDialog("タイトル","メッセージ","続行","キャンセル") == "キャンセル" )   break;

→実行結果:ユーザーがキャンセルをクリックしたらbreakします。

JavaScript

関数説明

loadModule(path)

path: String : 相対ファイルパス

JavaScriptファイルをロード(スクリプト実行)します。

コード例:

mi.loadModule("./script/jshint.js");

→実行結果:同じフォルダ内のscriptフォルダ内のjshint.jsの内容を実行します。

プラグイン制御

関数説明

registerPlugin(modeName,id, name, defaultEnabled, defaultOptions)

modeName: String: 対象モードの名称
id : String: プラグインのID(他のプラグインと重複しないユニークなID。例:"std.jshint.mimikaki.net")
name : プラグイン名称
defaultEnabled : デフォルトのON/OFF状態
defaultOptions : デフォルトのオプション文字列

プラグインを登録します。
(プラグインの登録の効果は、モードに設定データを作成し、モード設定ウインドウに設定を表示することのみです。イベントリスナーの登録などは、addEventListener()などで行います。)

コード例:

mi.registerPlugin(modeName,"std.jshint.mimikaki.net","JSHINT",false,"");

setPluginDisplayName(modeName,id,lang,displayName)

modeName: String: 対象モードの名称
id : String: プラグインのID
lang : String: 言語名(現状、"ja"のみ対応)
displayName : 表示名

プラグインの英語以外での表示名を設定します。

コード例:

mi.setPluginDisplayName(modeName,pluginId,"ja","JSHINT (JavaScript 文法チェック)");

getPluginEnabled(modeName,id)

modeName: String: 対象モードの名称
id : String: プラグインのID

モード設定でプラグインがONに設定されているかどうかを取得します。

コード例:

if( mi.getPluginEnabled(modeName,pluginId) === true ) { 
(イベントリスナー登録などの処理) }

getCurrentModeNameForPluginLoad()

現在ロード中の対象モードの名称を取得します。プラグインロード処理内でのみ使用可能です。

コード例:

modeName = mi.getCurrentModeNameForPluginLoad();

イベントリスナー制御

関数説明

addEventListener(modeName, id, events, fn)

modeName: String: 対象モードの名称
id : String: プラグインのID
events : Array of String : 対象イベント
fn : function(doc,event,parameter) : 関数

ドキュメント保存等のイベント発生時に処理する関数を登録します。

コード例:

mi.addEventListener(modeName,pluginId,["onSaved","onOpened"],
function(doc,event,parameter) {
(処理)}

addEventListener(modeName, id, events, fn)

modeName: String: 対象モードの名称
id : String: プラグインのID

ドキュメント保存等のイベント発生時に処理する関数を登録解除します。

イベントの種類

イベント説明

onOpened

ドキュメントをオープンしたとき

onSaved

ドキュメントを保存したとき

デバッグ

関数説明

outputToStderr(text)

text: String: テキスト

標準エラー出力にテキストを出力します。

コード例:

mi.outputToStderr("test");

ドキュメントクラス

ドキュメントに対応するクラスです。

テキスト編集

関数説明

getText(start, end)

start : Number: 開始位置(0始まり)
end : Number: 終了位置(0始まり)
返り値 : String

指定範囲のテキストを取得します。

コード例:

text = doc.getText(s,e);

setText(start, end, text)

start : Number: 開始位置(0始まり)
end : Number: 終了位置(0始まり)
text : String: テキスト

指定範囲にテキストを設定します。

コード例:

doc.setText(start,end,"abc");

getTextPointFromPos(pos)

pos : Number: テキスト挿入位置(0始まり)
返り値 : 連想配列(x:Number, y:Number)

テキスト挿入位置から、テキストポイントを取得します。

コード例:

textpt = doc.getTextPointFromPos(textindex);

getPosFromTextPoint(x, y)

x : Number: 段落内のテキスト挿入位置(0始まり)
y : Number: 段落番号(0始まり)
返り値 : Number

テキストポイントから、テキスト挿入位置を取得します。

コード例:

textindex = doc.getPosFromTextPoint(textpt.x,textpt.y);

ドキュメント全体の編集

関数説明

getLength()

返り値 : Number

ドキュメントの文字数を取得します。

コード例:

len = doc.getLength();

getContent()

返り値 : String

ドキュメント全体のテキストを取得します。

コード例:

text = doc.getContent();

setContent(text)

text : String: テキスト

ドキュメント全体にテキストを設定します。

コード例:

doc.setContent("abc");

段落

関数説明

getParagraphCount()

返り値 : Number

ドキュメントの段落数を取得します。

コード例:

paraCount = doc.getParagraphCount();

getParagraphRange(paraindex)

paraindex : Number: 段落のインデックス(0始まり)
返り値 : 連想配列(start:Number, end:Number)

段落の範囲を取得します。

コード例:

pararange = doc.getParagraphRange(0);

getParagraphText(paraindex)

paraindex : Number: 段落のインデックス(0始まり)
返り値 : String

段落のテキストを取得します。

コード例:

paratext = doc.getParagraphText(0);

setParagraphText(paraindex, text)

paraindex : Number: 段落番号(0始まり)
text : String: テキスト

段落にテキストを設定します。

コード例:

doc.setParagraphText(paraindex,"abc");

選択範囲・キャレット

関数説明

getSelectionRange(selindex)

selindex : 選択範囲のインデックス(0始まり)(省略可)
返り値 : 連想配列(start:Number, end:Number)

現在の選択範囲を取得します。(矩形選択の場合のみ、複数の選択範囲が存在します。)

コード例:

sel = doc.getSelectionRange();

getSelectionRangeArray()

返り値 : Array of 連想配列(start:Number, end:Number)

現在の選択範囲の配列を取得します。(矩形選択の場合のみ、複数の選択範囲が存在します。)

コード例:

selarray = doc.getSelectionRangeArray();

getSelectionCount()

返り値 : Number

現在の選択範囲の個数を取得します。(矩形選択の場合のみ、複数の選択範囲が存在します。)

コード例:

selcount = doc.getSelectionCount();

getSelectionText()

返り値 : String

現在の選択範囲のテキストを取得します。

コード例:

text = doc.getSelectionText();

setSelectionRange(start, end)

start : Number: 開始位置(0始まり)
end : Number: 終了位置(0始まり)

選択範囲を設定します。

コード例:

doc.setSelectionRange(start,end);

getCaretPos()

返り値: Number

現在のキャレット位置を取得します。
mi.getSelectionRange().startと同等です。

コード例:

pos = doc.getCaretPos();

setCaretPos(pos)

pos: Number: テキスト挿入位置

現在のキャレット位置を設定します。
mi.setSelectionRange(pos,pos)と同等です。

コード例:

doc.setCaretPos(pos);

ドキュメント情報

関数説明

getModeName()

返り値: String

ドキュメントのモード名を取得します。

コード例:

modeName = doc.getModeName();

getURL()

返り値: String

ドキュメントファイルのURLを取得します。

コード例:

url = doc.getURL();

文法チェッカー

関数説明

clearSyntaxCheckerWarnings()

文法チェッカーワーニングを全て消去します。

コード例:

doc.clearSyntaxCheckerWarnings();

addSyntaxCheckerWarning(para, col, title, detail, type, displayInTextView)

para : Number : 段落番号
col : Number : 段落内の文字挿入位置(0始まり)
title : String : ワーニングタイトル
detail : String : ワーニング内容
type : Number : タイプ(1: Information, 2: Warning, 3: Error)
displayInTextView : Boolean : テキストビュー内にもワーニング表示するかどうか

文法チェッカーワーニングを追加します。

コード例:

doc.addSyntaxCheckerWarning(lineIndex,colIndex,reason,detail,2,true);

その他

関数説明

setDocInfoText(text)

text: String: 情報テキスト

テキスト情報ウインドウに表示するテキストを設定します。

コード例:

doc.setDocInfoText("情報");