X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-mime.el;h=9efb46393a06c90295a57b8d586b9b7172e9e4b7;hb=08fe50f15e7aed9643f87a7cbb552690c6908318;hp=e8977f67e50640b0526e8993f8744d05fb4bbb6f;hpb=8bb48834fb433f045ca02a69807b835dd08431de;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-mime.el b/elmo/elmo-mime.el index e8977f6..9efb463 100644 --- a/elmo/elmo-mime.el +++ b/elmo/elmo-mime.el @@ -1,4 +1,4 @@ -;;; elmo-mime.el -- MIME module for ELMO. +;;; elmo-mime.el --- MIME module for ELMO. ;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi @@ -24,10 +24,10 @@ ;; ;;; Commentary: -;; +;; ;;; Code: -;; +;; (require 'elmo-vars) (require 'mmbuffer) (require 'mmimap) @@ -53,6 +53,12 @@ value is used." (function :tag "Function")) :group 'elmo) +(defcustom elmo-mime-display-as-is-coding-system (if (boundp 'MULE) + '*autoconv* 'undecided) + "*Coding system used when message is displayed as is." + :type 'symbol + :group 'elmo) + (luna-define-method initialize-instance :after ((entity mime-elmo-buffer-entity) &rest init-args) entity) @@ -71,7 +77,7 @@ value is used." (mode-obj (mime-find-field-presentation-method 'wide)) field-decoder f-b p f-e field-name field field-body - vf-alist (sl sort-fields)) + vf-alist (sl sort-fields)) (save-excursion (set-buffer buffer) (save-restriction @@ -89,42 +95,42 @@ value is used." field-body (buffer-substring p f-e) field-decoder (inline (mime-find-field-decoder-internal field mode-obj))) - (setq vf-alist (append (list - (cons field-name - (list field-body field-decoder))) - vf-alist)))) - (and vf-alist - (setq vf-alist - (sort vf-alist - (function (lambda (s d) - (let ((n 0) re - (sf (car s)) - (df (car d))) - (catch 'done - (while (setq re (nth n sl)) - (setq n (1+ n)) - (and (string-match re sf) - (throw 'done t)) - (and (string-match re df) - (throw 'done nil))) - t))))))) - (with-current-buffer the-buf - (while vf-alist - (let* ((vf (car vf-alist)) - (field-name (car vf)) - (field-body (car (cdr vf))) - (field-decoder (car (cdr (cdr vf))))) - (insert field-name) + (setq vf-alist (append (list + (cons field-name + (list field-body field-decoder))) + vf-alist)))) + (and vf-alist + (setq vf-alist + (sort vf-alist + (function (lambda (s d) + (let ((n 0) re + (sf (car s)) + (df (car d))) + (catch 'done + (while (setq re (nth n sl)) + (setq n (1+ n)) + (and (string-match re sf) + (throw 'done t)) + (and (string-match re df) + (throw 'done nil))) + t))))))) + (with-current-buffer the-buf + (while vf-alist + (let* ((vf (car vf-alist)) + (field-name (car vf)) + (field-body (car (cdr vf))) + (field-decoder (car (cdr (cdr vf))))) + (insert field-name) (insert (if field-decoder (funcall field-decoder field-body - (string-width field-name) + (string-width field-name) (if (functionp elmo-mime-header-max-column) (funcall elmo-mime-header-max-column) elmo-mime-header-max-column)) ;; Don't decode field-body)) - (insert "\n")) - (setq vf-alist (cdr vf-alist))) + (insert "\n")) + (setq vf-alist (cdr vf-alist))) (run-hooks 'mmelmo-header-inserted-hook)))))) (luna-define-generic elmo-mime-insert-sorted-header (entity @@ -158,7 +164,9 @@ value is used." p-max (point-max)) (set-buffer the-buf) (elmo-mime-insert-header-from-buffer buf p-min p-max - invisible-fields visible-fields)))) + invisible-fields + visible-fields + sorted-fields)))) (luna-define-method mime-insert-text-content :around ((entity mime-elmo-buffer-entity)) @@ -204,7 +212,7 @@ value is used." rawbuf)) (defun elmo-mime-message-display (folder number viewbuf rawbuf original-mode - &optional ignore-cache unread) + &optional ignore-cache unread keymap) "Display MIME message. A message in the FOLDER with NUMBER is displayed on the VIEWBUF using RAWBUF. VIEWBUF is a view buffer and RAWBUF is a raw buffer. @@ -214,6 +222,7 @@ If second optional argument UNREAD is specified, message is displayed but keep it as unread. Return non-nil if not entire message was fetched." (let (mime-display-header-hook ; Do nothing. + (elmo-message-displaying t) entity strategy) (setq entity (elmo-msgdb-overview-get-entity number (elmo-folder-msgdb @@ -228,14 +237,15 @@ Return non-nil if not entire message was fetched." 'elmo-buffer) (elmo-make-mime-message-location folder number strategy rawbuf unread)) - viewbuf nil nil original-mode) + viewbuf nil keymap + original-mode) (if strategy (or (elmo-fetch-strategy-use-cache strategy) (eq (elmo-fetch-strategy-entireness strategy) 'section))))) (defun elmo-mime-display-as-is (folder number viewbuf rawbuf original-mode - &optional ignore-cache unread) + &optional ignore-cache unread keymap) "Display MIME message. A message in the FOLDER with NUMBER is displayed on the VIEWBUF using RAWBUF. VIEWBUF is a view buffer and RAWBUF is a raw buffer. @@ -250,7 +260,8 @@ Return non-nil if cache is used." cache-file strategy use-cache) (setq cache-file (elmo-file-cache-get (elmo-msgdb-overview-entity-get-id entity))) - (setq use-cache (eq (elmo-file-cache-status cache-file) 'entire)) + (setq use-cache (and (elmo-message-use-cache-p folder number) + (eq (elmo-file-cache-status cache-file) 'entire))) (setq strategy (elmo-make-fetch-strategy 'entire use-cache (elmo-message-use-cache-p folder number) (elmo-file-cache-path @@ -260,7 +271,7 @@ Return non-nil if cache is used." 'elmo-buffer (elmo-make-mime-message-location folder number strategy rawbuf unread)) - viewbuf nil nil original-mode) + viewbuf nil keymap original-mode) (elmo-fetch-strategy-use-cache strategy))) ;; Replacement of mime-display-message. @@ -289,10 +300,15 @@ Return non-nil if cache is used." (set-buffer-multibyte nil) (mime-insert-entity message) (set-buffer-multibyte t) - (decode-coding-region (point-min) (point-max) 'undecided) + (decode-coding-region (point-min) (point-max) + elmo-mime-display-as-is-coding-system) (save-restriction (std11-narrow-to-header) (run-hooks 'elmo-message-header-inserted-hook)) + ;; set original major mode for mime-preview-quit + (put-text-property (point-min) (point-max) + 'mime-view-situation + `((major-mode . ,original-major-mode))) (use-local-map (or keymap (if default-keymap-or-function @@ -312,4 +328,4 @@ Return non-nil if cache is used." (require 'product) (product-provide (provide 'elmo-mime) (require 'elmo-version)) -;; elmo-mime.el ends here \ No newline at end of file +;; elmo-mime.el ends here