-*- text -*-
			mail reader for procmail
			 with Mew on GNU Emacs

	   procmail の出力ログを参照して，Mew でメールを読む

			    Prom-Mew 1.93.4

						LastUpdate: 1999.8.16

[prom とは？]

  procmail を使っていると，届いたメールを自動的に指定したフォルダーに取
り込んでくれるのは便利(*1)なのですが，いざ，Mule(Emacs)でそのメールを読
もうとすると多少手間がかかります。

  具体的には procmail が出力したログから，どのフォルダーに格納されたのか
を見て，フォルダーに移動，そしてメールの内容を見る，という手順が必要にな
ります。

  そこで、これらの手順を簡単にするために作成したのが prom(-mew) です。

	(*1) Mew にも大変素晴らしい refile 機能があるのですが，やはり毎
	     回 o キーを押さなければならず，大量のメイルが来る Mailing
	     List に多く入っていると，面倒な作業になります。そこで
	     procmail などを使用して自動的にメールを振り分けるとこの作業
	     が軽減できるのです。

[prom-mew.el]

  prom-mew.el は MH-e ではなく，Mew を使用してメールを読むようにしたもの
です(*2)。

  また，procmail 以外の手段(MH の slocal や Newsreader での mh folder 形
式の save)で MH 形式の folder に入ったメールも認識することができます(*3)。
ただし，Mew のキャッシュ機能を有効にしている必要があります(デフォルトで
有効になっているはず)。

	(*2) 最初に作ったのは，MH-e 対応版の prom.el でした。しかし，作
	     者は完全に Mew に移行したため，この prom.el の開発は終了し，
	     prom-mew.el の開発のみ行っています。

	(*3) 1.92.1 より，MH の folder コマンドは必要なくなりました。


[インストール]

  prom-mew.el を load-path 上のどこかにおけばいいだけです。byte-compile 
もしておきましょう。


