検索文字列の強調No.07863
IKKI さん 05/05/22 23:12
 
秀丸担当さん、こんにちは。 IKKI です。

検索文字列の強調について、そろそろ再考の時期がきましたでしょうか。
あれからユーザー有志で議論を重ね、ひとつの仕様案をまとめました。ここに提案さ
せていただきます。
参加した人は Iranoan さん、あべのりさん、カモノハシさん、 IKKI です。
他の皆さんの意見も伺いつつ v5.00 正式版公開前にもう一度時間をかけてご検討い
ただければと思います。

本文には結論だけ書きました。どうしてこの結論が導かれたかなど、わかりにくい点
がありましたらお尋ねください。
議論の過程は下記 URL で公開されています。
http://hpcgi2.nifty.com/masema/bbs2/wforum.cgi
場所を提供してくださったませまさんに感謝します。

■用語の定義
・「強調」という語はすべて「検索文字列の強調」によるものを指す。一般の強調表
示には触れない。
・画面上で(一時的に)強調表示されているかどうかを「強調状態」と呼ぶ
・強調状態を ON にしたとき強調表示される文字列を「強調文字列」と呼ぶ
・強調文字列、強調文字列の検索オプション、強調状態を合わせて「強調バッファ」
と呼ぶ
・検索ダイアログのチェック状態と秀丸内部の検索オプションは常に一致しているも
のとする。これを「検索オプション」と呼ぶ
・検索文字列、検索オプションを合わせて「検索バッファ」と呼ぶ
・検索オプションのビット 11, 12 を「強調フラグ」と呼ぶ
・強調文字列を「更新する」とは、強調文字列を検索文字列に一致させることを言う。
・コマンド [上検索] [下検索] [上置換] [下置換] を代表して [下検索] と呼ぶ
・コマンド [上候補] [下候補] を代表して [下候補] と呼ぶ
・マクロ文 searchup(2), searchdown(2), replaceup, replacedown を代表して sea
rchdown と呼ぶ
・マクロ文 findup(2), finddown(2) を代表して finddown と呼ぶ

■前提条件
・一元化はしない
  ・検索バッファと強調バッファは別物
  ・強調バッファはウィンドウごとに保持

■要件
・既存のマクロを実行たとき、強調バッファは変化しないでほしい
  ・既存のマクロ文は強調文字列に影響を与えない
  ・既存のマクロ文は強調状態に影響を与えない
・[下候補] を実行したら強調バッファは更新されてほしい

■提案する動作
                    強調文字列 強調状態 再描画
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ダイアログ 下検索 検索文字列を強調=ON   ●    ▲    ●
マクロ searchdown "〜", hilight;      ●    ▲    ●
───────────────────────────────────
ダイアログ 下検索 検索文字列を強調=OFF  ●    ▼    ●
マクロ searchdown "〜", nohilight;     ●    ▼    ●
───────────────────────────────────
マクロ searchdown "〜";          ―    ―    ―
───────────────────────────────────
コマンド 下候補              ●    ◆    ●
マクロ finddown;              ※    ※    ※
───────────────────────────────────
マクロ setsearch "〜", 0xnnn;       ―    ―    ―
───────────────────────────────────
コマンド 検索文字列の取得         ―    ―    ―
マクロ getsearch;             ―    ―    ―
───────────────────────────────────
コマンド 検索文字列の強調 ON       ●    ▲    ●
マクロ hilightfound 1;           ●    ▲    ●
───────────────────────────────────
コマンド 検索文字列の強調 OFF       ●    ▼    ●
マクロ hilightfound 0;           ●    ▼    ●
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
凡例
  ●:更新する
  ―:更新しない
  ▲:ON にする
  ▼:OFF にする
  ◆:強調フラグが立ってれば ON、立ってなければ OFF
  ※:後述

■提案のポイント

・検索オプションのビット13は廃止(別途説明します)
・searchdown は hilight, nohilight オプションを付けたときだけ強調バッファを
更新する
・[下検索], [下候補] は強調バッファを更新する
  ・強調フラグが ON ならば強調状態を ON にする
  ・強調フラグが OFF ならば強調状態を OFF にする
  ・いずれにせよ強調文字列を検索文字列と一致させる
・finddown については後述
・setsearch, getsearch, [検索文字列の取得] は強調バッファを更新しない
・hilightfound, [検索文字列の強調] は強調バッファを更新する

■finddown について

既存のマクロで finddown が実行された場合、強調バッファは変化しないでほしいで
す。一方、今後作られるマクロでは強調バッファを更新するかどうか選べるとよいで
しょう。そのためには、強調を「ON にする」「OFF にする」「そのまま」という3つ
の状態を指定できなければなりません。
searchdown は hilight, nohilight, オプションなし、で3つの状態を指定できます
が、 finddown はオプションを持たないため、このままでは情報量が不足します。不
足する情報を与える方法を4つ考えました。
なお、いずれにしても [下候補] と finddown の動作は異なるものになります。

▼方法1 検索オプションにビットを追加

ビット13の意味を変えて、「強調バッファを更新するかどうか」を表す。

  setsearch "〜", 0x0000;  finddown;  // そのまま
  setsearch "〜", 0x3800;  finddown;  // ON にする
  setsearch "〜", 0x3000;  finddown;  // OFF にする

