;;; nnfolder.el --- mail folder access for Gnus
-;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
;; Author: Scott Byer <byer@mv.us.adobe.com>
;; Lars Magne Ingebrigtsen <larsi@gnus.org>
(require 'message)
(require 'nnmail)
(require 'nnoo)
-(require 'cl)
+(eval-when-compile (require 'cl))
(require 'gnus-util)
(nnoo-declare nnfolder)
(defvoo nnfolder-buffer-alist nil)
(defvoo nnfolder-scantime-alist nil)
(defvoo nnfolder-active-timestamp nil)
+(defvoo nnfolder-file-coding-system nnmail-file-coding-system-1)
\f
(set-buffer nnfolder-current-buffer)
(while (and articles is-old)
(goto-char (point-min))
- (when (nnfolder-goto-article (car articles))
+ (when (and (nnfolder-goto-article (car articles))
+ (search-forward (concat "\n" nnfolder-article-marker)
+ nil t))
+ (forward-sexp)
(if (setq is-old
(nnmail-expired-article-p
newsgroup
(nnfolder-request-article article group server)
(save-excursion
(set-buffer buf)
- (buffer-disable-undo (current-buffer))
(erase-buffer)
(insert-buffer-substring nntp-server-buffer)
(goto-char (point-min))
(save-excursion
(set-buffer buffer)
(goto-char (point-min))
- (when (looking-at "X-From-Line: ")
- (replace-match "From "))
+ (let (xfrom)
+ (while (re-search-forward "^X-From-Line: \\(.*\\)$" nil t)
+ (setq xfrom (match-string 1))
+ (gnus-delete-line))
+ (goto-char (point-min))
+ (if xfrom
+ (insert "From " xfrom "\n")
+ (unless (looking-at message-unix-mail-delimiter)
+ (insert "From nobody " (current-time-string) "\n"))))
(nnfolder-normalize-buffer)
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
(if (not (nnfolder-goto-article article))
nil
- (nnfolder-delete-mail t)
+ (nnfolder-delete-mail)
(insert-buffer-substring buffer)
(nnfolder-save-buffer)
t)))
"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)))))
+ (save-restriction
+ (narrow-to-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))))
+ (run-hooks 'nnfolder-delete-mail-hook)
+ (delete-region (point-min) (point-max))))
(defun nnfolder-possibly-change-group (group &optional server dont-check)
;; Change servers.
(defun nnfolder-read-folder (group)
(let* ((file (nnfolder-group-pathname group))
- (buffer (set-buffer (nnheader-find-file-noselect file))))
+ (buffer (set-buffer
+ (let ((nnmail-file-coding-system
+ nnfolder-file-coding-system))
+ (nnheader-find-file-noselect file)))))
(if (equal (cadr (assoc group nnfolder-scantime-alist))
(nth 5 (file-attributes file)))
;; This looks up-to-date, so we don't do any scanning.
(minid (lsh -1 -1))
maxid start end newscantime
buffer-read-only)
- (buffer-disable-undo (current-buffer))
+ (buffer-disable-undo)
(setq maxid (cdr active))
(goto-char (point-min))
(defun nnfolder-group-pathname (group)
"Make pathname for GROUP."
- (setq group (gnus-encode-coding-string group nnmail-pathname-coding-system))
+ (setq group
+ (encode-coding-string group nnmail-pathname-coding-system))
(let ((dir (file-name-as-directory (expand-file-name nnfolder-directory))))
;; If this file exists, we use it directly.
(if (or nnmail-use-long-file-names