JavaScriptツール
miのツールメニュー/ツールバー/キーバインドに、テキスト編集を制御するJavaScriptプログラムを記述することが出来ます。
ツールメニュー/ツールバーの場合
ツール名の拡張子を.jsにすると、JavaScriptファイルとして実行します。
キーバインドの場合
「動作」を「JavaScript として実行」に設定し、「挿入文字列」欄にJavaScriptプログラムを記述してください。
サンプルコード
サンプルコードです。
下記の他にも、標準モードのツールのいくつか(「選択範囲の数値を順に+1する」「選択範囲の 16 進数 Unicode を文字に変換」など)はJavaScriptで記述されています。
コピー&ペースト等ご自由にご使用ください。(ツールメニューの項目をoptionキーを押しながら選択すると、中身を参照することができます。)
また、APIの詳細は「API仕様」をご参照ください。
キャレット位置にHello World!を挿入
var doc = mi.getCurrentDocument();
var pos = doc.getCaretPos();
var text = "Hello World!";
doc.setText(pos, pos, text);
mi.getCurrentDocument()
で現在ドキュメントオブジェクトを取得し、doc.getCaretPos()
で現在のキャレット位置を取得しています。
doc.setText()
で、指定範囲のテキストを置き換えています。
なお、doc.setText()
はキャレットを移動しません。doc.setCaretPos(pos+text.length);
を追加することで挿入文字列の後にキャレット移動できます。
キャレット位置に0〜99の数値をカンマ区切りで挿入
var doc = mi.getCurrentDocument();
var pos = doc.getCaretPos();
for( var n = 0; n < 100; n++ ) {
var text = n.toString()+",";
doc.setText(pos, pos, text);
pos += text.length;
}
選択テキストをダイアログに表示
現在選択中のテキストをダイアログに表示します。
alert(mi.getCurrentDocument().getSelectionText());
getSelectionText()
で選択テキストを取得しています。
alert()
はダイアログ表示の関数です。confirm()
, prompt()
も使用可能です。
選択テキストを反転
現在選択中のテキストを反転します。
var doc = mi.getCurrentDocument();
var text = doc.getSelectionText();
var selectionArray = doc.getSelectionRangeArray();
doc.setText(selectionArray[0].start, selectionArray[0].end, text.split("").reverse().join(""));
doc.getSelectionRangeArray()
で選択範囲の配列を取得しています。
通常選択の場合は配列の0番目に選択範囲が入っており、start
, end
プロパティで開始・終了位置を取得できます。(矩形選択・マルチカーソルの場合は1番目以降にも値が格納されます。)start
, end
プロパティの値はドキュメントの最初からの(文字単位の)indexです。
split()
, reverse()
, join()
はJavaScript組み込みオブジェクトのメソッドです。
選択範囲の行頭にテキストを挿入
選択範囲の各行頭に、ダイアログで入力したテキストを挿入します。
var text = prompt("挿入テキストを入力してください。");
var doc = mi.getCurrentDocument();
var sel = doc.getSelectionRange();
var starty = doc.getTextPointFromPos(sel.start).y;
var endy = doc.getTextPointFromPos(sel.end).y;
for( var y = starty; y <= endy; y++ ) {
var pos = doc.getPosFromTextPoint(0, y);
doc.setText(pos, pos, text);
}
prompt()
は、ダイアログ表示の関数で、ユーザーが入力したテキストを返します。
getTextPointFromPos()
は、ドキュメントの最初からのindexを引数として、各段落内のindexをx、段落をyとするオブジェクトを取得します。
getPosFromTextPoint()
はその逆の変換です。
API仕様
miのテキストや各種情報を取得/変更するAPIが使用可能です。
(JavaScriptツールをmiで編集する際、JavaScriptモードのキーワードカテゴリー「mi JavaScript」を有効にすると、APIの関数を色付け・キーワード情報表示することができます。)
miから出力する改行コードはLF("\n")となります。
(mi.setOutputLineEndCode("CR");
を使用することにより、CRへ変更することが可能です。)
アプリケーションクラス
miアプリケーションに対応するクラスです。
あらかじめ、グローバル変数"mi"にインスタンス(唯一のインスタンス)が生成済みです。
ドキュメント制御
関数 | 説明 |
---|---|
|
現在編集中のドキュメントオブジェクトを取得します。 コード例: doc = mi.getCurrentDocument(); |
|
新規ドキュメントを生成して、そのドキュメントオブジェクトを取得します。 コード例: doc = mi.createDocument(); |
ダイアログの表示
miバージョン3.7以降のみ使用可能。
関数 | 説明 |
---|---|
|
OKボタンを持つダイアログを表示します。 コード例: mi.alert("メッセージ"); |
|
OKボタンとCancelボタンを持つダイアログを表示します。 コード例: if( mi.confirm("メッセージ") === true ) { ... } →実行結果:ユーザーがOKをクリックしたら{ }内を実行します。 |
|
1行入力可能なテキストボックスを表示します。 コード例: var str = mi.prompt("テキストを入力してください。"); →実行結果:strにユーザーが入力した文字列を格納します。 |
別のJavaScriptファイルの実行
関数 | 説明 |
---|---|
|
JavaScriptファイルをロード(スクリプト実行)します。 コード例: mi.loadModule("./script/jshint.js"); →実行結果:同じフォルダ内のscriptフォルダ内のjshint.jsの内容を実行します。 |
プラグイン制御
関数 | 説明 |
---|---|
|
プラグインを登録します。 コード例: mi.registerPlugin(modeName,"std.jshint.mimikaki.net","JSHINT",false,""); |
|
プラグインの英語以外での表示名を設定します。 コード例: mi.setPluginDisplayName(modeName,pluginId,"ja","JSHINT (JavaScript 文法チェック)"); |
|
このプラグインがONに設定されているかどうかを取得します。 コード例: if( mi.getPluginEnabled(modeName,pluginId) === true ) { (イベントリスナー登録などの処理) } |
|
このプラグインのオプション文字列を取得します。 コード例: str = mi.getPluginOptions(doc.getModeName(), "my_plugin_id"); |
|
現在ロード中の対象モードの名称を取得します。プラグインロード処理内でのみ使用可能です。 コード例: modeName = mi.getCurrentModeNameForPluginLoad(); |
イベントリスナー制御
関数 | 説明 |
---|---|
|
ドキュメント保存等のイベント発生時にコールされる関数(イベントリスナー)を登録します。 コード例: mi.addEventListener(modeName, pluginId, ["onSaved", "onOpened"], function(doc, event, parameter) { (処理)} |
|
イベントリスナーを登録解除します。 |
イベントリスナー(イベント発生時にコールされる関数)
|
イベントリスナーは、イベント発生時に左記のパラメータでmiからコールされます。 |
イベントの種類
イベント名 | パラメータ | 発生するタイミング |
---|---|---|
| 空文字列 |
ドキュメントをオープンしたとき |
| 空文字列 |
ドキュメントを保存したとき |
その他
関数 | 説明 |
---|---|
|
getText()等で得られる文字列の改行コードをCR、または、LFに変更します。 mi.setOutputLineEndCode("CR"); |
|
標準エラー出力にテキストを出力します。 コード例: mi.outputToStderr("test"); |
ドキュメントクラス
ドキュメントに対応するクラスです。
テキスト編集
関数 | 説明 |
---|---|
|
指定範囲のテキストを取得します。 コード例: text = doc.getText(s,e); |
|
指定範囲にテキストを設定します。 コード例: doc.setText(start,end,"abc"); |
|
テキスト挿入位置から、テキストポイントを取得します。 コード例: textpt = doc.getTextPointFromPos(textindex); |
|
テキストポイントから、テキスト挿入位置を取得します。 コード例: textindex = doc.getPosFromTextPoint(textpt.x,textpt.y); |
ドキュメント全体の編集
関数 | 説明 |
---|---|
|
ドキュメントの文字数を取得します。 コード例: len = doc.getLength(); |
|
ドキュメント全体のテキストを取得します。 コード例: text = doc.getContent(); |
|
ドキュメント全体にテキストを設定します。 コード例: doc.setContent("abc"); |
段落
関数 | 説明 |
---|---|
|
ドキュメントの段落数を取得します。 コード例: paraCount = doc.getParagraphCount(); |
|
段落の範囲を取得します。 コード例: pararange = doc.getParagraphRange(0); |
|
段落のテキストを取得します。 コード例: paratext = doc.getParagraphText(0); |
|
段落にテキストを設定します。 コード例: doc.setParagraphText(paraindex,"abc\n"); |
選択範囲・キャレット
関数 | 説明 |
---|---|
|
現在の選択範囲を取得します。(矩形選択・マルチカーソルの場合、複数の選択範囲が存在します。) コード例: sel = doc.getSelectionRange(); |
|
現在の選択範囲の配列を取得します。(矩形選択・マルチカーソルの場合、複数の選択範囲が存在します。) コード例: selarray = doc.getSelectionRangeArray(); |
|
現在の選択範囲の個数を取得します。(矩形選択・マルチカーソルの場合、複数の選択範囲が存在します。) コード例: selcount = doc.getSelectionCount(); |
|
現在の選択範囲のテキストを取得します。 コード例: text = doc.getSelectionText(); |
|
選択範囲を設定します。 コード例: doc.setSelectionRange(start,end); |
|
現在のキャレット位置を取得します。 コード例: pos = doc.getCaretPos(); |
|
現在のキャレット位置を設定します。 コード例: doc.setCaretPos(pos); |
ドキュメント情報
関数 | 説明 |
---|---|
|
ドキュメントのモード名を取得します。 コード例: modeName = doc.getModeName(); |
|
ドキュメントファイルのURLを取得します。 コード例: url = doc.getURL(); |
文法チェッカー
関数 | 説明 |
---|---|
|
文法チェッカーワーニングを全て消去します。 コード例: doc.clearSyntaxCheckerWarnings(); |
|
文法チェッカーワーニングを追加します。 コード例: doc.addSyntaxCheckerWarning(lineIndex,colIndex,reason,detail,2,true); |
プレビュー
関数 | 説明 |
---|---|
|
プレビューサブウインドウへ表示するHTMLを設定します。 コード例: doc.setPreviewHTML(htmlText); |
その他
関数 | 説明 |
---|---|
|
テキスト情報ウインドウに表示するテキストを設定します。 コード例: doc.setDocInfoText("情報"); |
(旧)ダイアログの表示
miバージョン3.7より、一般的なダイアログ表示関数の仕様に合わせた、alert(), confirm(), prompt()を新規追加しました。
バージョン3.6以前のshowDialog()も、互換性のため残していますが、alert(), confirm(), prompt()の方を推奨します。
関数 | 説明 |
---|---|
|
OKボタンを持つダイアログを表示します。 コード例: mi.showDialog("タイトル","メッセージ"); |
|
OKボタンを持つダイアログを表示します。 コード例: mi.showDialog("タイトル","メッセージ","おっけー"); |
|
OK, Cancelボタンを持つダイアログを表示します。 コード例: if( mi.showDialog("タイトル","メッセージ","続行","キャンセル") == "キャンセル" ) break; →実行結果:ユーザーがキャンセルをクリックしたらbreakします。 |
JavaScriptプラグイン
miのプラグインを、JavaScriptで記述することが出来ます。
拡張子.jsのファイルをモード設定フォルダの"plugins"フォルダに格納することで、mi起動時に自動的に実行されます。
このプラグインファイルに、イベントリスナーを登録するコードを記述することで、ファイルオープン時や保存時に
特定のJavaScriptコードを実行することが出来ます。
プラグインのON/OFF、オプション文字列は、モード設定の詳細タブで設定できます。
サンプル
デフォルトで添付されているプラグインです。コピー&ペースト等ご自由にご使用ください。
(使用しているライブラリについては、それぞれのライセンスに従ってください。)
ファイルはmiアプリパッケージ内のmi.app/Contents/Resources/default/(モード名)/plugins
フォルダにもあります。
Markdown用プレビュー
preview.js
Markdownモードで、プレビューを表示するプラグインです。
ファイルオープン/保存時にHTMLへ変換してプレビューに設定するイベントリスナーを登録しています。
marked.parse()
は、marked.jsの関数です。
JSHINT
syntaxchecker_jshint.js
JavaScriptモードで、文法エラーチェックツール(JSHint)の結果を表示するプラグインです。
ファイルオープン/保存時にチェックを実行するイベントリスナーを登録しています。
JSHINT()
は、JSHintの関数です。