【要望】検索後の動向に関しましてNo.08921
AQUAPiT さん 05/12/13 13:36
 
検索後の動向に関しましてですが、秀丸マクロ上にて検索ヒットした
文字列を対象に処理が行われるようなものの場合、作者の意図した結
果が得られないことが確認されています。

動作環境にて検索での表示を「点滅表示」にしていた場合、秀丸マク
ロ上にて鍵となる文字列を検索し、検索ヒットした文字列の選択範囲
を縮小、拡大した後、目的の処理を行わすようなマクロでは点滅表示
のため選択終了座標が取得できず作者の意図とは反した動作をしてし
まいます。
このため、マクロを使用する人の環境によっては正常動作しないといった
感じとなっています。

この検索後の点滅表示に関するマクロでの動向を選択範囲と同様で
検索ヒットした文字列の終了座標を取得できるようにはできません
でしょうか?

「カーソル座標 + 文字列の長さ」で求めれると言われればそれで
終わりですが、こういった検索を利用するマクロを利用する場合
マクロ作者に対して不具合報告としてあがってくるか、自分で修正
を加えるかするしかないので。

(例)
golinetop;
beginsel;
golineend;
endsel;

#sx1 = seltopx;
#sy1 = seltopy;
#ex1 = selendx;
#ey1 = selendy;

searchdown "0x[0-9A-Fa-f]+," , regular, inselect, nohilight;
if (result) {
    #sx2 = seltopx;
    #sy2 = seltopy;
    #ex2 = selendx;
    #ey2 = selendy;
} else {
    #sx2 = 0;
    #sy2 = 0;
    #ex2 = 0;
    #ey2 = 0;
}

// デバッグ(座標表示)
message "【行選択時】\n" +
        "開始 (X, Y) = (" + str(#sx1) + ", " + str(#sy1) + ")\n" +
        "終了 (X, Y) = (" + str(#ex1) + ", " + str(#ey1) + ")\n\n" +
        "【検索選択】\n" +
        "開始 (X, Y) = (" + str(#sx2) + ", " + str(#sy2) + ")\n" +
        "終了 (X, Y) = (" + str(#ex2) + ", " + str(#ey2) + ")\n\n";

上記は、C言語などの配列(テーブル)の1行を選択したのち、
その中から16進数を探し出した後、何か処理をさせるといった
感じの場合の一部分を座標だけテスト表示するようにしたものです。

配列が200を超えるスイッチテーブルなどのような組み込み系で
扱うものに関してスイッチの座標がずれた場合などマクロにて自動
で変更させたりする場合役立つのですが、動作環境によっては最初
に述べたような感じなので、マクロでの seltopx などの動向を変え
れるようでしたらよろしくお願いいたします。

[ ]
RE:08921 【要望】検索後の動向に関しましNo.08922
Iranoan さん 05/12/13 13:45
 
 AQUAPiT さん今日は、Iranoan です。
> 動作環境にて検索での表示を「点滅表示」にしていた場合、秀丸マク
> ロ上にて鍵となる文字列を検索し、検索ヒットした文字列の選択範囲
> を縮小、拡大した後、目的の処理を行わすようなマクロでは点滅表示
> のため選択終了座標が取得できず作者の意図とは反した動作をしてし
> まいます。
 マクロ内で動作環境を一時的に変更して対処することも出来ますが、少なく
とも最新版なら
>     #sx2 = seltopx;
>     #sy2 = seltopy;
>     #ex2 = selendx;
>     #ey2 = selendy;
を、
    #sx2 = foundtopx;
    #sy2 = foundtopy;
    #ex2 = foundendx;
    #ey2 = foundendy;
とすれば良いです。

[ ]
RE:08922 【要望】検索後の動向に関しましNo.08925
秀丸担当 さん 05/12/13 18:00
 

検索にヒットした範囲は、Iranoanさんのおっしゃる通り、foundtopxなどででき
ます。

foundtopxなどは関係なく、「検索での表示」に依存するマクロでどの環境でも
実行できるようにするには、レジストリを書き換えてenvchangedをするというの
が一応の解決策となっています。あまりエレガントではありませんが。
以下のような感じにして動作環境を変更できます。

openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
writeregnum "SelectFound",0;
closereg;
envchanged;

[ ]
RE:08925 【要望】検索後の動向に関しましNo.08996
AQUAPiT さん 05/12/22 18:16
 
>
>検索にヒットした範囲は、Iranoanさんのおっしゃる通り、foundtopxなどででき
>ます。
>
>foundtopxなどは関係なく、「検索での表示」に依存するマクロでどの環境でも
>実行できるようにするには、レジストリを書き換えてenvchangedをするというの
>が一応の解決策となっています。あまりエレガントではありませんが。
>以下のような感じにして動作環境を変更できます。
>
>openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
>writeregnum "SelectFound",0;
>closereg;
>envchanged;

上記のものを参考に、レジストの情報を元に処理を切り替える
ような処理に切り替えてみます。

[ ]