diff lisp/vm/vm-mime.el @ 114:8619ce7e4c50 r20-1b9

Import from CVS: tag r20-1b9
author cvs
date Mon, 13 Aug 2007 09:21:54 +0200
parents fe104dbd9147
children 9f59509498e1
line wrap: on
line diff
--- a/lisp/vm/vm-mime.el	Mon Aug 13 09:20:50 2007 +0200
+++ b/lisp/vm/vm-mime.el	Mon Aug 13 09:21:54 2007 +0200
@@ -48,7 +48,7 @@
 	      m
 	      (condition-case data
 		  (vm-mime-parse-entity m)
-		(vm-mime-error (apply 'message (cdr data)))))
+		(vm-mime-error (message "%s" (car (cdr data))))))
 	     (vm-mime-layout-of m))))
 
 (defun vm-mm-encoded-header (m)
@@ -384,7 +384,9 @@
 	    (cond ((= char ?\n)
 		   (vm-insert-char char 1 nil work-buffer)
 		   (setq cols 0))
-		  ((and (= char 32) (not (= ?\n (char-after (1+ inputpos)))))
+		  ((and (= char 32)
+			(not (= (1+ inputpos) end))
+			(not (= ?\n (char-after (1+ inputpos)))))
 		   (vm-insert-char char 1 nil work-buffer)
 		   (vm-increment cols))
 		  ((or (< char 33) (> char 126) (= char 61)
@@ -418,7 +420,6 @@
 (defun vm-decode-mime-message-headers (m)
   (let ((case-fold-search t)
 	(buffer-read-only nil)
-	(did-decode nil)
 	charset encoding match-start match-end start end)
     (save-excursion
       (goto-char (vm-headers-of m))
@@ -433,7 +434,6 @@
 	;; character set properly.
 	(if (not (vm-mime-charset-internally-displayable-p charset))
 	    nil
-	  (setq did-decode t)
 	  (delete-region end match-end)
 	  (condition-case data
 	      (cond ((string-match "B" encoding)
@@ -447,16 +447,7 @@
 			   (insert "**invalid encoded word**")
 			   (delete-region (point) end)))
 	  (vm-mime-charset-decode-region charset start end)
-	  (delete-region match-start start)))
-      ;; if we did some decoding, re-electrify the headers since
-      ;; some of the extents might have been wiped by the
-      ;; decoding process.
-      (if did-decode
-	  (save-restriction
-	    (narrow-to-region (vm-headers-of m) (vm-text-of m))
-	    (vm-energize-urls)
-	    (vm-highlight-headers-maybe)
-	    (vm-energize-headers-and-xfaces))))))
+	  (delete-region match-start start))))))
 
 (defun vm-decode-mime-encoded-words ()
   (let ((case-fold-search t)
@@ -632,8 +623,6 @@
   (let ((case-fold-search t) version type qtype encoding id description
 	disposition qdisposition boundary boundary-regexp start
 	multipart-list c-t c-t-e done p returnval)
-    (and m (message "Parsing MIME message..."))
-    (prog1
     (catch 'return-value
       (save-excursion
 	(if m
@@ -701,7 +690,7 @@
 	    (cond ((null m) t)
 		  ((null version)
 		   (throw 'return-value 'none))
-		  ((string= version "1.0") t)
+		  ((or vm-mime-ignore-mime-version (string= version "1.0")) t)
 		  (t (vm-mime-error "Unsupported MIME version: %s" version)))
 	    (cond ((and m (null type))
 		   (throw 'return-value
@@ -814,9 +803,7 @@
 		    (vm-marker (point))
 		    (vm-marker (point-max))
 		    (nreverse multipart-list)
-		    nil )))))
-    (and m (message "Parsing MIME message... done"))
-    )))
+		    nil )))))))
 
 (defun vm-mime-parse-entity-safe (&optional m c-t c-t-e)
   (or c-t (setq c-t '("text/plain" "charset=us-ascii")))
@@ -930,7 +917,8 @@
 	     (and (vm-toolbar-support-possible-p) vm-use-toolbar
 		  (vm-toolbar-install-toolbar))
 	     (and (vm-menu-support-possible-p)
-		  (vm-menu-install-menus)))
+		  (vm-menu-install-menus))
+	     (run-hooks 'vm-presentation-mode-hook))
 	   (setq vm-presentation-buffer-handle b)))
     (setq b vm-presentation-buffer-handle
 	  vm-presentation-buffer vm-presentation-buffer-handle
@@ -1081,9 +1069,7 @@
 	   (let ((charset (or (vm-mime-get-parameter layout "charset")
 			      "us-ascii")))
 	     (vm-mime-charset-internally-displayable-p charset)))
