run "cmd >con" 後の異常No.16080
安久津 さん 03/12/10 13:19
 
あくつです。
run "cmd >con" 後に異常が起きます。


(1) MyClass.java

    // そんな。
    public class MyClass {
        public static void main( String argv[] ){
            String msg="Hello World Wide Web!";
            System.out.println( msg );
        }
    }

(2) hidemarudir + "\\javac.txt"

    このファイルは javac.txt


(3) macrodir+ "\\run.mac"

    $$ini=macrodir + "\\debug.ini";
    ##src = hidemaruhandle(0);
    writeininum $$ini, "handle", "src", ##src;

    $$log = hidemarudir + "\\javac.txt";
    $$cmd="java MyClass >con";
    run $$cmd;
    ##con = hidemaruhandle(0);
    writeininum $$ini, "handle", "con", ##con;

    gofiletop;
    $$d = "● " + date + " " + time;
    insert $$d + "\n";
    insert $$cmd + "\n";
    gofiletop;
    if( existfile($$log) ) insertfile $$log;
    gofileend;
    saveas $$log;

endmacro;


手順。

    上記3つのファイルを用意します。
    MyClass.java をコンパイルして、同じディレクトリに
    MyClass.class を作成しておきます。

d:\lang\editor>javac MyClass.java
(ディレクトリは何処でも可)

    秀丸で、MyClass.java をアクティブにしておきます。
    そのまま run.mac を実行すると次のような現象に遭いました。

    ##src と ##con が同じ値になっています。( debug.ini )
    v4.02 で起きました。

    ちなみに、v4.10b にしたら、dump.txt が出力されました。
    そして、もう一度 run.mac をためそうとしたら、
    他の秀丸が実行中ですが出ました。
    いったん全ての秀丸を終了させてから、
    もう一度 run.mac を実行したらやはり dump.txt が出力されました。

    dump.txt は、maruo@mitene.or.jp に送っておきます。

[ ]
RE:16080 run "cmd >con" 後の異常No.16084
安久津 さん 03/12/10 15:56
 
あくつです。

>    $$log = hidemarudir + "\\javac.txt";
>    $$cmd="java MyClass >con";
>    run $$cmd;
>    ##con = hidemaruhandle(0);

この $$cmd="java MyClass >con"; は
標準出力にメッセージを出力するプログラムなら、
何でもいいです。
# gawk や ruby でも同じ結果でした。

コンパイルした java プログラムの実行用マクロ作成中に
発見したので、java のまま投稿しました。

それと OS は Windows ME です。(^^;)

[ ]
RE:16084 run "cmd >con" 後の異常No.16085
秀まるお2 さん 03/12/10 16:45
 
 お手数かけます。

 後ほど調査しますので、少々お待ちください。

[ ]
RE:16085 run "cmd >con" 後の異常No.16097
秀まるお2 さん 03/12/10 23:16
 
 秀丸V4.10β2にて死んでしまう件はまだ確認できていませんが、とりあえずの
話として、##src と ##con が同じ値になるのは仕様です。

 例えばですけど、runやrunsync2でhidemaru.exeを起動しても、マクロの実行
自体は起動された先の秀丸に移動することはありません。

 マクロ実行が他の秀丸に移動するのは、openfileとかnewfileとかで秀丸を起
動した時に限りまして、run系文で起動された秀丸にはマクロ実行は移動しない
です。

---------
 じゃぁ、マクロの中から、何らかの外部プログラムの出力結果を見るにはどう
すればいいかって話になりますが、僕が今調べた限りだと、少なくとも">con"を
使うことは出来ないような気がします。面倒ではありますが、何らかのファイル
にリダイレクトさせてやって、そのファイルを秀丸で開くような形にマクロを作
り直していただくしか無いと思います。

 具体的には、

    runsync2 "java MyClass >$temp.$$$";
    openfile "$temp.$$$";

 みたいに直すという作戦です。

 もしかしてもっといい方法があったら、誰か教えて欲しいです。&、僕のコメ
ントが間違ってないかどうかについては、明日、秀丸担当に聞いてみます。

 (">con"でのリダイレクト関係は秀丸担当が作った物なので)

[ ]
RE:16097 run "cmd >con" 後の異常No.16098
Iranoan さん 03/12/11 01:04
 
 秀まるおさん、安久津さん今日は、Iranoan です。
 異常終了は起きていませんが、
>  じゃぁ、マクロの中から、何らかの外部プログラムの出力結果を見るにはどう
> すればいいかって話
にだけ反応します。
 これについては、リダイレクトの出力先が現在のウィンドウにすれば、出力
