3.04 のマクロの動作が変No.04943
Makkie さん 00/02/15 14:01
 
秀丸ご担当殿

今まで3.01を使っていたのですが、3.04をインストールしたとこ
ろ、自作のマクロの動作が異常になりました。業務に毎日使っている
マクロなので、すぐに3.01に戻しました。

長いマクロなので、どこでどうおかしくなっているのか、原因は調べて
ませんが、setactivehidemaru あたりの動作がうまくいってない感じ
です(はっきりとは言えませんが・・・・・。別のファイルに書き込む
データが本来とは違うファイルに書き込まれているのでそう思っただけ
です。原因は別かもしれません)。

上位互換を失っているマクロがあるはずです。調査、よろしくお願いし
ます。

[ ]
RE:04943 3.04 のマクロの動作が変No.04944
Makkie さん 00/02/15 14:04
 
言い忘れました。Windows95 です

[ ]
RE:04943 3.04 のマクロの動作が変No.04949
秀丸担当 さん 00/02/15 16:41
 
>今まで3.01を使っていたのですが、3.04をインストールしたとこ
>ろ、自作のマクロの動作が異常になりました。業務に毎日使っている
>マクロなので、すぐに3.01に戻しました。

>上位互換を失っているマクロがあるはずです。調査、よろしくお願いし
>ます。

もしそうだとしたらやばいので、もし差し支えなければ、そのマクロを
送っていただけないでしょうか。
送っていただける場合は、送り先は、xxxxxxxx@nifty.ne.jpまででお
願いします。


[ ]
RE:04949 3.04 のマクロの動作が変No.04952
Makkie さん 00/02/15 18:21
 
>
>もしそうだとしたらやばいので、もし差し支えなければ、そのマクロを
>送っていただけないでしょうか。
>送っていただける場合は、送り先は、xxxxxxxx@nifty.ne.jpまででお
>願いします。
>
了解しました。NIFTYから送りますので、何かあればそのNIFTYアドレス
にお願いします。

[ ]
RE:04943 3.04 のマクロの動作が変No.04957
ENCODINGSHIFTJIS さん 00/02/16 15:03
 
>ませんが、setactivehidemaru あたりの動作がうまくいってない感じ

画面の切替えの時間より早く、マクロ実行が進むのかもしれません。
直後にわずかの待ち時間を挿入したらどうでしょうか?
迷信かもしれませんが。◆

[ ]
RE:04943 3.04 のマクロの動作が変No.04958
ひろ さん 00/02/16 15:59
 
 Makkie さん今日は、ひろです。
> 上位互換を失っているマクロがあるはずです。調査、よろしくお願いし
 version up されたときに、記載されていない bug fix も行われています。
そこで古い version で使用から外れた文法規則で書かれていた macro が、
たまたま動いていただけかもしれません。

 そこで MES4 に、問題となる macro を up されては如何でしょうか?

[ ]
RE:04957 activehidemaru に使用するハンNo.05095
ENCODINGSHIFTJIS さん 00/02/24 16:19
 

// hidemaruhandle の値と実際の画面転換 の時間差??
//  あるかもしれない?? hidemaruhandle値を得る時の注意??
//
goto main;
enddisp: gofileend insert $$1;insertreturn return;
main:
call enddisp "count "+str(hidemarucount); //menu "ffff";
//call   enddisp "base"+"++"+str(hidemaruhandle(0));
// openfile newfile でもたつくときは
// result は正常だが実際には実行権の移行はしていない??
// 画面表示の重ね完了より遅れる。??
// next prev のチェーンに遅れて入る新画面 のため実行移行しない
// 迷信かもしれないがうまく行っている
//   下4行はそのためのおまじない。 for Ver. 3.01
    #hwnd0=hidemaruhandle(0);
      #co =hidemarucount;        newfile // ??????
