|
ohtorii さん、こんにちは。ユーザの IKKI です。
> 選択が解除された状態でマクロが呼ばれるようです。
編集後タイマは編集が終わった後で呼ばれるものなので、仕様通りですね。
> 何かいい手がないでしょうか。
●解1:
//------------------------------------------------------------
##c = column - 1;
##e = strlen(gettext2(column, lineno, linelen2, lineno));
undo;
undo;
$$s = gettext2(##c, lineno, linelen2 - ##e, lineno);
redo;
redo;
begingroupundo;
insert $$s + "閉じ括弧";
endgroupundo;
//------------------------------------------------------------
ただし、次のような場合を考えると、もっと複雑なマクロが必要です。
・入力された文字が ASCII 1 文字でない場合
・選択範囲が複数行にまたがっている場合
・BOX 選択の場合
・行内にサロゲートペアや合字がある場合
・カーソルから行末までが文字列変数に収まりきらないほど長い場合
●解2: 自動起動マクロ「編集前」の追加を秀丸担当さんにお願いする。
●解3: キーボードフック系の常駐ソフトを使ってキーコードを書き換える。
例えば AutoHotkey で次のスクリプトを作って常駐させておき、秀丸側では
Ctrl+8 に括弧で囲むマクロを割り当てれば、目的の使い心地が得られます。
;------------------------------------------------------------
#IfWinActive ahk_class Hidemaru32Class
+8:: Send, ^{8}
;------------------------------------------------------------
●解4: あきらめる。
私も一時期 Eclipse の真似事がしたくなり、編集後タイマを駆使していろいろ
頑張ってみたりもしたのですが、補完でコケたりキーリピートが遅くなったりと
弊害が多かったため、編集後タイマの活用はあきらめました。
その代わり、Ctrl キーを押しやすい位置に配置した上で、たとえば
・Shift+8 = 「(」を入力 (標準の動作)
・Ctrl+8 = 「()」で囲む
のように連想しやすいキー割り当てをして、手動で使い分けています。
> 本マクロで行なった編集を1回のundo動作で元に戻したいのですが
> 出来ませんでした。(2回のundoで元に戻ります)
> こちらも、何かいい手がないでしょうか。
上述のように begingroupundo; と endgroupundo; を組み合わせて使います。
# マクロ内で undo する場合は、ひょっとすると注意が必要かもしれません。
# 現在のバージョンでは大丈夫ということになっていますが…
# 参照 http://www.maruo.co.jp/turukame/3/x04531_.html
|
|