|
こんにちは。IKKI です。
Eclipse のコードエディタっぽい動きをさせようとしてハマりました。
編集後タイマの使い方の勘所がわかっておりませんで…よろしければご教示ください。
●目的
開き括弧の後に閉じ括弧を自動的に挿入したい
●手順
1. 自動起動マクロの編集後タイマに下記のテストマクロを設定し、遅延時間を 0ms
にする
2. 単語補完の設定で [リアルタイム入力] を OFF にする
3. 単語補完を実行し、例えば「hoge」という候補を選んだ状態で「[」キーを押す
●テストマクロ
--------
// 1.mac
if (iskeydown(0xDB)) insert "]";
--------
// 2.mac
if (autocompstate & 0x01) endmacro;
if (iskeydown(0xDB)) insert "]";
--------
// 3.mac
if (geteventparam(2)) endmacro;
if (iskeydown(0xDB)) insert "]";
--------
// 4.mac
if (autocompstate & 0x01) endmacro;
if (geteventparam(2)) endmacro;
if (iskeydown(0xDB)) insert "]";
--------
●期待する結果
hoge[]
●実際の結果
]hoge ← 1.mac
]hoge ← 2.mac
hoge] ← 3.mac
hoge ← 4.mac
●質問
入力された文字に応じて入力内容に手を加えるマクロを作る場合、どのような作りに
するのが常道でしょうか。
なんだか iskeydown() を使うのは邪道な気がしてきました。遅延時間が 0ms 以外だ
と使えないし。
かといって、いちいち left; して code を見るのもいかがなものかと… (再描画が
煩わしいし、left; が失敗する場合を考慮しなきゃだし、遅延時間が 0ms 以外だと
入力されたのが 1 文字だけとは限らないし、etc...)。
皆さんはどのようにしていらっしゃいますか。
●提案
ほんの思いつきですが…
次のような機能があるとこの手のマクロが作りやすくなる気がします。
案1. 編集後タイマで、前回実行以降に入力された文字列を geteventparam() で取得
できるようにする。
案2. 自動起動マクロに「編集直前」を追加する。これから行おうとしている編集内
容を geteventparam() で取得できるようにする。
以上、ご教示のほどよろしくお願いいたします。
秀丸エディタ v8.00β26
|
|