▼方法2 [下候補] に対応する文を新設

[下候補] と同じ動作をする新しい文(たとえば finddown3)を作る。
[キー操作の記録] では finddown3 を記録する。

  finddown;  // そのまま
  finddown3;  // 更新する

▼方法3 finddown にオプションを新設

強調バッファを更新したいときは searchdown と同様のオプションを使う。

  finddown;      // そのまま
  finddown hilight;  // ON にする
  finddown nohilight; // OFF にする

▼方法4 hilightfound 文を併用

強調バッファを更新したいときは finddown の後に hilightfound を使う。
[キー操作の記録] では [下候補] は次のように記録する。

  finddown;
  hilightfound (searchoption & 0x1800 > 0);

■β23との違い

提案した動作とβ23の動作との違いについては別途説明します。

[ ]
RE:07863 検索文字列の強調No.07864
IKKI さん 05/05/22 23:15
 
提案した動作とβ23の動作の違いについて説明します。

■β23の動作
                    強調文字列 強調状態 再描画
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ダイアログ 下検索 検索文字列を強調=ON   ●    ▲    ●
マクロ searchdown "〜", hilight;      ●    ▲    ●
───────────────────────────────────
ダイアログ 下検索 検索文字列を強調=OFF  ●    ▼    ●
マクロ searchdown "〜", nohilight;     ●    ▼    ●
───────────────────────────────────
マクロ searchdown "〜";          ●    ―    ●
───────────────────────────────────
コマンド 下候補              ●    ―    ●
マクロ finddown;              ●    ―    ●
───────────────────────────────────
マクロ setsearch "〜", 0xnnn;       ●    ―    ―
───────────────────────────────────
コマンド 検索文字列の取得         ●    ―    ●
マクロ getsearch;             ●    ―    ●
───────────────────────────────────
コマンド 検索文字列の強調 ON       ●    ▲    ●
マクロ hilightfound 1;           ●    ▲    ●
───────────────────────────────────
コマンド 検索文字列の強調 OFF       ?    ▼    ●
マクロ hilightfound 0;           ?    ▼    ●
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
凡例
  ●:更新する
  ―:更新しない
  ▲:ON にする
  ▼:OFF にする
  ?:検証できない

■検索オプションのビット13について

β23にある検索オプションのビット13は不要です。
ビット13を設けた理由は「検索ダイアログのチェック状態を変化させないため」でし
た。ダイアログのチェック状態と秀丸内部の検索オプション(フラグ)が常に一致し
ているのなら、これを保存する仕組みはすでに用意されています。

  $s = searchbuffer;
  #f = searchoption;
  searchdown "\\.", regular;
  setsearch $s, #f;

ですから、この上さらにビット11と12だけを特別に保存する仕組みを設ける必要はあ
りません。

■searchdown について

β23では searchdown (オプションなし)は強調文字列を更新します。
提案では searchdown (オプションなし)は強調文字列を更新しません。
これは既存のマクロを実行したとき強調バッファを変化させないためです。

■[下候補] について

[下候補] の動作については好みが分かれるようです。

 (a) 強調状態=ON ならば 強調状態を ON にする
 (b) 強調フラグ=ON ならば 強調状態を ON にする
 (c) 強調フラグ=ON または 強調状態=ON ならば 強調状態を ON にする
 (d) 強調フラグ=ON かつ 強調状態=ON ならば 強調状態を ON にする

β23は (a) です。
提案は (b) です。
Iranoan さんは (b) を、あべのりさんは (c) を、私は (d) を推しています。

今回の提案はマクロの互換性を主眼に置いており、 [下候補] の動作については強い
意見を持っていません。皆さんの意見も聞きつつ、オプション化やマクロでの対応を
含めて再検討するとよいと思います。

■setsearch, getsearch について

β23では setsearch, getsearch は強調文字列を更新します。
提案では setsearch, getsearch は強調文字列を更新しません。

これは既存のマクロを実行したとき強調バッファを変化させないためです。特に下記
のように、検索バッファを保存したのとは別のウィンドウで復元する場合、復元時に
別のウィンドウの強調バッファを破壊してしまうのはまずいですから、 setsearch
は強調バッファを更新すべきではありません。

  $$s = searchbuffer; // 検索バッファを保存
  ##f = searchoption;
  nexthidemaru;    // ウィンドウを切り替える
  setsearch $$s, ##f; // 検索バッファを復元

turukame.3:07136 で私が提案した「setsearch で強調バッファを更新する」案は上
記の理由により撤回します。

■[検索文字列の取得] について

β23では [検索文字列の取得] は強調文字列を更新します。
提案では [検索文字列の取得] は強調文字列を更新しません。
これは getsearch の動作と同じにするためです。

今回の提案は [検索文字列の取得] の動作については強い意見を持っていません。コ
マンドとマクロ文で動作が異なってもよいのなら、 [検索文字列の取得] は強調文字
列を更新した方が便利かもしれません。

[ ]
RE:07864 検索文字列の強調No.07869
秀丸担当 さん 05/05/23 14:33
 

