message-in-body-p should not alter anything;
authorRichard Stallman <rms@gnu.org>
Tue, 18 Sep 2012 00:53:46 +0000 (00:53 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Tue, 18 Sep 2012 00:53:46 +0000 (00:53 +0000)
Handle Mail mode correctly.  Some code cleanup

lisp/ChangeLog
lisp/message.el
lisp/mml.el

index 6ea7776..888f203 100644 (file)
@@ -1,3 +1,14 @@
+2012-09-17  Richard Stallman  <rms@gnu.org>
+
+       * message.el (message-in-body-p): Don't set mark or modify buffer.
+
+       * mml.el (mml-attach-file): Doc fix.
+       (mml-attach-external, mml-attach-buffer, mml-attach-file):
+       Set mail-encode-mml when in Mail mode.
+       Simplify code to set HEAD and move back to HEAD.
+       (mml-insert-multipart, mml-insert-part):
+       Set mail-encode-mml when in Mail mode.
+
 2012-09-13  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * gnus-util.el (gnus-timer--function): New function.
index 12002b6..9593624 100644 (file)
@@ -3204,8 +3204,12 @@ M-RET    `message-newline-and-reformat' (break the line and reformat)."
 
 (defun message-in-body-p ()
   "Return t if point is in the message body."
-  (let ((body (save-excursion (message-goto-body))))
-    (>= (point) body)))
+  (>= (point)
+      (save-excursion
+       (goto-char (point-min))
+       (or (search-forward (concat "\n" mail-header-separator "\n") nil t)
+           (search-forward-regexp "[^:]+:\\([^\n]\\|\n[ \t]\\)+\n\n" nil t))
+       (point))))
 
 (defun message-goto-eoh ()
   "Move point to the end of the headers."
index cc1aedf..a72962a 100644 (file)
@@ -1305,7 +1305,8 @@ to specify options."
 (defun mml-attach-file (file &optional type description disposition)
   "Attach a file to the outgoing MIME message.
 The file is not inserted or encoded until you send the message with
-`\\[message-send-and-exit]' or `\\[message-send]'.
+`\\[message-send-and-exit]' or `\\[message-send]' in Message mode,
+or `\\[mail-send-and-exit]' or `\\[mail-send]' in Mail mode.
 
 FILE is the name of the file to attach.  TYPE is its
 content-type, a string of the form \"type/subtype\".  DESCRIPTION
@@ -1319,11 +1320,9 @@ body) or \"attachment\" (separate from the body)."
          (description (mml-minibuffer-read-description))
          (disposition (mml-minibuffer-read-disposition type nil file)))
      (list file type description disposition)))
-  ;; Don't move point if this command is invoked inside the message header.
-  (let ((head (unless (message-in-body-p)
-               (prog1
-                   (point)
-                 (goto-char (point-max))))))
+  ;; If in the message header, attach at the end and leave point unchanged.
+  (let ((head (unless (message-in-body-p) (point))))
+    (if head (goto-char (point-max)))
     (mml-insert-empty-tag 'part
                          'type type
                          ;; icicles redefines read-file-name and returns a
@@ -1331,12 +1330,15 @@ body) or \"attachment\" (separate from the body)."
                          'filename (mm-substring-no-properties file)
                          'disposition (or disposition "attachment")
                          'description description)
+    ;; When using Mail mode, make sure it does the mime encoding
+    ;; when you send the message.
+    (or (eq mail-user-agent 'message-user-agent)
+       (setq mail-encode-mml t))
     (when head
-      (unless (prog1
-                 (pos-visible-in-window-p)
-               (goto-char head))
+      (unless (pos-visible-in-window-p)
        (message "The file \"%s\" has been attached at the end of the message"
-                (file-name-nondirectory file))))))
+                (file-name-nondirectory file)))
+      (goto-char head))))
 
 (defun mml-dnd-attach-file (uri action)
   "Attach a drag and drop file.
@@ -1372,21 +1374,22 @@ BUFFER is the name of the buffer to attach.  See
          (description (mml-minibuffer-read-description))
          (disposition (mml-minibuffer-read-disposition type nil)))
      (list buffer type description disposition)))
-  ;; Don't move point if this command is invoked inside the message header.
-  (let ((head (unless (message-in-body-p)
-               (prog1
-                   (point)
-                 (goto-char (point-max))))))
+  ;; If in the message header, attach at the end and leave point unchanged.
+  (let ((head (unless (message-in-body-p) (point))))
+    (if head (goto-char (point-max)))
     (mml-insert-empty-tag 'part 'type type 'buffer buffer
                          'disposition disposition
                          'description description)
+    ;; When using Mail mode, make sure it does the mime encoding
+    ;; when you send the message.
+    (or (eq mail-user-agent 'message-user-agent)
+       (setq mail-encode-mml t))
     (when head
-      (unless (prog1
-                 (pos-visible-in-window-p)
-               (goto-char head))
+      (unless (pos-visible-in-window-p)
        (message
         "The buffer \"%s\" has been attached at the end of the message"
-        buffer)))))
+        buffer))
+      (goto-char head))))
 
 (defun mml-attach-external (file &optional type description)
   "Attach an external file into the buffer.
@@ -1397,19 +1400,20 @@ TYPE is the MIME type to use."
          (type (mml-minibuffer-read-type file))
          (description (mml-minibuffer-read-description)))
      (list file type description)))
-  ;; Don't move point if this command is invoked inside the message header.
-  (let ((head (unless (message-in-body-p)
-               (prog1
-                   (point)
-                 (goto-char (point-max))))))
+  ;; If in the message header, attach at the end and leave point unchanged.
+  (let ((head (unless (message-in-body-p) (point))))
+    (if head (goto-char (point-max)))
     (mml-insert-empty-tag 'external 'type type 'name file
                          'disposition "attachment" 'description description)
+    ;; When using Mail mode, make sure it does the mime encoding
+    ;; when you send the message.
+    (or (eq mail-user-agent 'message-user-agent)
+       (setq mail-encode-mml t))
     (when head
-      (unless (prog1
-                 (pos-visible-in-window-p)
-               (goto-char head))
+      (unless (pos-visible-in-window-p)
        (message "The file \"%s\" has been attached at the end of the message"
-                (file-name-nondirectory file))))))
+                (file-name-nondirectory file)))
+      (goto-char head))))
 
 (defun mml-insert-multipart (&optional type)
   (interactive (if (message-in-body-p)
@@ -1422,12 +1426,20 @@ TYPE is the MIME type to use."
   (or type
       (setq type "mixed"))
   (mml-insert-empty-tag "multipart" 'type type)
+  ;; When using Mail mode, make sure it does the mime encoding
+  ;; when you send the message.
+  (or (eq mail-user-agent 'message-user-agent)
+      (setq mail-encode-mml t))
   (forward-line -1))
 
 (defun mml-insert-part (&optional type)
   (interactive (if (message-in-body-p)
                   (list (mml-minibuffer-read-type ""))
                 (error "Use this command in the message body")))
+  ;; When using Mail mode, make sure it does the mime encoding
+  ;; when you send the message.
+  (or (eq mail-user-agent 'message-user-agent)
+      (setq mail-encode-mml t))
   (mml-insert-tag 'part 'type type 'disposition "inline"))
 
 (declare-function message-subscribed-p "message" ())