1マクロを1回のUndoでできますか?No.03088
ナナペバ さん 02/03/27 14:10
 
マクロ会議室では初投稿です.
はじめまして.
ナナペバです.

”現在のカーソル位置がある文字数(80文字)より小さければ,
 その文字数までタブを繰り返し入力し,
 文字数を超えていたら20で割り切れる文字数までタブを入力する”

というマクロを作ったのですが,
このマクロを起動した後,
Undoすると,タブ文字が一つずつ消えます.

Undoした場合,マクロを起動する直前の状態に戻って欲しいのですが,
その方法はあるのでしょうか?
どのようにしたらいいでしょうか?

よろしくお願いします.

マクロのソースは以下の通りです.

============ここから==============

#Ttabs=80;

if (x > 80)
{
#Tmod = x % 20;
if (#Tmod == 0)
{
#Ttabs = x;
}
else
{
#Tmod = 20 - #Tmod;
#Ttabs = x + #Tmod;
}
}

while(x < #Ttabs)
{
tab;
}

endmacro;

============ここまで==============

[ ]
RE:03088 1マクロを1回のUndoでできますNo.03089
ながさわ さん 02/03/27 14:37
 
長澤です。

>Undoすると,タブ文字が一つずつ消えます.
>
>Undoした場合,マクロを起動する直前の状態に戻って欲しいのですが,
>その方法はあるのでしょうか?

マクロの挿入系のコマンドは、1回のアンドゥで1センテンス分戻されますので、1
回の挿入コマンドのみでマクロが完結すれば、お望みの動作になります。
見たところwhileループでtabを繰り返して発行しているようですので、ここを$tabs
= $tabs + "\t";等のようにし、最後にinsert $tabs;とかってすればokだと思います。

[ ]
RE:03089 1マクロを1回のUndoでできますNo.03090
ナナペバ さん 02/03/27 15:09
 
ナナペバです.

>マクロの挿入系のコマンドは、1回のアンドゥで1センテンス分戻されますので、
>1回の挿入コマンドのみでマクロが完結すれば、お望みの動作になります。
>見たところwhileループでtabを繰り返して発行しているようですので、ここを$tabs
> = $tabs + "\t";等のようにし、最後にinsert $tabs;とかってすればokだと思いま
>す。

そのようにしたところ,お望みの動作になりました.
ありがとうございました.

[ ]