マクロ中断のメッセージNo.09527
ひろ さん 01/08/31 17:53
 
 皆さん今日は、ひろです。
 マクロ動作中に画面をクリックするなどすると、disablebreak を使って
いない限り、マクロを中断するかの問い合わせメッセージが現れます。この
時 [はい] を選択した場合、当然マクロは中断するのですが、この時はマク
ロコマンドでいうと endmacro と同様のようです。個人的には、endmacroall
と同じ処理の方が良いと思うのですが、皆さんはどう思われますか。

 秀丸担当さんへ
 皆さんからの反対意見がなければ、endmacroall と同様の処理になるよう
に要望として出させて頂きたいと思います。

[ ]
RE:09527 マクロ中断のメッセージNo.09535
安久津 さん 01/09/01 06:11
 
こんにちは ひろさん、安久津です。

> マクロ動作中に画面をクリックするなどすると、disablebreak を使って
>いない限り、マクロを中断するかの問い合わせメッセージが現れます。この
>時 [はい] を選択した場合、当然マクロは中断するのですが、この時はマク
>ロコマンドでいうと endmacro と同様のようです。個人的には、endmacroall
>と同じ処理の方が良いと思うのですが、皆さんはどう思われますか。
 endmacro と同様な処理の方が良いです。(^^;)

● 長時間実行マクロの作成での問題。
処理時間が非常に長いマクロ「chintara.mac」があったとします。
あんまり長くかかるので、途中で ESC キーを押して止めちゃいました。
そしたら、問題が起こりました。

(1)カーソル移動キーの → を押しても、改行を超えて、次の行へカーソルが
   移動しなくなった。
(2)フリーカーソルモードになった。
(3)検索では「点滅」にしているのに「選択」になった。
(4)自動インデントを ON にしていたのに、OFF になった。
(5)強調表示が OFF になってしまった。
(6)検索バッファーの中身が変わってしまった。

これは「chintara.mac」で、
(1)writeregnum "CursorBreakCR", 0;
(2)freecursorswitch;
(3)writeregnum "SelectFound", 1;
(4)config "i0";
(5)config "y-";
(6)searchdown "hoge";
などを行っているからです。

「chintara.mac」の構造。
------------------------------
編集用の環境変更。
長時間の処理。
編集用の環境を元に戻す。
------------------------------

● 解決方法。
「chintara.mac」を2つのマクロに分割します。
「main.mac」と「chintara.mac」とします。

「main.mac」の構造。
------------------------------
編集用の環境変更。
execmacro "chintara.mac";
編集用の環境を元に戻す。
------------------------------

「chintara.mac」の構造。
------------------------------
長時間の処理。
------------------------------

んで、main.mac を実行すれば、chintara.mac 実行時に ESC で途中終了
されても、環境が元に戻ることになります。
これは、ESC によるマクロの終了が endmacro と同様の効果だからです。
 endmacroall と同じだったら環境は元に戻りません。

● 大規模マクロの問題。
上記のように ESC によるマクロ終了でも環境を元に戻せる構造をもった、
大規模マクロを作成します。

「dekai.mac」の構造。
------------------------------
編集用の環境変更。
execmacro "a.mac";
execmacro "b.mac";
execmacro "c.mac";
編集用の環境を元に戻す。
------------------------------

「dekai.mac」実行中に処理すべきファイルの間違いに気がつきました。
 実行中に ESC で終了させました。
ところが、処理は続行されています。
「なんでじゃー、とまれー、ヤメテケロー」です。
「a.mac」実行中に ESC での終了を行った場合、( タイミングによっては )
あと2回 ESC で終了させなければなりません。

と言うわけで、ひろさんは、このことを問題にしているのだと思います。(^^;)
 ESC によるマクロの終了が endmacroall と同様になって欲しい理由だと思います。

● 解決方法。

「dekai.mac」の構造。
------------------------------
編集用の環境変更。
execmacro "a.mac";
if( ! getininum($$ini,"submacro","exit") ){
  execmacro "b.mac";
  if( ! getininum($$ini,"submacro","exit") ){
    execmacro "c.mac";
  }
}
編集用の環境を元に戻す。
------------------------------

そして「a.mac」「b.mac」「c.mac」の処理はじめには、
writeininum $$ini,"submacro","exit",1;
としておいて、
終了直前に、
writeininum $$ini,"submacro","exit",0;
とします。

ちょっと面倒ですが。(^^;)
私は愚直にもこれをやっています。でかいマクロはみんなそうなっています。
公開しているものだと以下。ちょっと手抜きがありますが。
cf "http://www.vector.co.jp/soft/win95/writing/se175270.html"

● 代替。
(1)各マクロ共通に利用できるグローバル変数なんか用意してくれると
   助かるのですが。
(2)でなかったら、execmacro "hoge.mac"; が正常終了なのか、途中終了なのか
   判別できるように result の値を設定して欲しい。

では。

[ ]
RE:09535 マクロ中断のメッセージNo.09546
ひろ さん 01/09/01 23:09
 
 安久津さん今日は、ひろです。
>  endmacro と同様な処理の方が良いです。(^^;)
 詳細な説明も入れて頂き有り難うございました。現在の仕様の方が好みの
方がいらっしゃるようなので、現在の仕様のままで構いません。

[ ]