]> code.delx.au - gnu-emacs/blobdiff - lisp/mail/rmail.el
Calc: Update mode line after change mode
[gnu-emacs] / lisp / mail / rmail.el
index 68b3cfdf501bb3fe6485c405da844f40fc8d19f1..e9882253c70246cb220df9eb1ebc746cc783da1a 100644 (file)
@@ -1818,9 +1818,21 @@ not be a new one).  It returns non-nil if it got any new messages."
        ;; Read in the contents of the inbox files, renaming them as
        ;; necessary, and adding to the list of files to delete
        ;; eventually.
-       (if file-name
-           (rmail-insert-inbox-text files nil)
-         (setq delete-files (rmail-insert-inbox-text files t)))
+       (unwind-protect
+           (progn
+             ;; Set modified now to lock the file, so that we don't
+             ;; encounter locking problems later in the middle of
+             ;; reading the mail.
+             (set-buffer-modified-p t)
+             (if file-name
+                 (rmail-insert-inbox-text files nil)
+               (setq delete-files (rmail-insert-inbox-text files t))))
+         ;; If there was no new mail, or we aborted before actually
+         ;; trying to get any, mark buffer unmodified.  Otherwise the
+         ;; buffer is correctly marked modified and the file locked
+         ;; until we save out the new mail.
+         (if (= (point-min) (point-max))
+             (set-buffer-modified-p nil)))
        ;; Scan the new text and convert each message to
        ;; Rmail/mbox format.
        (goto-char (point-min))
@@ -1969,11 +1981,6 @@ Value is the size of the newly read mail after conversion."
     size))
 
 (defun rmail-insert-inbox-text (files renamep)
-  ;; Detect a locked file now, so that we avoid moving mail
-  ;; out of the real inbox file.  (That could scare people.)
-  (or (memq (file-locked-p buffer-file-name) '(nil t))
-      (error "RMAIL file %s is locked"
-            (file-name-nondirectory buffer-file-name)))
   (let (file tofile delete-files popmail got-password password)
     (while files
       ;; Handle remote mailbox names specially; don't expand as filenames
@@ -2800,7 +2807,12 @@ The current mail message becomes the message displayed."
          ;; rmail-header-style based on the binding in effect when
          ;; this function is called; `rmail-toggle-headers' can
          ;; inspect this value to determine how to toggle.
-         (set (make-local-variable 'rmail-header-style) header-style))
+         (set (make-local-variable 'rmail-header-style) header-style)
+          ;; In case viewing the previous message sets the paragraph
+          ;; direction non-nil, we reset it here to allow independent
+          ;; dynamic determination of paragraph direction in every
+          ;; message.
+          (setq bidi-paragraph-direction nil))
        (if (and rmail-enable-mime
                 rmail-show-mime-function
                 (re-search-forward "mime-version: 1.0" nil t))
@@ -4084,7 +4096,7 @@ typically for purposes of moderating a list."
                    (set-syntax-table mail-abbrev-syntax-table)
                    (goto-char before)
                    (while (and (< (point) end)
-                               (progn (forward-word 1)
+                               (progn (forward-word-strictly 1)
                                       (<= (point) end)))
                      (expand-abbrev))
                    (set-syntax-table old-syntax-table))
@@ -4580,6 +4592,8 @@ Argument MIME is non-nil if this is a mime message."
     (list armor-start (- (point-max) after-end) mime
           armor-end-regexp)))
 
+(declare-function rmail-mime-entity-truncated "rmailmm" (entity))
+
 ;; Should this have a key-binding, or be in a menu?
 ;; There doesn't really seem to be an appropriate menu.
 ;; Eg the edit command is not in a menu either.