バージョンアップしたらマクロでエラーにNo.16355
Y.T. さん 04/01/08 09:57
 
秀丸を Ver.3.19 から 4.04 にバージョンアップしたら今までちゃんと動作していた
マクロが使えなくなりました。

私の使用しておりますメールソフト(AL-MAIL)の特定のフォルダにあるメールファイ
ル(*.ALM)を別のフォルダに移動した後、設定ファイル(Entry.lst, Entry.ini:いず
れもテキストファイル)
を書き換えるためのマクロ「AL-Mail.mac」を作っておき、バッチファイルで以下の
ように書いておき、実行します。

-----
move D:\AL-Mail\Mailbox\Account1\User001.box\User001.box\*.ALM D:\Hozon
C:\Progra~1\Hidemaru\hidemaru.exe /xAL-Mail.mac D:\AL-Mail\Mailbox\Account1\
User001.box\User001.box\Entry.lst D:AL-Mail\Mailbox\Account1\User001.box\Use
r001.box\Entry.ini
-----

また、AL-Mail.mac は、

-----
// 開いているファイル数の確認
#c =hidemarucount;
if (#c > 2)
{
 message "秀丸で開いているファイルが2つより多いです。";
 endmacro;
}


// 開いているファイル名の確認
if (basename != "entry.ini")
{
 setactivehidemaru findhidemaru("entry.ini");
 if (!result)
 {
  message "「Entry.ini」ファイルが開かれていません。";
  endmacro;
 }
}
if (basename != "entry.lst")
{
 setactivehidemaru findhidemaru("entry.lst");
 if (!result)
 {
  message "「Entry.lst」ファイルが開かれていません。";
  endmacro;
 }
}

// "Entry.ini" ファイルの編集
…処理用の記述…

// "Entry.lst" ファイルの編集
…処理用の記述…

// 終了
saveexitall;
-----

となっております。「// 開いているファイル名の確認」の処理のところで、開かれ
ている2つのファイルが「Entry.lst, Entry.ini」であることを確認し、その後で処
理に進むということを考えています。

今までは問題なく処理が進んで終了していたのですが、バージョンアップすると
「「Entry.lst」ファイルが開かれていません。」というメッセージが出て処理が終
わります。つまり、
「setactivehidemaru findhidemaru("entry.lst");」
のコマンドに対して、Entry.lst が見つけられないようなのです。

バージョンダウンしたら再び処理できるようになりました。

本件に関しましてコメントやアドバイスを頂ければ幸いです。宜しくお願いいたしま
す。

[ ]
RE:16355 バージョンアップしたらマクロでNo.16357
秀まるお2 さん 04/01/08 15:34
 
 こちらでその、

  D:AL-Mail\Mailbox\Account1\User001.box\User001.box

 と同じフォルダを作成して、そこに適当な内容のEntry.lstとEntry.iniファイ
ルを作成して、同じマクロを実行した限りは、特にエラーメッセージは出ません
でした。

 こちらWindows2000の環境ですが、Windows95のテスト環境で試しても大丈夫み
たいです。

 Entry.lstファイル上でマクロ実行しても、Entry.iniファイル上でマクロ実行
しても大丈夫でした。

 果たしてどうしてうまくいかないのかよく分かりませんが…。何かバグが再現
する条件は他にないでしょうか?。例えばそちらの環境で、「d:\」の所にEntry.
iniとEntry.lstを作成して試してみたらどうかとか、ファイルの中身が例えば
"AAA"だけのシンプルな物ならどうかとか…。


 findhidemaruについての処理を、ソースコード上でV3.19とV4.04とで比較して
みましたが、まったく同じ処理となっていました。

[ ]
RE:16357 バージョンアップしたらマクロでNo.16359
Y.T. さん 04/01/08 19:13
 
コメントありがとうございます。

> 果たしてどうしてうまくいかないのかよく分かりませんが…。何かバグが再現
>する条件は他にないでしょうか?。例えばそちらの環境で、「d:\」の所にEntry.
>iniとEntry.lstを作成して試してみたらどうかとか、ファイルの中身が例えば
>"AAA"だけのシンプルな物ならどうかとか…。

先ず簡単化のため、マクロファイルを以下のように修正しました。

-----
if (basename != "entry.ini")
{
 setactivehidemaru findhidemaru("entry.ini");
 if (!result)
 {
  message "「Entry.ini」ファイルが開かれていません。";
  endmacro;
 }
}

if (basename != "entry.lst")
{
 setactivehidemaru findhidemaru("entry.lst");
 if (!result)
 {
  message "「Entry.lst」ファイルが開かれていません。";
  endmacro;
 }
}

exitall;
-----

更に、Entry.ini と Entry.lst の2ファイルを D:\ に置き、バッチファイルの中身
もこれに合わせて、

-----
C:\Progra~1\Hidemaru\hidemaru.exe /xAL-Mail.mac D:\Entry.ini D:\Entry.lst
-----

と簡単にしました。また、マクロファイルで開いたファイルの編集を行う部分を削除
しましたので、ファイルの中身は関係ないと思いますが、念のため、AAA と BBB と
だけ記述した簡単な物にしました。

で、結果はやはり Ver.3.19 ではOKで、Ver.4.04 ではダメです。(データ処理を
行わないようにしたので、上手くいったときもファイルを開いて閉じるだけですが
…。)


因みにマクロの中身の Entry.ini と Entry.lst に対する処理の順番、及びバッチフ
ァイルで開くファイルの順番を変えて試した結果は以下の通りで、メッセージが出る
のはバッチファイルで開く順番に依存しており、マクロファイルの処理の順番には関
係なさそうです。

バッチファイル 先:Entry.lst 後:Entry.ini
マクロファイル 先:Entry.lst 後:Entry.ini
→「Entry.ini ファイルが開かれていません」

バッチファイル 先:Entry.lst 後:Entry.ini
マクロファイル 先:Entry.ini 後:Entry.lst
→「Entry.ini ファイルが開かれていません」

バッチファイル 先:Entry.ini 後:Entry.lst
マクロファイル 先:Entry.lst 後:Entry.ini
→「Entry.lst ファイルが開かれていません」

バッチファイル 先:Entry.ini 後:Entry.lst
マクロファイル 先:Entry.ini 後:Entry.lst
→「Entry.lst ファイルが開かれていません」


全く原因が分からなくなりました。

因みに、Windows XP Pro. です。

[ ]
RE:16359 バージョンアップしたらマクロでNo.16360
秀まるお2 さん 04/01/08 19:36
 
> C:\Progra~1\Hidemaru\hidemaru.exe /xAL-Mail.mac D:\Entry.ini D:\Entry.lst

 /xオプションとファイル名の指定を同時にやってる(しかもファイル名を2つ
指定してる)訳ですか。どうもこれが関係してるっぽいです。

 いろいろテストしてみます。

[ ]
RE:16360 バージョンアップしたらマクロでNo.16361
秀まるお2 さん 04/01/08 20:00
 
 再現できました。なんとなく仕様というか、むしろV3.19でまともに動く方が
不思議ですが…。

 根本的な原因は、/xで指定したマクロが、1つ目に開いた秀丸(entry.ini)
上で実行されつつも、その秀丸よりもEntry.lstを開いた秀丸が手前にいるため
に、findhidemaruで見つからないということのようです。

 findhidemaruは、自分の秀丸よりも後方しか探すことが出来ません。返す値が
0以上の正の数なので、前方を返すことが出来ないです。(V3.19以前から元々そ
ういう作り)

 ですが、なぜかV3.19ではまともに動くようです。???

-------
 で、どう対処するかですが…。

 そもそも、複数ファイル名と/xオプションを同時に指定した場合の秀丸エディ
タの挙動がよくないので、それはそれで直した方がいいような気がします。ただ、
V4.0x系で直す程大きなバグということも無い気がします。(V3.19でも同じ動作
な訳だし)

 V4.10βの方でどう対処するかは、後ほど秀丸担当と相談します。

 とりあえずは、/xオプションと2つのファイル名を同時に指定するのはあきら
めていただきまして、コマンドラインを2つに分けるやり方にして欲しいです。

C:\Progra~1\Hidemaru\hidemaru.exe D:\Entry.lst
C:\Progra~1\Hidemaru\hidemaru.exe /xAL-Mail.mac D:\Entry.ini

 という具合です。これでとりあえず回避できると思います。

 出来れば、コマンドラインからはマクロ起動だけを指示するようにして、マク
ロの中からentry.lstとentry.iniファイルを開くようにした方が確実だと思いま
す。Windowsはマルチタスク環境なので、上記のようにコマンドラインを起動し
ても、al-mail.macを実行する時点で確実にentry.lstが開き終わっている保証は
ありませんので。

[ ]
RE:16361 バージョンアップしたらマクロでNo.16370
Y.T. さん 04/01/09 11:16
 
> 再現できました。なんとなく仕様というか、むしろV3.19でまともに動く方が
>不思議ですが…。
> …中略…
> ですが、なぜかV3.19ではまともに動くようです。???

いままで不具合が起きるはずのマクロ処理なのに不思議と起きていなかったと言うこ
とですね。

>C:\Progra~1\Hidemaru\hidemaru.exe D:\Entry.lst
>C:\Progra~1\Hidemaru\hidemaru.exe /xAL-Mail.mac D:\Entry.ini

この方法ですと、バッチファイルを実行して Entry.lst が秀丸エディタで開かれた
時点でバッチ処理が待ちの状態になります。バッチ処理を続けるには開いた Entry.l
st を閉じなくてはいけないので、結局二つのファイルを同時に開けないと言うこと
になります。

> 出来れば、コマンドラインからはマクロ起動だけを指示するようにして、マク
>ロの中からentry.lstとentry.iniファイルを開くようにした方が確実だと思いま
>す。Windowsはマルチタスク環境なので、上記のようにコマンドラインを起動し
>ても、al-mail.macを実行する時点で確実にentry.lstが開き終わっている保証は
>ありませんので。

…ということで、こちらのアドバイスを採用させて頂きました。問題なく動作してお
ります。

ありがとうございました。

[ ]
RE:16370 バージョンアップしたらマクロでNo.16376
秀まるお2 さん 04/01/09 17:34
 
 マクロ側で対応していただきましてありがとうございます。

 秀丸V4.10の方でどう対処するか秀丸担当と相談した所、現状のマクロ実行お
よびファイルを開くタイミングをいじるのは難しいので、findhidemaruを直すこ
とにしました。

 現状のfindhidemaruでは、自分自身よりも手前に位置する秀丸を見つけること
が出来ませんが、これをちゃんと見つけられるように修正し、見つけた場合に、
それなりに適当なウィンドウ番号を返すようにします。

 例えば自分自身の後ろと手前に秀丸がいる場合は、0番は自分、1番は後ろのウ
ィンドウとなりますが、手前のを-1としてしまうとまずいので、手前のは2番、
つまり、一番後ろの秀丸よりも+1の値を返すようにします。

[ ]