-;; commented out until I decide whether W3 is safe to use in
-;; light of the porposed javascript extension and the possibility
-;; of executing arbitrary Emacs-Lisp code embedded in a page.
+;; commented out until w3-region behavior gets worked out
 ;;
 ;;	  ((vm-mime-types-match "text/html" type)
 ;;	   (condition-case ()
@@ -1277,7 +1263,10 @@
 		 (if (vectorp layout)
 		     (progn
 		       (vm-decode-mime-layout layout)
-		       (delete-region (point) (point-max)))))
+		       (delete-region (point) (point-max))))
+		 (vm-energize-urls)
+		 (vm-highlight-headers-maybe)
+		 (vm-energize-headers-and-xfaces))
 	     (set-buffer-modified-p modified))))
 	(save-excursion (set-buffer vm-mail-buffer)
 			(setq vm-mime-decoded 'decoded))
@@ -1349,9 +1338,7 @@
 (defun vm-mime-display-button-text (layout)
   (vm-mime-display-button-xxxx layout t))
 
-;; commented out until I decide whether W3 is safe to use in
-;; light of the proposed javascript extension and the possibility
-;; of executing arbitrary Emacs-Lisp code embedded in a page.
+;; commented out until w3-region behavior is worked out
 ;;
 ;;(defun vm-mime-display-internal-text/html (layout)
 ;;  (let ((buffer-read-only nil)
@@ -1374,7 +1361,7 @@
 ;;    (message "Inlining text/html... done")
 ;;    t ))
 
-(defun vm-mime-display-internal-text/plain (layout &optional ignore-urls)
+(defun vm-mime-display-internal-text/plain (layout &optional no-highlighting)
   (let ((start (point)) end old-size
 	(buffer-read-only nil)
 	(charset (or (vm-mime-get-parameter layout "charset") "us-ascii")))
@@ -1389,7 +1376,7 @@
       (setq old-size (buffer-size))
       (vm-mime-charset-decode-region charset start end)
       (set-marker end (+ end (- (buffer-size) old-size)))
-      (or ignore-urls (vm-energize-urls-in-message-region start end))
+      (or no-highlighting (vm-energize-urls-in-message-region start end))
       (goto-char end)
       t )))
 
@@ -1594,7 +1581,8 @@
      (vm-mode))
     ;; temp buffer, don't offer to save it.
     (setq buffer-offer-save nil)
-    (vm-display nil nil (list this-command) '(vm-mode startup)))
+    (vm-display (or vm-presentation-buffer (current-buffer)) t
+		(list this-command) '(vm-mode startup)))
   t )
 (fset 'vm-mime-display-button-multipart/digest
       'vm-mime-display-internal-multipart/digest)
@@ -2590,7 +2578,10 @@
 		   (delete-char 1)))
 		((stringp object)
 		 (let ((coding-system-for-read 'no-conversion))
-		   (insert-file-contents-literally object))))
+		   (insert-before-markers " ")
+		   (forward-char -1)
+		   (insert-file-contents-literally object)
+		   (delete-char 1))))
 	  ;; gather information about the object from the extent.
 	  (if (setq already-mimed (vm-extent-property e 'vm-mime-encoded))
 	      (setq layout (vm-mime-parse-entity
@@ -2895,7 +2886,7 @@
 	  (vm-insert-region-from-buffer mail-buffer)
 	  (goto-char (point-min))
 	  (or (vm-mail-mode-get-header-contents "From")
-	      (insert "From: " (or user-mail-address (user-login-name)) "\n"))
+	      (insert "From: " (user-login-name) "\n"))
 	  (or (vm-mail-mode-get-header-contents "Message-ID")
 	      (insert "Message-ID: <fake@fake.fake>\n"))
 	  (or (vm-mail-mode-get-header-contents "Date")