テンプレートのマクロ実行結果No.07221
三月 さん 03/10/07 06:37
 
メーリングリストの過去メールを取得するのに
本文中に「get nnn」と10個の連番を出すマクロ(test.mac)を使って
テンプレートを定義しようと思ったのですが、

$(SetHeader, To, "xxxxxx@sample.com")$-
$(ExecMacro,"test.mac")$-

とか、指定するとマクロの結果がSubjectに入り込んでしまいします。
$-をつけないといいのかとも思ったのですが変わりませんでした。

結局、

$(SetHeader, To, "xxxxxx@sample.com")
$(SetHeader, Subject, "get")
$(ExecMacro,"test.mac")

のようにSubjectをつけることで回避したのですが。
本来、マクロの実行結果は本文中に入るべきものではないのでしょうか?
ヘッダに入れる場合は
$(SetHeader, Subject, $(ExecMacro,"sub.mac"))$-
とか指定するのが正解かと。

あと、SetHeaderとかの$-のいるいらないの区別が不明確な感じです。
上記のように$-なしでも問題なさげですが。

鶴亀3.06

[ ]
RE:07221 テンプレートのマクロ実行結果No.07222
きいろいまふらあ さん 03/10/07 09:40
 
>$(SetHeader, To, "xxxxxx@sample.com")$-
>$(ExecMacro,"test.mac")$-
>
>とか、指定するとマクロの結果がSubjectに入り込んでしまいします。

>本来、マクロの実行結果は本文中に入るべきものではないのでしょうか?

test.macの内容が分からないのでなんともいえないですが、test.macの中に本文
領域に移動する処理を入れるのがスジかと思いますが。テンプレートが

$(SetHeader, To, "xxxxxx@sample.com")$-

のみの場合に、開いたエディタの中でカーソル(キャレット)がどこにいるか、
ということと、test.macに記述されている処理内容を考えると、おそらくは現状
の動作が妥当ではないかと思います。

>ヘッダに入れる場合は
>$(SetHeader, Subject, $(ExecMacro,"sub.mac"))$-
>とか指定するのが正解かと。

$(ExecMacro,"sub.mac")は文字列を返す関数ではなく、マクロを実行する命令で
すから、この書き方は文法的に成立しないのじゃないかと思います。

>あと、SetHeaderとかの$-のいるいらないの区別が不明確な感じです。
>上記のように$-なしでも問題なさげですが。

こちらについては私もヘルプの記述(例も)がちょっとわかりにくいと感じまし
た。

[ ]
RE:07222 テンプレートのマクロ実行結果No.07223
秀まるお さん 03/10/07 10:41
 
 補足します。エディタが起動した時点でのカーソル位置は、例えばSubject:ヘ
ッダが空であればそこになり、空のヘッダが何も無ければ本文の先頭となります。

 なので、test.macの先頭に、

   gofiletop;

 の1文を入れれば、Subject:ヘッダが空であってもマクロの動作は安定すると
思います。

 あとあと、テンプレートのSetHeader類の最後に「$-」を入れないでおくと、
その文余計な改行が本文に入ってくるはずです。今回はtest.mac側で本文を書き
換えてるから関係ないのかもしれませんけど。

[ ]
RE:07223 テンプレートのマクロ実行結果No.07224
三月 さん 03/10/08 01:17
 
> 補足します。エディタが起動した時点でのカーソル位置は、例えばSubject:ヘ
>ッダが空であればそこになり、空のヘッダが何も無ければ本文の先頭となります。
>
Subjectもマクロで設定しようとしたのですが、
>1つのテンプレートにExecMacro命令を複数入れた場合には、
>最後に指定したマクロのみが有効となり、その前に指定された
>マクロは無視されます(エラーにもなりません)。
ってのに引っかかって設定できなかったのでtest.macのなかで
最初にSubjectに行くことを期待してこんな感じにしました。
-------テンプレート--------
$(SetHeader, To, "xxxxxx@sample.com")$-
$(ExecMacro,"test.mac")$-
---------------------------
-------test.mac------------
openreg "CURRENTUSER", "Software\\Hidemacro";
#n =getregnum("ml-name");
#m = #n + 10;
insert "get " + str(#n+1) + " - " + str(#m) ; //たぶんSubjectにはいる
gofiletop; //本文の先頭
while( #n < #m ){
  #n = #n+1;
  insert "get " + str(#n) + "\n";
}
writeregnum "ml-name",#n;
closereg;
---------------------------
Subjectと本文に入れるのにもっと良い方法がありますか?
$(SetHeader, Subject,$(ExecMacro,"test.mac"))$-
ってやると確実にSubjectにはいるのかな?


[ ]
RE:07224 テンプレートのマクロ実行結果No.07225
アルビレオ さん 03/10/08 01:36
 
アルビレオです。

>Subjectと本文に入れるのにもっと良い方法がありますか?
>$(SetHeader, Subject,$(ExecMacro,"test.mac"))$-
>ってやると確実にSubjectにはいるのかな?

簡単に試してみましたが、テンプレートを

$(SetHeader, To, "xxxxxx@sample.com")$-
$(SetHeader, Subject, "")$-
$(ExecMacro,"test.mac")$-

として、空のSubjectを強制的に作るようにすればいけそうです。

[ ]
RE:07224 テンプレートのマクロ実行結果No.07231
秀まるお さん 03/10/08 10:08
 
 マクロヘルプの中の「ヒント集」というのがありまして、そこに、GoToHeader
サブルーチンというのがあります。それを使えばSubject:ヘッダにカーソル移動
させることは出来ます。

 それよりも、マクロの中からSetHeader関数を呼ぶのが手っ取り早いです。

-------test.mac------------
openreg "CURRENTUSER", "Software\\Hidemacro";
#n =getregnum("ml-name");
#m = #n + 10;
$subject = "get " + str(#n+1) + " - " + str(#m) ;
loaddll "tkinfo.dll";
#temp = dllfunc("SetHeader", "Subject", $subject);
gofiletop; //本文の先頭
while( #n < #m ){
  #n = #n+1;
  insert "get " + str(#n) + "\n";
}
writeregnum "ml-name",#n;
closereg;
---------------------------

[ ]