[Mew-dist 2344] Re: imput's hook

Masahiro MURATA ( 村田全寛 ) muse at example.com
1997年 10月 2日 (木) 21:34:54 JST


  村田です。

/// On Wed, 01 Oct 1997 23:19:05 +0900
/// Motonori Nakamura wrote:

nakayosh> ということは、$Hook_* には、
nakayosh> $Hook = "&add_header(\@Header, 1, 'From', 'foo at example.com');"; 
nakayosh> のように、eval される文字列を入れるのではなくて、
nakayosh> $Hook = sub { &add_header(\@Header, 1, 'From', 'foo at example.com'); }; 
nakayosh> のように匿名サブルーチンへのリファレンスを入れるということでよろ
nakayosh> しいんでしょうか?

> 上記のような変更をした場合にはそういうことになりますし、
> あるいは引数がなければ、$Hook にいきなり &add_header を渡します。

> ただ、このあたりは結構思い付きで書いているだけなので、Hook を必要と
> している人に、どのような仕様が便利であるかを考えて頂きたいと思います。
> 現在実装されている Hook もリクエストに応じて導入したものですし。

  最初にリクエストした人,です。

> 渡すべき引数が固定であれば scan.sbr 方式でも良いのですが…

  必要とする引数(情報)は作りたい関数によって異なると思います。最初に要望し
たときは,パッチを当てることなしに特殊な処理がしたい(imputの動きを変えたい
),ということでした。ですから,emacs-lisp の xxx-hook のように関数を定義で
きるもの,として Hook 変数を入れて頂きました。

# でも,Hook って私しか使ってないだろうな...

  ですから,もし引数が必要な関数を呼びたいのなら,$Hook = sub { ... }; で
も良いでしょうし,もっと複雑なことをするなら引数を取らない関数を定義して,

$Hook = "my_add_header"; 

sub my_add_header {
	...
	&add_header(\@Header, 1, 'From', 'foo at example.com');
	...
}

とすれば良いと思います。

  以下に,私が使っているフック関数(User_requireで指定するファイル)の一部を
示します。

# これは,NIFTY SERVE へのメール・ニュースはオートパイロットプログラムで出
# したい,ということから作ったものです。ヘッダを見て NIFTY SERVE へのメー
# ル・ニュースなら,そのオートパイロットプログラムが参照するディレクトリへ
# 出力するようにするものです。

# これによって,インターネットのメール・ニュース,NIFTY SERVEのメール・ニュー
# ス(フォーラム)は全て Mew で書いて,imput で出すだけでよいようになってい
# ます。

--
村田 全寛 / MURATA Masahiro
-------------- next part --------------
package aaa;

use IM::Message;
	     
$package = "aaa";

...

&init;

sub init
{
    $::Hook_PreHeaderconv = "${package}::nifty_newscheck";
    $::Hook_PreFinalHeaderProc = "${package}::headercheck";
    $::Hook_PreDispatching = "${package}::nifty_maybe_send";
}

#
# nifty_newscheck()
#
sub nifty_newscheck {
    local($origfrom);

    if ($::News_flag
	&& (&header_value(\@::Header, "Newsgroups") =~ /^nifty\./)) {
	$Nif_message = 1;
	$::Iso2022jp_header_mime_conv = 0;
	$origfrom = &header_value(\@::Header, "From");
	&add_header(\@::Header, 1, "From", $nifty_from);
    }

    return 1;
}

sub headercheck {

    ...
}


#
# DISPATCH THE MESSAGE FOR NIFTY-Serve
#
sub nifty_maybe_send {

}

...

1;


Mew-dist メーリングリストの案内