マクロでの「選択した範囲内のみ」についNo.05876
Ashgrove さん 10/07/28 05:32
 
いつもお世話になっています。


適当に範囲選択し、以下のような内容のマクロを実行してから
「やり直し」を行った場合、

[ test.mac ]
---------------------------------------------------------
$sb = searchbuffer;
#so = searchoption;
$rb = replacebuffer;
begingroupundo;
replaceallfast ".", "", regular, inselect, nohilight;
escapeinselect;
setsearch $sb, #so;
setreplace $rb;
endgroupundo;
endmacro;
---------------------------------------------------------

マクロ実行時に選択していた範囲が、「選択した範囲内のみ」で
検索・置換を実行した時のように、薄い範囲選択色となります。

マクロ実行前と同じ状態になる動作を期待しているのですが、
そのようにするには、どうすれば良いでしょうか?


使用しているバージョンは、8.01β13です。

宜しくお願いします。

[ ]
RE:05876 マクロでの「選択した範囲内のみNo.05879
秀丸担当 さん 10/07/28 11:31
 

マクロの通りにして試してみたところ、言われている通り「選択した範囲内の
み」の状態が残ってしまっていました。
この場合、やり直ししたら「選択した範囲内のみ」の状態も戻せないか検討させ
ていただきます。
現状でやるとしたら、少々無理矢理ではありますが以下のようにしてみたらでき
ました。

$sb = searchbuffer;
#so = searchoption;
$rb = replacebuffer;
begingroupundo;
#x1=seltopx;
#y1=seltopy;
#x2=selendx;
#y2=selendy;
insert "";
moveto #x1,#y1;
beginsel;
moveto #x2,#y2;
replaceallfast ".", "", regular, inselect, nohilight;
escapeinselect;
setsearch $sb, #so;
setreplace $rb;
endgroupundo;
endmacro;

[ ]
RE:05879 マクロでの「選択した範囲内のみNo.05883
Ashgrove さん 10/07/29 00:51
 
Ver8.01β14にて、修正されていることを確認しました。

ありがとうございます!

[ ]
RE:05883 マクロでの「選択した範囲内のみNo.05887
Ashgrove さん 10/07/30 01:13
 
もっと早く気がついていれば良かったのですが…

Version 8.01(正式版)のsearchdownやsearchup、replacedown等でも
同様の事象が起こるようです。

以下、テスト用のマクロです。


[ test.mac ]
-------------------------------------------------------------------------------
begingroupundo;
$sb = searchbuffer;
#so = searchoption;

menu
 "&1 searchdialog",
 "&2 searchdown",
 "&3 searchdown2",
 "&4 searchup",
 "&5 searchup2",
 "&6 replacedialog",
 "&7 replacedown",
 "&8 replaceup",
 "&9 replaceall",
 "&A replaceallfast",
;
#result = result;
if (#result ==  1) searchdialog   ".",     regular, inselect, nohilight;
if (#result ==  2) searchdown     ".",     regular, inselect, nohilight;
if (#result ==  3) searchdown2    ".",     regular, inselect, nohilight;
if (#result ==  4) searchup       ".",     regular, inselect, nohilight;
if (#result ==  5) searchup2      ".",     regular, inselect, nohilight;
if (#result ==  6) replacedialog  ".", "", regular, inselect, nohilight;
if (#result ==  7) replacedown    ".", "", regular, inselect, nohilight;
if (#result ==  8) replaceup      ".", "", regular, inselect, nohilight;
if (#result ==  9) replaceall     ".", "", regular, inselect, nohilight;
if (#result == 10) replaceallfast ".", "", regular, inselect, nohilight;

insert "Test";

escapeinselect;
setsearch $sb, #so;
endgroupundo;
undo;
endmacro;
-------------------------------------------------------------------------------

対応頂いた9番目と10番目を除く、1〜8番目で、
「選択した範囲内のみ」の設定が残っています。

(もしかしたら他のパターンも?)


以上、宜しくお願い致します。

[ ]
RE:05887 マクロでの「選択した範囲内のみNo.05888
秀丸担当 さん 10/07/30 11:14
 

>Version 8.01(正式版)のsearchdownやsearchup、replacedown等でも
>同様の事象が起こるようです。

他のパターンも報告ありがとうございます。
searchdown等の検索はやり直しの対象ではないので仕方ないですが、
replacedown等のほうは、replaceallと同様にしたほうがいいと思います。
次に出すV8.02βのほうで修正させていただきます。

現状で回避するには、前のコメントのときと同様にbegingroupundoの直後に

#x1=seltopx;
#y1=seltopy;
#x2=selendx;
#y2=selendy;
insert "";
moveto #x1,#y1;
beginsel;
moveto #x2,#y2;

と入れておくとinsert""した時点の状態に戻すことができて、この方法を使うと
searchdown等の検索の場合にも対応できました。

[ ]
RE:05888 マクロでの「選択した範囲内のみNo.05889
Ashgrove さん 10/07/31 14:02
 
了解しました。

宜しくお願い致します。

[ ]