もっぱらメールクライアントには、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))))