やりなおし操作No.04259
nao123 さん 04/04/22 14:53
 
ショートカット ctrl+z で操作のやり直しができると思いますが
たとえば、マクロ操作をして、そのマクロを操作する前の段階に
戻したいとしてctrl+ zをするとマクロのスクリプト1行前に戻る
みたいで操作全体でみてくれないようです。

たとえば、一括置換して文字を修正してもctrl+zでは一括置換する前に
戻るわけではなく、最後に置換処理された内容だけが戻るみたいです。

これって秀丸というよりはwinOSレベルの問題でしょうか?

ちょっとマクロのフォーラムというよりは基本操作の部類に入るかもしれませんがよ
ろしくおねがいいたします。

[ ]
RE:04259 やりなおし操作No.04262
ENCODINGSHIFTJIS さん 04/04/22 16:26
 
データ処理風の大粒度のものなら、細かい技を駆使するより、一時ファイルに書き出
して置くのが簡単です、ファイルの世代保存みたいにすると完璧です。

段落整形(流し直し)のような中粒度のものなら、マクロ開始時に
開始マークを書き込み、即削除します。
マクロ結果の取り消しは、復帰を繰り返してカーソル直下にマークが出現した後まで
とします。
マークとしてはJISの外字1文字程度で十分です。

潔癖性ならマクロ実行時刻とか、いろいろ工夫します。

この形は段落整形のマクロを読むと見えると思います。
マクロ集で復帰取り消しを持っているのを探しましょう。

[ ]
RE:04262 やりなおし操作No.04264
nao123 さん 04/04/22 16:38
 
コメントありがとうございます。
マクロ初心者ですので、簡単なinsert程度のスクリプトであれば
わかりますが、、

>データ処理風の大粒度のものなら、細かい技を駆使するより、一時ファイルに書き
>出して置くのが簡単です、ファイルの世代保存みたいにすると完璧です。
>段落整形(流し直し)のような中粒度のものなら、マクロ開始時に
>開始マークを書き込み、即削除します。
>マクロ結果の取り消しは、復帰を繰り返してカーソル直下にマークが出現した後ま
>でとします。
>マークとしてはJISの外字1文字程度で十分です。
>
>潔癖性ならマクロ実行時刻とか、いろいろ工夫します。

ちょっとこちらは自分では対応しきれないので、

>この形は段落整形のマクロを読むと見えると思います。
>マクロ集で復帰取り消しを持っているのを探しましょう。

こちらの方でどなたかが書いたものを参照しながら設定してみたいと思います。

[ ]
RE:04259 やりなおし操作No.04265
tnobu2 さん 04/04/22 16:46
 
>ショートカット ctrl+z で操作のやり直しができると思いますが
>たとえば、マクロ操作をして、そのマクロを操作する前の段階に
>戻したいとしてctrl+ zをするとマクロのスクリプト1行前に戻る
>みたいで操作全体でみてくれないようです。

秀丸のマクロは、人の操作を自動化しているイメージなので、このような
動きになっているんだと思います。
他のアプリでもこのような動きをするものは少なくないと思います。

[ ]
RE:04264 やりなおし操作No.04266
Iranoan さん 04/04/22 18:38
 
 nao123 さん今日は、Iranoan です。
> たとえば、一括置換して文字を修正してもctrl+zでは一括置換する前に
> 戻るわけではなく、最後に置換処理された内容だけが戻るみたいです。
に関しては、要望リストには入っているようです。
http://hidemaruo.dip.jp:81/hidesoft/hidesoft_2/x01681.html#1700
 またマクロによる、まったく別のアプローチがあります。参考までに、マク
ロを末尾に付けておきます。
//一括置換を元に戻す macro
//実際に undo を遣ってみて、カーソル位置に検索語が有るかで終了判定
//「選択した範囲内のみ」の場合は、``「選択した範囲のみ」で動作中の範囲
//を中間色で表示'' が ON でないと上手くいかない
disabledraw;
if(searchbuffer == "")endmacro;
undo;
if( !result )goto Error;
#s = searchoption;
setsearch searchbuffer, #s&251;
#select = colorcode & 0x100;
#by = 10000000;
while(1){
  #x = x;
  #y = y;
  finddown2;
  if( #by < y || ((#x != x || #y != y) && (!(#select&colorcode&0x100)))){
    redo;
    break;
  }
  undo;
  if( !result )goto Error;
  #by = y;
}
setsearch searchbuffer, #s;
endmacro;

Error:
  if(updated)message "アンドゥ・バッファが足りない!";

[ ]
RE:04266 やりなおし操作No.04267
nao123 さん 04/04/22 21:18
 
こんばんわ、Iranoanさん、
マクロ作成支援使わせてもらってます。
部分的にカスタマイズとかできてすごく便利ですね(^^


> nao123 さん今日は、Iranoan です。
>> たとえば、一括置換して文字を修正してもctrl+zでは一括置換する前に
>> 戻るわけではなく、最後に置換処理された内容だけが戻るみたいです。
>に関しては、要望リストには入っているようです。
>→http://hidemaruo.dip.jp:81/hidesoft/hidesoft_2/x01681.html#1700

あー検索かけてみたんですが、要望リストにあったとは。。
あとから気づいたのですが、メニューの編集に最初からやり直しというのが
あるみたいですね。とりあえづ、これで対応できる部分については
そうしたいと思います。

ただし、マクロとなるとそうはいかないと思うので、
以下のスクリプトを試させていただけたらと思います。
ありがとうございます。やってみます。

> またマクロによる、まったく別のアプローチがあります。参考までに、マク
>ロを末尾に付けておきます。
>//一括置換を元に戻す macro
>//実際に undo を遣ってみて、カーソル位置に検索語が有るかで終了判定
>//「選択した範囲内のみ」の場合は、``「選択した範囲のみ」で動作中の範囲
>//を中間色で表示'' が ON でないと上手くいかない
>disabledraw;
>if(searchbuffer == "")endmacro;
>undo;
>if( !result )goto Error;
>#s = searchoption;
>setsearch searchbuffer, #s&251;
>#select = colorcode & 0x100;
>#by = 10000000;
>while(1){
>  #x = x;
>  #y = y;
>  finddown2;
>  if( #by < y || ((#x != x || #y != y) && (!(#select&colorcode&0x100)))){
>    redo;
>    break;
>  }
>  undo;
>  if( !result )goto Error;
>  #by = y;
>}
>setsearch searchbuffer, #s;
>endmacro;
>
>Error:
>  if(updated)message "アンドゥ・バッファが足りない!";

[ ]