searchで選択範囲解除No.09366
styth さん 21/05/16 16:36
 
 searchdown "〜〜〜", regular, inselect, loop;
 で、成功した時は、選択範囲が維持されて、失敗した時は、選択範囲が解除さ
れるみたいなんですが、仕様でしょうか?
 同じ選択範囲を使いたい時に、マクロで再設定するしかありませんか?

[ ]
RE:09366 searchで選択範囲解除No.09367
styth さん 21/05/16 17:14
 
>特定の範囲内だけで検索したい場合(Ver8.97対応版)
>目次− 検索系コマンド− いろいろな検索例− 特定の範囲内だけで検索したい場合
> もう一度Ctrl+Fを押すと範囲内検索は解除されます。
 これを見つけました。
 ということは、たぶん、検索で成功しても失敗しても選択範囲が解除されるの
でしょうか?

[ ]
RE:09367 searchで選択範囲解除No.09369
秀丸担当 さん 21/05/17 12:01
 

検索の「選択した範囲」で動作中の状態は、上候補/下候補(findup/finddown)をす
ると維持されますが、検索ダイアログをもう一度出すと「選択した範囲」の状態は消
えてしまいます。
成功したか失敗したかに関わらず消えるはずだと思います。

他にも検索を絞る方法があって、同じ範囲でずっと制限するとしたら、部分編集(ra
ngeeditin/rangeeditout)が簡単です。
または、制限する範囲にカラーマーカーを付けておいて、検索ダイアログの「追加の
条件」で「指定の範囲/カラーマーカー内」にする方法もあります。
これらの方法だと、検索ダイアログを出したりしても消えることはないです。

現状では無いのですが、「選択した範囲」として動作中の範囲をもう一度選択状態に
できたらいいと思います。
検索ダイアログを出したときの範囲選択の状態を「選択した範囲」のターゲットにし
ているので、もう一度選択状態にしてから検索ダイアログを出せたらいいです。
そういう方法も検討しようと思います。

[ ]
RE:09369 searchで選択範囲解除No.09370
izoka さん 21/05/17 13:53
 
>他にも検索を絞る方法があって、同じ範囲でずっと制限するとしたら、部分編集(r
>angeeditin/rangeeditout)が簡単です。

こちらについて質問なのですが
全置換でのreplace(all/fast/quick)文でも同様でしょうか?

[ ]
RE:09370 searchで選択範囲解除No.09371
秀丸担当 さん 21/05/17 15:55
 

全置換やreplaceall等でも部分編集は適用されますが、マクロの場合は、互換性によ
ってreplaceall等だけを書くと全部のテキストが対象になってしまいます。
マクロの先頭にsetcompatiblemode 0x0F;を書いておくと、replaceall等でも部分編
集を適用することができます。

[ ]
RE:09369 searchで選択範囲解除No.09372
styth さん 21/05/17 17:33
 
>現状では無いのですが、「選択した範囲」として動作中の範囲をもう一度選択状態
>にできたらいいと思います。
>検索ダイアログを出したときの範囲選択の状態を「選択した範囲」のターゲットに
>しているので、もう一度選択状態にしてから検索ダイアログを出せたらいいです。
>そういう方法も検討しようと思います。
 よろしくお願いいたします。

[ ]
RE:09369 searchで選択範囲解除No.09373
styth さん 21/05/17 18:33
 
>他にも検索を絞る方法があって、同じ範囲でずっと制限するとしたら、部分編集(r
>angeeditin/rangeeditout)が簡単です。
 できました。ありがとうございます。この方法で行けそうです。

[ ]
RE:09371 searchで選択範囲解除No.09629
styth さん 21/10/03 07:56
 
>全置換やreplaceall等でも部分編集は適用されますが、マクロの場合は、互換性に
>よってreplaceall等だけを書くと全部のテキストが対象になってしまいます。
>マクロの先頭にsetcompatiblemode 0x0F;を書いておくと、replaceall等でも部分編
>集を適用することができます。
 行の途中から範囲選択しておいて、replaceallを実行すると、部分編集が解除
されます。
 仕様でしょうか?
 そもそも、部分編集は、行単位しか適用されないので?、ということでしょうか?

[ ]
RE:09629 searchで選択範囲解除No.09633
h-tom さん 21/10/03 13:13
 
h-tom です。

> そもそも、部分編集は、行単位しか適用されないので?、ということでしょうか?

ヘルプに書いてありますよ。
> 部分編集
>  範囲選択されていない場合は、アウトライン解析に基づいて、見出しの範囲で部
>分編集モードになります。(通常の部分編集モード)
>  範囲選択されている場合は、範囲選択を行単位にした範囲で、部分編集モードに
>なります。(範囲選択による部分編集モード)

[ ]
RE:09633 searchで選択範囲解除No.09637
秀丸担当 さん 21/10/04 17:58
 

部分編集は行単位になるという仕様があります。
検索の追加の条件で、カラーマーカーを指定している場合は文字単位にできます。
マクロの場合はcolormarker文で色を付けてから、settargetcolormarkerを指定し、s
earchdown等のパラメータでincolormarkerを指定するというようになります。

searchdown等でinselectをした後は範囲選択は解除されてしまいますが、再び選択す
るコマンドとして「範囲内選択を選択」というコマンドも追加しています。
マクロではselectinselectになります。

searchdown等でinselect2の場合は文字単位ですが、事前にカラーマーカー同様にset
targetcolormarker "\x01#inselect2";をしないといけないバグがありました。すみ
ません。これは無くてもできるように修正します。

[ ]
RE:09637 searchで選択範囲解除No.09639
h-tom さん 21/10/04 23:25
 
h-tom です。

