X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fnnfolder.el;h=5f399d80eec9f5bf4b618da3426fcb45234aa165;hb=3d1ac8ccb5686e44e4945a61feab10486964f479;hp=30452842a7282e8a4f71afcd2fadf258d0eb7c7e;hpb=dc9b03604a47bf5d66e2a5819ad562927c251acc;p=elisp%2Fgnus.git- diff --git a/lisp/nnfolder.el b/lisp/nnfolder.el index 3045284..334b2b6 100644 --- a/lisp/nnfolder.el +++ b/lisp/nnfolder.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc. ;; Author: Scott Byer -;; Lars Magne Ingebrigtsen +;; Lars Magne Ingebrigtsen ;; Masanobu UMEDA ;; Keywords: mail @@ -396,12 +396,15 @@ time saver for large mailboxes.") (nnfolder-possibly-change-group group) (save-excursion (set-buffer buffer) + (goto-char (point-min)) + (when (looking-at "X-From-Line: ") + (replace-match "From ")) (nnfolder-normalize-buffer) (set-buffer nnfolder-current-buffer) (goto-char (point-min)) (if (not (nnfolder-goto-article article)) nil - (nnfolder-delete-mail t t) + (nnfolder-delete-mail t) (insert-buffer-substring buffer) (nnfolder-save-buffer) t))) @@ -463,10 +466,9 @@ time saver for large mailboxes.") (goto-char (point-min)) (while (and (search-forward marker nil t) (re-search-forward number nil t)) - (setq activemin (min activemin - (string-to-number (buffer-substring - (match-beginning 0) - (match-end 0)))))) + (let ((newnum (string-to-number (match-string 0)))) + (if (nnmail-within-headers-p) + (setq activemin (min activemin newnum))))) (setcar active activemin)))) (defun nnfolder-article-string (article) @@ -476,37 +478,43 @@ time saver for large mailboxes.") (defun nnfolder-goto-article (article) "Place point at the start of the headers of ARTICLE. -ARTICLE can be an article number or a Message-ID." +ARTICLE can be an article number or a Message-ID. +Returns t if successful, nil otherwise." (let ((art-string (nnfolder-article-string article)) - end-search end) - (while (not end-search) - (if (or (search-forward art-string nil t) - ;; Don't search the whole file twice! Also, articles - ;; probably have some locality by number, so searching - ;; backwards will be faster. Especially if we're at the - ;; beginning of the buffer :-). -SLB - (search-backward art-string nil t)) - (progn - (setq end (point)) - (nnmail-search-unix-mail-delim-backward) - (unless (save-excursion (search-forward "\n\n" nil end)) - (setq end-search 'found))) - (setq end-search t))) - (eq end-search 'found))) - -(defun nnfolder-delete-mail (&optional force leave-delim) - "Delete the message that point is in." - (save-excursion - (delete-region - (save-excursion - (nnmail-search-unix-mail-delim-backward) - (if leave-delim (progn (forward-line 1) (point)) - (point))) - (progn - (forward-line 1) - (if (nnmail-search-unix-mail-delim) - (point) - (point-max)))))) + start found) + ;; It is likely that we are at or before the delimiter line. + ;; We therefore go to the end of the previous line, and start + ;; searching from there. + (beginning-of-line) + (unless (bobp) + (forward-char -1)) + (setq start (point)) + ;; First search forward. + (while (and (setq found (search-forward art-string nil t)) + (not (nnmail-within-headers-p)))) + ;; If unsuccessful, search backward from where we started, + (unless found + (goto-char start) + (while (and (setq found (search-backward art-string nil t)) + (not (nnmail-within-headers-p))))) + (when found + (nnmail-search-unix-mail-delim-backward)))) + +(defun nnfolder-delete-mail (&optional leave-delim) + "Delete the message that point is in. +If optional argument LEAVE-DELIM is t, then mailbox delimiter is not +deleted. Point is left where the deleted region was." + (delete-region + (save-excursion + (forward-line 1) ; in case point is at beginning of message already + (nnmail-search-unix-mail-delim-backward) + (if leave-delim (progn (forward-line 1) (point)) + (point))) + (progn + (forward-line 1) + (if (nnmail-search-unix-mail-delim) + (point) + (point-max))))) (defun nnfolder-possibly-change-group (group &optional server dont-check) ;; Change servers. @@ -702,8 +710,9 @@ ARTICLE can be an article number or a Message-ID." (while (and (search-forward marker nil t) (re-search-forward number nil t)) (let ((newnum (string-to-number (match-string 0)))) - (setq maxid (max maxid newnum)) - (setq minid (min minid newnum)))) + (if (nnmail-within-headers-p) + (setq maxid (max maxid newnum) + minid (min minid newnum))))) (setcar active (max 1 (min minid maxid))) (setcdr active (max maxid (cdr active))) (goto-char (point-min))) @@ -777,7 +786,7 @@ ARTICLE can be an article number or a Message-ID." (nnfolder-possibly-change-folder file) (nnfolder-possibly-change-group file) (nnfolder-close-group file)))) - (message ""))) + (nnheader-message 5 ""))) (defun nnfolder-group-pathname (group) "Make pathname for GROUP."