setcompatiblemode 0x20000; についてNo.31577
K'zawa さん 12/10/15 13:36
 
こんにちは、K'zawaです。

「setcompatiblemode 0x20000;」ですが、

1. grepfilebufferは元に戻さないのでしょうか?

2. ヘルプにあるような、「マクロ実行前の検索条件」ではなく、
 マクロ内で、初めて0x20000フラグが立ったsetcompatiblemodeを
 実行した時点の検索条件ではないでしょうか?

3. 以降のsetcompatiblemodeで、0x20000フラグが立っていてもいなくても、
 記憶した条件は変化しないと理解してよろしいでしょうか?

4. マクロ終了時点で0x20000フラグが立っていれば、記憶した条件に戻す、
 なければ戻さないということでよいでしょうか?

[ ]
RE:31577 setcompatiblemode 0x20000; にNo.31583
秀まるお2 さん 12/10/15 14:56
 
> 1. grepfilebufferは元に戻さないのでしょうか?

 現状やってませんでしたが、せっかくなので、次のβ版からは戻すように修正
させていただきます。

> 2. ヘルプにあるような、「マクロ実行前の検索条件」ではなく、
>  マクロ内で、初めて0x20000フラグが立ったsetcompatiblemodeを
>  実行した時点の検索条件ではないでしょうか?

 すみません。たしかにおっしゃる通り、setcompatiblemodeを実行した瞬間の
状態を保存してました。

 ヘルプの方を修正させていただきます。

> 3. 以降のsetcompatiblemodeで、0x20000フラグが立っていてもいなくても、
>  記憶した条件は変化しないと理解してよろしいでしょうか?

 基本的にsetcompatiblemodeはマクロの先頭で1回実行するだけの前提のつも
りだったので、マクロの途中で実行したらどうなるかは考えてませんでした。

 ソースコードを見直した所、「setcompatiblemode 0x20000;」を実行する度に、
その瞬間の検索条件がバックアップされるようです。なので、現状だと、マクロ
の途中で実行すれば、そのたびに検索条件のバックアップが書き換えられます。

> 4. マクロ終了時点で0x20000フラグが立っていれば、記憶した条件に戻す、
>  なければ戻さないということでよいでしょうか?

 実は、「保存する」って動作とは別に、マクロ終了時点で「復元するかどう
か」の判定の時も、0x20000のフラグを見ています。なので、setcompatiblemode
で0x20000を指定しても、マクロ終了前にフラグをクリアしていれば、検索条件
は復活しません。

 これまたヘルプに追加記述させていただきます。

------------------------------------------------------------------------

 っと思った所ですが、もしかして、例えばマクロからマクロを起動した場合と
かで、呼び出された側のマクロが「setcompatiblemode 0;」を実行してたりして、
それの結果、検索条件がうまく復元されないことがあって、それが都合が悪いっ
て話だったりするでしょうか。

 もしそうだとしたら、一度0x20000の指定をしたら、後は0を指定しても必ず検
索条件が復元されるように仕様変更してもいいです。

 setcompatiblemode 0x20000;を複数回実行しても、バックアップされるのは一
番最初だけにするのもセットでやるべきかと思います。

 そういう仕様の方がいいような気がしてきました。

 どうしましょうか。

[ ]
RE:31583 setcompatiblemode 0x20000; にNo.31584
Iranoan さん 12/10/15 16:04
 
 秀まるおさん今日は、Iranoan です。
 既存のマクロを execmacro で繋ぐだけで、自分ではルーチンを書かない人
もいるでしょうから、
>  setcompatiblemode 0x20000;を複数回実行しても、バックアップされるのは一
> 番最初だけにするのもセットでやるべきかと思います。
>
>  そういう仕様の方がいいような気がしてきました。
の方が良いと思います。

[ ]
RE:31583 setcompatiblemode 0x20000; にNo.31585
K'zawa さん 12/10/15 16:53
 
秀まるおさん、こんにちは。
K'zawaです。

>> 1. grepfilebufferは元に戻さないのでしょうか?
>
> 現状やってませんでしたが、せっかくなので、次のβ版からは戻すように修正
>させていただきます。

ありがとうございます。

>> 2. ヘルプにあるような、「マクロ実行前の検索条件」ではなく、
<略>
> ヘルプの方を修正させていただきます。

よろしくお願いします。

> ソースコードを見直した所、「setcompatiblemode 0x20000;」を実行する度に、
>その瞬間の検索条件がバックアップされるようです。なので、現状だと、マクロ
>の途中で実行すれば、そのたびに検索条件のバックアップが書き換えられます。

ということは、タイミング的な問題でしょうか。

setcompatiblemode 0x20000;
replaceallfast "a", "x";
setcompatiblemode 0;
replaceallfast "b", "y";
setcompatiblemode 0x20000;
replaceallfast "c", "z";

のように短時間に切り替えると、マクロ実行前の状態が再現されます。

> もしかして、例えばマクロからマクロを起動した場合とかで、
>呼び出された側のマクロが「setcompatiblemode 0;」を実行してたりして、
>それの結果、検索条件がうまく復元されないことがあって、それが都合が悪いっ
>て話だったりするでしょうか。

マクロからマクロは気になっていましたが、まだ検証してませんでした。

> もしそうだとしたら、一度0x20000の指定をしたら、後は0を指定しても必ず検
>索条件が復元されるように仕様変更してもいいです。
>
> setcompatiblemode 0x20000;を複数回実行しても、バックアップされるのは一
>番最初だけにするのもセットでやるべきかと思います。
>
> そういう仕様の方がいいような気がしてきました。

setcompatiblemode文的には異例ですが、0x20000導入のいきさつからその方が
いいと思います。
細かい制御を必要とする場合、従来の、searchbuffer他を変数に格納しておいて、
後でセットし直す方法で代用できるからです。

[ ]
RE:31585 setcompatiblemode 0x20000; にNo.31587
秀まるお2 さん 12/10/15 21:35
 
 Iranoanさんの話と重なりますが、やはり「setcompatiblemode 0x20000;」は、
一度実行したら、あとで「setcompatiblemode 0x00000;」等を実行しても検索条
件を復元するのはやめないって風にします。

 あと、setcompatiblemode 0x20000;を複数回実行しても、検索バッファの待避
自体は一番最初の瞬間だけ実行されるようにします。

 ヘルプの方も、そういう前提で修正させていただきます。

[ ]