\f
* Changes in Oort Gnus
-** Nnml stores marks in the file ".marks" for each groups.
+** The nnml and nnfolder backends store marks for each groups.
-This makes it possible to take backup of nnml servers independently of
-.newsrc.eld. It also makes it possible to share articles and marks
-between users (without sharing .newsrc.eld) within e.g. a department.
+This makes it possible to take backup of nnml/nnfolder servers/groups
+separately of .newsrc.eld, while preserving marks. It also makes it
+possible to share articles and marks between users (without sharing
+.newsrc.eld) within e.g. a department.
** The menu bar (in Group and Summary buffer) named "Misc" has been
renamed to "Gnus".
** The menu bar (in Message mode) named "MML" has been renamed to
- "Attachment".
+ "Attachments".
** gnus-group-charset-alist and gnus-group-ignored-charsets-alist
+2001-08-24 16:09:14 Fabien Penso <penso@linuxfr.org>
+
+ * gpg.el (gpg-command-sign-detached): Doc fix.
+
2001-08-07 Andreas Jaeger <aj@suse.de>
* gpg.el (gpg-passphrase-forget): Don't cache
'(gpg-2comp . ("--batch" "--passphrase-fd=0" "--output=-"
armor textmode "--clearsign"
sign-with-key))
- "Command to create a create a \"clearsign\" text file.
+ "Command to create a \"clearsign\" text file.
The invoked program has to read the passphrase from standard input,
followed by the message to sign. It should write the ASCII-amored
signed text message to standard output, and diagnostic messages to
'(gpg-2comp . ("--batch" "--passphrase-fd=0" "--output=-"
armor textmode "--detach-sign"
sign-with-key))
- "Command to create a create a detached signature.
+ "Command to create a detached signature.
The invoked program has to read the passphrase from standard input,
followed by the message to sign. It should write the ASCII-amored
detached signature to standard output, and diagnostic messages to
+2001-08-25 Simon Josefsson <jas@extundo.com>
+
+ * nnfolder.el (nnfolder-save-marks): Don't create directory named
+ after group in ~/.
+
+2001-08-25 Simon Josefsson <jas@extundo.com>
+ From Andreas Jaeger <aj@suse.de>
+
+ * nnfolder.el (nnfolder-open-marks): Fix typo.
+ * nnml.el (nnml-open-marks): Likewise.
+
+2001-08-25 Simon Josefsson <jas@extundo.com>
+
+ Make nnfolder groups self-contained as far as marks are concerned.
+
+ * nnfolder.el (nnfolder-marks-directory, nnfolder-marks-is-evil)
+ (nnfolder-marks, nnfolder-marks-file-suffix): New variables.
+ (nnfolder-open-server): Make marks directory.
+ (nnfolder-request-delete-group): Delete marks file.
+ (nnfolder-request-delete-group): Check of nov/marks file exist
+ before deleting.
+ (nnfolder-request-rename-group): Rename marks file.
+ (nnfolder-request-rename-group): Only rename nov/mark if they exists.
+ (nnfolder-request-set-mark, nnfolder-request-update-info)
+ (nnfolder-group-marks-pathname, nnfolder-save-marks)
+ (nnfolder-open-marks): New functions.
+ (top-level): Require gnus.
+
+2001-08-25 09:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * nnweb.el (nnweb-type-definition): Use google raw file.
+ (nnweb-google-parse-1): Ditto.
+ (nnweb-google-identity): Ditto.
+ (nnweb-reference-wash-article): Move nnweb-decode-entities here.
+ (nnweb-altavista-wash-article): Ditto.
+ (nnweb-request-article): Remove nnweb-decode-entities.
+
+ * nnml.el: Require 'gnus.
+
+2001-08-25 Simon Josefsson <jas@extundo.com>
+
+ * nnml.el (nnml-marks-is-evil): Add doc.
+
+2001-08-25 Simon Josefsson <jas@extundo.com>
+
+ * nnml.el (nnml-save-marks): Wrap saving marks in a
+ condition-case, to allow user to start Gnus if saving marks failed
+ for some reason.
+
+2001-08-24 16:05:38 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-spec.el (gnus-compile): Don't compile gnus-version.
+
+ * gnus-group.el (gnus-update-group-mark-positions): Bind
+ gnus-group-update-hook to nil.
+
+2001-08-24 13:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * mml.el (mml-generate-mime-1): Force as multibyte string.
+
+2001-08-24 12:00:00 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus-sum.el (gnus-summary-insert-line)
+ (gnus-summary-prepare-threads): gnus-tmp-lines should be a string.
+ From Martin Kretzschmar <Martin.Kretzschmar@inf.tu-dresden.de>
+
+ * gnus-spec.el (gnus-correct-substring): Take optional END.
+
+ * nnrss.el (nnrss-request-article): Remove \n.
+ (nnrss-retrieve-headers): Lines number is -1.
+
2001-08-24 Simon Josefsson <jas@extundo.com>
* gnus-group.el (gnus-info-clear-data): Call
(defun gnus-update-group-mark-positions ()
(save-excursion
(let ((gnus-process-mark ?\200)
+ (gnus-group-update-hook nil)
(gnus-group-marked '("dummy.group"))
(gnus-active-hashtb (make-vector 10 0))
(topic ""))
(mapcar (lambda (char) (incf length (gnus-char-width char))) string)
length))
-(defun gnus-correct-substring (string start end)
+(defun gnus-correct-substring (string start &optional end)
(let ((wstart 0)
(wend 0)
(seek 0)
wstart seek)
;; Find the end position.
(while (and (< seek length)
- (<= wend end))
+ (or (not end)
+ (<= wend end)))
(incf wend (gnus-char-width (aref string seek)))
(incf seek))
(setq wend seek)
(while entries
(setq entry (pop entries)
type (car entry))
- (if (memq type '(version gnus-version))
+ (if (memq type '(gnus-version version))
(setq gnus-format-specs (delq entry gnus-format-specs))
(let ((form (caddr entry)))
(when (and (listp form)
(setq gnus-tmp-name gnus-tmp-from))
(unless (numberp gnus-tmp-lines)
(setq gnus-tmp-lines -1))
- (when (= gnus-tmp-lines -1)
- (setq gnus-tmp-lines "?"))
+ (if (= gnus-tmp-lines -1)
+ (setq gnus-tmp-lines "?")
+ (setq gnus-tmp-lines (number-to-string gnus-tmp-lines)))
(gnus-put-text-property-excluding-characters-with-faces
(point)
(progn (eval gnus-summary-line-format-spec) (point))
(setq gnus-tmp-name gnus-tmp-from))
(unless (numberp gnus-tmp-lines)
(setq gnus-tmp-lines -1))
- (when (= gnus-tmp-lines -1)
- (setq gnus-tmp-lines "?"))
+ (if (= gnus-tmp-lines -1)
+ (setq gnus-tmp-lines "?")
+ (setq gnus-tmp-lines (number-to-string gnus-tmp-lines)))
(gnus-put-text-property
(point)
(progn (eval gnus-summary-line-format-spec) (point))
(t
(insert (cdr (assq 'contents cont)))))
(setq encoding (mm-encode-buffer type)
- coded (buffer-string))))
+ coded (mm-string-as-multibyte (buffer-string)))))
(mml-insert-mime-headers cont type charset encoding)
(insert "\n")
(insert coded)))
;;; nnfolder.el --- mail folder access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
;; Free Software Foundation, Inc.
-;; Author: ShengHuo Zhu <zsh@cs.rochester.edu> (adding NOV)
+;; Author: Simon Josefsson <simon@josefsson.org> (adding MARKS)
+;; 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>
(require 'message)
(require 'nnmail)
(require 'nnoo)
+(require 'gnus)
(require 'gnus-util)
(require 'gnus-range)
"The name of the nnfolder NOV directory.
If nil, `nnfolder-directory' is used.")
+(defvoo nnfolder-marks-directory nil
+ "The name of the nnfolder MARKS directory.
+If nil, `nnfolder-directory' is used.")
+
(defvoo nnfolder-active-file
(nnheader-concat nnfolder-directory "active")
"The name of the active file.
(defvar nnfolder-nov-buffer-file-name nil)
+(defvoo nnfolder-marks-is-evil nil
+ "If non-nil, Gnus will never generate and use marks file for mail groups.
+Using marks files makes it possible to backup and restore mail groups
+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 base nnfolder file name
+concatenated with `.mrk', but see `nnfolder-marks-file-suffix') 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 nnfolder-marks nil)
+
+(defvoo nnfolder-marks-file-suffix ".mrk")
+
\f
;;; Interface functions
(unless (or gnus-nov-is-evil nnfolder-nov-is-evil)
(and nnfolder-nov-directory
(gnus-make-directory nnfolder-nov-directory)))
+ (unless nnfolder-marks-is-evil
+ (and nnfolder-marks-directory
+ (gnus-make-directory nnfolder-marks-directory)))
(cond
((not (file-exists-p nnfolder-directory))
(nnfolder-close-server)
;; Delete the file that holds the group.
(ignore-errors
(delete-file (nnfolder-group-pathname group))
- (delete-file (nnfolder-group-nov-pathname group))))
+ (when (file-exists-p (nnfolder-group-nov-pathname group))
+ (delete-file (nnfolder-group-nov-pathname group)))
+ (when (file-exists-p (nnfolder-group-marks-pathname group))
+ (delete-file (nnfolder-group-marks-pathname group)))))
;; Remove the group from all structures.
(setq nnfolder-group-alist
(delq (assoc group nnfolder-group-alist) nnfolder-group-alist)
(let ((new-file (nnfolder-group-pathname new-name)))
(gnus-make-directory (file-name-directory new-file))
(rename-file buffer-file-name new-file)
- (setq new-file (nnfolder-group-nov-pathname new-name))
- (rename-file (nnfolder-group-nov-pathname group)
- new-file))
+ (when (file-exists-p (nnfolder-group-nov-pathname group))
+ (setq new-file (nnfolder-group-nov-pathname new-name))
+ (gnus-make-directory (file-name-directory new-file))
+ (rename-file (nnfolder-group-nov-pathname group) new-file))
+ (when (file-exists-p (nnfolder-group-marks-pathname group))
+ (setq new-file (nnfolder-group-marks-pathname new-name))
+ (gnus-make-directory (file-name-directory new-file))
+ (rename-file (nnfolder-group-marks-pathname group) new-file)))
t)
;; That went ok, so we change the internal structures.
(let ((entry (assoc group nnfolder-group-alist)))
(mail-header-set-number headers article)
(nnheader-insert-nov headers)))
+(deffoo nnfolder-request-set-mark (group actions &optional server)
+ (nnfolder-possibly-change-group group server)
+ (unless nnfolder-marks-is-evil
+ (nnfolder-open-marks group server)
+ (dolist (action actions)
+ (let ((range (nth 0 action))
+ (what (nth 1 action))
+ (marks (nth 2 action)))
+ (assert (or (eq what 'add) (eq what 'del)) t
+ "Unknown request-set-mark action: %s" what)
+ (dolist (mark marks)
+ (setq nnfolder-marks (gnus-update-alist-soft
+ mark
+ (funcall (if (eq what 'add) 'gnus-range-add
+ 'gnus-remove-from-range)
+ (cdr (assoc mark nnfolder-marks)) range)
+ nnfolder-marks)))))
+ (nnfolder-save-marks group server))
+ nil)
+
+(deffoo nnfolder-request-update-info (group info &optional server)
+ (nnfolder-possibly-change-group group server)
+ (unless nnfolder-marks-is-evil
+ (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))
+ gnus-article-mark-lists)
+ (let ((seen (cdr (assq 'read nnfolder-marks))))
+ (gnus-info-set-read info
+ (if (and (integerp (car seen))
+ (null (cdr seen)))
+ (list (cons (car seen) (car seen)))
+ seen))))
+ info)
+
+(defun nnfolder-group-marks-pathname (group)
+ "Make pathname for GROUP NOV."
+ (let ((nnfolder-directory (or nnfolder-marks-directory nnfolder-directory)))
+ (concat (nnfolder-group-pathname group) nnfolder-marks-file-suffix)))
+
+(defun nnfolder-save-marks (group server)
+ (let ((file-name-coding-system nnmail-pathname-coding-system)
+ (file (nnfolder-group-marks-pathname group)))
+ (condition-case err
+ (with-temp-file file
+ (erase-buffer)
+ (princ nnfolder-marks (current-buffer))
+ (insert "\n"))
+ (error (or (gnus-yes-or-no-p
+ (format "Could not write to %s (%s). Continue? " file err))
+ (error "Cannot write to %s (%s)" err))))))
+
+(defun nnfolder-open-marks (group server)
+ (let ((file (nnfolder-group-marks-pathname group)))
+ (if (file-exists-p file)
+ (setq nnfolder-marks (condition-case err
+ (with-temp-buffer
+ (nnheader-insert-file-contents file)
+ (read (current-buffer)))
+ (error (or (gnus-yes-or-no-p
+ (format "Error reading nnfolder marks file %s (%s). Continuing will use marks from .newsrc.eld. Continue? " file err))
+ (error "Cannot read nnfolder marks file %s (%s)" file err)))))
+ ;; User didn't have a .marks file. Probably first time
+ ;; user of the .marks stuff. Bootstrap it from .newsrc.eld.
+ (let ((info (gnus-get-info
+ (gnus-group-prefixed-name
+ group
+ (gnus-server-to-method (format "nnfolder:%s" server))))))
+ (nnheader-message 6 "Bootstrapping nnfolder marks...")
+ (setq nnfolder-marks (gnus-info-marks info))
+ (push (cons 'read (gnus-info-read info)) nnfolder-marks)
+ (nnfolder-save-marks group server)))))
+
(provide 'nnfolder)
;;; nnfolder.el ends here
;;; nnml.el --- mail spool access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
;; Free Software Foundation, Inc.
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Simon Josefsson <simon@josefsson.org> (adding MARKS)
+;; Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news, mail
(eval-when-compile (require 'cl))
(eval-when-compile (require 'gnus-clfns))
+(require 'gnus)
(require 'nnheader)
(require 'nnmail)
(require 'nnoo)
This variable is a virtual server slot. See the Gnus manual for details.")
(defvoo nnml-nov-is-evil nil
- "If non-nil, Gnus will never generate and use nov databases for mail groups.
+ "If non-nil, Gnus will never generate and use nov databases for mail spools.
Using nov databases will speed up header fetching considerably.
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
This variable is a virtual server slot. See the Gnus manual for details.")
+(defvoo nnml-marks-is-evil nil
+ "If non-nil, Gnus will never generate and use marks file for mail spools.
+Using marks files makes it possible to backup and restore mail groups
+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-prepare-save-mail-hook nil
"Hook run narrowed to an article before saving.
"nnml version.")
(defvoo nnml-nov-file-name ".overview")
+(defvoo nnml-marks-file-name ".marks")
(defvoo nnml-current-directory nil)
(defvoo nnml-current-group nil)
(defvoo nnml-file-coding-system nnmail-file-coding-system)
+(defvoo nnml-marks nil)
+
\f
;;; Interface functions.
(setq nnml-article-file-alist
(nnheader-article-to-file-alist nnml-current-directory))))
-(defvoo nnml-marks-file-name ".marks")
-(defvoo nnml-marks-is-evil nil)
-(defvoo nnml-marks nil)
-
(deffoo nnml-request-set-mark (group actions &optional server)
(nnml-possibly-change-directory group server)
(unless nnml-marks-is-evil
(let ((file-name-coding-system nnmail-pathname-coding-system)
(file (expand-file-name nnml-marks-file-name
(nnmail-group-pathname group nnml-directory))))
- (nnml-possibly-create-directory group)
- (with-temp-file file
- (erase-buffer)
- (princ nnml-marks (current-buffer))
- (insert "\n"))))
+ (condition-case err
+ (progn
+ (nnml-possibly-create-directory group)
+ (with-temp-file file
+ (erase-buffer)
+ (princ nnml-marks (current-buffer))
+ (insert "\n")))
+ (error (or (gnus-yes-or-no-p
+ (format "Could not write to %s (%s). Continue? " file err))
+ (error "Cannot write to %s (%s)" err))))))
(defun nnml-open-marks (group server)
(let ((file (expand-file-name
(gnus-group-prefixed-name
group
(gnus-server-to-method (format "nnml:%s" server))))))
- (nnheader-message 6 "Boostrapping nnml marks...")
+ (nnheader-message 6 "Bootstrapping nnml marks...")
(setq nnml-marks (gnus-info-marks info))
(push (cons 'read (gnus-info-read info)) nnml-marks)
(nnml-save-marks group server)))))
(format "<%d@%s.nnrss>" (car e) group)
"\t" ;; id
"\t" ;; refs
- "0" "\t" ;; chars
- "0" "\t" ;; lines
+ "-1" "\t" ;; chars
+ "-1" "\t" ;; lines
"" "\t" ;; Xref
(if (and (nth 6 e)
(memq nnrss-description-field
(insert "\n")
(if (nth 6 e)
(let ((point (point)))
- (insert (nnrss-string-as-multibyte (nth 6 e)) "\n\n")
+ (insert (nnrss-string-as-multibyte (nth 6 e)))
+ (goto-char point)
+ (while (search-forward "\n" nil t)
+ (delete-char -1))
+ (goto-char (point-max))
+ (insert "\n\n")
(fill-region point (point))))
(if (nth 2 e)
(insert (nth 2 e) "\n")))))
(defvar nnweb-type-definition
'(
(dejanews ;; bought by google.com
- (article . nnweb-google-wash-article)
- (id . "http://groups.google.com/groups?as_umsgid=%s")
- (reference . nnweb-google-reference)
+ ;;(article . nnweb-google-wash-article)
+ ;;(id . "http://groups.google.com/groups?as_umsgid=%s")
+ (article . ignore)
+ (id . "http://groups.google.com/groups?selm=%s&output=gplain")
+ ;;(reference . nnweb-google-reference)
+ (reference . identity)
(map . nnweb-google-create-mapping)
(search . nnweb-google-search)
(address . "http://groups.google.com/groups")
(when (string-match "^<\\(.*\\)>$" article)
(setq art (match-string 1 article)))
(when (and fetch art)
- (setq url (format fetch article))
+ (setq url (format fetch art))
(mm-with-unibyte-current-buffer
(nnweb-fetch-url url))
(if (nnweb-definition 'reference t)
(funcall (nnweb-definition
'reference) article)))))))
(unless nnheader-callback-function
- (funcall (nnweb-definition 'article))
- (nnweb-decode-entities))
+ (funcall (nnweb-definition 'article)))
(nnheader-report 'nnweb "Fetched article %s" article)
(cons group (and (numberp article) article))))))
(while (search-forward "," nil t)
(replace-match " " t t)))
(widen)
+ (nnweb-decode-entities)
(set-marker body nil))))
(defun nnweb-reference-search (search)
(while (re-search-forward "<A.*\\?id@\\([^\"]+\\)\">[0-9]+</A>" nil t)
(replace-match "<\\1> " t)))
(widen)
- (nnweb-remove-markup)))
+ (nnweb-remove-markup)
+ (nnweb-decode-entities)))
(defun nnweb-altavista-search (search &optional part)
(url-insert-file-contents
(case-fold-search t)
(active (cadr (assoc nnweb-group nnweb-group-alist)))
Subject Score Date Newsgroups From
- map url)
+ map url mid)
(unless active
(push (list nnweb-group (setq active (cons 1 0))
nnweb-type nnweb-search)
;; Go through all the article hits on this page.
(goto-char (point-min))
(while (re-search-forward
- "a href=/groups\\(\\?[^ \">]*selm=[^ \">]*\\)" nil t)
- (setq url
- (concat (nnweb-definition 'address)
- (match-string 1)))
+ "a href=/groups\\(\\?[^ \">]*selm=\\([^ &\">]+\\)\\)" nil t)
+ (setq mid (match-string 2)
+ url (format
+ "http://groups.google.com/groups?selm=%s&output=gplain" mid))
(narrow-to-region (search-forward ">" nil t)
(search-forward "</a>" nil t))
(nnweb-remove-markup)
(cdr active) (if Newsgroups
(concat "(" Newsgroups ") " Subject)
Subject)
- From Date Message-ID
+ From Date (or Message-ID mid)
nil 0 0 url))
map)
(nnweb-set-hashtb (cadar map) (car map))))
(defun nnweb-google-identity (url)
"Return an unique identifier based on URL."
- (if (string-match "seld=\\([0-9]+\\)" url)
+ (if (string-match "selm=\\([^ &>]+\\)" url)
(match-string 1 url)
url))
+2001-08-25 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Mail Spool): Add marks.
+ (MH Spool): Doesn't use marks file.
+ (Mail Folders): Add marks.
+
+2001-08-25 Simon Josefsson <jas@extundo.com>
+ From Henrik Enberg <henrik@enberg.org>
+
+ * gnus.texi (Group Parameters): Fix.
+
+2001-08-24 16:03:31 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Group Parameters): Fix.
+
+2001-08-24 Simon Josefsson <jas@extundo.com>
+
+ * Makefile.in (latexps): Make tmps.
+
+2001-08-24 Simon Josefsson <jas@extundo.com>
+ From Jesper Harder <harder@ifa.au.dk>
+
+ * Makefile.in (latexps): Escape {.
+
+ * splitindex: Ditto.
+
2001-08-23 19:22:59 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Group Parameters): Fix.
latex gnus.latexi gnus-faq.latexi: $(srcdir)/gnus.texi $(srcdir)/gnus-faq.texi texi2latex.elc
srcdir=$(srcdir) $(EMACSCOMP) -l ./texi2latex.elc -f latexi-translate
-latexps: gnus.latexi
+latexps: gnus.latexi tmps
$(MAKE) texi2latex.elc
rm -f gnus.aux
egrep -v "label.*Index|chapter.*Index" gnus.latexi > gnus.tmplatexi1
makeindex -o gnus.gind gnus.gidx
sed 's/\\char 5E\\relax {}/\\symbol{"5E}/' < gnus.kind > gnus.tmpkind
mv gnus.tmpkind gnus.kind
- egrep -v "end{document}" gnus.tmplatexi1 > gnus.tmplatexi
+ egrep -v "end\{document\}" gnus.tmplatexi1 > gnus.tmplatexi
cat postamble.tex >> gnus.tmplatexi
$(LATEX) gnus.tmplatexi
$(LATEX) gnus.tmplatexi
$(MAKE) latex
$(MAKE) latexps
-psout:
+psout: tmps
$(MAKE) latex
$(MAKE) latexboth
$(MAKE) out
\e$B$$$/$D$+Nc$r5s$2$^$9\e(B:
@table @code
-@item [unread]
-\e$BL$FI$N5-;v$@$1$rI=<($7$^$9!#\e(B
+@item [read]
+\e$B4{FI$N5-;v$@$1$rI=<($7$^$9!#\e(B
@item [not expire]
\e$B4|8B@Z$l>C5n2DG=$J5-;v0J30$N$9$Y$F$rI=<($7$^$9!#\e(B
@item nntp-via-envuser
@vindex nntp-via-envuser
-\e$B$b$7Hs\e(B-@code{nil}\e$B$J$i!"Cf4V$N\e(B @code{telnet} \e$B$N%;%C%7%g%s\e(B (\e$B%/%i%$%"%s%H$H\e(B
+\e$B$b$7Hs\e(B@code{nil}\e$B$J$i!"Cf4V$N\e(B @code{telnet} \e$B$N%;%C%7%g%s\e(B (\e$B%/%i%$%"%s%H$H\e(B
\e$B%5!<%P!<$NN>J}\e(B) \e$B$G\e(B @code{ENVIRON} \e$B%*%W%7%g%s$r%5%]!<%H$7!"%m%0%$%sL>$NF~\e(B
\e$BNO$rMW5a$7$^$;$s!#$3$l$ONc$($P\e(B Solaris \e$B$N\e(B @code{telnet} \e$B$GF0:n$7$^$9!#\e(B
\e$B$N\e(B @sc{nov} \e$B%G!<%?%Y!<%9$b:n@.$7$J$1$l$P$J$j$^$;$s!#$3$l$N$?$a$K!"%a!<%k\e(B
\e$B$rFI$`;v$K4X$7$F$O:GB.$N%P%C%/%(%s%I$K$J$j$^$9!#\e(B
+@cindex self contained nnml servers
+\e$B0u%U%!%$%k\e(B (\e$BLuCm\e(B: marks file) \e$B$,;H$o$l$k$H\e(B (\e$B$=$l$,%G%#%U%)%k%H$G$9$,\e(B)\e$B!"\e(B
+@code{nnml} \e$B%5!<%P!<$O\e(B @code{tar} \e$B$J$I$r;H$C$F%P%C%/%"%C%W$7$?$j!"8e$G$"\e(B
+\e$B$J$?$,IU$1$?0u$,$9$Y$FJ]$?$l$?>uBV$G\e(B gnus \e$B$KLa$9\e(B (\e$BK\Mh$N\e(B @code{nnml} \e$B%5!<\e(B
+\e$B%P!<$K$h$C$FDI2C$9$k\e(B) \e$B$3$H$,$G$-$kFC<A$r;}$D$h$&$K$J$j$^$9!#%0%k!<%W$N0u\e(B
+\e$B$O$=$l$>$l$N\e(B @code{nnml} \e$B%0%k!<%W$N%G%#%l%/%H%jFb$N!"DL\e(B
+\e$B>o\e(B @code{.marks} \e$B%U%!%$%k\e(B (@code{nnml-marks-file-name} \e$B$r;2>H\e(B) \e$B$K3JG<$5\e(B
+\e$B$l$^$9!#$^$?!"8D!9$N\e(B @code{nnml} \e$B%0%k!<%W$K$D$$$F$b%P%C%/%"%C%W$9$k$3$H\e(B
+\e$B$,2DG=$G!"\e(B(\e$B%P%C%/%"%C%W$r\e(B nnml \e$B%G%#%l%/%$%H%j$KLa$7$?8e$G\e(B) @kbd{G m} \e$B%-!<\e(B
+\e$B$r;H$C$F$=$N%0%k!<%W$r85$KLa$7$^$9!#\e(B
+
\e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
@table @code
@item nnml-prepare-save-mail-hook
@vindex nnml-prepare-save-mail-hook
\e$BJ]B8$9$kA0$K5-;v$KHO0O$r69$a$F<B9T$9$k%U%C%/$G$9!#\e(B
+
+@item nnml-marks-is-evil
+@vindex nnml-marks-is-evil
+\e$BHs\e(B@code{nil} \e$B$G$"$k$H!"$3$N%P%C%/%(%s%I$O$$$+$J$k\e(B @sc{\e$B0u\e(B} \e$B%U%!%$%k$bL5;k\e(B
+\e$B$7$^$9!#%G%#%U%)%k%H$O\e(B @code{nil} \e$B$G$9!#\e(B
+
+@item nnml-marks-file-name
+@vindex nnml-marks-file-name
+@sc{\e$B0u\e(B} \e$B%U%!%$%k$NL>A0$G$9!#%G%#%U%)%k%H$O\e(B @file{.marks} \e$B$G$9!#\e(B
@end table
@findex nnml-generate-nov-databases
@cindex mh-e mail spool
@code{nnmh} \e$B$O!"\e(B@sc{nov} \e$B%G!<%?%Y!<%9$r:n$i$J$$$3$H$H%"%/%F%#%V%U%!%$%k\e(B
-\e$B$rJ];}$7$J$$;v$r=|$$$F!"\e(B@code{nnml} \e$B$H;w$F$$$^$9!#$=$N$3$H\e(B
+\e$B$d0u%U%!%$%k$rJ];}$7$J$$;v$r=|$$$F!"\e(B@code{nnml} \e$B$H;w$F$$$^$9!#$=$N$3$H\e(B
\e$B$O\e(B @code{nnmh} \e$B$r\e(B @code{nnml} \e$B$h$j\e(B @emph{\e$B$+$J$j\e(B} \e$BCY$$%P%C%/%(%s%I$K$7$F\e(B
\e$B$$$^$9$,!"$=$l$O\e(B procmail \e$B$N%9%/%j%W%H$r=q$/$?$a$K$:$C$H$d$j$d$9$/$J$C$F\e(B
\e$B$b$$$^$9!#\e(B
@code{nnfolder} \e$B$O5-;vHV9f$HE~CeF|$r5-O?$7$F$*$/$?$a$NDI2C$N%X%C%@!<$r2C\e(B
\e$B$($^$9!#\e(B
+@cindex self contained nnfolder servers
+\e$B0u%U%!%$%k\e(B (\e$BLuCm\e(B: marks file) \e$B$,;H$o$l$k$H\e(B (\e$B$=$l$,%G%#%U%)%k%H$G$9$,\e(B)\e$B!"\e(B
+@code{nnfolder} \e$B%5!<%P!<$O\e(B @code{tar} \e$B$J$I$r;H$C$F%P%C%/%"%C%W$7$?$j!"8e\e(B
+\e$B$G$"$J$?$,IU$1$?0u$,$9$Y$FJ]$?$l$?>uBV$G\e(B gnus \e$B$KLa$9\e(B (\e$BK\Mh\e(B
+\e$B$N\e(B @code{nnfolder} \e$B%5!<%P!<$K$h$C$FDI2C$9$k\e(B) \e$B$3$H$,$G$-$kFC<A$r;}$D$h$&\e(B
+\e$B$K$J$j$^$9!#%0%k!<%W$N0u$O\e(B @code{nnfolder} \e$B%G%#%l%/%H%jFb$N!"\e(Bmbox \e$B%U%!%$\e(B
+\e$B%k$KDL>o\e(B @code{.mrk} (@code{nnfolder-marks-file-name} \e$B$r;2>H\e(B) \e$B$,IU2C$5$l\e(B
+\e$B$?L>A0$N%U%!%$%k$K3JG<$5$l$^$9!#$^$?!"8D!9$N\e(B @code{nnfolder} \e$B%0%k!<%W$K\e(B
+\e$B$D$$$F$b%P%C%/%"%C%W$9$k$3$H$,2DG=$G!"\e(B(\e$B%P%C%/%"%C%W$r\e(B nnfolder \e$B%G%#%l%/\e(B
+\e$B%$%H%j$KLa$7$?8e$G\e(B) @kbd{G m} \e$B%-!<$r;H$C$F$=$N%0%k!<%W$r85$KLa$7$^$9!#\e(B
+
\e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
@table @code
@vindex nnfolder-nov-is-evil
\e$B$b$7Hs\e(B@code{nil}\e$B$J$i!"$3$N%P%C%/%(%s%I$O\e(B @sc{nov} \e$B%U%!%$%k$rL5;k$7$^$9!#\e(B
\e$B4{DjCM$O\e(B @code{nil} \e$B$G$9!#\e(B
+
+@item nnfolder-nov-file-suffix
+@vindex nnfolder-nov-file-suffix
+@sc{nov} \e$B%U%!%$%k$N3HD%;R$G$9!#%G%#%U%)%k%H$O\e(B @file{.nov} \e$B$G$9!#\e(B
+
+@item nnfolder-marks-is-evil
+@vindex nnfolder-marks-is-evil
+\e$BHs\e(B@code{nil} \e$B$G$"$k$H!"$3$N%P%C%/%(%s%I$O$$$+$J$k\e(B @sc{\e$B0u\e(B} \e$B%U%!%$%k$r$b\e(B
+\e$BL5;k$7$^$9!#%G%#%U%)%k%H$O\e(B @code{nil} \e$B$G$9!#\e(B
+
+@item nnfolder-marks-file-suffix
+@vindex nnfolder-marks-file-suffix
+@sc{\e$B0u\e(B} \e$B%U%!%$%k$N3HD%;R$G$9!#%G%#%U%)%k%H$O\e(B @file{.mrk} \e$B$G$9!#\e(B
@end table
@findex nnfolder-generate-active-file
@item nnimap-importantize-dormant
@vindex nnimap-importantize-dormant
-\e$BHs\e(B-nil \e$B$@$C$?$i!"B>$N\e(B IMAP \e$B%/%i%$%"%s%H$N$?$a$KJ]N15-;v$r0uIU$-$H$7$F$b\e(B
+\e$BHs\e(B nil \e$B$@$C$?$i!"B>$N\e(B IMAP \e$B%/%i%$%"%s%H$N$?$a$KJ]N15-;v$r0uIU$-$H$7$F$b\e(B
\e$B0u$rIU$1$^$9!#\e(Bgnus \e$B$NFbIt$G$O!"J]N15-;v$O85!9$9$G$K0uIU$-$H$7$F$N$_0u$,\e(B
\e$BIU$1$i$l$F$$$^$9!#$3$l$O!"B>$N\e(B IMAP \e$B%/%i%$%"%s%H$K$*$1$kJ]N15-;v$r!"$"$?\e(B
\e$B$+$b0uIU$-$N$h$&$K$-$oN)$?$;$^$9!#\e(B(\e$BJL$N8@$$J}$r$9$k$H!"\e(Bgnus \e$B$OFs$D$N0u$r\e(B
Here are some examples:
@table @code
-@item [unread]
-Display only unread articles.
+@item [read]
+Display only read articles.
@item [not expire]
Display everything except expirable articles.
groups.
@item charset
-@item charset
+@cindex charset
Elements that look like @code{(charset . iso-8859-1)} will make
@code{iso-8859-1} the default charset; that is, the charset that will be
used for all articles that do not specify a charset.
See also @code{gnus-group-charset-alist}.
@item ignored-charsets
-@item ignored-charset
+@cindex ignored-charset
Elements that look like @code{(ignored-charsets x-known iso-8859-1)}
will make @code{iso-8859-1} and @code{x-unknown} ignored; that is, the
default charset will be used for decoding articles.
@sc{nov} databases for the incoming mails. This makes it the fastest
backend when it comes to reading mail.
+@cindex self contained nnml servers
+When the marks file is used (which it is by default), @code{nnml}
+servers have the property that you may backup them using @code{tar} or
+similar, and later be able to restore them into Gnus (by adding the
+proper @code{nnml} server) and have all your marks be preserved. Marks
+for a group is usually stored in the @code{.marks} file (but see
+@code{nnml-marks-file-name}) within each @code{nnml} group's directory.
+Individual @code{nnml} groups are also possible to backup, use @kbd{G m}
+to restore the group (after restoring the backup into the nnml
+directory).
+
Virtual server settings:
@table @code
@vindex nnml-directory
All @code{nnml} directories will be placed under this directory.
The default is the value of `message-directory' (whose default value is
-@file{~/Mail})
+@file{~/Mail}).
@item nnml-active-file
@vindex nnml-active-file
@item nnml-get-new-mail
@vindex nnml-get-new-mail
If non-@code{nil}, @code{nnml} will read incoming mail. The default is
-@code{t}
+@code{t}.
@item nnml-nov-is-evil
@vindex nnml-nov-is-evil
If non-@code{nil}, this backend will ignore any @sc{nov} files. The
-default is @code{nil}
+default is @code{nil}.
@item nnml-nov-file-name
@vindex nnml-nov-file-name
@vindex nnml-prepare-save-mail-hook
Hook run narrowed to an article before saving.
+@item nnml-marks-is-evil
+@vindex nnml-marks-is-evil
+If non-@code{nil}, this backend will ignore any @sc{marks} files. The
+default is @code{nil}.
+
+@item nnml-marks-file-name
+@vindex nnml-marks-file-name
+The name of the @sc{marks} files. The default is @file{.marks}.
+
@end table
@findex nnml-generate-nov-databases
@cindex mh-e mail spool
@code{nnmh} is just like @code{nnml}, except that is doesn't generate
-@sc{nov} databases and it doesn't keep an active file. This makes
-@code{nnmh} a @emph{much} slower backend than @code{nnml}, but it also
-makes it easier to write procmail scripts for.
+@sc{nov} databases and it doesn't keep an active file or marks file.
+This makes @code{nnmh} a @emph{much} slower backend than @code{nnml},
+but it also makes it easier to write procmail scripts for.
Virtual server settings:
will add extra headers to keep track of article numbers and arrival
dates.
+@cindex self contained nnfolder servers
+When the marks file is used (which it is by default), @code{nnfolder}
+servers have the property that you may backup them using @code{tar} or
+similar, and later be able to restore them into Gnus (by adding the
+proper @code{nnfolder} server) and have all your marks be preserved.
+Marks for a group is usually stored in a file named as the mbox file
+with @code{.mrk} concatenated to it (but see
+@code{nnfolder-marks-file-suffix}) within the @code{nnfolder} directory.
+Individual @code{nnfolder} groups are also possible to backup, use
+@kbd{G m} to restore the group (after restoring the backup into the
+@code{nnfolder} directory).
+
Virtual server settings:
@table @code
If non-@code{nil}, this backend will ignore any @sc{nov} files. The
default is @code{nil}.
+@item nnfolder-nov-file-suffix
+@vindex nnfolder-nov-file-suffix
+The extension for @sc{nov} files. The default is @file{.nov}.
+
+@item nnfolder-marks-is-evil
+@vindex nnfolder-marks-is-evil
+If non-@code{nil}, this backend will ignore any @sc{marks} files. The
+default is @code{nil}.
+
+@item nnfolder-marks-file-suffix
+@vindex nnfolder-marks-file-suffix
+The extension for @sc{marks} files. The default is @file{.mrk}.
+
@end table
#!/bin/sh
match='M-x |(Group)|(Summary)|(Article)|(Server)|(Browse)|(Post)|(Mail)|(Score)|(Binary)|(Topic)|(Pick)'
-fun='{gnus-|{nn.*-|{grouplens-'
+fun='\{gnus-|\{nn.*-|\{grouplens-'
egrep "$match" gnus.idx > gnus.kidx
egrep "$fun" gnus.idx > gnus.gidx
egrep -v "$match|$fun" gnus.idx > gnus.cidx