わかりやすくまとめていただいたありがとうございます。
考えてまたコメントします。

[ ]
RE:07864 検索文字列の強調No.07881
秀丸担当 さん 05/05/24 18:30
 

よく考えてみましたが、finddownの動作がネックとなるようです。

と思って、しばらく悩んでいましたが、さらによく考えたら、下候補の記録は
finddownではなく、searchdownまたはreplacedownになります。
なので、下候補とfinddownの動作の一致などは深く考える必要はありませんでし
た。

searchoptionのビット13は現状のまま、getsearchも現状のままとして、それ以
外は提案を取り入れるように検討したいと思います。

[ ]
RE:07881 検索文字列の強調No.07902
IKKI さん 05/05/26 23:34
 
IKKI です。こんにちは。

早速の対応ありがとうございます&お疲れさまでした。

> 下候補の記録はfinddownではなく、searchdownまたはreplacedownになります。

あれ…。てっきり finddown だと思い込んで話をしてました。お恥ずかしい。

> なので、下候補とfinddownの動作の一致などは深く考える必要はありませんでし
> た。

結局 finddown は強調バッファを一切変更しないようにしたのですね。
↓こんな感じで間違ってないでしょうか。

■β24の動作
                    強調文字列 強調状態 再描画
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ダイアログ 下検索 検索文字列を強調=ON   ●    ▲    ●
マクロ searchdown "〜", hilight;      ●    ▲    ●
───────────────────────────────────
ダイアログ 下検索 検索文字列を強調=OFF  ●    ▼    ●
マクロ searchdown "〜", nohilight;     ●    ▼    ●
───────────────────────────────────
マクロ searchdown "〜";          ―    ―    ―
───────────────────────────────────
コマンド 下候補              ●    ◆    ●
マクロ finddown;              ―    ―    ―
───────────────────────────────────
マクロ setsearch "〜", 0xnnn;       ―    ―    ―
───────────────────────────────────
コマンド 検索文字列の取得         ●    ―    ●
マクロ getsearch;             ●    ―    ●
───────────────────────────────────
コマンド 検索文字列の強調 ON       ●    ▲    ●
マクロ hilightfound 1;           ●    ▲    ●
───────────────────────────────────
コマンド 検索文字列の強調 OFF       ?    ▼    ●
マクロ hilightfound 0;           ?    ▼    ●
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
凡例
  ●:更新する
  ―:更新しない
  ▲:ON にする
  ▼:OFF にする
  ◆:強調フラグが立ってれば ON、立ってなければ OFF
  ?:検証できない

[ ]
RE:07881 検索文字列の強調No.07903
IKKI さん 05/05/27 00:58
 
IKKI です。

検索オプションのビット13についてですが……
いいかげんくどいと思うので、これで最後にしたいと思います。
この投稿は看過していただいてもかまいません。


> searchoptionのビット13は現状のまま、getsearchも現状のまま

ビット13の必要性については何度かお尋ねしましたが、納得できるご説明を
いただけていません。私の理解力が足りないだけなのかもしれませんが…。

そもそも、ビット13が実装されたきっかけは #6909 での不確かな報告でした。
http://www.maruo.co.jp/turukame/3/x06909_.html#6909
このままでは「最初に採用された要望は覆されない。要望は早い者勝ち」という
ネガティブな印象が残ってしまいそうです。。


▼#7130 では以下のご説明がありました。
http://www.maruo.co.jp/turukame/3/x07124_.html#7130

> このビットの目的は、従来のマクロで setsearch $a, 0; としているようなマク
> ロを使った場合でも、検索文字列の強調のチェック状態が変化しないようにした
> ものです。

この目的は「searchoption を待避して setsearch で復元する」という既存の仕組み
で達成できると考えます。
既存の仕組みで目的が達成できず、ビット13という新しい仕組みが必須となるのはど
のような場合でしょうか。

> このビットは指定のためにあるもので、状態を表すフラグではありません。

このような「ユーザーのための」仕組みを、フラグのような「実装のための」
世界へ持ち込むことは非常に違和感があります。

setsearch のオプションは秀丸内部のフラグを直接いじる低レベルなものであり
searchdown のオプションのようにユーザーの便宜を図った高レベルなものとは
次元が異なる。互換性も保証されていない。という認識を私は持っておりました。
この認識は改めた方がよいでしょうか?


▼#7144 では以下のご説明がありました。
http://www.maruo.co.jp/turukame/3/x07124_.html#7144

> これはtenukiと言われるように手抜きのための対策というより、
> setsearchとfinddownを組み合わせた動作と、
> searchdownを一発呼ぶときの動作、
> を同じにしたいという目的と自分は考えています。

β24では finddown が強調バッファを更新しないようになりました。

setsearch "〜", 0x3800; finddown; で更新されるのは
 ・検索文字列
 ・検索オプション(ダイアログのチェック状態)

searchdown "〜", (no)hilight; で更新されるのは
 ・検索文字列
 ・検索オプション(ダイアログのチェック状態)
 ・強調文字列
 ・強調状態

です。両者は同じではありません。
同じにするには finddown の後に hilightfound を使う必要があります。
これで、同じにしたいという目的は達成できているのでしょうか。