while(#co==hidemarucount){} ;
if(#hwnd0==hidemaruhandle(0))setactivehidemaru #co;
//
// ここで hidemaruhandle(0) で newfile のハンドル値を得る。
call enddisp "count a+++"+str(hidemarucount);
endmacro
// nexthidemaru ではアイコン化秀丸画面には行けない
// count にはアイコン化も数えられている。




[ ]
RE:05095 activehidemaru に使用するハンNo.05099
安久津 さん 00/02/24 18:39
 

>// hidemaruhandle の値と実際の画面転換 の時間差??
>//  あるかもしれない?? hidemaruhandle値を得る時の注意??
tagjump, backtagjump の後の hidemaruhandle() の方は最悪です。

  setclipboard "";
  grep "^", "*.*", ".", regular, filelist;
  if( ! result ){ beep; endmacro; }
  ##i = 0;
  while( ##i < 10 )
  {
    ##h1 = hidemaruhandle(0); // Grep結果
    tagjump;
    ##h2 = hidemaruhandle(0); // ジャンプ先
    backtagjump;
    if( ##h1==##h2 ) addclipboard "("+str(##i)+") ##h1==##h2\n";
    ##i = ##i + 1;
  }
  while( basename != "" ) nexthidemaru;
  gofileend;
  paste;
  beep;
endmacro;

Grep 関連のマクロがおかしくなっているのはこれかな?
ではでは。

[ ]
RE:05099 activehidemaru に使用するハンNo.05106
ENCODINGSHIFTJIS さん 00/02/25 12:26
 
// testtagjump.mac
// tagjump と hidemaruhandle の返値のようす
// タグのある行でマクロ実行
#hwndbase=hidemaruhandle(0);
##i=6;while(0<##i){##i=##i-1;
##hwnd[##i][0]=hidemaruhandle(0);tagjump
##hwnd[##i][1]=hidemaruhandle(0);backtagjump
 }
setactivehidemaru #hwndbase;
gofileend
##i=6;while(0<##i){##i=##i-1;
insert str(##hwnd[##i][0])+"==>";
insert str(##hwnd[##i][1]);insertreturn
 }
endmacro

lenadj.mac(43)

確認しました。

結果は強烈ですね、ジャンプ先が既に開いているときは正常。
新規に面を開く時は異常、出てくるパターンは不定。
新面を秀丸管理の hidemaruhandle prev next のチェーンに
登録するのがマクロ実行と同期してないのかも。

とりあえずの対策は tagjump で handle 値が変わっていないときや
-1 の時は newfile と似た待ちを付ける?
self面の中で JUMP する場合は対応してないですが。

迷信であってほしいですが。



[ ]
RE:05106 activehidemaru に使用するハンNo.05113
秀丸担当 さん 00/02/25 17:57
 
tagjumpとbacktajumpで異常になる件、こちらでも確認できました。
しかしこれはV3.01よりも前のバージョンでも起きているではないですか。
とりあえずこの件はこの件として調べておきます。

[ ]
RE:04957 3.04 のマクロの動作が変No.05124
Makkie さん 00/02/26 17:10
 
コメントありがとうございます。

> 画面の切替えの時間より早く、マクロ実行が進むのかもしれません。

なんだかこういう雰囲気のことが起こっているような気がしてきました。
マクロは簡略化すると以下のような感じになっています( /h を指定した秀丸か
ら /x でマクロを起動しています)。
------------------------------------------------------------------------
.
.
#h1 = hidemaruhandle ( 0 );
openfile "/h aaa.txt";
#h2 = hidemaruhandle ( 0 );
.
.
Loop :  // 処理ファイルによって、数回から数10回ループする。
  .
  .
  setactivehidemaru #h1;
  insert .......;         // insert 一つだけ
  setactivehidemaru #h2;  // ←
goto Loop;
.
.
------------------------------------------------------------------------
ループしている間、数回に一回ぐらいの割合で←の命令が無視されるようなこと
が起きている感じです(必ず無視されるのではなく、ちゃんと有効に働くことの
方が多い)。従ってループの先頭に戻ると #h1 のファイルを処理してしまい、
意図しない結果になります。マクロの処理結果をみると、そんなことが起こって
いると推測できます。

3.01以前にはそんなことなかったし、3.01に戻して今までどおりうまく
行っているし、過去3年ぐらいちゃんと動いているマクロなので、ミスはないよ
うに思うのですが・・・・・・。ハンドルとか setactivehidemaru の使い方に
問題があるのでしょうかね。


[ ]
RE:05095 TAGJUMP BACKTAGJUMP 緊急対策?No.05267
ENCODINGSHIFTJIS さん 00/03/08 16:17
 
// testtagjump.mac  
//  緊急対策 信頼性? マシかどうかはテストしてからどうぞ。
// tagjump と hidemaruhandle の返値のようす
// どうも新面は開くが秀丸管理に登録されるのが遅れるようだ?
// それを見ているマクロもおかしくなる。
// tagjump backtagjump (directtagjump grep localgrep...)
// win開いているが秀丸管理情報が同期していない 飛んでから登録?
// findhidemaru は不調?
//
// 6行以上タグのある行でマクロ実行
goto main;

TAGJUMP:// ---------------------------------------
#hwnd=hidemaruhandle(0);// #hwnd はグローバル変数に
golinetop2 searchdown "(";$$fname=gettext(0,y,x,y);// 飛び先
right; beginsel searchdown ")";
$$no=gettext(seltopx,seltopy,selendx,selendy);
##no=val($$no); // 行番号
try1:
       #g=findhidemaru($$fname);
if(-1!=#g){#g=hidemaruhandle(#g);
 while(#g!=hidemaruhandle(0))setactivehidemaru #g;
 movetolineno 1,##no; goto tagjump1;  } // 自分でも飛べる
      else{ tagjump // 新面でまだ中身が詰まっていないことがある。
                   // 同名の面の統合に時間がかかっている
 while(hidemaruhandle(0)==#hwnd){ // 自分の中では飛べない
                                runsync2 "command.com /c dir";
                                runsync2 "command.com /c dir";
                                  // Sleep かな?
                                goto try1; }
 if(linecount2==0)goto try1;// 新面 ?
 }
tagjump1:
if(#hwnd==hidemaruhandle(0)){menu "ダメじゃん"; } // すっぽ抜け
$ary[#h]=str(hidemaruhandle(0));#h=#h+1;
return;// -------------------------------------------

BACKTAGJUMP:// --------------------------------------
while(#hwnd!=hidemaruhandle(0))setactivehidemaru #hwnd;
$ary[#h]=str(hidemaruhandle(0));#h=#h+1;
return;// -------------------------------------------

main:
#h=0;$ary[#h]=str(hidemaruhandle(0));#h=#h+1;
#l=6; while(#l>0){ #l=#l-1;
call TAGJUMP;
call BACKTAGJUMP;
down;
 }

menu str(#h);
gofileend #l=0; while(#l<#h){ insert $ary[#l]+"\n"; #l=#l+1; }

endmacro

__e__

[ ]
RE:05267 TAGJUMP 緊急対策 2No.05281
ENCODINGSHIFTJIS さん 00/03/09 15:52
 
対策付き tagjump 第2版 (けっこう不毛かな)

// tagjump3.mac
//
      ##c=hidemarucount;
      ##h=hidemaruhandle(0);

tagjump // 面は必ず開く

if(##h==hidemaruhandle(0)){      // 飛んでない
while(##c==hidemarucount){      // カウント待ち
    setactivehidemaru -1;      // 強制移動刺激
runsync2 "command.com /c dir";// Sleep を入れる
 }
}
menu "どこの面?1";// 最後に持ってくるようだ
menu "どこの面?2";// 最後に持ってくるようだ
menu str(hidemaruhandle(0))
    ,str(hidemaruhandle(1))
    ,str(hidemaruhandle(2))
    ,str(hidemaruhandle(3))
    ,str(hidemaruhandle(4))
    ,str(hidemaruhandle(5))
    ,str(hidemaruhandle(6));

endmacro

[ ]