もっぱらメールクライアントには、Mew を利用させてもらってます
よく更新するので、追っかけるのは大変ですが、それなりに使っています。
と言う訳で、できればメーリングリストを購読することをお勧めします。
かと言う私はロムってますが(^^;
% cvs -d :pserver:anoncvs@anoncvs.mew.org:/cvsmew loginすると、以下のようにパスワードを聞かれますが、何も入力せずにリターンキーを押してください。
(Logging in to anoncvs@anoncvs.mew.org) CVS password:2. 最新版のソース一式を取り出します。
% cvs -d :pserver:anoncvs@anoncvs.mew.org:/cvsmew co mewすると、カレントディレクトリに "mew" というディレクトリが作られて、そのディレク トリに最新のソース一式が入ります。
% cvs update -d -P % make distcleanここで、% make distclean するのは、古い elc ファイルが問題になる場合があるからです。
% ./configure % make # make install簡単ですね (^^;
(autoload 'mew "mew" nil t) (autoload 'mew-send "mew" nil t) (autoload 'mew-user-agent-compose "mew" nil t) (global-set-key "\C-xm" 'mew) ; ← C-x m で Mew を起動しますその他は .mew.el に記述します。
(setq mew-auto-get nil)
(setq mew-auto-flush-queue t)
(setq mew-use-cached-passwd t)
(setq mew-use-timer nil)
(setq mew-pop-uidl-db nil)
(setq mew-draft-mode-hook (function (lambda () (auto-fill-mode 1))))
(setq elp-sort-by-function 'elp-sort-by-average-time)
(setq mew-replyto-to-list '("Reply-To:"))
(setq mew-replyto-cc-list nil)
(setq mew-fcc nil)
(setq mew-cc nil)
;; 重複メールに削除マークをつける
(setq mew-scan-form-mark-delete t)
;; 未読マークを付ける
(setq mew-use-unread-mark t)
;; 既読メールのみを auto refile (M-o) する
(setq mew-refile-auto-refile-skip-any-mark t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Meassage モードのヘッダ設定
;; 他のヘッダの表示 t:する nil:しない
(setq mew-field-other-visible t)
;; 表示する|しないヘッダの指定
(setq mew-field-spec
'(
;表示しないヘッダ
("^\\(Received\\|Return-Path\\|Sender\\|Errors-To\\):$" nil)
("^\\(Message-Id\\|In-Reply-To\\|References\\|Precedence\\):$" nil)
("^\\(Mime-Version\\):$" nil)
("^Resent-\\(From\\|To\\|Date\\|Message-Id\\):$" nil)
("^Delivered-" nil)
("^Disposition-Notification-To:$" nil)
("^X-\\(Face-Version\\|Face\\|UIDL\\|Now-Playing\\|cite-me\\):$" nil)
("^X-\\(Priority\\|MSMail-Priority\\|MimeOLE\\|Sender\\|Loop\\):$" nil)
("^X-\\(Bogosity\\|R-Mail_shop\\|BeenThere\\|Mailman-Version\\):$" nil)
("^X-Spam-\\(Flag\\|Probability\\):$" nil)
("^X-ML\\(Server\\|-Info\\|Driver\\):$" nil)
("^X-Mail\\(-From\\|er-Plugin\\):$" nil)
;表示するヘッダ
("^Subject:$" t
mew-face-header-key
mew-face-header-subject)
("^From:$" t
mew-face-header-key
mew-face-header-from)
("^\\(To\\|Apparently-To\\):$" t
mew-face-header-key
mew-face-header-to)
("^Cc:$" t
mew-face-header-key
mew-face-header-to)
("^Newsgroups:$" t
mew-face-header-key
mew-face-header-to)
("^Date:$" t
mew-face-header-key
mew-face-header-important)
("^X-Mailer:$" t
mew-face-header-key
mew-face-header-important)
("^User-Agent:$" t
mew-face-header-key
mew-face-header-important)
("^X-ML-\\(NAME\\|Name\\):$" t
mew-face-header-key
mew-face-header-xmew)
("^X-\\(ML-COUNT\\|Mail-Count\\|Seqno\\):$" t
mew-face-header-key
mew-face-header-xmew)
("^X-Mew:$" t
mew-face-header-important
mew-face-header-xmew-bad)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; thread
(setq mew-use-thread-cursor t)
(setq mew-thread-column 28);default 28
(setq mew-use-fancy-thread t)
(setq mew-fancy-thread-indent-strings [" ┣" " ┗" " ┃" " "])
(setq mew-use-thread-separator t);; nil
(setq mew-thread-separator "------------")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; caution
(setq mew-passwd-lifetime 144) ; password cache する時間 1 = 10 minute
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; config-alist
;; Input/Output を別々に切替 nil:する t:しない
;(setq mew-config-synchronize t)
;; 切替えは C (大文字の c )
(setq mew-config-alist
'(("hoge"
("name" . "HOGE)")
("user" . "hoge")
("pop-server" . "mail.hoge.jp")
("smtp-server" . "mail.hoge.jp")
("pop-size" . 0)
("pop-auth" . pass) ; pop 認証
("pop-user" . "hoge")
("dcc" . "hoge@mail.hoge.jp")
("msgid-domain". "hoge.jp")
("pop-delete" . t) ; 取り込んだメールは削除する
("mail-domain" . "hoge.jp")
("msgid-domain". "hoge.jp")
("queue-folder". "+queue")
("header-alist" . (("X-cite-me:" . "HOGE")
("X-Uri:" . "http://www.hoge.jp/"))))
("foo"
("name" . "FOO")
("user" . "foo")
("pop-server" . "mail.foo.jp")
("pop-size" . 0)
("pop-auth" . apop) ; APOP 認証
("pop-user" . "foo")
("smtp-server" . "mail.foo.jp")
("pop-delete" . t)
("dcc" . "foo@mail.foo.jp")
("mail-domain" . "foo.jp")
("msgid-domain". "foo.jp")
("queue-folder". "+queue")
("header-alist" . (("X-cite-me:" . "FOO")
("X-Uri:" . "http://www.foo.jp/"))))
))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; refile
(setq mew-refile-guess-alist
'(("To:"
("FreeBSD-users-jp@jp.freebsd.org" . "+mail/bsd/users-jp")
("mew-dist@mew.org" . "+mail/mew/dist")
)
("From:"
("report@mail.hoge..jp" . "+report")
)
("Subject:"
("information" . "+information")
)
("X-ML-Name:"
("Mew-Win32" . "+mail/mew/win32")
("Mew-dist" . "+mail/mew/dist")
)
("X-ML-NAME:"
("meadow-users-jp" . "+mail/meadow")
)
("X-Ml-Name:"
("perl" . "+mail/perl")
)))
;;;;;;;;;;;;;;;;;;;;;;
;; From アドレスを全部 To: に加える
(defun mew-insert-all-from-address (&optional fld)
(interactive)
(setq fld (or fld (mew-input-folder (mew-inbox-folder))))
(let ((msgs (directory-files (mew-expand-folder fld) nil "^[1-9][0-9]*$" 'no-sort))
froms from)
(save-excursion
(while msgs
(mew-set-buffer-tmp)
(mew-insert-message fld (car msgs) mew-cs-autoconv
mew-header-reasonable-size)
(setq msgs (cdr msgs))
(setq from (mew-header-parse-address mew-from:))
(if from (setq froms (cons from froms))))
(setq froms (mew-uniq-list froms)))
(insert (mapconcat (function identity) (sort froms 'string<) ", "))))
(setq mew-x-mailer
(concat mew-version
"\nUser-Agent: Emacs/" emacs-version
(if (featurep 'mule)
(concat " Mule/" mule-version))
(if (featurep 'meadow)
(let ((mver (Meadow-version)))
(if (string-match "^Meadow-\\(.*\\)$" mver)
(concat " Meadow/"
(substring mver
(match-beginning 1)
(match-end 1))))))
(concat " OS/" system-configuration)))
(require 'mm-version)を加えます。
;; mew-fancy-summary を使う (add-hook 'mew-init-hook (lambda () (require 'mew-fancy-summary))) (require 'font-lock)
# cd /usr/ports/japanese/w3m # make install clean
(require 'mew-w3m)
(require 'clearcite)
(defun mew-clearcite ()
"メッセージバッファの引用をすっきりさせる
すでにすっきりしているならもとにもどす(トグル動作)"
(interactive)
(let ((clearcite-widen t)
(buf (get-buffer (mew-buffer-message))))
(when buf
(set-buffer buf)
(if (clearcite-donep)
(clearcite-undo-buffer)
(clearcite-do-buffer)))))
(defun mew-call-clearcite ()
(let ((size (save-excursion
(set-buffer (mew-buffer-message))
(buffer-size))))
(when (< size mew-clearcite-limit)
(mew-clearcite))))
(eval-after-load 'mew-key
'(progn
(define-key mew-summary-mode-map clearcite-key 'mew-clearcite)
(define-key mew-message-mode-map clearcite-key 'mew-clearcite)))
(eval-after-load 'mew-vars
'(add-to-list 'mew-message-hook 'mew-call-clearcite))
C-c C-i に挿入をキーバインドしてます。
バックアップファイル、送信先と署名の関連を作成しないようにしてます。
emacs.el .mew.el どちらに記述しても良いようです。(autoload 'add-signature "c-sig" "c-sig" t) (autoload 'delete-signature "c-sig" "c-sig" t) (autoload 'insert-signature-eref "c-sig" "c-sig" t) (autoload 'insert-signature-automatically "c-sig" "c-sig" t) (autoload 'insert-signature-randomly "c-sig" "c-sig" t) (add-hook 'mew-draft-mode-hook (function (lambda () (define-key mew-draft-mode-map "\C-c\C-i" 'insert-signature-eref)))) (setq sig-save-to-sig-name-alist nil) (setq sig-make-backup-files nil)
メールを返信する時に、引用タグをカスタマイズするツールです。 メールツールとは独立して使えるようですが、他の使い方を私は知りません。
xcite.el に書かれている設定では、最新の Mew ではうまく動かないので、(hookが原因?)以下のようにします。
emacs.el .mew.el どちらに記述しても良いようです。(autoload 'xcite "xcite" "Exciting cite" t) (autoload 'xcite-yank-cur-msg "xcite" "Exciting cite" t) (global-set-key "\C-c\C-x" 'xcite) (global-set-key "\C-c\C-y" 'xcite-yank-cur-msg) (add-hook 'mew-draft-mode-hook (function (lambda () (define-key mew-draft-mode-map "\C-c\C-y" 'xcite-yank-cur-msg)))) (add-hook 'mew-init-hook (function (lambda () (define-key mew-summary-mode-map "A" '(lambda () (interactive) (mew-summary-reply) (xcite-yank-cur-msg))))))
default では、メーリングリスト名や記事番号が引用するヘッダに含まれません。
と言うことで、私なりの変更を加えてみました。差分は以下の通りですので、参考にしてください。
--- xcite.el.orig 2009-09-17 18:34:54.000000000 +0900
+++ xcite.el 2009-09-17 21:11:55.000000000 +0900
@@ -393,6 +393,11 @@
(defvar xcite:inet-msgid "^Message-Id: \\(<.*>\\)")
(defvar xcite:inet-subject "^Subject: \\(.+\\)$")
(defvar xcite:inet-ng "^Newsgroups: \\(.+\\)$")
+;; add by te-kun ↓
+(defvar xcite:inet-mlname "^X-ML-NAME: \\(.+\\)$")
+(defvar xcite:inet-mlcount "^X-Ma?i?L-COUNT: \\(.+\\)$")
+(defvar xcite:inet-sequence "^X-Sequence: \\(.+\\)$")
+;; add by te-kun ↑
(defvar xcite:author-regexp
(concat
@@ -427,7 +432,8 @@
その関数中では id, author, date, time, year, month, day, hour, minute, ampm,
tag という変数を利用することができる。ただし、Internet での Mail では
date, id(e-mail アドレス), handle(実名フィールド), msgid(Message-ID),
-subject, tag(引用タグ), ng(NetNewsの場合のNewsgroups)が利用可能.")
+subject, tag(引用タグ), ng(NetNewsの場合のNewsgroups)が利用可能.
+それと mlname(メーリングリスト名),mlcount(メーリングリストの記事番号),sequence(メーリングリスト名 + 記事番号)") ;; add by te-kun
(defvar xcite:default-user-prefix-alist
'(("yuuji@ae.keio.ac.jp" "ゆ" "広")
@@ -763,6 +769,7 @@
(cb (current-buffer)) (p (point))
mesg n id handle date time year month day hour minute ampm msgid tag
subject ng peoh x-cite-me zmacs-regions
+ mlname mlcount sequence ;; add by te-kun
(tmpbuf " *xcite tmp*"))
(save-excursion
(cond
@@ -823,6 +830,17 @@
(goto-char peoh)
(if (re-search-backward xcite:inet-ng nil 1)
(setq ng (xcite-match-string 1)))
+;; add by te-kun ↓
+ (goto-char peoh)
+ (if (re-search-backward xcite:inet-mlname nil 1)
+ (setq mlname (xcite-match-string 1)))
+ (goto-char peoh)
+ (if (re-search-backward xcite:inet-mlcount nil 1)
+ (setq mlcount (xcite-match-string 1)))
+ (goto-char peoh)
+ (if (re-search-backward xcite:inet-sequence nil 1)
+ (setq sequence (xcite-match-string 1)))
+;; add by te-kun ↑
(goto-char peoh)
(if (re-search-backward xcite:inet-subject nil t)
(setq subject (xcite-match-string 1))))
私はメーリングリスト名と記事番号を
(setq xcite:insert-header-function 'my-xcite-header) (defun my-xcite-header () (cond (mlname (format "From: %sさん曰く\nSubject: %s\nDate: %s\nMessage-Id: %s\nML-Name: %s\n" (if handle (concat handle " " "<" id ">" " -->" "\"" tag "\"") (concat id " -->" "\"" tag "\"")) subject date msgid (concat "[" mlname ":" " " mlcount "]"))) (sequence (format "From: %sさん曰く\nSubject: %s\nDate: %s\nMessage-Id: %s\nML-Name: %s\n" (if handle (concat handle " " "<" id ">" " -->" "\"" tag "\"") (concat id " -->" "\"" tag "\"")) subject date msgid (concat "[" sequence "]"))) (t (format "From: %sさん曰く\nSubject: %s\nDate: %s\nMessage-Id: %s\n" (if handle (concat handle " " "<" id ">" " -->" "\"" tag "\"") (concat id " -->" "\"" tag "\"")) subject date msgid))))