[ 新規に投稿する ]

検索してヒットした範囲を取得したいNo.10762
楽をしたい さん 25/11/04 03:38 [ コメントを投稿する ]
  例えば URL の開始位置は

searchdown2 "https?://", regular, nocasesense ;
#hy = y ; #hx = x ;

で取得できています。
では

searchdown2 https?://[\\c/:%#\\$&\\?\\(\\)~\\.=\\+\\-]+", regular, nocasesense, hilight ;

で末尾位置も含めて範囲を取得するにはどうすればいいですか?
検索文に hilight は必要ですか?

hilight を付けて試作マクロを実行したところ強調表示はされていました。
ただ、対象文字列長が可変なので末尾位置の特定方法が解りません。
範囲選択のseltopx~selendyのようなキーワードが存在すると助かるのですが。

試しにselectingを試してみたのですが、選択されている訳ではないので判定に使う事すらできませんでした。
なのでseltopx~selendyも使えないのでは?と考えています。

宜しくお願いします。
[ ]
RE:10762 検索してヒットした範囲を取得したいNo.10763
秀丸担当 さん 25/11/04 09:42 [ コメントを投稿する ]
  検索でヒットした範囲は、foundtopx foundtopy foundendx foundendy のキーワードで取得できます。

または、[その他]→[動作環境]→[検索]→[検索での表示]が[範囲選択]になっている場合は、範囲選択と同じになるので、selendx selendy等でも終端が取得でき舞う。
動作環境が違うとできませんが、マクロの先頭でsetcompatiblemode 0x00000200;をしておくと、動作環境に依存せず、マクロ内では[範囲選択]として動作させることもできます。
[ ]
RE:10763 検索してヒットした範囲を取得したいNo.10764
楽をしたい さん 25/11/05 00:55 [ コメントを投稿する ]
  ありがとうございます。

[その他]→[動作環境]→[検索]→[検索での表示]のが[検索での表示]がありません。バージョンアップで名称が変わったと思われますがどれになりますか?

これから試作してみます。

宜しくお願いします。
[ ]
RE:10764 検索してヒットした範囲を取得したいNo.10765
秀丸担当 さん 25/11/05 09:06 [ コメントを投稿する ]
  わかりづらくすみません。
[その他]→[動作環境]→[検索]の設定のページの中に、[検索での動作]というグループ(枠)があって、そこに以下のような[検索での表示]があります。

検索での表示(B): ◎点滅表示 〇範囲選択

ヘルプで検索する場合は、[キーワード(N)]のタブだと全文検索ではないので、[検索(S)]のタブで検索すると、調べやすいです。
[ ]
RE:10765 検索してヒットした範囲を取得したいNo.10766
楽をしたい さん 25/11/06 00:03 [ コメントを投稿する ]
  > [その他]→[動作環境]→[検索]の設定のページの中に、[検索での動作]というグループ(枠)があって、そこに以下のような[検索での表示]があります。
> 検索での表示(B): ◎点滅表示 〇範囲選択
そこでしたか。解りました。

ついでに setcompatiblemode文 について教えてください。

一つ目は影響の及ぶ範囲(execmacro)について。
execmacroでコールされたマクロはコールしたマクロのsetcompatiblemode文を無視する。という解釈で合ってますか?
ならば必要ならsetcompatiblemode文を記述しなければなりません。
呼び出したマクロにリターンすると、呼び出されたマクロのsetcompatiblemode文を呼び出したマクロは無視する。という解釈で合ってますか?

二つ目はパラメータの記述について。
https://help.maruo.co.jp/hidemac/html/150_ConfigStatement_setcompatiblemode.html
を読むと最初は0x00000000等8桁で記述されていますが、最後の方で0x000f等4桁に変化します。
進数が絡むと頭がこんがらがるのですが、これはどう解釈すればいいのでしょうか?
AND/OR/NOT/NOR演算は理解している心算なのですが。

宜しくお願いします。
[ ]
RE:10766 検索してヒットした範囲を取得したいNo.10767
楽をしたい さん 25/11/06 00:16 [ コメントを投稿する ]
  補足です。

0x00000200 も 0x000f 16進数なので 2進数に変換すると桁数が倍違います。その状態で論理演算して再度16進数に戻せばよいと考えているのですが、足りない桁はどう扱えばいいの?そもそも演算しちゃってよいの?
という話でもあります。

宜しくお願いします。
[ ]
RE:10767 検索してヒットした範囲を取得したいNo.10768
秀丸担当 さん 25/11/06 09:01 [ コメントを投稿する ]
  setcompatiblemodeは、execmacroを呼び出すと呼ばれた側では無視します。
呼び出した側は、呼び出されたマクロのsetcompatiblemodeはキャンセルされます。
(ただし0x00020000の検索条件を戻すのは例外です)

16進数の桁は一覧にしたときは見やすいように合わせているだけなのでで、0x00000200でも0x200でも同じになります。
[ ]
RE:10768 検索してヒットした範囲を取得したいNo.10769
楽をしたい さん 25/11/07 03:03 [ コメントを投稿する ]
  > 見やすいように合わせているだけなのでで、0x00000200でも0x200でも同じになります。
先行する0を省略しているだけ。という解釈で合っていますか?

> ただし0x00020000の検索条件を戻すのは例外です
コールされたマクロはコールしたマクロの影響を受けない。けどコールされたマクロの0x00020000はコールしたマクロに影響する。
だからコールしたマクロで元に戻す必要がある。という事ですか?

選択でも強調表示でも範囲取得可能な事を確認できました。
ありがとうございます。
[ ]
RE:10769 検索してヒットした範囲を取得したいNo.10770
秀丸担当 さん 25/11/07 09:36 [ コメントを投稿する ]
  >先行する0を省略しているだけ。という解釈で合っていますか?
はい。そうです。

>コールされたマクロはコールしたマクロの影響を受けない。けどコールされたマクロ
>の0x00020000はコールしたマクロに影響する。
>だからコールしたマクロで元に戻す必要がある。という事ですか?

0x00020000だけは特別で、マクロ全体が全て終了したときに、検索条件をマクロ実行前に戻すものです。
コールしたマクロで元に戻すことはできないです。
一番上位のマクロで最初に呼ぶことを想定しています。
マクロヘルプのsetcompatiblemodeの一番下の「マクロ終了後に検索条件を戻す用の0x00020000の指定について」のところに説明があります。
[ ]
RE:10770 検索してヒットした範囲を取得したいNo.10771
楽をしたい さん 25/11/08 03:08 [ コメントを投稿する ]
  情報ありがとうございます。
コレが実装された経緯や効果などが理解できないので、触れない事にします。
今の所出番がなさそうだし。
ありがとうございました。
[ ]

[ 新規に投稿する ]