[準備]

  まず，準備として，~/.emacs などに

  (autoload 'prom-mew "prom-mew" "mew for using procmail" t)
  (setq proc-log-list (list "~/Mail/from-log" "~/Mail/from-ML"))
			;; procmail が出力するログファイル(複数指定可)
			;; ~/.procmail の LOGFILE で指定したもの。
  (setq proc-keep-log "~/Mail/listlog")	;; ログの保存用ファイル

  (setq proc-lock-file "~/Mail/.lock")  ;; ロックファイル(下記参照)
			;; ~/.procmail の LOCKFILE で指定したもの。

と書いておきます。procmail のログを保存しないなら，

  (setq proc-keep-log nil)

と設定して下さい。メールを調べ終るとすぐに削除します。

  また，重要な設定として ~/.procmailrc に

  LOCKFILE=/home/hogehoge/Mail/.lock

とグローバルロックファイル名を指定しておきます。このロックファイル名を変
数 `proc-lock-file' に指定します。proc-lock-file のデフォルトは
"~/Mail/.lock" ですが，とにかく procmailrc でのロックファイル名と
proc-lock-file で指定したロックファイル名を同じにして下さい。

  この記述がないと，メールを見落とす事があるかも知れませんので，是非設定
して下さい。(でも，設定したからといって絶対見落とす事がないとは言い切れ
ません(汗))

	* prom-mew のロックは，1.92 まではシンボリックリンクを作る事で実
	  現していました。しかし，1.92 より procmail のパッケージにある 
	  lockfile プログラムを使うようになっています。lockfile プログラ
	  ムがインストールされていない場合は prom-use-lockfile を nil に
	  設定して下さい。従来通りシンボリックリンクを作ることでロックを
	  行います。


  ちなみに，procmail のログは以下の形式のものに対応しています。Subject 
はなくてもかまいません。

------------------------------------------------------------------------
From owner-mew-dist@itc.aist-nara.ac.jp  Sat Oct  4 07:44:31 1997
 Subject: [Mew-dist 2361] Re: imget
  Folder: ml/mew/4241
From owner-mew-dist@itc.aist-nara.ac.jp  Sat Oct  4 07:44:34 1997
 Subject: [Mew-dist 2362] Mew on Win32 Project has moved.
  Folder: ml/mew/4242
From handa@etl.go.jp  Sat Oct  4 07:44:36 1997
 Subject: Font property question
  Folder: ml/mule/1131
From muse@ba2.so-net.or.jp  Wed Jan  7 10:29:03 1998
 Subject: test
  Folder: /home/murata/Mail/inbox/1
------------------------------------------------------------------------
						  (ファイルサイズは省略)

  通常は，~/.procmailrc に

------------------------------------------------------------------------
MAILDIR=/home/murata/Mail

...

:0
inbox/.
------------------------------------------------------------------------

などのように記述することで，inbox フォルダーにメールが格納されます。また，

------------------------------------------------------------------------
:0
$MAILDIR/inbox/.
------------------------------------------------------------------------

のように絶対パスで指定しても構いません(1.92.5より)。ただし，

------------------------------------------------------------------------
:0
/tmp/inbox/.
------------------------------------------------------------------------

のように MAILDIR 以下ではないパスを記述した場合は，このメールを Mew で見
る事が出来ません。必ず Mew で扱えるフォルダー(パス)である必要があります。

  これ以外の形式に対応させたいなら，変数
`prom-get-new-mail-optional-method' に独自に書いた関数を定義します。詳し
くは各種の設定の項目をご覧下さい。


[使用方法]

  メールが届いたら，

	M-x prom-mew

を実行します。届いたメールの一覧が表示されますので，読みたいフォルダーに
移動して(n,pキー)，SPC を押します。するとフォルダーに格納されているメー
ルの内容が表示されます(`prom-auto-select-first' が non-nil の場合)。

  続けて SPC キーを押せば，次々とメールを読むことができます。また，メー
ルが複数のフォルダーに格納されていても SPC キーを押すだけで次のフォルダー
に移動して，全てのメールを読むことができます(`prom-auto-select-next'が 
non-nil の場合)。要は GNUS(Gnus) に似た操作方法になっています。

  だたし，prom-{folder|summary}-goto-folder(gキー) でフォルダーを選択し
た場合は，`prom-auto-select-next' が無視され，次のフォルダーには移りませ
ん。

  メールを読んでいる時に新たなメールが届いた時は，"Prom" mode で s キー
(prom-get-new-mail)を押して下さい。新たに届いたメールを含めてメールの一
覧が表示し直されます。

  また，読んでいないメールがある状態で，"Prom" mode を終了する(q キー)と，
未読メールの一覧を保存します。重要なメールだけを読んで，残りは後でじっく
り読みたい時などに便利でしょう。ただし，procmail で取り込んだ未読メール
のみです。後述の procmail 以外の手段で folder に入った未読メールは機能し
ません。

  あとはおまけみたいなものですが，"Prom" mode で L キー
(prom-folder-list-all-folders) を押すと，フォルダーの一覧が表示されます。
ここで，読みたいフォルダーに移動して SPC を押す事で，folder に移動する事
も出来ます。


* procmail 以外の手段で新しく folder に入ったメールを読む

  Prom-Mew 1.01 より，Mew の mew-summary-folder-dir-newp の機能を用いて，
procmail 以外の手段(例えば，MH の slocal や Newsreader で mh folder 形式
の save を行った場合など)で，新たに folder に入ったメールを認識すること
ができます。

  そのために，Mew の変数 `mew-summary-cache-use' が non-nil になっている
必要があります(デフォルトでなっているはず)。もっとも Mew を使っていて 
non-nil にしないわけがないと思いますが :-)。

  実際に未読メールを調べる方法は，C-u M-x prom-mew (または "Prom" modeの
画面で C-u s)とすれば，ミニバッファに `Checking unread folders ...' と表
示され，未読メールを調べます。あとは procmail の未読メールを読むのと同じ
で，SPC キーで次々と複数のフォルダにあるメールを読む事が出来るようになり
ます。

  C-u を押すのが面倒で，常に毎回チェックしたい場合は，~/.emacs に

(setq prom-get-new-mail-optional-method 'prom-check-unread-folders)

と設定してください。また，特定のフォルダーのみチェックしたい場合は，

(setq prom-get-new-mail-optional-method 'prom-check-list-folders)
(setq prom-check-folders '("+ml/freebsd-users-jp"))

などのように設定して下さい。


[各種の設定]

  以下にユーザが変更できる変数を示します。この他にも変更可能な変数はあり
ますが，それは御自身でハックして下さい(笑)。また，カッコ内はデフォルト値
です。
  `-- 1.51 --' などで示された後の変数は，そのバージョン以降に追加された
