X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fnnml.el;h=7a1b5315a234d665c0889b545c8eafa6d8edfcac;hb=f233ec1f4c2046e19b9a53fdd34f0103ab856ea9;hp=4ccc2ac46afec3b5eefb3ec7304fbf820f3b9115;hpb=61a6a32796c29e8bb7e8d58152b30aa18e3b7722;p=elisp%2Fgnus.git- diff --git a/lisp/nnml.el b/lisp/nnml.el index 4ccc2ac..7a1b531 100644 --- a/lisp/nnml.el +++ b/lisp/nnml.el @@ -46,26 +46,18 @@ (nnoo-declare nnml) (defvoo nnml-directory message-directory - "Spool directory for the nnml mail backend. - -This variable is a virtual server slot. See the Gnus manual for details.") + "Spool directory for the nnml mail backend.") (defvoo nnml-active-file (expand-file-name "active" nnml-directory) - "Mail active file. - -This variable is a virtual server slot. See the Gnus manual for details.") + "Mail active file.") (defvoo nnml-newsgroups-file (expand-file-name "newsgroups" nnml-directory) - "Mail newsgroups description file. - -This variable is a virtual server slot. See the Gnus manual for details.") + "Mail newsgroups description file.") (defvoo nnml-get-new-mail t - "If non-nil, nnml will check the incoming mail file and split the mail. - -This variable is a virtual server slot. See the Gnus manual for details.") + "If non-nil, nnml will check the incoming mail file and split the mail.") (defvoo nnml-nov-is-evil nil "If non-nil, Gnus will never generate and use nov databases for mail spools. @@ -74,9 +66,7 @@ This variable shouldn't be flipped much. If you have, for some reason, set this to t, and want to set it to nil again, you should always run the `nnml-generate-nov-databases' command. The function will go through all nnml directories and generate nov databases for them -all. This may very well take some time. - -This variable is a virtual server slot. See the Gnus manual for details.") +all. This may very well take some time.") (defvoo nnml-marks-is-evil nil "If non-nil, Gnus will never generate and use marks file for mail spools. @@ -85,27 +75,16 @@ separately from `.newsrc.eld'. If you have, for some reason, set this to t, and want to set it to nil again, you should always remove the corresponding marks file (usually named `.marks' in the nnml group directory, but see `nnml-marks-file-name') for the group. Then the -marks file will be regenerated properly by Gnus. - -This variable is a virtual server slot. See the Gnus manual for details.") - -(defvoo nnml-filenames-are-evil t - "If non-nil, Gnus will not assume that the articles file name -is the same as the article number listed in the nov database. This -variable should be set if any of the files are compressed. - -This variable is a virtual server slot. See the Gnus manual for details.") +marks file will be regenerated properly by Gnus.") (defvoo nnml-prepare-save-mail-hook nil - "Hook run narrowed to an article before saving. - -This variable is a virtual server slot. See the Gnus manual for details.") + "Hook run narrowed to an article before saving.") (defvoo nnml-inhibit-expiry nil - "If non-nil, inhibit expiry. - -This variable is a virtual server slot. See the Gnus manual for details.") + "If non-nil, inhibit expiry.") +(defvoo nnml-use-compressed-files nil + "If non-nil, allow using compressed message files.") @@ -326,7 +305,8 @@ This variable is a virtual server slot. See the Gnus manual for details.") (setq articles (gnus-sorted-intersection articles active-articles)) (while (and articles is-old) - (if (and (setq article (nnml-article-to-file (setq number (pop articles)))) + (if (and (setq article (nnml-article-to-file + (setq number (pop articles)))) (setq mod-time (nth 5 (file-attributes article))) (nnml-deletable-article-p group number) (setq is-old (nnmail-expired-article-p group mod-time force @@ -395,7 +375,7 @@ This variable is a virtual server slot. See the Gnus manual for details.") (nnmail-check-syntax) (let (result) (when nnmail-cache-accepted-message-ids - (nnmail-cache-insert (nnmail-fetch-field "message-id"))) + (nnmail-cache-insert (nnmail-fetch-field "message-id") group)) (if (stringp group) (and (nnmail-activate 'nnml) @@ -541,16 +521,19 @@ This variable is a virtual server slot. See the Gnus manual for details.") (defun nnml-article-to-file (article) (nnml-update-file-alist) (let (file) - (if (setq file (cdr (assq article nnml-article-file-alist))) + (if (setq file + (if nnml-use-compressed-files + (cdr (assq article nnml-article-file-alist)) + (number-to-string article))) (expand-file-name file nnml-current-directory) - (if (not nnheader-directory-files-is-safe) - ;; Just to make sure nothing went wrong when reading over NFS -- - ;; check once more. - (when (file-exists-p - (setq file (expand-file-name (number-to-string article) - nnml-current-directory))) - (nnml-update-file-alist t) - file))))) + (when (not nnheader-directory-files-is-safe) + ;; Just to make sure nothing went wrong when reading over NFS -- + ;; check once more. + (when (file-exists-p + (setq file (expand-file-name (number-to-string article) + nnml-current-directory))) + (nnml-update-file-alist t) + file))))) (defun nnml-deletable-article-p (group article) "Say whether ARTICLE in GROUP can be deleted." @@ -764,8 +747,8 @@ This variable is a virtual server slot. See the Gnus manual for details.") (when (buffer-name (cdar nnml-nov-buffer-alist)) (set-buffer (cdar nnml-nov-buffer-alist)) (when (buffer-modified-p) - (nnmail-write-region 1 (point-max) nnml-nov-buffer-file-name - nil 'nomesg)) + (nnmail-write-region (point-min) (point-max) + nnml-nov-buffer-file-name nil 'nomesg)) (set-buffer-modified-p nil) (kill-buffer (current-buffer))) (setq nnml-nov-buffer-alist (cdr nnml-nov-buffer-alist))))) @@ -854,7 +837,7 @@ This variable is a virtual server slot. See the Gnus manual for details.") (progn (re-search-forward "\n\r?\n" nil t) (setq chars (- (point-max) (point))) - (max 1 (1- (point))))) + (max (point-min) (1- (point))))) (unless (zerop (buffer-size)) (goto-char (point-min)) (setq headers (nnml-parse-head chars (caar files))) @@ -866,7 +849,7 @@ This variable is a virtual server slot. See the Gnus manual for details.") (setq files (cdr files))) (save-excursion (set-buffer nov-buffer) - (nnmail-write-region 1 (point-max) nov nil 'nomesg) + (nnmail-write-region (point-min) (point-max) nov nil 'nomesg) (kill-buffer (current-buffer)))))) (defun nnml-nov-delete-article (group article) @@ -886,10 +869,11 @@ This variable is a virtual server slot. See the Gnus manual for details.") t)) (defun nnml-update-file-alist (&optional force) - (when (or (not nnml-article-file-alist) - force) - (setq nnml-article-file-alist - (nnml-current-group-article-to-file-alist)))) + (when nnml-use-compressed-files + (when (or (not nnml-article-file-alist) + force) + (setq nnml-article-file-alist + (nnml-current-group-article-to-file-alist))))) (defun nnml-directory-articles (dir) "Return a list of all article files in a directory. @@ -918,7 +902,6 @@ Use the nov database for that directory if available." Use the nov database for the current group if available." (if (or gnus-nov-is-evil nnml-nov-is-evil - nnml-filenames-are-evil (not (file-exists-p (expand-file-name nnml-nov-file-name nnml-current-directory)))) @@ -926,8 +909,8 @@ Use the nov database for the current group if available." ;; build list from .overview if available (save-excursion (let ((alist nil) - art - (buffer (nnml-get-nov-buffer nnml-current-group))) + (buffer (nnml-get-nov-buffer nnml-current-group)) + art) (set-buffer buffer) (goto-char (point-min)) (while (not (eobp)) @@ -964,13 +947,14 @@ Use the nov database for the current group if available." (nnml-open-marks group server) ;; Update info using `nnml-marks'. (mapcar (lambda (pred) - (gnus-info-set-marks - info - (gnus-update-alist-soft - (cdr pred) - (cdr (assq (cdr pred) nnml-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) nnml-marks)) + (gnus-info-marks info)) + t))) gnus-article-mark-lists) (let ((seen (cdr (assq 'read nnml-marks)))) (gnus-info-set-read info @@ -998,7 +982,7 @@ Use the nov database for the current group if available." (nnml-possibly-create-directory group) (with-temp-file file (erase-buffer) - (princ nnml-marks (current-buffer)) + (gnus-prin1 nnml-marks) (insert "\n")) (gnus-sethash file (nth 5 (file-attributes file)) @@ -1034,7 +1018,8 @@ Use the nov database for the current group if available." (push (cons 'read (gnus-info-read info)) nnml-marks) (dolist (el gnus-article-unpropagated-mark-lists) (setq nnml-marks (gnus-remassoc el nnml-marks))) - (nnml-save-marks group server))))) + (nnml-save-marks group server) + (nnheader-message 7 "Bootstrapping marks for %s...done" group))))) (provide 'nnml)