終了までマクロが中断します。そして現在のウィンドウに出力される条件は、
(1) 範囲選択状態
    範囲選択が出力結果に置換
(2) 新規のウィンドウで、編集されていない
です。ですから例えば、
$shell = getenv( "SHELL" );
if( $shell == "" )$shell = getenv( "COMSPEC" );
openfile "/h";//速度向上のため非表示
//showwindow 0;//ウィンドウを切り替えて何度も使うなら必要
//beginsel;//新規なので要らない
run $shell + " /c dir > con";
//showwindow 1;
等で良いと思います。この辺り run 文でなく「プログラムの実行」と同じは
ずです。

> 少なくとも">con"を
> 使うことは出来ないような気がします。
が出来ないなら、ヘルプにある
> if( selecting == 1 ) {
> run "sort <con >con";
> }
が出来なくなってしまいますよね(^^)。

 それともこういうことではない?

[ ]
RE:16097 run "cmd >con" 後の異常No.16102
安久津 さん 03/12/11 11:44
 
あくつです。

run の ##con と ##src の違いに目を奪われてしまいました。
問題は、insertfile でした。「 run "cmd >con" の後の異常 」という題名は
実情にあっていませんでした。m(__)m
# とりあえず、run の con は後回し。

//insertfile.mac
    $$f = hidemarudir + "\\hidemaru.txt";
    if( existfile($$f) ) insertfile $$f;
endmacro;

insertfile.mac は v4.02 だと異常終了しません。
v4.10b2 だと異常終了します。
v4.10b3 だと異常終了しません。
何度でも再現します。

dump.txt を送っておきます。

[ ]
RE:16102 run "cmd >con" 後の異常No.16104
Arimac さん 03/12/11 12:10
 
これかな
http://www.maruo.co.jp/turukame/3/x03465_.html#3473

[ ]
RE:16102 run "cmd >con" 後の異常No.16105
Iranoan さん 03/12/11 12:54
 
 安久津さん今日は、Iranoan です。
> insertfile.mac は v4.02 だと異常終了しません。
> v4.10b2 だと異常終了します。
> v4.10b3 だと異常終了しません。
 履歴を見て頂けると解りますが、Ver.4.10β1/2 固有の問題で、β3で修正
されました。履歴では、
> カーソル位置への読み込みで死ぬバグ修正
となっているので、insertfile だけ探していると見落としますね(^^)。

[ ]
RE:16105 run "cmd >con" 後の異常No.16106
秀丸担当 さん 03/12/11 13:21
 

insertfileで死ぬ件は、ArimacさんとIranoanさんの言われる通り、β1,2
のバグでした。β3で修正されています。

run文で、>conを付けているときで、さらに新しい秀丸が起動してそちらに出力
される場合、マクロの実行が移行しないのは、仕様にそぐわない不具合でした。
仕様では、
「もし起動するプログラムの標準出力がリダイレクトされている場合、run文は
runsync文同様に、待機するようになります。」
とあるので、新しい秀丸に出力される場合も、待機するようになるべきです。
V4.10β4で修正させていただきます。

[ ]
RE:16106 run "cmd >con" 後の異常No.16109
安久津 さん 03/12/11 14:44
 
あくつです。

>insertfileで死ぬ件は、ArimacさんとIranoanさんの言われる通り、β1,2
>のバグでした。β3で修正されています。
そうだったんですね。(^^ )>>

>run文で、>conを付けているときで、さらに新しい秀丸が起動してそちらに出力
>される場合、マクロの実行が移行しないのは、仕様にそぐわない不具合でした。
>仕様では、
>「もし起動するプログラムの標準出力がリダイレクトされている場合、run文は
>runsync文同様に、待機するようになります。」
>とあるので、新しい秀丸に出力される場合も、待機するようになるべきです。
>V4.10β4で修正させていただきます。
よろしくお願いいたします。

では。
#混乱してしまった。(^^;)

[ ]
RE:16109 run "cmd >con" 後の異常No.16144
安久津 さん 03/12/15 18:54
 
あくつです。

> >「もし起動するプログラムの標準出力がリダイレクトされている場合、run文は
> >runsync文同様に、待機するようになります。」
> >とあるので、新しい秀丸に出力される場合も、待機するようになるべきです。
> >V4.10β4で修正させていただきます。

    ##src = hidemaruhandle(0);
    run "なんか出力プログラム >con";
    ##con = hidemaruhandle(0);

    v4.10b4 で、##src != ##con を確認しました。

では。

[ ]