mime-preview-follow-current-entity

Katsumi Yamaoka yamaoka @ jpl.org
1999年 11月 1日 (月) 16:04:47 JST


>>>>> In [emacs-mime-ja : No.00007] 
>>>>>	Katsumi Yamaoka <yamaoka @ jpl.org> wrote:

tomo> そういう訳で、個人的には『entity に follow する』機能に加え
tomo> 『entity にreply する』機能を追加するのが良いと思います。

山岡> 実はそれも考えたのですが、どうもそういうのって gnus 独自の文化で
山岡> はないかと思いまして実施は思いとどまりました。

守岡さんからお返事が頂けなかったのでもう一度書きますが、MIME-View で
follow (ニュース記事の送信) と reply (メールの送信) を区別した方が良い
のでしょうか? 現在の Semi-gnus などにとっては都合が良いのですが、gnus
以外の MUA ではそうとは限らない気がします。その観点から、MIME-View は
デコード済みのヘッダとボディを含むバッファを用意し、それをどう扱うかは
MUA の任せてしまって良いのではないでしょうか?

それから、

>>>>> In [emacs-mime-ja : No.00007] 
>>>>>	Katsumi Yamaoka <yamaoka @ jpl.org> wrote:

山岡> そういうわけで、手修正を許して曲がりなりにも使えるものにするため
山岡> の最低限の対応が、

山岡> 津邑さんのパッチ:     tm-ja  5458
山岡> 山岡のパッチ: emacs-mime-ja 00004

山岡> であるわけです。

これらだけではまだ不完全でしたので、書き直したものを添付いたします。
text-property `mime-view-entity' の変化点を探す動作は従来と変わりませ
ん。Narrowing された MIME-View のバッファには対応していません。必要な
ら follow と reply を区別するための変更は可能です。
MUA がどんな場合でも問題無いかどうかは確認できませんが、大抵の場合に正
常動作するという点だけでも、現行の SEMI 1.13 に盛り込む価値があるもの
と信じます。
-------------- next part --------------
(defun mime-preview-follow-current-entity ()
  "Write follow message to current entity.
It calls following-method selected from variable
`mime-preview-following-method-alist'."
  (interactive)
  (let ((entity (get-text-property (point) 'mime-view-entity)))
    (if entity
	(let* ((mode (mime-preview-original-major-mode 'recursive))
	       (method (cdr (assq mode mime-preview-following-method-alist))))
	  (if (not (functionp method))
	      (message
	       (format
		"Sorry, following method for %s is not implemented yet."
		mode))
	    (let (header)
	      (let (child)
		(while (and entity
			    (eq 'message (mime-entity-media-type entity))
			    (eq 'rfc822 (mime-entity-media-subtype entity))
			    (setq child (car (mime-entity-children entity))))
		  (setq header t
			entity child)))
	      (or header
		  (let ((parent (mime-entity-parent entity)))
		    (setq header
			  (and
			   parent
			   (eq 'message (mime-entity-media-type parent))
			   (eq 'rfc822 (mime-entity-media-subtype parent))))))
	      (let* ((start (text-property-any (point-min) (point-max)
					       'mime-view-entity entity))
		     (end start)
		     (node-id (mime-entity-node-id entity)))
		(if node-id
		    (let ((len (length node-id))
			  next)
		      (while (and
			      (<= end (point-max))
			      (setq end (or (next-single-property-change
					     end 'mime-view-entity)
					    (point-max))
				    next (get-text-property end
							    'mime-view-entity))
			      (> (length (mime-entity-node-id next)) len))))
		  (setq header t
			end (point-max)))
		(let ((buffer (get-buffer-create
			       (format "%s-%s" (buffer-name)
				       (reverse node-id))))
		      (content (buffer-substring-no-properties start end)))
		  (with-current-buffer buffer
		    (erase-buffer)
		    (if header
			(insert content)
		      (mime-insert-header (or (mime-entity-parent entity)
					      entity))
		      (mime-decode-header-in-buffer)
		      (goto-char (point-max))
		      (insert "\n" content)))
		  (funcall method buffer)))))))))


More information about the Emacs-mime-ja mailing list