[mew-dist 19855] Re: Forward で references をつける方法
Hideyuki SHIRAI ( 白井秀行 )
shirai at example.com
2001年 12月 17日 (月) 21:22:14 JST
From: KOIE Hidetaka (鯉江英隆) <hide at example.com> さん曰く
Subject: [mew-dist 19853] Re: Forward で references をつける方法
Message-ID: <01Dec17.201812jst.29576 at example.com>
Date: Mon, 17 Dec 2001 19:40:18 +0900
鯉江> スレッド表示したいだけなら
鯉江> `r' (mew-summary-resend)
鯉江> でいいと思うです。
鯉江> resendの欠点は
鯉江> * forwardとちがって一口コメントを添付できないこと
鯉江> * 転送メイルをうけとった人がかなりの確立でびっくりすること
う〜ん、ちょっと違うような気がしますけど :-)
鯉江> ちょっと興味があるのですがWLでは
鯉江> 外側のメイルのreferences: <= 内側のメイルのreferences:
鯉江> になるでしょうか、それとも
鯉江> 外側のメイルのreferences: <= 内側のメイルのreferences:
鯉江> + 内側のメイルのmessage-id:
鯉江> でしょうか。
後者になるようです。ぼくもその方が便利だと思います。
白井> # そういえば、以前、藤井さんと同じことを思ったことがありました。
と思ったとき(*1)があったので、なしくずし的に(無理やり)、wl の動
作を真似してみました。RFC 的にどうなのかは全然調べていません。^^;;;
summary で "f", "F", attach で "y" したときは自動で References:
と In-Reply-To: をつけて、attach で "r" すると、それでもつけます。
やっぱり、やりスギだと思うので、前半は必要なものを適当にコメント
アウトして使った方が良いでしょう。
(*1) 他の人を話しに巻き込むときに、forward すると、話はつながる
のだけどスレッドがきれてしまって悲しかったことがある。
--
白井秀行 (mailto:shirai at example.com)
;; nil だと動かなくなる
(defvar mew-add-refences-from-attach t)
(add-hook 'mew-draft-mode-hook
(lambda ()
(define-key mew-draft-attach-map "r" 'mew-add-refences-from-attach)))
(defadvice mew-summary-forward (after add-references activate)
(save-excursion
(goto-char (mew-attach-begin))
(when (and (re-search-forward "Message/Rfc822" nil t)
(mew-syntax-nums))
(mew-add-refences-from-attach 'nocheck))))
(defadvice mew-summary-multi-forward (after add-references activate)
(save-excursion
(goto-char (mew-attach-begin))
(while (and (re-search-forward "Message/Rfc822" nil t)
(mew-syntax-nums))
(mew-add-refences-from-attach 'nocheck)
(forward-line))))
(defadvice mew-attach-link-message (after add-references activate)
(mew-add-refences-from-attach 'nocheck))
(defun mew-add-refences-from-attach (&optional nocheck)
"(無理やり)attach 上の Message/Rfc822 の references/messge-id を header につける。"
(interactive)
(when mew-add-refences-from-attach
(if (not (mew-attach-not-line012-1-dot))
(message "Cannot open message here")
(let* ((nums (mew-syntax-nums))
(attachdir (mew-attachdir))
(syntax (mew-syntax-get-entry mew-encode-syntax nums))
(ct (mew-syntax-get-ct syntax))
(file (mew-syntax-get-file syntax))
(regex "<[^>]+>")
efile orefs oinrepl msgid nrefs ninrepl tmp)
(if (and (not (eq ct '("Message/Rfc822")))
(not nocheck))
(message "Cannot open message here")
(save-excursion
(setq orefs (mew-header-get-value mew-references:))
(setq oinrepl (mew-header-get-value mew-in-reply-to:))
(when orefs
(setq tmp orefs orefs nil)
(while (string-match regex tmp)
(setq orefs (cons (mew-match 0 tmp) orefs))
(setq tmp (substring tmp (match-end 0)))))
(when oinrepl
(setq tmp oinrepl oinrepl nil)
(while (string-match regex tmp)
(setq oinrepl (cons (mew-match 0 tmp) oinrepl))
(setq tmp (substring tmp (match-end 0))))))
;; Message/Rfc822 には subdir が(いまのところ)ない
(if (not (and file
(file-readable-p (setq file (expand-file-name file attachdir)))))
(message "Cannot open message here")
(with-temp-buffer
(insert-file-contents file)
(setq nrefs (mew-header-get-value mew-references:))
(setq msgid (mew-header-get-value mew-message-id:))
(when nrefs
(setq tmp nrefs nrefs nil)
(while (string-match regex tmp)
(setq nrefs (cons (mew-match 0 tmp) nrefs))
(setq tmp (substring tmp (match-end 0)))))
(when msgid
(when (string-match regex msgid)
(setq nrefs (cons (mew-match 0 msgid) nrefs))
(setq ninrepl (list (mew-match 0 msgid))))))
(when (or nrefs ninrepl)
(setq nrefs (delq nil (append nrefs orefs)))
(setq nrefs (mew-uniq-list nrefs))
(when (and (integerp mew-references-max-count)
(> (length nrefs) mew-references-max-count))
(setcdr (nthcdr (1- mew-references-max-count) nrefs) nil))
(setq nrefs (mapconcat 'identity (nreverse nrefs) "\n\t"))
(setq ninrepl (delq nil (append ninrepl oinrepl)))
(setq ninrepl (mew-uniq-list ninrepl))
(setq ninrepl (mapconcat 'identity (nreverse ninrepl) "\n\t"))
(save-excursion
(mew-header-delete-lines (list mew-references: mew-in-reply-to:))
(mew-header-goto-end)
(insert mew-in-reply-to: " " ninrepl "\n")
(insert mew-references: " " nrefs "\n")
(message "Replace headers")))))))))
Mew-dist メーリングリストの案内