[ ]
RE:07903 検索文字列の強調No.07905
あべのり さん 05/05/27 04:31
 
あべのりです.

>ビット13の必要性については何度かお尋ねしましたが、納得できるご説明を
>いただけていません。私の理解力が足りないだけなのかもしれませんが…。

私も同様の疑問を抱いてます.何度も申し訳ないですが,もう一度説明を頂けるとあ
りがたいです.

[ ]
RE:07902 検索文字列の強調No.07908
秀丸担当 さん 05/05/27 09:18
 

>結局 finddown は強調バッファを一切変更しないようにしたのですね。
>↓こんな感じで間違ってないでしょうか。

そんな感じで合っていると思います。

[ ]
RE:07903 検索文字列の強調No.07909
秀丸担当 さん 05/05/27 09:28
 

>そもそも、ビット13が実装されたきっかけは #6909 での不確かな報告でした。
>http://www.maruo.co.jp/turukame/3/x06909_.html#6909
>このままでは「最初に採用された要望は覆されない。要望は早い者勝ち」という
>ネガティブな印象が残ってしまいそうです。。

ビット13を付けた理由はこの報告によるものです。
β9の段階では、強調フラグが知らないうちに無効になるのは、setsearchしか考
えられないためです。
また、ビット13を付けたのは自分の判断であり、ビット13を付けて欲しいと
いう要望があったわけではありません。
もし決定的な理由なく覆されたら、要望は何度も繰り返し出したほうが勝ち、と
いうネガティブなことになるのでは。

また、今回の提案で、searchdown,finddownなどマクロの互換性を重要視してい
る提案であるにもかかわらず、なぜsetseachの互換性を重要視されないのか、私
には理解できません。

他のオプションとは違って検索文字列の強調だけ特別かと言われれば、その通り、
特別です。

setsearchのエレガントさに欠けるとか、違和感があるという理由なだけであれ
ば、覆される理由にはなりません。

>> これはtenukiと言われるように手抜きのための対策というより、
>> setsearchとfinddownを組み合わせた動作と、
>> searchdownを一発呼ぶときの動作、
>> を同じにしたいという目的と自分は考えています。
>
>β24では finddown が強調バッファを更新しないようになりました。

これは、提案を取り入れたことによって、
従来のマクロでは、searchdown と setsearch+finddown が互換。
V5.00以降では、searchdown と setsearch+finddown+hilightfound が互換。
ということになります。

[ ]
RE:07909 検索文字列の強調No.07912
あべのり さん 05/05/27 10:31
 
あべのりです.しつこくすいません.

IKKIさんの,
> この目的は「searchoption を待避して setsearch で復元する」という既存の仕組
>みで達成できると考えます。
> 既存の仕組みで目的が達成できず、ビット13という新しい仕組みが必須となるのは
>どのような場合でしょうか。
に対する回答がないため,まだ納得できてません.

>ビット13を付けた理由はこの報告によるものです。
>β9の段階では、強調フラグが知らないうちに無効になるのは、setsearchしか考
>えられないためです。
>また、ビット13を付けたのは自分の判断であり、ビット13を付けて欲しいと
>いう要望があったわけではありません。
>
>また、今回の提案で、searchdown,finddownなどマクロの互換性を重要視してい
>る提案であるにもかかわらず、なぜsetseachの互換性を重要視されないのか、私
>には理解できません。
>

つまり,13ビットによる救済対象は,
1.強調表示された状態であるマクロを実行する.
2.そのマクロは,内部でsetsearchしsearchoptionを変えてるにも関わらず,最後
にsearchoptionを戻してない.
3.マクロ実行後,「下/上検索」または「検索ダイアログから検索を実行」をした
ら強調表示が解除されたのでガッカリ.
という状態であるということでしょうか.

>setsearchのエレガントさに欠けるとか、違和感があるという理由なだけであれ
>ば、覆される理由にはなりません。
(IKKIさんがどうであるかは知りませんが,)寧ろ上記のような状態は救済するに値
せず,従って13ビットは不要である,と考えています.

そもそも,上記設定にはかなり無理があります.
最後にsearchoptionを戻してない以上,恐らくsearchbufferも戻してないでしょう.
よって,そのまま下検索を実行したら,強調表示が解除される以前に検索文字列が意
図してないものになってガッカリ,となります.

一方検索ダイアログから検索を行う場合,検索する前に強調表示にチェックが外れて
ることに気がつき,なんで外れたんだガッカリということになります.ただし,この
ガッカリは他のオプションにも全く同等であり,なぜ強調表示だけ?と思ってしまい
ます.

それでも,
>他のオプションとは違って検索文字列の強調だけ特別かと言われれば、その通り、
>特別です。
と言われるのならば,次は何故検索文字列の強調という「検索オプション」(強調状
態でなく)が特別になるのかというのが気になってしまいます.


>これは、提案を取り入れたことによって、
>従来のマクロでは、searchdown と setsearch+finddown が互換。
>V5.00以降では、searchdown と setsearch+finddown+hilightfound が互換。
>ということになります。
了解しました.

