「アウトライン解析の枠」を浮かしているNo.01619
h-tom さん 07/12/27 23:17
 

h-tom です。

「アウトライン解析の枠」を浮かした場合、closehidemaruforcedに失敗する
場合があります。

1)閉じたい秀丸のフォーカスを、「アウトライン解析の枠」にセットし、別の
 秀丸に移動。
2)移動先の秀丸から、移動元の秀丸を「closehidemaruforced」で閉じようと
 しても、閉じない。

以下のマクロを実行しても、"サブウィンドウ"が閉じません。
「アウトライン解析の枠」を「浮かす」に設定してから実行して下さい。

//再現用マクロ
newfile;
#main = hidemaruhandle(0);
title "メインウィンドウ",0;
title -1,0;
newfile;
#sub = hidemaruhandle(0);
title "サブウィンドウ",0;
title -1,0;
if(getconfig("Outline") == 0) showoutline;
setfocus 2;
setactivehidemaru #main;
closehidemaruforced #sub;
endmacro;
//ここまで

秀丸エディタ:Ver.7.08β3
OS:Windows2000SP4

ここから+α

hmjre.dllへの要望になので、秀まるおさん宛になるのかな?
hmjre.dllのマクロ用関数で、タグの位置と、マッチした長さを取得できる
関数があるとうれしいです。
(GetTagMatchLength、GetTagMatchPositionという感じかな?)

[ ]
RE:01619 「アウトライン解析の枠」を浮かNo.01621
秀丸担当 さん 07/12/28 10:28
 

>「アウトライン解析の枠」を浮かした場合、closehidemaruforcedに失敗する
>場合があります。

手順通りにして再現させることができました。
設定ダイアログ等を出しているときは終了させないという修正がV5.00であった
のですが、それの影響でできなくなっていました。
修正さえていただきます。

[ ]
RE:01619 「アウトライン解析の枠」を浮かNo.01622
秀まるお さん 07/12/28 15:07
 
 秀丸担当から回送されてきたのですが…

> hmjre.dllのマクロ用関数で、タグの位置と、マッチした長さを取得できる
> 関数があるとうれしいです。
> (GetTagMatchLength、GetTagMatchPositionという感じかな?)

 HmJre.dllにはJreGetTagPositionという関数が用意されていてそれで取得可能
ではありますが、マクロから直接呼び出して使えるようにはなってないです。

 マクロから呼び出して使えるようにするには、そもそも秀丸エディタが内部的
ち持っているJRE2構造体が必要でして、HmJre.dll側では対応出来なくて、秀丸
エディタ側がなんとかしてくれないとダメです。

 ということで、もう一度秀丸担当に回送させていただきます。
 (すみませんが、お返事は年越しになります)

[ ]
RE:01622 「アウトライン解析の枠」を浮かNo.01623
h-tom さん 07/12/28 21:04
 

h-tom です。

> マクロから呼び出して使えるようにするには、そもそも秀丸エディタが内部的
>ち持っているJRE2構造体が必要でして、HmJre.dll側では対応出来なくて、秀丸
>エディタ側がなんとかしてくれないとダメです。

要望は秀丸エディタ本体の「検索」に対してではなく、マクロで呼び出せる関数の
「FindRegular, FindRegularNoCaseSense」を実行した結果に対してです。
上記関数で、タグを使用した正規表現を使用した場合、タグにマッチした部分の
情報を、取得したいと言うことです。

とはいえ、秀丸エディタ側の情報が取得できるというのもいいですね。
#なんに使えるかは、考えていませんけど。
#というか、要望が通れば、検索に使った正規表現とマッチした全体の範囲は
#わかるので、マクロでなんとかなるのかな?

[ ]
RE:01623 「アウトライン解析の枠」を浮かNo.01624
秀まるお さん 07/12/28 21:17
 
> 要望は秀丸エディタ本体の「検索」に対してではなく、マクロで呼び出せる関数の
> 「FindRegular, FindRegularNoCaseSense」を実行した結果に対してです。

 ってことであれば、HmJre.dll側で対応する話になります。それはそれで技術