ものです。

	* 一部の変数名が prom-... ではなく，proc-... となっているのは，
	  procmailrc に依存した変数だからです。じゃあ proc-keep-log はな
	  んで? と言われると... (^^;


 proc-log-list (nil)
    procmailが出力するログのリスト。~/.procmailrc で LOGFILE で指定して
  ある名前。複数記述する事ができる。

    例: (setq proc-log-list '("~/Mail/from-log" "~/Mail/ml-log"))

 proc-keep-log (nil)
    procmailが出力するログを読み込んだ後，そのログを保管しておくファイル。
    nilならログを保管しない。

    例: (setq proc-keep-log "~/Mail/listlog")

 proc-lock-file ("~/Mail/.lock")
    procmailrc で指定されているグローバルロックファイル名。とにかく，
    ~/.procmailrc で指定されている LOCKFILE と同じ名前にする。

 prom-previous-hook (nil)
    promのset-upが実行される前に呼ばれる。

 prom-hook (nil)
    promのset-upが実行されてから呼ばれる。

 prom-exit-hook (nil)
    promの終了時に呼ばれる。

 prom-auto-select-first (t)
      mew による観覧をする時にfolderをscanした後，自動的に最初のメッセー
    ジを表示する。nilの場合はscanするだけで，メッセージは表示しない。

    [注意] non-nil にすると，最初のメッセージが multipart の場合，Mew の 
           summary での scan (imls) 終了後に part 部の summary 表示部分
           も .mew-cache に保存されてしまうことが起こる。1.92.1 より
           prom-wait-auto-select-firstを non-nil にすることによりこの問
           題は回避できるが，逆に imls が終了するまで待たされることにな
           る。

 prom-auto-select-first-for-checked-folder (t)
      prom-auto-select-first と同じだが，procmail のログから調べた 
    folder を読む場合ではなく，prom-check-unread-folders により調べられ
    た folder を読む場合に有効となる。これは個人的に nil の方が便利なた
    め設けものである(^^; (でもデフォルトは t)

 prom-auto-select-next (t)
      mew-summary-folder modeにおいて，SPC または，n キーで次のフォルダー
    に移動する。non-nilなら移動するが，nilなら移動しない。

 prom-full-window (t)
      non-nil なら，prom バッファをウィンドウの一画面にする。

 prom-kill-mew-buffer (t)
      non-nil なら，exit や goto-folder の際に古い mew のバッファを削除
    する。ただし，summary-buffer のみ。message-buffer は削除しない(手抜
    き)。

 prom-exit-kill-all-mew-buffer (t)
      non-nil なら，prom を終了する時に Mew のフォルダーとメッセージバッ
    ファを全て削除する。

 prom-ignore-no-mewcache-folders (nil)
      non-nil なら，未読メールの調査において mew のキャッシュファイル
    (.mew-cache)がないフォルダーについては調べない(無視する)。

 prom-ignore-check-folders ('("/$" "^\\+trash" "^\\+tmp" "^\\+draft"))
      prom-check-unread-folders による未読メールの調査において，無視する
    フォルダーのリストを正規表現で指定する。

    例: (setq prom-ignore-check-folders '("\\+draft" "\\+trash"))

 prom-sort-folder-list '("+inbox")

     新着メールをリスト表示する際に，フォルダーの並びを指定する。正規表
   現は使えず，フォルダー名をそのまま指定する。

 -- 1.51 --

 prom-get-new-mail-optional-method (nil)
      新たなメールがあるか調べる時(prom-get-new-mail)に，procmail のログ
    を調査する他に，調べる関数を指定する。例えば，MH の folder にある未
    読メールを調べたい場合は，下記例のように設定する。

    例: (setq prom-get-new-mail-optional-method
		'prom-check-unread-folders)

      もちろん，ユーザが任意に作った関数を指定してもよく，自分の環境に合
    わせて未読メールを調べる事が出来るようになった。また，
    prom-get-new-mail で指定したプレフィックスアーギュメントをその関数に
    渡すようになっているので，それを利用して動作を変える事も出来る。以上
    のように任意の関数を指定する場合には，prom-get-proc-log に相当する関
    数を指定する。

      代わりに，変数 prom-check-unread-folders は廃止された。

 -- 1.52 --

 prom-folder-toggle-move-key (nil)
      prom-folder-{next|prev}-unread-folder と 
    prom-folder-{next|prev}-folderのキーバインドを変更する(入れ換える)。
    一覧モードで "n" および，"p" キーだけで移動したい人向け。

      この変数は prom-mew を load する前に設定しておく必要がある。load 
    後は，"Prom" mode において "t" キー(prom-folder-toggle-move-key)で変
    更する事も出来る。

      実は作者が変更後のキーバインドの方がいいと感じたので付けたが(^^;，
    いままでは GNUS に似せるために変更しなかったのである...

 -- 1.85 --

      以下の変数で指定するフォルダー名には先頭に '+' をつけることが必要に
    なった。

      変数名			例
    prom-sort-folder-list	'("+inbox" "+so-net")
    prom-check-folders		'("+ml/freebsd-users-jp")
    prom-ignore-check-folders
	      '("/$" "^\\+\\.income$" "^\\+draft" "^\\+tmp$" "^\\+trash$")

 -- 1.92 --

 prom-use-lockfile (t)

      メール調査時にロックを行う時，non-nil なら procmail のソースパッケー
    ジに付属していた lockfile プログラムを使用する。lockfile 以外のプロ
    グラムを指定する場合は，`prom-prog-lockfile' を変更する。従来は ln 
    プログラムによるロック処理を行っていたが，既にロックされていた場合は
    ユーザが再度メールを調べるコマンドを実行しないといけなかった。しかし，
    lockfile プログラムではロックが解除されるまで待ち状態になり，何度も
    コマンドを実行しなくても済む。

       nil にするか non-nil にするかはお好みに応じて設定して下さい。
    lockfile プログラムがなければ nil にするか，`prom-prog-lockfile',
    `prom-prog-lockfile-arg-list' を設定します。

 prom-prog-lockfile ("lockfile")

      prom-use-lockfile を non-nil にした場合，のロックを行うプログラム
    名。

 prom-prog-lockfile-arg-list ('("-2" "-r4" "-l10"))
				          (旧 prom-lockfile-arg-list)

      prom-use-lockfile を non-nil にした場合，上記 lockfile プログラム
    に与える引数のリスト。これらの引数の最後に `proc-lock-file' の値が追
    加される。

 prom-mew-xheader ("Prom-Mew ?.?? (procmail reader for Mew)")

      Mew draft mode においてヘッダに "X-Prom-Mew:" フィールドを挿入する
    ときの内容。値が nil の時には "X-Prom-Mew:" フィールドは挿入されない。
    というより prom-mew.el がロードされる時に mew-header-alist に値を追
    加しないだけである。よって，nil にする場合は prom-mew.el をロードす
    る前に設定しておくこと。

 -- 1.92.1 --

 prom-list-display-header (t)

      non-nil なら，新着メールリストの表示において procmail のログに記録
    されている subject と from を表示する。nil なら表示しない。

 prom-wait-auto-select-first (t)

      prom-auto-select-first が non-nil の場合，summary で scan (imls) 
    が終了するのを待ってから，最初のメッセージを表示する。
    prom-auto-select-first の項目にある[注意]の欄を参照のこと。

 prom-sort-folder-list-2 (nil)

      新着メールをリストや prom-folder-list-all-folders でフォルダーを表
    示する際に，正規表現を使用してフォルダーの並びを指定する。
    prom-sort-folder-list を使用する場合に比べてソート時間が遅い。また，
    この変数を non-nil に設定した場合，prom-sort-folder-list は無視され
    る。

      例: (setq prom-sort-folder-list-2
		'("\\+inbox" "\\+ml/ "\\+[^/]+$" "draft/$" "\\+from/"))

 prom-highlight-mouse-line (t)

      prom-highlight-folder-use の名称から変更した。
      non-nil なら，prom folder mode においてマウスに合わせた highlight 
    表示を行い，mouse-2 ボタンでフォルダーの選択ができる。

 -- 1.92.2 --

 prom-list-display-from (t)

      prom-list-non-from の名称から変更した。
      non-nil なら，新着メールリストの表示において procmail のログに記録
    されている from を表示する。nil なら表示しない。
    `prom-list-display-header' が nil の場合は無視される。

 prom-auto-select-next-ignored-command-list
    ((list 'mew-summary-delete
	  'mew-summary-refile
	  'mew-summary-refile-again
	  'exit-minibuffer))

      `prom-auto-select-next' が non-nil であっても，これらのコマンドが
    実行された場合は次のフォルダーに移らない。

 -- 1.92.3 --

 prom-prog-lockfile-arg-list ('("-2" "-r4" "-l10"))

      prom-lockfile-arg-list の名称から変更した。

 -- 1.92.4 --

 prom-lock-optional-method (t)

      prom-get-new-mail-optional-method を設定している場合，non-nil なら
    その関数を実行している間でも proc-lock-file ファイルによるロックを行
    う。

 -- 1.92.12 --

 prom-get-proc-log-hook (nil)

      procmail のログを処理した後に実行する hook 変数。新着メール
    (procmail のログ)が存在する場合にのみ呼ばれる。また，このhookが呼ば
    れる時はロックされている状態である。それに対して，
    prom-get-new-mail-hook はメールが存在しなくてもメールを調べる際に毎
    回呼ばれ，ロックされていない。

 -- 1.92.13 --

 prom-lock-at-exist-log (t)

      non-nil なら，proc-log-list に指定したファイルが存在しているときの
    み，lock するようになる。

 prom-start-list-folders (nil)

      起動時に全フォルダーの表示を行うか制御する。'nomail-all なら新着メー
    ルがない場合のみ全フォルダーを表示する。t なら常に全フォルダーを表示
    する。nil なら未読メールのあるフォルダのみ表示する。

 -- 1.93.1 --

 prom-keep-log-max-size (nil)

      proc-keep-log を指定した場合，そのログの最大サイズを指定する。最大
    サイズを越えると，前のログを proc-keep-log に ".bak" をつけてファイ
    ルに移動する。

 -- 1.93.4 --

 prom-mew-addrbook-for-prom ('nickname)

      "Prom" mode で表示される Envelop From を置き換える方法を指定する。
    See `mew-addrbook-switch'.


[開発環境]

  Mule 2.3 (based on 19.34)
  Emacs 20.4
  XEmacs 21.1.2, 21.2.19

  Mew 1.93, 1.94b48

  上記以外の環境では動作確認はしていませんし，Mew がサポートしていない 
Nemacs や Mule-1.X などでは当然動作しないでしょう。上記にはないもので，
私自身は動作確認していませんが，19.28 ベースの Mule-2.3 でも動作している
ようです。

  Prom-Mew のバージョンはその時に動作確認を行った Mew のバージョン番号に
合わせていますので，Mew はできれば Prom-Mew のバージョン番号と同じものを
使用して下さい。Prom-Mew のバージョン番号よりも新しい Mew を使用しても動
作するかも知れませんが。最新版の Mew は以下の ftp サイトより入手できます。

	ftp://ftp.mew.org/pub/Mew/


[最新版の情報]

  Prom-Mew の最新版は下記の場所で入手できるかも知れません。ただし，突然
下記の場所にアクセスできなくなったり，別の場所に移動したりするかも知れま
せん。あらかじめご了承下さい。

	http://www02.so-net.ne.jp/~murata/
	http://www02.so-net.ne.jp/~murata/software/prom.html

[取り扱い]

  このプログラムを使用して生じたいかなる結果に対しても作者はいっさいの責
任を負わないものとします。しかし，コメントやバグなどがあれば以下のアドレ
スまでご連絡下さい。

						muse@ba2.so-net.ne.jp