[ ]
RE:07912 検索文字列の強調No.07916
秀丸担当 さん 05/05/27 11:55
 

>> 既存の仕組みで目的が達成できず、ビット13という新しい仕組みが必須となるのは
>>どのような場合でしょうか。
>に対する回答がないため,まだ納得できてません.

setsearchは検索オプションの退避・復元のためだけに使ってくださいとヘルプ
に明記されているわけでもありません。

当たり前のことですが、単純に、復元しないマクロの互換を取るためには必要で
す。
    setsearch "xxx", 0x0000;
    finddown;
    endmacro;

たとえば「正規表現で検索」という目的の検索ダイアログを出すマクロ。
これは復元を目的とせず、フラグを変更して保存することを目的とします。
    setsearch searchbuffer, 0x0010;
    find;
    endmacro;

フラグを8ビットと思ってマスクしているマクロもあるようです。
    setsearch searchbuffer, searchoption & 0xfe;

「2.秀丸エディタ&関連ソフト 情報交換」の会議室のメールのログを
setsearchで検索してみたら、いろいろ見付かりました。
hidesoft.2:14786| 検索と単語の検索…検索オプションについて
hidesoft.2:16543| RE 16539 grepの実行
hidesoft.2:17019| RE 17013 特定文字(列)を無視した検索
他にもあるかもしれません。


>という状態であるということでしょうか.

そうです。

>と言われるのならば,次は何故検索文字列の強調という「検索オプション」(強調状
>態でなく)が特別になるのかというのが気になってしまいます.

むしろ、他のオプションも検索文字列の強調のように、フラグを保持できたほう
がいいかもしれません。
従来からの互換で、他のオプションの仕様は変更はしていません。

[ ]
RE:07916 検索文字列の強調No.07920
秀丸担当 さん 05/05/27 12:35
 

>>と言われるのならば,次は何故検索文字列の強調という「検索オプション」(強調状
>>態でなく)が特別になるのかというのが気になってしまいます.

さらに言うと、他の検索オプションは、検索の方法を指定するものであるのに対
し、検索文字列の強調は表示状態が変わるだけで、検索の方法が変化するわけで
はありません。
オンにしておく人は常にオンで、setsearchでマクロを記述する人もそのフラグ
の存在を意識せずにマクロを作れますし、特別なものとして位置づけるだけの価
値はあると思います。

[ ]
RE:07920 検索文字列の強調No.07935
Iranoan さん 05/05/27 19:03
 
 秀丸担当さん今日は、Iranoan です。
> オンにしておく人は常にオンで、setsearchでマクロを記述する人もそのフラグ
> の存在を意識せずにマクロを作れますし、特別なものとして位置づけるだけの価
> 値はあると思います。
 秀丸担当さんのお考えは大体解ったつもりです。

 それでも合えて、反論を述べさせて頂きます。だからといって、秀丸担当さ
んは、互換性など色々考えて、今回のような仕様にしたのですから、是が非で
も...、という意味ではありません。
> setsearchは検索オプションの退避・復元のためだけに使ってくださいとヘルプ
> に明記されているわけでもありません。
 それはその通りですが、ヘルプに
> マクロの中でsearchup/searchdownを使うと、検索バッファの内容が書き換え
> られてしまいます。そうすると、ユーザが次に上候補/下候補コマンドを使っ
> た時に予期しない動作をしてしまうことがあります。
>
>  こういう場合に、setsearch/searchbuffer/searchoptionを使うと便利です。
に在りますし、元に戻すことを意識したマクロなら、復元をしていると思います。

> さらに言うと、他の検索オプションは、検索の方法を指定するものであるのに対
> し、検索文字列の強調は表示状態が変わるだけで、検索の方法が変化するわけで
> はありません。
 この視点は、私には完全に抜けていました。しかし、13 ビットがあるが為
に、既存のマクロで、表示上だけでなく動作自体の互換性が無くなってしまう
マクロも在ります。概略だけ記しますと、
$s = searchbuffer;
#s = searchoption;
setsearch "[A-Za-z]+", 0x11;
finddown;
while( result ){
  if( !(colorcode&0x1F) ){//既存のマクロでは、これで普通の文字に限定できる
          :
          :
          :
    moveto foundendx, foundendy;
  }
  finddown;
}
setsearch $s, #s;
というマクロです。ここで
(1) 検索強調文字列の場合に対して、colorcode に新たな値を設定する必要が
    生じるの致し方がない
(2) setsearch で 13 ビットがあるので、検索強調が ON だと
    colorcode&0x1F == 27
    となり、!(colorcode&0x1F) で普通の文字への限定が出来ない