的に可能ではあります。ただし、タグの情報はJRE2構造体の中に持つような形に
なるので、やるとしたら、

     #handle = dllfunc("JremacAllocate");
     #n = dllfunc("JremacCompile", #handle, "pattern...");
     #n = dllfunc("JremacGetMatchInfo", #handle, "string", #x );
     #n = dllfunc("JremacGetTagPosition", #handle, #TagNumber);
     #n = dllfunc("JremacGetTagLength", #handle, #TagNumber);
     #n = dllfunc("JremacFree", #handle);

 みたいな難しい関数群を追加する形にしないとダメかもしれません。

[ ]
RE:01624 「アウトライン解析の枠」を浮かNo.01625
秀まるお さん 07/12/28 21:31
 
 やっぱりそんな面倒な関数を追加するのはやめて、単純に「直前の検索でヒッ
トしたタグの位置」をstatic変数で覚えておいて返すようなのを作ってみます。

[ ]
RE:01625 「アウトライン解析の枠」を浮かNo.01627
秀まるお さん 07/12/30 21:44
 
 GetLastMatchTagPosition
 GetLastMatchTagLength

 の2つの関数を追加します。次の秀丸メールのβ版に付属させるHmJre.dllか
らそうします。

---------サンプルマクロ---------------
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    $dll = getregstr("JreDll");
    closereg;
    loaddll $dll;
    if( !result ) {
        message $ddl + " がロード出来ませんでした。";
    }
    #x = dllfunc("FindRegular", "(abc)(xyz)", "----abcxyz---", 0);
    #cx = dllfunc("GetLastMatchLength");
    #xTag1 = dllfunc("GetLastMatchTagPosition", '1');
    #cxTag1 = dllfunc("GetLastMatchTagLength", '1');
    #xTag2 = dllfunc("GetLastMatchTagPosition", '2');
    #cxTag2 = dllfunc("GetLastMatchTagLength", '2');
    $m = "result = " + str(#x) + " length=" + str(#cx);
    $m = $m + "\n tag1 = " + str(#xTag1) + " length=" + str(#cxTag1);
    $m = $m + "\n tag2 = " + str(#xTag2) + " length=" + str(#cxTag2);
    message $m;

[ ]
RE:01627 「アウトライン解析の枠」を浮かNo.01638
秀まるお さん 08/01/04 16:42
 
 今日アップロードした秀丸メールのV5.00β14に付属のHmJre.dllの
Version 1.90にて対応しています。ということでよかったら試してみて欲しいで
す。

[ ]
RE:01638 「アウトライン解析の枠」を浮かNo.01641
h-tom さん 08/01/04 21:16
 

h-tom です。

> 今日アップロードした秀丸メールのV5.00β14に付属のHmJre.dllの
>Version 1.90にて対応しています。ということでよかったら試してみて欲しいで
>す。
動作は問題ないです。

で、引数の指定方法ですが、'1'〜'9'(0x31〜0x39)ではなく、1〜9(0x01〜0x09)で
指定できると、うれしいかな?(変数で指定する場合など)
(元のJreGetTagPositionにあわせているとは思いますが。)

まぁ、#a = 1 として
  #n = dllfunc("GetLastMatchTagPosition", 0x30+#a)
または、
  #n = dllfunc("GetLastMatchTagPosition", ascii(str(#a)))
とすれば、いい話ではありますが。

しかし、取得したいタグの"番号"が"1"とすると、
  1 → 0x31(49)
を、導き出すのは難しいような気もします。

[ ]
RE:01641 「アウトライン解析の枠」を浮かNo.01642
秀まるお さん 08/01/04 22:31
 
 では次のバージョンで仕様変更します。

[ ]
RE:01642 「アウトライン解析の枠」を浮かNo.01644
h-tom さん 08/01/05 20:03
 

h-tom です。

> では次のバージョンで仕様変更します。
hmjre.dll Ver.1.9.1を試してみました。
引数の仕様変更の所も、問題ないです。

対応ありがとうございます。

[ ]
RE:01644 「アウトライン解析の枠」を浮かNo.01645
秀まるお さん 08/01/05 21:55
 
 実はテストしないままアップロードしてしまったので月曜日にでもテストして
案内してみようかと思ってた所でした。テストありがとうございます。

[ ]