;; ShengHuo Zhu <zsh@cs.rochester.edu> (adding NOV)
;; Scott Byer <byer@mv.us.adobe.com>
;; Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
+;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: mail
;; This file is part of GNU Emacs.
;;; Code:
+(eval-when-compile (require 'cl))
+(eval-when-compile (require 'gnus-clfns))
+
(require 'nnheader)
(require 'message)
(require 'nnmail)
(require 'nnoo)
-(eval-when-compile (require 'cl))
(require 'gnus)
(require 'gnus-util)
(require 'gnus-range)
(defvoo nnfolder-buffer-alist nil)
(defvoo nnfolder-scantime-alist nil)
(defvoo nnfolder-active-timestamp nil)
-(defvoo nnfolder-active-file-coding-system mm-text-coding-system)
+(defvoo nnfolder-active-file-coding-system nnheader-text-coding-system)
(defvoo nnfolder-active-file-coding-system-for-write
nnmail-active-file-coding-system)
-(defvoo nnfolder-file-coding-system mm-text-coding-system)
+(defvoo nnfolder-file-coding-system nnheader-text-coding-system)
(defvoo nnfolder-file-coding-system-for-write nnheader-file-coding-system
"Coding system for save nnfolder file.
if nil, `nnfolder-file-coding-system' is used.") ; FIXME: fill-in the doc-string of this variable
(let ((newnum (string-to-number (match-string 0))))
(if (nnmail-within-headers-p)
(push newnum numbers))))
- ;; The article numbers are increasing, so this result is sorted.
+ ;; The article numbers are increasing, so this result is sorted.
(nreverse numbers)))))
(deffoo nnfolder-request-expire-articles
result art-group)
(goto-char (point-min))
(when (looking-at "X-From-Line: ")
+ (save-match-data
+ (mail-header-unfold-field))
(replace-match "From "))
(with-temp-buffer
(let ((nnmail-file-coding-system nnfolder-active-file-coding-system)
(save-excursion
(set-buffer buffer)
(goto-char (point-min))
- (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 "From ")
- (insert "From nobody " (current-time-string) "\n"))))
+ (if (not (looking-at "X-From-Line: "))
+ (insert "From nobody " (current-time-string) "\n")
+ (save-match-data
+ (mail-header-unfold-field))
+ (replace-match "From "))
(nnfolder-normalize-buffer)
(set-buffer nnfolder-current-buffer)
(goto-char (point-min))
(setq nnfolder-current-buffer nil
nnfolder-current-group nil))
;; Change group.
- (let ((file-name-coding-system nnmail-pathname-coding-system))
+ (let ((file-name-coding-system nnmail-pathname-coding-system)
+ (pathname-coding-system nnmail-pathname-coding-system))
(when (and group
(not (equal group nnfolder-current-group))
(progn
(setq nnfolder-current-group group
nnfolder-current-buffer nil)
(let (inf file)
- ;; If we have to change groups, see if we don't already have
- ;; the folder in memory. If we do, verify the modtime and
- ;; destroy the folder if needed so we can rescan it.
+ ;; If we have to change groups, see if we don't already have the
+ ;; folder in memory. If we do, verify the modtime and destroy
+ ;; the folder if needed so we can rescan it.
(setq nnfolder-current-buffer
(nth 1 (assoc group nnfolder-buffer-alist)))
- ;; If the buffer is not live, make sure it isn't in the
- ;; alist. If it is live, verify that nobody else has
- ;; touched the file since last time.
+ ;; If the buffer is not live, make sure it isn't in the alist. If it
+ ;; is live, verify that nobody else has touched the file since last
+ ;; time.
(when (and nnfolder-current-buffer
(not (gnus-buffer-live-p nnfolder-current-buffer)))
(setq nnfolder-buffer-alist (delq inf nnfolder-buffer-alist)
(let ((nnheader-file-coding-system
nnfolder-file-coding-system))
(nnheader-find-file-noselect file)))))
- (mm-enable-multibyte) ;; Use multibyte buffer for future copying.
(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.
(setq articles (nreverse articles))))
(goto-char (point-min))
- ;; Anytime the active number is 1 or 0, it is suspect. In
- ;; that case, search the file manually to find the active
- ;; number. Or, of course, if we're being paranoid. (This
- ;; would also be the place to build other lists from the
- ;; header markers, such as expunge lists, etc., if we ever
- ;; desired to abandon the active file entirely for mboxes.)
+ ;; Anytime the active number is 1 or 0, it is suspect. In that
+ ;; case, search the file manually to find the active number. Or,
+ ;; of course, if we're being paranoid. (This would also be the
+ ;; place to build other lists from the header markers, such as
+ ;; expunge lists, etc., if we ever desired to abandon the active
+ ;; file entirely for mboxes.)
(when (or nnfolder-ignore-active-file
novbuf
(< maxid 2))
(setcdr active (max maxid (cdr active)))
(goto-char (point-min)))
- ;; As long as we trust that the user will only insert
- ;; unmarked mail at the end, go to the end and search
- ;; backwards for the last marker. Find the start of that
- ;; message, and begin to search for unmarked messages from
- ;; there.
+ ;; As long as we trust that the user will only insert unmarked mail
+ ;; at the end, go to the end and search backwards for the last
+ ;; marker. Find the start of that message, and begin to search for
+ ;; unmarked messages from there.
(when (not (or nnfolder-distrust-mbox
(< maxid 2)))
(goto-char (point-max))
;; (goto-char (point-min)))
)
- ;; Keep track of the active number on our own, and insert it
- ;; back into the active list when we're done. Also, prime
- ;; the pump to cut down on the number of searches we do.
+ ;; Keep track of the active number on our own, and insert it back
+ ;; into the active list when we're done. Also, prime the pump to
+ ;; cut down on the number of searches we do.
(unless (nnmail-search-unix-mail-delim)
(goto-char (point-max)))
(setq end (point-marker))
(while (not (= end (point-max)))
(setq start (marker-position end))
(goto-char end)
- ;; There may be more than one "From " line, so we skip past
+ ;; There may be more than one "From " line, so we skip past
;; them.
(while (looking-at delim)
(forward-line 1))
(widen)))
(set-marker end nil)
- ;; Make absolutely sure that the active list reflects
- ;; reality!
+ ;; Make absolutely sure that the active list reflects reality!
(nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
;; Set the scantime for this group.
(defun nnfolder-group-pathname (group)
"Make pathname for GROUP."
(setq group
- (mm-encode-coding-string group nnmail-pathname-coding-system))
+ (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
(when (buffer-modified-p)
(run-hooks 'nnfolder-save-buffer-hook)
(gnus-make-directory (file-name-directory (buffer-file-name)))
- (let ((coding-system-for-write
- (or nnfolder-file-coding-system-for-write
- nnfolder-file-coding-system)))
+ (let* ((coding-system-for-write
+ (or nnfolder-file-coding-system-for-write
+ nnfolder-file-coding-system))
+ (output-coding-system coding-system-for-write))
(save-buffer)))
(unless (or gnus-nov-is-evil nnfolder-nov-is-evil)
(nnfolder-save-nov)))
(nnfolder-open-marks group server)
;; Update info using `nnfolder-marks'.
(mapcar (lambda (pred)
- (gnus-info-set-marks
- info
- (gnus-update-alist-soft
- (cdr pred)
- (cdr (assq (cdr pred) nnfolder-marks))
- (gnus-info-marks info))
- t))
+ (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists)
+ (gnus-info-set-marks
+ info
+ (gnus-update-alist-soft
+ (cdr pred)
+ (cdr (assq (cdr pred) nnfolder-marks))
+ (gnus-info-marks info))
+ t)))
gnus-article-mark-lists)
(let ((seen (cdr (assq 'read nnfolder-marks))))
(gnus-info-set-read info
(if (file-exists-p file)
(condition-case err
(with-temp-buffer
- (gnus-sethash file (nth 5 (file-attributes file))
+ (gnus-sethash file (nth 5 (file-attributes file))
nnfolder-marks-modtime)
(nnheader-insert-file-contents file)
(setq nnfolder-marks (read (current-buffer)))