こんなマクロで良いのでしょうか?No.16943
n'Guin さん 04/03/08 22:03
 
みなさま、こんばんは。 n'Guin といいます。

鶴亀を3枠区切りで使っています。 メールのプレビューの枠に
ヘッダを表示させています。

そのヘッダの From: を右クリックすると、○○宛メールの作成
で、新規メールを作れます。

このときの新規メールは、ツールバーから新規メールを作るときと
異なり、相手の名前がわかっています。 その名前を本文の
冒頭に表示できればいい(返信メールの場合なら、テンプレート
$(UnDoubleQuote,$(SetNameOnly,$(RootHeader,From))) 様 のように)
と思ったのですが、新規メールのテンプレートでは、$(UnDoubleQuote,$(SetNameOnl
y,$(RootHeader,From))) は
使えないようです。

そこで、以下のマクロ(TKNewMail.mac)を書き、
新規メールのテンプレートは、次のように指定しました。

 様
            n'Guinです。

$(ExecMacro,"TKNewMail.mac")$-

これで動くのですが、実に迂遠なことをしているような気がして
なりません。 マクロで、テンプレートの
$(UnDoubleQuote,$(SetNameOnly,$(RootHeader,From)))
を書くのに、他の良い方法があったら、教えてください。

よろしくお願いします。

TKNewMail.mac--- ここから

// エディタウィンドウから、○○宛メールの作成 のときに、
// ○○様・先生と先頭行に書くマクロ
//

// To: を探してコピー
searchup "To:.+\n", regular;
if(!result) {
 gofiletop;
 endmacro;
};

copyline;

// 先頭行に戻ってコピーして、人名だけをペースト
gofiletop;
selectline;
delete;
paste;
gofiletop;
replacedown "To:[ ]+\\f.+\\f<.+", "\\1", regular;
if(!result ){
 gofiletop;
 endmacro;
};
gofiletop;
selectline;
replaceall "\"", "";

// 敬称を選択して終了


menu "&1) 先生", "&2) 様", "&3) さん";

if(result == 0 ){
 endmacro;
}else if(result == 1 ){
 insert "先生";
}else if(result == 2 ){
 insert "様";
}else {
 insert "さん";
};









[ ]
RE:16943 環境を書き忘れましたNo.16944
n'Guin さん 04/03/08 22:05
 
みなさま、すみません。 n'Guin です。

環境を書き忘れました

OS は、Xp Pro SP1 で、IE 6.0 SP1 です。
鶴亀は、Ver. 3.20
秀丸は、Ver. 3.19 です。

よろしくお願いします。

[ ]
RE:16944 環境を書き忘れましたNo.16948
秀まるお2 さん 04/03/08 22:43
 
 マクロでやるなら、n'Guinさんのような形でベストに近いんじゃないかと思い
ます。

 しいてテンプレートだけでやるとしたら、「新規メール」とやってからマクロ
実行する作戦よりも、あくまで「返信メール」としつつも、実は新規メールを作
成するという作戦がいいんじゃないかと思います。

 返信メールのテンプレートにて、

    $(SetHeader,Subject,"")$-
    $(DeleteHeader,"In-Reply-To")$-
    $(DeleteHeader,"References")$-

 の3つを入れておけば、「返信メール」で実行したにもかかわらず作成される
メールは新規メールとほぼ同じ物になります。

 テンプレートをいちいち選択するのは面倒かもしれませんけど。

[ ]
RE:16948 さっそくのご教示、ありがとうごNo.16950
n'Guin さん 04/03/08 22:51
 
秀まるお様

さっそくのご教示ありがとうございます。

> 返信メールのテンプレートにて、
>
>    $(SetHeader,Subject,"")$-
>    $(DeleteHeader,"In-Reply-To")$-
>    $(DeleteHeader,"References")$-
>
> の3つを入れておけば、「返信メール」で実行したにもかかわらず作成される
>メールは新規メールとほぼ同じ物になります。
なるほど。 確かにこの方が、エレガントな感じがします。
うなりました。

> テンプレートをいちいち選択するのは面倒かもしれませんけど。
確かにこれが欠点ですね。

マクロでやるには、いくつか欠点もあることが判明しつつあるので、
少し検討したいと思います。 とはいえ、こんな感じでよいと
教えていただき、胸をなでおろしております。
ありがとうございます。


[ ]
RE:16943 こんなマクロで良いのでしょうかNo.16952
アルビレオ さん 04/03/08 23:21
 
鶴亀ユーザーのアルビレオです。

>そのヘッダの From: を右クリックすると、○○宛メールの作成
>で、新規メールを作れます。
>
>このときの新規メールは、ツールバーから新規メールを作るときと
>異なり、相手の名前がわかっています。 その名前を本文の
>冒頭に表示できればいい(返信メールの場合なら、テンプレート
>$(UnDoubleQuote,$(SetNameOnly,$(RootHeader,From))) 様 のように)
>と思ったのですが、新規メールのテンプレートでは、$(UnDoubleQuote,$(SetNameOnl
>y,$(RootHeader,From))) は
>使えないようです。

ここでいう新規メールの作成とはメールアドレスを選択してから、「xxx宛の
メールを作成」を実行したときの話ですよね?
テンプレートを設定しない状態で実行すればわかりますが、この新規メールには
To:が設定済みになっています。
だから
$(UnDoubleQuote,$(SetNameOnly,$(RootHeader,From)))
のかわりに
$(UnDoubleQuote,$(SetNameOnly,$(CurrentHeader,To)))
を使えばいいわけです。