>searchdown等でinselect2の場合は文字単位ですが、事前にカラーマーカー同様にse
>ttargetcolormarker "\x01#inselect2";をしないといけないバグがありました。
>すみません。これは無くてもできるように修正します。
そういえば、たまに targetcolormarker キーワードを確認すると、セットした覚え
のない"\x01#inselect2" が見えることがありましたが、
検索の影響だったのでしょうか?

[ ]
RE:09639 searchで選択範囲解除No.09641
秀丸担当 さん 21/10/05 09:28
 

選択した範囲の文字単位で検索した後は、targetcolormarkerは上書きされていました。
inselect2とincolormarkerは両立できなくて、どちらも実際はカラーマーカーの範囲
に絞る動作になっています。
settargetcolormarkerの指定はずっと保持されるとは限らず、他の操作で上書きされ
る場合があるという仕様ということにさせていただこうと思います。
ヘルプにも書いておきます。

[ ]
RE:09637 searchで選択範囲解除No.09679
styth さん 21/10/20 09:36
 
>searchdown等でinselectをした後は範囲選択は解除されてしまいますが、再び選択
>するコマンドとして「範囲内選択を選択」というコマンドも追加しています。
>マクロではselectinselectになります。
 selectinselectを使ってみました。
 手動で、範囲選択しておいて、

 マクロで、searchdown "xxx", inselect
 同じマクロ内で、範囲選択を実施
 selectinselect

 ここで、「手動で、範囲選択」ではなくなってしまいます。
 「マクロでの範囲選択」になっています。

 多分、こういう仕様なんだと思うのですが、
 自分が想定したのは、「手動で、範囲選択」を再度、マクロで、指定できるコマン
ドとして、
 selectinselect
 が追加されたものと、思っていました。
 やはり、以前と同様で、カラーマーカーで対応するしかないのでしょうか?

 希望としては、
 selectinselectにパラメータを付けるとか、
 「手動で、範囲選択」が、マクロ内では、必ず維持されるようなことができる
設定(setcompatiblemode?)があると、マクロを作る時に色々考えなくて済ん
で有り難いのですが、やはり、無理でしょうか?

 「範囲内検索に指定」みたいに、
> 範囲選択(コピーや切り取りの対象)を、範囲内検索の範囲(検索ダイアログで
>「選択した範囲」をONにして検索する状態)にします。
> 行単位や文字単位やBOX選択や複数選択など、どのような選択状態であっても、文
>字単位の範囲内検索として指定されます。
 これは、文面を拝見する限り、かなり強力な感じがします。

>searchdown等でinselect2の場合は文字単位ですが、事前にカラーマーカー同様にse
>ttargetcolormarker "\x01#inselect2";をしないといけないバグがありました。す
>みません。これは無くてもできるように修正します。
 こちらについては、早期の公開(次期バージョンアップ)を期待しております。
(急いでいません)

[ ]
RE:09679 searchで選択範囲解除No.09680
秀丸担当 さん 21/10/20 10:42
 

マクロでの範囲選択というのは、おそらく行単位になった状態のことかと思います。
inselectを付けた場合は、行単位になるのでselectinselectも行単位になります。
inselect2を付けると文字単位のままで、selectinselectも元の文字単位のものが選
択されます。

settargetcolormarker "\x01#inselect2";をしないといけなかった問題については、
V8.99.2とV9.00β16でも修正しているので、inselect2にするといいと思います。

[ ]
RE:09680 「手動で、選択した範囲」≠ selNo.09681
styth さん 21/10/21 08:43
 
 お伝えしたいことが、伝わっていませんでした。読み返してみると、

 No.09679、での表現が間違っていました。すみません。

× 「手動で、範囲選択」
 ↓
〇「手動で、選択した範囲」

×「マクロでの範囲選択」
 ↓
〇「マクロで選択した範囲」


 なので、再度、投稿させて頂きます。

 要約すると、
 自分が想定したのは、「手動で、選択した範囲」を再度、マクロで、指定できるコ
マンドとして、
 selectinselect
 selectinselect2
 が追加されたものと、思っていました。

 マクロ内で、beginsel〜endselを実行した後、
 selectinselect2、を使っても、「手動で、選択した範囲」にはなりません。

 そこで、これを、なんとか、

 selectinselect2にパラメータを付けるとか、
 「手動で、選択した範囲」が、マクロ内では、必ず維持されるようなことがで
きる設定(setcompatiblemode?)があると、マクロを作る時に色々考えなくて
済んで有り難いのですが、やはり、無理でしょうか?

 と、申し上げたかったのですが、2度手間になってしまい、申し訳ありません。
 よろしくお願いいたします。

[ ]
RE:09681 「手動で、選択した範囲」≠ selNo.09683
秀丸担当 さん 21/10/21 15:42
 

マクロ内でbeginsel〜endselをしていて、マクロ実行後に実行前の状態にするとした
ら、inselect2のことは関係なく、いったんカラーマーカーにしておいて、終わった
らカラーマーカーを選択するようにする方法が考えられます。

#fSelected = 0;
if(selecting){
  colormarker 0xff/*例として赤い文字*/,-1,1,0,0,"mykeepselect";
  #fSelected = 1;
}

//ここから適当な処理
gofiletop;
searchdown "a";
escape;
beginsel;
right 3;
endsel
message "aから3文字選択";
//ここまで適当な処理

if(#fSelected){
  escape;
  selectcolormarker "mykeepselect";
  deletecolormarkerall "mykeepselect";
}
endmacro;


そういうことではなく、マクロ実行前の範囲に絞ってinselect2を付けて範囲内を検
索し、終わったらマクロ実行前の範囲を再び選択するのであれば、 selectinselect
をするといいです。

if(selecting){
  searchdown "a",inselect2;
  message "検索後";
  selectinselect;
}
endmacro;

[ ]