*** empty log message ***
[gnus] / lisp / nnbabyl.el
index d4b5c6b..2df3070 100644 (file)
@@ -57,6 +57,8 @@
 (defvar nnbabyl-group-alist nil)
 (defvar nnbabyl-active-timestamp nil)
 
+(defvar nnbabyl-previous-buffer-mode nil)
+
 \f
 
 (defvar nnbabyl-current-server nil)
@@ -68,6 +70,7 @@
    (list 'nnbabyl-get-new-mail nnbabyl-get-new-mail)
    '(nnbabyl-current-group nil)
    '(nnbabyl-status-string "")
+   '(nnbabyl-previous-buffer-mode nil)
    '(nnbabyl-group-alist nil)))
 
 \f
     (setq nnbabyl-current-server server)))
 
 (defun nnbabyl-close-server (&optional server)
+  ;; Restore buffer mode.
+  (when (and (nnbabyl-server-opened)
+            nnbabyl-previous-buffer-mode)
+    (save-excursion
+      (set-buffer nnbabyl-mbox-buffer)
+      (narrow-to-region
+       (car (car nnbabyl-previous-buffer-mode))
+       (cdr (car nnbabyl-previous-buffer-mode)))
+      (funcall (cdr nnbabyl-previous-buffer-mode))))
+  (setq nnbabyl-current-server nil
+       nnbabyl-mbox-buffer nil)
   t)
 
 (defun nnbabyl-server-opened (&optional server)
     (set-buffer nnbabyl-mbox-buffer)
     (goto-char (point-min))
     (if (search-forward (nnbabyl-article-string article) nil t)
-       (let (start stop)
+       (let (start stop summary-line)
          (re-search-backward (concat "^" nnbabyl-mail-delimiter) nil t)
          (while (and (not (looking-at ".+:"))
                      (zerop (forward-line 1))))
            (erase-buffer)
            (insert-buffer-substring nnbabyl-mbox-buffer start stop)
            (goto-char (point-min))
-           (if (search-forward "\n*** EOOH ***" nil t)
-               (progn
-                 (delete-region (progn (beginning-of-line) (point))
-                                (or (search-forward "\n\n" nil t)
-                                    (point)))))
+           ;; If there is an EOOH header, then we have to remove some
+           ;; duplicated headers. 
+           (setq summary-line (looking-at "Summary-line:"))
+           (when (search-forward "\n*** EOOH ***" nil t)
+             (if summary-line
+                 ;; The headers to be deleted are located before the
+                 ;; EOOH line...
+                 (delete-region (point-min) (progn (forward-line 1)
+                 (point)))
+               ;; ...or after.
+               (delete-region (progn (beginning-of-line) (point))
+                              (or (search-forward "\n\n" nil t)
+                                  (point)))))
            (if (numberp article) 
                (cons nnbabyl-current-group article)
              (nnbabyl-article-group-number)))))))
        (goto-char (point-max))
        (search-backward "\n\^_")
        (goto-char (match-end 0))
-       (insert-buffer buf)
+       (insert-buffer-substring buf)
        (and last (progn 
                   (save-buffer)
                   (nnmail-save-active
        (set-buffer (setq nnbabyl-mbox-buffer 
                          (nnheader-find-file-noselect 
                           nnbabyl-mbox-file nil 'raw)))
+       ;; Save buffer mode.
+       (setq nnbabyl-previous-buffer-mode 
+             (cons (cons (point-min) (point-max))
+                   major-mode))
+
        (buffer-disable-undo (current-buffer))
        (widen)
        (setq buffer-read-only nil)