それから敬称の選択ですが、マクロのメニューで選択するよりも
----
$(UnDoubleQuote,$(SetNameOnly,$(CurrentHeader,To)))
            n'Guinです。
----
$(UnDoubleQuote,$(SetNameOnly,$(CurrentHeader,To)))先生
            n'Guinです。
----
$(UnDoubleQuote,$(SetNameOnly,$(CurrentHeader,To)))様
            n'Guinです。
----
$(UnDoubleQuote,$(SetNameOnly,$(CurrentHeader,To)))さん
            n'Guinです。
----
とテンプレートを別々に用意しておいて、新規メールウィンドウを開いてから
メニューの[設定]-[テンプレートの切り替え]を使う方が簡単だと思います。

どうしても新規作成時にメニューを出したいなら、n'Guinさんのマクロを元に私
が書き直してもいいですが。

[ ]
RE:16950 さっそくのご教示、ありがとうごNo.16961
秀まるお2 さん 04/03/09 16:39
 
 アルビレオさんのコメントのように、「新規メール」としつつも、To:ヘッダ
の中身をCurrentHeader命令で取り出した方がいいかもしれません。

 現状、「searchup "To:.+\n", regular」のようにやってる処理が、
dllfuncstr("CurrentHeader","To")で簡単に取り出せるようです。

[ ]
RE:16952 ご教示ありがとうございますNo.16963
n'Guin さん 04/03/09 20:21
 
>だから
>$(UnDoubleQuote,$(SetNameOnly,$(RootHeader,From)))
>のかわりに
>$(UnDoubleQuote,$(SetNameOnly,$(CurrentHeader,To)))
>を使えばいいわけです。
なるほど。

この意見を読んで、探してみたら、テンプレートの文法のところで
見つけました。 ご教示ありがとうございます。

テンプレートの切り替えは、良いアイディアだと思いますが、
操作の手間を考えると、現状のようにメニューが出るほうが、
楽な感じがします。

両方やってみて、良い方法を見つけたいと思います。
ありがとうございました。


[ ]
RE:16961 さっそくのご教示、ありがとうごNo.16964
n'Guin さん 04/03/09 20:23
 
> アルビレオさんのコメントのように、「新規メール」としつつも、To:ヘッダ
>の中身をCurrentHeader命令で取り出した方がいいかもしれません。
>
> 現状、「searchup "To:.+\n", regular」のようにやってる処理が、
>dllfuncstr("CurrentHeader","To")で簡単に取り出せるようです。

再度のご教示ありがとうございます。
自分の操作スタイルに合った方法を見つけていきたいと思います。

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

[ ]
RE:16963 ご教示ありがとうございますNo.16965
n'Guin さん 04/03/09 20:41
 
アルビレオさん、こんばんは。

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

実際にやってみると、フォルダの設定で、
新規メールのテンプレートを個別に設定していると、
そちらが、優先されてしまい、アルビレオさんから
教えていただいた

$(UnDoubleQuote,$(SetNameOnly,$(CurrentHeader,To)))

の設定が使われないことに気が付きました。

こうなるのは、、「xxx宛のメールを作成」するのが、
メーリングリストの参加者宛のメールをだすことが
多いので、当然、そのフォルダでは 

○○ML のみなさま
          n'Guin です。

といった独自テンプレートを利用しているのです。

いろいろな状況に合わせて、マクロや、テンプレートで
対応できる鶴亀メールの柔軟さに、いまさらながら、
驚きます。
また、アルビレオさんのように、親身になって、
アドバイスしてくださる方もおり、本当にありがたいです。
感謝、感謝です。

今回は、秀まるおさんからのご教示を利用して、
再度、マクロに挑戦してみます。

ご教示いただき、ありがとうございました。

[ ]
RE:16965 ご教示ありがとうございますNo.16978
アルビレオ さん 04/03/10 11:09
 
アルビレオです。

>実際にやってみると、フォルダの設定で、
>新規メールのテンプレートを個別に設定していると、
>そちらが、優先されてしまい、アルビレオさんから
>教えていただいた
>
>$(UnDoubleQuote,$(SetNameOnly,$(CurrentHeader,To)))
>
>の設定が使われないことに気が付きました。

あーなるほど。それなら新規メールのテンプレートではToをセットしないように
して、テンプレートから呼び出されるマクロの方でToが空ならMLのアドレスを
セットするようにするといいと思います。

----テンプレート

            n'Guinです。

$(ExecMacro,"TKNewMail.mac")$-
----

----TKNewMail.mac
//To:の内容取得
$To = dllfuncstr("CurrentHeader", "To");
gofiletop;
if( $To == "" ){
//To:が空ならMLに送信
 $s = dllfuncstr("SetHeader", "To", "○○MLのアドレス");
 insert "○○ML のみなさま";
}else{
//本文に名前を挿入
 insert dllfuncstr("UnDoubleQuote", dllfuncstr("SetNameOnly", $To));
//敬称を選択
 menu "&1) 先生", "&2) 様", "&3) さん";
 if(result == 1){
  insert "先生";
 }else if(result == 2){
  insert "様";
 }else if(result == 3{
  insert "さん";
 }
}
----

[ ]
RE:16978 ご教示ありがとうございますNo.17004
n'Guin さん 04/03/10 23:05
 
アルビレオさま、 n'Guin です。

いろいろ、ありがとうございます。
たくさんのメーリングリストにはいっているので、
アルビレオさんから、教えていただいたマクロを
参考に、いろいろ考えてみたいと思います。

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

[ ]