という非互換性が発生します。この様なルーチンはスペル・チェックなど英字
文字列の検索では在りそうです。少なくとも、拙作の公開しているマクロで、
この手法を使っています(^^;。

[ ]
RE:07935 検索文字列の強調No.07936
秀丸担当 さん 05/05/27 20:12
 
>に在りますし、元に戻すことを意識したマクロなら、復元をしていると思います。

それはその通りで、もちろんその用途でもあります。

用途は、唯一それだけではない、ということです。

>というマクロです。ここで
>(1) 検索強調文字列の場合に対して、colorcode に新たな値を設定する必要が
>    生じるの致し方がない
>(2) setsearch で 13 ビットがあるので、検索強調が ON だと
>    colorcode&0x1F == 27
>    となり、!(colorcode&0x1F) で普通の文字への限定が出来ない
>という非互換性が発生します。この様なルーチンはスペル・チェックなど英字
>文字列の検索では在りそうです。少なくとも、拙作の公開しているマクロで、
>この手法を使っています(^^;。

確かに colorcode を判断するマクロの互換性の懸念はありました。
それはそれで、別の問題で考えなくてはいけません。
setsearchだけの問題ではない問題です。
これを解決しようと思ったら、また1から考え直すということも視野に入ってしまい
が。
それか、colorcode の 0x400 ビットなどのように、ビットで判断に変更するか。


[ ]
RE:07916 検索文字列の強調No.07937
あべのり さん 05/05/27 20:54
 
あべのりです.
お返事ありがとうございました.大体お考えがわかりました.




[ ]
RE:07936 検索文字列の強調No.07938
Iranoan さん 05/05/27 21:02
 
 秀丸担当さん今日は、Iranoan です。
> 用途は、唯一それだけではない、ということです。
 もちろんそれは解っています。ここで言いたかったのは、一応注意事項とし
て、ヘルプには既に記載があります、ということです(^^)。

> 確かに colorcode を判断するマクロの互換性の懸念はありました。
> それはそれで、別の問題で考えなくてはいけません。
> setsearchだけの問題ではない問題です。
 これも解っていて、現状の仕様でも互換性が保てない場合があります、とい
う単なる例です。「13 ビットの新設した主目的が、マクロの互換性を大事に
している」と解釈しているので。

> それか、colorcode の 0x400 ビットなどのように、ビットで判断に変更するか。
 (検索によるものではない) 強調との組み合わせも在るので、確かにビット
による判断の方が良いと思います。

 単なる個人的な考えですが、一つ忘れていました。
> setsearchのエレガントさに欠けるとか、違和感があるという理由なだけであれ
> ば、覆される理由にはなりません。
 確かに「エレガントさに欠ける」が、覆される絶対的な理由にはならないと
思います。ただそれとは同時に、新規のユーザにとっても解りやすい仕様にす
る、という意味では大きな事だと私は思います。

 あとまったく別の話題ですが、
http://www.maruo.co.jp/turukame/3/x07459_.html#7516
http://www.maruo.co.jp/turukame/3/x07200_.html#7214
http://www.maruo.co.jp/turukame/3/x06900_.html#6922 (←直っている?)
って、返信待ちではないですかね?

 最後に、Ver.10 位のネタとしてですから(^^)、返信は必要です。
・searchdown の noregular オプションや今回の検索強調など、過去のしがら
  みを一切捨てた新ヴァージョンのマクロ
があっても良いと思います。しがらみが無ければ、
execmacro で
  o 別のマクロのサブルーチンを呼ぶ
    http://hidemaruo.dip.jp:81/hidesoft/hidesoft_2/x00929.html#973
  o 飛び先でも利用できるスパー・グローバル変数
    http://hidemaruo.dip.jp:81/hidesoft/hidesoft_2/x00929.html#973
等が出来ないかと。
 因みに新ヴァージョンのマクロは、拡張子を *.hm2 (←Hidemaru Macro
ver.2 の心算) などに限定し、HIDEMAC.DLL では無く HIDEMAC2.DLL という別
の DLL で動作するなら、既存のマクロには何の影響も無いですよね。
 念の為ですが、単なる夢です(~~;。

[ ]
RE:07938 検索文字列の強調No.07943
bouz さん 05/05/28 09:48
 
おはようございます。
> 最後に、Ver.10 位のネタとしてですから(^^)、返信は必要です。
フロイドの精神分析入門を思い出しました。(^^)

確かにマクロが増えてくるとだんだん
call "hoge.mac" $1;
とかやりたくなります。それが人情。

どうしても必要なら、

[1]hoge.macを引数をつけて呼びたいとき
execmacro "hoge.mac" $1, #2;
としたいところ
execmacro dllfuncstr("exec", "hoge.mac", "\"%s\",%d", $1, #2);

[2]hoge.macのmainを呼んで$$returnがほしいとき
execmacro "hoge.mac" "main", $1, #2;
$r = $$return;
としたいところ

execmacro dllfuncstr("call", "hoge.mac", "main", "\"%s\",%d", $1, #2);
$r = dllfuncstr("popstr");

という程度のDLLだったらつくりました。
でも、当然DLLがらみのマクロはダメ。
あと、マクロ内部で自分の名前を見て何か判断するやつもダメです。

DLLを使うマクロに対応したのも一応考えましたが、
この場合は、呼び出す側がloaddllしてると面倒だし動いて
いても本当に正常動作しているのかどうかわかりません。
折りを見て一度秀丸担当さんに尋ねようかな、と思っていました。

で、[1]や[2]でこんな風にDLL を使うのなら、
呼び出す側で変数をプッシュしておき、
呼び出された側でそれをポップ、返り値をプッシュして、リターン。
呼び出した側で、返り値をポップ、
とすればよいのでそもそもあまり意味がない。(^_^;)

つまりこのDLLがカバーするのは、
単体でも使うし、引数付きで他のマクロから呼び出すこともしたい、
という用途で、DLLがらみでないものだけです。

結局、#include "hoge.mac"; みたいなのがあるといいのかなとは思いますが、
結構煩雑になり問題が多いと思うのでほとんど強烈じゃない今日この頃です。

[ ]
RE:07916 検索文字列の強調No.07944
IKKI さん 05/05/28 09:58
 
IKKI です。こんにちは。

ご説明ありがとうございます。ようやく納得できました。
貴重な時間を割いていただき恐縮です。
これに懲りず今後ともよろしくお付き合いください。

以下、弁明です。

> また、今回の提案で、searchdown,finddownなどマクロの互換性を重要視してい
> る提案であるにもかかわらず、なぜsetseachの互換性を重要視されないのか、私
> には理解できません。

> たとえば「正規表現で検索」という目的の検索ダイアログを出すマクロ。
> これは復元を目的とせず、フラグを変更して保存することを目的とします。
>     setsearch searchbuffer, 0x0010;
>     find;
>     endmacro;
>
> フラグを8ビットと思ってマスクしているマクロもあるようです。
>     setsearch searchbuffer, searchoption & 0xfe;

turukame.3:01461 での一連のやりとりから、このようなマクロは互換性が
保証されていない(バージョンアップ時に書き換えを迫られるリスクを承知で
使うもの)という認識を持っていました。
http://hidemaruo.dip.jp:81/turukame/turukame_3/x01461.html

いま読み返したら、このときコメントされてたのは秀まるおさんでしたね。
秀まるおさんと秀丸担当さんの見解が異なる or 2年の間に見解が変わった、
と理解しました。

[ ]
RE:07908 検索文字列の強調No.07946
Iranoan さん 05/05/28 17:37
 
 秀丸担当さん今日は、Iranoan です。
 一つ確認したいのですが、
> ダイアログ 下検索 検索文字列を強調=ON   ●    ▲    ●
> マクロ searchdown "〜", hilight;      ●    ▲    ●
> ───────────────────────────────────
> ダイアログ 下検索 検索文字列を強調=OFF  ●    ▼    ●
> マクロ searchdown "〜", nohilight;     ●    ▼    ●
で searchdown の hilight, nohilight オプションを指定すると、フラグも変
更されるんですよね?

[ ]
RE:07938 検索文字列の強調No.07949
秀丸担当 さん 05/05/30 13:43
 

いろいろご意見ありがとうございます。
参考にしたいと思います。

>って、返信待ちではないですかね?

7516と6922にコメントしておきます。

[ ]
RE:07943 検索文字列の強調No.07952
秀丸担当 さん 05/05/30 13:48
 

>> 最後に、Ver.10 位のネタとしてですから(^^)、返信は必要です。

とりあえずV5.00ではそろそろ安定化させたいので、いじることはないと思いま
すが、将来的なネタとして参考にしたいと思います。

[ ]
RE:07946 検索文字列の強調No.07953
秀丸担当 さん 05/05/30 13:49
 

>で searchdown の hilight, nohilight オプションを指定すると、フラグも変
>更されるんですよね?

表には強調フラグのことは書かれていませんが、その通りです。

[ ]
RE:07953 検索文字列の強調No.07961
Iranoan さん 05/05/30 17:08
 
 秀丸担当さん今日は、Iranoan です。
> >で searchdown の hilight, nohilight オプションを指定すると、フラグも変
> >更されるんですよね?
>
> 表には強調フラグのことは書かれていませんが、その通りです。
 一応、手元でサンプルを作って確認したのですが、これで安心です。

[ ]
RE:07949 検索文字列の強調No.07962
Iranoan さん 05/05/30 17:08
 
 秀丸担当さん今日は、Iranoan です。
> 参考にしたいと思います。
 ところで今後内部のデータ構造上、現在強調表示している文字列及びその検
索方法の取得する文やキーワードの追加は可能でしょうか? もし可能であれば、
今後の検討項目として頂ければ幸いです。
 以前、無理だという投稿が在ったような気がするのですが、見つけられませ
んでした。

 こちらも Ver.5.00 より後の話です。

[ ]
RE:07962 検索文字列の強調No.07964
秀丸担当 さん 05/05/30 18:09
 

> ところで今後内部のデータ構造上、現在強調表示している文字列及びその検
>索方法の取得する文やキーワードの追加は可能でしょうか? もし可能であれば、
>今後の検討項目として頂ければ幸いです。

これはたぶん強調表示はレジストリ上にバイナリデータとして保存しており、
config "x..." と getconfig ではバイナリデータを扱えないため扱えないとい
う話だと思います。
これに対応するには、configcolorとgetconfigcolorのようなものが必要になる
ということだと思います。
ネタして検討したいと思います。

[ ]
RE:07964 検索文字列の強調No.07965
Iranoan さん 05/05/30 18:27
 
 秀丸担当さん今日は、Iranoan です。
> これに対応するには、configcolorとgetconfigcolorのようなものが必要になる
> ということだと思います。
> ネタして検討したいと思います。
 気長に待ちますので、宜しくお願いします。

[ ]
RE:07938 検索文字列の強調No.07967
IKKI さん 05/05/31 01:21
 
こんばんは。遅まきながらコメントしてみます。雑談なので返信は必要です。

>  因みに新ヴァージョンのマクロは、拡張子を *.hm2 (←Hidemaru Macro
> ver.2 の心算) などに限定し、HIDEMAC.DLL では無く HIDEMAC2.DLL という別
> の DLL で動作するなら、既存のマクロには何の影響も無いですよね。

ここまで考えたなら COM コンポーネント化も考えて然るべきでしょう。

 ・秀丸はオートメーションオブジェクトを公開する *
 ・マクロは JScript や VBScript など任意の言語で書く
 ・OS にインストールされたスクリプティングエンジンがそれを実行する
 ・公開されたメソッドやプロパティを使って秀丸を動かす

この方式は MS-Office を筆頭に多くのアプリケーションで使われています。
日本製テキストエディタでも EmEditor, サクラエディタ, Alpha, 萌ディタ
などがこの方式を採っています。

アプリと言語が切り離されているためアプリが身軽になること、
任意の言語が選べることが利点です。(Ruby や Python も使えます)
また、汎用の言語を使うため多くの人がマクロを作れるようになることが
期待できます。

>   o 別のマクロのサブルーチンを呼ぶ
>   o 飛び先でも利用できるスパー・グローバル変数

こういう基礎的な機能は言語側でサポートされるべきものです。
アプリが言語を抱え込む構造はだんだん限界が見えてきたと思いませんか。
長い目で見ればサイトー企画さんの開発コストも減るでしょうし、
COM オートメーションを導入する価値はあるのではないでしょうか。

----------------
* Windows プログラミングに関しては門外漢なので……
 頓珍漢なことを言ってるようでしたら訂正してください。お願いします。

[ ]
RE:07967 検索文字列の強調No.07968
ma2ten さん 05/05/31 12:01
 
こんにちは。
マクロのCOMコンポーネント化はちょっと興味あります。

その利点も基本的には賛同なのですが、

>任意の言語が選べることが利点です。(Ruby や Python も使えます)
>また、汎用の言語を使うため多くの人がマクロを作れるようになることが
>期待できます。

この点、反面使いたくとも使えないマクロが出てきそうなのが気になります。
JScriptやVBScriptなら、Windows環境では標準的に利用できると思いますが、Rubyや
Python等は環境を任意にインストールする必要があるので、それら用にしか書かれて
いないマクロは、それらの環境を入れていない人には使えないという事になります。

1ユーザの意見としては、秀丸用のマクロは秀丸ユーザであれば誰でも利用できると
いう要件は大事だと思います。

[ ]
RE:07968 検索文字列の強調No.07969
ma2ten さん 05/05/31 12:08
 
返信不要とのことなのに変なツッコミすいませんでした。(^^;)
でも他のソフトではその辺どうしてるんですかね?とも思ったもんで。

いずれにせよちょっと本筋から外れそうなので、私の発言も看過していただいて結構
です。(^^;)ゞ

[ ]
RE:07969 検索文字列の強調No.07970
秀丸担当 さん 05/05/31 18:01
 

鶴亀メールが出る前に秀丸のOCX版を作ったことがあって、コントロールとして
ですが、似たような仕組みで動かしていたこともありました。
マクロのように全てのコマンドの操作ができたわけではないですが。
時代の流れなので検討するべきなのかもしれません。

[ ]
RE:07881 searchoption のビット 13 につNo.07972
Iranoan さん 05/05/31 23:15
 
 秀丸担当さん、皆さん今日は、Iranoan です。
> searchoptionのビット13は現状のまま、
について、
$s = searchbuffer;
#s = searchoption;
        :
        :
        :
setsearch $s, #s;
というマクロで、確実に元のオプションに戻せるように、searchoption の
ビット 13 は常に ON ですよね。これは互換性の維持から非常に大切なことだ
と思うのですが、ヘルプの searchoption のページにビット 13 については何
の記載もありません。

 この事について質問ですが、そもそもこの事は意識する必要がないことなの
で、記載する必要は無いのでしょうか? それとも
setsearch $s, #s|0x2000;
と態々書く必要が無いことを知ってもらうためも、ヘルプに記載が有った方が
良いのでしょうか?

[ ]
RE:07972 searchoption のビット 13 につNo.07984
秀丸担当 さん 05/06/01 11:54
 

> この事について質問ですが、そもそもこの事は意識する必要がないことなの
>で、記載する必要は無いのでしょうか? それとも
>setsearch $s, #s|0x2000;
>と態々書く必要が無いことを知ってもらうためも、ヘルプに記載が有った方が
>良いのでしょうか?

searchoptionに記載が無いことについて、特に意図的な考えはありません。
書いておくようにします。

[ ]
RE:07984 searchoption のビット 13 につNo.07990
Iranoan さん 05/06/01 12:35
 
 秀丸担当さん今日は、Iranoan です。
> searchoptionに記載が無いことについて、特に意図的な考えはありません。
> 書いておくようにします。
 宜しくお願いします。

[ ]