*** pub/rgnus/lisp/gnus-art.el Sun Jun 29 21:44:30 1997 --- rgnus/lisp/gnus-art.el Sun Jul 6 17:24:04 1997 *************** *** 1419,1425 **** (gnus-article-hide-headers 1 t))) (save-window-excursion (if (not gnus-default-article-saver) ! (error "No default saver is defined.") ;; !!! Magic! The saving functions all save ;; `gnus-original-article-buffer' (or so they think), but we ;; bind that variable to our save-buffer. --- 1419,1425 ---- (gnus-article-hide-headers 1 t))) (save-window-excursion (if (not gnus-default-article-saver) ! (error "No default saver is defined") ;; !!! Magic! The saving functions all save ;; `gnus-original-article-buffer' (or so they think), but we ;; bind that variable to our save-buffer. *************** *** 2471,2477 **** (interactive "P") (when (and (not force) (gnus-group-read-only-p)) ! (error "The current newsgroup does not support article editing.")) (gnus-article-edit-article `(lambda () (gnus-summary-edit-article-done --- 2471,2477 ---- (interactive "P") (when (and (not force) (gnus-group-read-only-p)) ! (error "The current newsgroup does not support article editing")) (gnus-article-edit-article `(lambda () (gnus-summary-edit-article-done *** pub/rgnus/lisp/gnus-group.el Wed Jun 18 17:31:41 1997 --- rgnus/lisp/gnus-group.el Sun Jul 6 17:24:05 1997 *************** *** 1213,1220 **** (not (zerop (buffer-size)))))) (mode-string (eval gformat))) ;; Say whether the dribble buffer has been modified. ! (setq mode-line-modified ! (if modified "--**- " "----- ")) ;; If the line is too long, we chop it off. (when (> (length mode-string) max-len) (setq mode-string (substring mode-string 0 (- max-len 4)))) --- 1213,1219 ---- (not (zerop (buffer-size)))))) (mode-string (eval gformat))) ;; Say whether the dribble buffer has been modified. ! (setq mode-line-modified (if modified "**" "--")) ;; If the line is too long, we chop it off. (when (> (length mode-string) max-len) (setq mode-string (substring mode-string 0 (- max-len 4)))) *************** *** 2146,2152 **** (pgroup (gnus-group-prefixed-name group method))) ;; Check whether it exists already. (when (gnus-gethash pgroup gnus-newsrc-hashtb) ! (error "Group %s already exists." pgroup)) ;; Subscribe the new group after the group on the current line. (gnus-subscribe-group pgroup (gnus-group-group-name) method) (gnus-group-update-group pgroup) --- 2145,2151 ---- (pgroup (gnus-group-prefixed-name group method))) ;; Check whether it exists already. (when (gnus-gethash pgroup gnus-newsrc-hashtb) ! (error "Group %s already exists" pgroup)) ;; Subscribe the new group after the group on the current line. (gnus-subscribe-group pgroup (gnus-group-group-name) method) (gnus-group-update-group pgroup) *** pub/rgnus/lisp/gnus-nocem.el Wed Jun 18 01:16:35 1997 --- rgnus/lisp/gnus-nocem.el Sun Jul 6 17:24:05 1997 *************** *** 222,228 **** ;; Make sure all entries in the hashtb are bound. (set group nil)) (t ! (when (gnus-gethash (symbol-name group) gnus-newsrc-hashtb) ;; Valid group. (beginning-of-line) (while (= (following-char) ?\t) --- 222,229 ---- ;; Make sure all entries in the hashtb are bound. (set group nil)) (t ! (when (gnus-gethash (gnus-group-real-name (symbol-name group)) ! gnus-newsrc-hashtb) ;; Valid group. (beginning-of-line) (while (= (following-char) ?\t) *** pub/rgnus/lisp/gnus-score.el Wed Jun 18 00:53:20 1997 --- rgnus/lisp/gnus-score.el Sun Jul 6 17:24:05 1997 *************** *** 1359,1364 **** --- 1359,1365 ---- (save-excursion (set-buffer (get-buffer-create "*Headers*")) (buffer-disable-undo (current-buffer)) + (message-clone-locals gnus-summary-buffer) ;; Set the global variant of this variable. (setq gnus-current-score-file current-score-file) *** pub/rgnus/lisp/gnus-soup.el Fri Mar 14 20:17:17 1997 --- rgnus/lisp/gnus-soup.el Sun Jul 6 17:24:06 1997 *************** *** 356,362 **** (call-process shell-file-name nil nil nil shell-command-switch (concat "cd " dir " ; rm " files)) (gnus-message 4 "Packing...done" packer)) ! (error "Couldn't pack packet.")))) (defun gnus-soup-parse-areas (file) "Parse soup area file FILE. --- 356,362 ---- (call-process shell-file-name nil nil nil shell-command-switch (concat "cd " dir " ; rm " files)) (gnus-message 4 "Packing...done" packer)) ! (error "Couldn't pack packet")))) (defun gnus-soup-parse-areas (file) "Parse soup area file FILE. *************** *** 521,527 **** (goto-char (point-min)) (while (not (eobp)) (unless (looking-at "#! *rnews +\\([0-9]+\\)") ! (error "Bad header.")) (forward-line 1) (setq beg (point) end (+ (point) (string-to-int --- 521,527 ---- (goto-char (point-min)) (while (not (eobp)) (unless (looking-at "#! *rnews +\\([0-9]+\\)") ! (error "Bad header")) (forward-line 1) (setq beg (point) end (+ (point) (string-to-int *** pub/rgnus/lisp/gnus-srvr.el Tue Jul 1 01:57:01 1997 --- rgnus/lisp/gnus-srvr.el Sun Jul 6 17:24:06 1997 *************** *** 662,668 **** "(Un)subscribe to the next ARG groups." (interactive "p") (when (eobp) ! (error "No group at current line.")) (let ((ward (if (< arg 0) -1 1)) (arg (abs arg))) (while (and (> arg 0) --- 662,668 ---- "(Un)subscribe to the next ARG groups." (interactive "p") (when (eobp) ! (error "No group at current line")) (let ((ward (if (< arg 0) -1 1)) (arg (abs arg))) (while (and (> arg 0) *** pub/rgnus/lisp/gnus-start.el Sun Jun 29 21:44:31 1997 --- rgnus/lisp/gnus-start.el Sun Jul 6 17:24:06 1997 *************** *** 123,129 **** :group 'gnus-start-server :type 'boolean) ! (defcustom gnus-read-active-file t "*Non-nil means that Gnus will read the entire active file at startup. If this variable is nil, Gnus will only know about the groups in your `.newsrc' file. --- 123,129 ---- :group 'gnus-start-server :type 'boolean) ! (defcustom gnus-read-active-file 'some "*Non-nil means that Gnus will read the entire active file at startup. If this variable is nil, Gnus will only know about the groups in your `.newsrc' file. *************** *** 691,697 **** "Unload all Gnus features." (interactive) (unless (boundp 'load-history) ! (error "Sorry, `gnus-unload' is not implemented in this Emacs version.")) (let ((history load-history) feature) (while history --- 691,697 ---- "Unload all Gnus features." (interactive) (unless (boundp 'load-history) ! (error "Sorry, `gnus-unload' is not implemented in this Emacs version")) (let ((history load-history) feature) (while history *************** *** 1625,1631 **** (t (if (not (gnus-request-list method)) (unless (equal method gnus-message-archive-method) ! (gnus-error 1 "Cannot read active file from %s server." (car method))) (gnus-message 5 mesg) (gnus-active-to-gnus-format method gnus-active-hashtb) --- 1625,1631 ---- (t (if (not (gnus-request-list method)) (unless (equal method gnus-message-archive-method) ! (gnus-error 1 "Cannot read active file from %s server" (car method))) (gnus-message 5 mesg) (gnus-active-to-gnus-format method gnus-active-hashtb) *** pub/rgnus/lisp/gnus-sum.el Tue Jul 1 01:57:02 1997 --- rgnus/lisp/gnus-sum.el Sun Jul 6 17:24:07 1997 *************** *** 5299,5305 **** did) (and (not pseudo) (gnus-summary-article-pseudo-p article) ! (error "This is a pseudo-article.")) (prog1 (save-excursion (set-buffer gnus-summary-buffer) --- 5299,5305 ---- did) (and (not pseudo) (gnus-summary-article-pseudo-p article) ! (error "This is a pseudo-article")) (prog1 (save-excursion (set-buffer gnus-summary-buffer) *************** *** 7005,7011 **** (gnus-set-global-variables) (unless (gnus-check-backend-function 'request-expire-articles gnus-newsgroup-name) ! (error "The current newsgroup does not support article deletion.")) ;; Compute the list of articles to delete. (let ((articles (gnus-summary-work-articles n)) not-deleted) --- 7005,7011 ---- (gnus-set-global-variables) (unless (gnus-check-backend-function 'request-expire-articles gnus-newsgroup-name) ! (error "The current newsgroup does not support article deletion")) ;; Compute the list of articles to delete. (let ((articles (gnus-summary-work-articles n)) not-deleted) *************** *** 7043,7049 **** (gnus-set-global-variables) (when (and (not force) (gnus-group-read-only-p)) ! (error "The current newsgroup does not support article editing.")) ;; Select article if needed. (unless (eq (gnus-summary-article-number) gnus-current-article) --- 7043,7049 ---- (gnus-set-global-variables) (when (and (not force) (gnus-group-read-only-p)) ! (error "The current newsgroup does not support article editing")) ;; Select article if needed. (unless (eq (gnus-summary-article-number) gnus-current-article) *************** *** 7064,7070 **** (not (gnus-request-replace-article (cdr gnus-article-current) (car gnus-article-current) (current-buffer)))) ! (error "Couldn't replace article.") ;; Update the summary buffer. (if (and references (equal (message-tokenize-header references " ") --- 7064,7070 ---- (not (gnus-request-replace-article (cdr gnus-article-current) (car gnus-article-current) (current-buffer)))) ! (error "Couldn't replace article") ;; Update the summary buffer. (if (and references (equal (message-tokenize-header references " ") *************** *** 7712,7718 **** (setq scored (cdr scored))) (if (not headers) (when (not no-error) ! (error "No expunged articles hidden.")) (goto-char (point-min)) (gnus-summary-prepare-unthreaded (nreverse headers)) (goto-char (point-min)) --- 7712,7718 ---- (setq scored (cdr scored))) (if (not headers) (when (not no-error) ! (error "No expunged articles hidden")) (goto-char (point-min)) (gnus-summary-prepare-unthreaded (nreverse headers)) (goto-char (point-min)) *************** *** 7867,7875 **** is non-nil or the Subject: of both articles are the same." (interactive) (unless (not (gnus-group-read-only-p)) ! (error "The current newsgroup does not support article editing.")) (unless (<= (length gnus-newsgroup-processable) 1) ! (error "No more than one article may be marked.")) (save-window-excursion (let ((gnus-article-buffer " *reparent*") (current-article (gnus-summary-article-number)) --- 7867,7875 ---- is non-nil or the Subject: of both articles are the same." (interactive) (unless (not (gnus-group-read-only-p)) ! (error "The current newsgroup does not support article editing")) (unless (<= (length gnus-newsgroup-processable) 1) ! (error "No more than one article may be marked")) (save-window-excursion (let ((gnus-article-buffer " *reparent*") (current-article (gnus-summary-article-number)) *************** *** 7879,7891 **** (save-excursion (if (eq (forward-line -1) 0) (gnus-summary-article-number) ! (error "Beginning of summary buffer.")))))) (unless (not (eq current-article parent-article)) ! (error "An article may not be self-referential.")) (let ((message-id (mail-header-id (gnus-summary-article-header parent-article)))) (unless (and message-id (not (equal message-id ""))) ! (error "No message-id in desired parent.")) (gnus-summary-select-article t t nil current-article) (set-buffer gnus-original-article-buffer) (let ((buf (format "%s" (buffer-string)))) --- 7879,7891 ---- (save-excursion (if (eq (forward-line -1) 0) (gnus-summary-article-number) ! (error "Beginning of summary buffer")))))) (unless (not (eq current-article parent-article)) ! (error "An article may not be self-referential")) (let ((message-id (mail-header-id (gnus-summary-article-header parent-article)))) (unless (and message-id (not (equal message-id ""))) ! (error "No message-id in desired parent")) (gnus-summary-select-article t t nil current-article) (set-buffer gnus-original-article-buffer) (let ((buf (format "%s" (buffer-string)))) *************** *** 7898,7908 **** (unless (gnus-request-replace-article current-article (car gnus-article-current) (current-buffer)) ! (error "Couldn't replace article.")))) (set-buffer gnus-summary-buffer) (gnus-summary-unmark-all-processable) (gnus-summary-rethread-current) ! (gnus-message 3 "Article %d is now the child of article %d." current-article parent-article))))) (defun gnus-summary-toggle-threads (&optional arg) --- 7898,7908 ---- (unless (gnus-request-replace-article current-article (car gnus-article-current) (current-buffer)) ! (error "Couldn't replace article")))) (set-buffer gnus-summary-buffer) (gnus-summary-unmark-all-processable) (gnus-summary-rethread-current) ! (gnus-message 3 "Article %d is now the child of article %d" current-article parent-article))))) (defun gnus-summary-toggle-threads (&optional arg) *** pub/rgnus/lisp/gnus-topic.el Tue Jul 1 01:57:03 1997 --- rgnus/lisp/gnus-topic.el Sun Jul 6 17:24:07 1997 *************** *** 1320,1326 **** (if group (gnus-group-edit-group-parameters group) (if (not (gnus-group-topic-p)) ! (error "Nothing to edit on the current line.") (let ((topic (gnus-group-topic-name))) (gnus-edit-form (gnus-topic-parameters topic) --- 1320,1326 ---- (if group (gnus-group-edit-group-parameters group) (if (not (gnus-group-topic-p)) ! (error "Nothing to edit on the current line") (let ((topic (gnus-group-topic-name))) (gnus-edit-form (gnus-topic-parameters topic) *** pub/rgnus/lisp/gnus.el Tue Jul 1 01:57:03 1997 --- rgnus/lisp/gnus.el Sun Jul 6 17:24:07 1997 *************** *** 238,244 **** :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "5.4.61" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) --- 238,244 ---- :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "5.4.62" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) *************** *** 791,797 **** (when (and gnus-default-nntp-server (not (string= gnus-default-nntp-server ""))) gnus-default-nntp-server) ! (system-name))) (if (or (null gnus-nntp-service) (equal gnus-nntp-service "nntp")) nil --- 791,797 ---- (when (and gnus-default-nntp-server (not (string= gnus-default-nntp-server ""))) gnus-default-nntp-server) ! "news")) (if (or (null gnus-nntp-service) (equal gnus-nntp-service "nntp")) nil *************** *** 2014,2020 **** (string-match gnus-total-expirable-newsgroups group))))) (defun gnus-group-auto-expirable-p (group) ! "Check whether GROUP is total-expirable or not." (let ((params (gnus-group-find-parameter group)) val) (cond --- 2014,2020 ---- (string-match gnus-total-expirable-newsgroups group))))) (defun gnus-group-auto-expirable-p (group) ! "Check whether GROUP is auto-expirable or not." (let ((params (gnus-group-find-parameter group)) val) (cond *** pub/rgnus/lisp/message.el Sun Jun 29 21:44:33 1997 --- rgnus/lisp/message.el Sun Jul 6 17:24:08 1997 *************** *** 1942,1951 **** ;; qmail-inject doesn't say anything on it's stdout/stderr, ;; we have to look at the retval instead (0 nil) ! (1 (error "qmail-inject reported permanent failure.")) ! (111 (error "qmail-inject reported transient failure.")) ;; should never happen ! (t (error "qmail-inject reported unknown failure.")))) (defun message-send-mail-with-mh () "Send the prepared message buffer with mh." --- 1942,1951 ---- ;; qmail-inject doesn't say anything on it's stdout/stderr, ;; we have to look at the retval instead (0 nil) ! (1 (error "qmail-inject reported permanent failure")) ! (111 (error "qmail-inject reported transient failure")) ;; should never happen ! (t (error "qmail-inject reported unknown failure")))) (defun message-send-mail-with-mh () "Send the prepared message buffer with mh." *************** *** 2023,2029 **** (funcall (intern (format "%s-open-server" (car method))) (cadr method) (cddr method)) (setq result ! (funcall (intern (format "%s-request-post" (car method)))))) (kill-buffer tembuf)) (set-buffer messbuf) (if result --- 2023,2030 ---- (funcall (intern (format "%s-open-server" (car method))) (cadr method) (cddr method)) (setq result ! (funcall (intern (format "%s-request-post" (car method))) ! (cadr method)))) (kill-buffer tembuf)) (set-buffer messbuf) (if result *************** *** 3641,3658 **** Then clone the local variables and values from the old buffer to the new one, cloning only the locals having a substring matching the regexp varstr." ! (let ((oldlocals (buffer-local-variables))) (save-excursion (set-buffer (generate-new-buffer name)) ! (mapcar (lambda (dude) ! (when (and (car dude) ! (or (not varstr) ! (string-match varstr (symbol-name (car dude))))) ! (ignore-errors ! (set (make-local-variable (car dude)) ! (cdr dude))))) ! oldlocals) (current-buffer)))) (run-hooks 'message-load-hook) --- 3642,3667 ---- Then clone the local variables and values from the old buffer to the new one, cloning only the locals having a substring matching the regexp varstr." ! (let ((oldbuf (current-buffer))) (save-excursion (set-buffer (generate-new-buffer name)) ! (message-clone-locals oldbuf) (current-buffer)))) + + (defun message-clone-locals (buffer) + "Clone the local variables from BUFFER to the current buffer." + (let ((locals (save-excursion + (set-buffer buffer) + (buffer-local-variables))) + (regexp "^gnus\\|^nn\\|^message")) + (mapcar + (lambda (local) + (when (and (car local) + (string-match regexp (symbol-name (car local)))) + (ignore-errors + (set (make-local-variable (car local)) + (cdr local))))) + locals))) (run-hooks 'message-load-hook) *** pub/rgnus/lisp/nngateway.el Fri Mar 7 23:51:30 1997 --- rgnus/lisp/nngateway.el Sun Jul 6 17:24:08 1997 *************** *** 58,66 **** (insert-buffer-substring buf) (message-narrow-to-head) (funcall nngateway-header-transformation nngateway-address) (widen) (let (message-required-mail-headers) ! (message-send-mail)))))) ;;; Internal functions --- 58,68 ---- (insert-buffer-substring buf) (message-narrow-to-head) (funcall nngateway-header-transformation nngateway-address) + (goto-char (point-max)) + (insert mail-header-separator "\n") (widen) (let (message-required-mail-headers) ! (funcall message-send-mail-function)))))) ;;; Internal functions *** pub/rgnus/lisp/nnmail.el Wed Jun 18 01:16:39 1997 --- rgnus/lisp/nnmail.el Sun Jul 6 17:24:08 1997 *************** *** 541,547 **** (defun nnmail-move-inbox (inbox) "Move INBOX to `nnmail-crash-box'." (if (not (file-writable-p nnmail-crash-box)) ! (gnus-error 1 "Can't write to crash box %s. Not moving mail." nnmail-crash-box) ;; If the crash box exists and is empty, we delete it. (when (and (file-exists-p nnmail-crash-box) --- 541,547 ---- (defun nnmail-move-inbox (inbox) "Move INBOX to `nnmail-crash-box'." (if (not (file-writable-p nnmail-crash-box)) ! (gnus-error 1 "Can't write to crash box %s. Not moving mail" nnmail-crash-box) ;; If the crash box exists and is empty, we delete it. (when (and (file-exists-p nnmail-crash-box) *** pub/rgnus/lisp/nnoo.el Sun Mar 9 18:41:38 1997 --- rgnus/lisp/nnoo.el Sun Jul 6 17:24:08 1997 *************** *** 143,149 **** (def (assq backend nnoo-definition-alist)) (parents (nth 1 def))) (unless def ! (error "%s belongs to a backend that hasn't been declared." var)) (setcar (nthcdr 2 def) (delq (assq var (nth 2 def)) (nth 2 def))) (setcar (nthcdr 2 def) --- 143,149 ---- (def (assq backend nnoo-definition-alist)) (parents (nth 1 def))) (unless def ! (error "%s belongs to a backend that hasn't been declared" var)) (setcar (nthcdr 2 def) (delq (assq var (nth 2 def)) (nth 2 def))) (setcar (nthcdr 2 def) *** pub/rgnus/lisp/nnsoup.el Wed Jun 18 01:16:39 1997 --- rgnus/lisp/nnsoup.el Sun Jul 6 17:24:08 1997 *************** *** 623,629 **** (nnsoup-write-replies) ;; Check whether there is anything here. (when (null (directory-files nnsoup-replies-directory nil "\\.MSG$")) ! (error "No files to pack.")) ;; Pack all these files into a SOUP packet. (gnus-soup-pack nnsoup-replies-directory nnsoup-packer)) --- 623,629 ---- (nnsoup-write-replies) ;; Check whether there is anything here. (when (null (directory-files nnsoup-replies-directory nil "\\.MSG$")) ! (error "No files to pack")) ;; Pack all these files into a SOUP packet. (gnus-soup-pack nnsoup-replies-directory nnsoup-packer)) *** pub/rgnus/lisp/pop3.el Sat May 31 15:48:32 1997 --- rgnus/lisp/pop3.el Sun Jul 6 17:24:09 1997 *************** *** 77,83 **** ((equal 'pass pop3-authentication-scheme) (pop3-user process pop3-maildrop) (pop3-pass process)) ! (t (error "Invalid POP3 authentication scheme."))) (setq message-count (car (pop3-stat process))) (while (<= n message-count) (message (format "Retrieving message %d of %d from %s..." --- 77,83 ---- ((equal 'pass pop3-authentication-scheme) (pop3-user process pop3-maildrop) (pop3-pass process)) ! (t (error "Invalid POP3 authentication scheme"))) (setq message-count (car (pop3-stat process))) (while (<= n message-count) (message (format "Retrieving message %d of %d from %s..." *** pub/rgnus/lisp/ChangeLog Tue Jul 1 01:57:01 1997 --- rgnus/lisp/ChangeLog Sun Jul 6 17:24:04 1997 *************** *** 1,3 **** --- 1,37 ---- + Sun Jul 6 17:22:47 1997 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.4.62 is released. + + Sun Jul 6 12:38:56 1997 Lars Magne Ingebrigtsen + + * nngateway.el (nngateway-request-post): Call sendmail function. + + * message.el (message-send-news): Supply the method to the post + function. + + * gnus.el (gnus-group-auto-expirable-p): Dox fox. + + * message.el (message-clone-locals): Only clone Gnus variables. + + * gnus-nocem.el (gnus-nocem-enter-article): Use real group name. + + Fri Jul 4 13:00:39 1997 enami tsugutomo + + * gnus-group.el (gnus-group-set-mode-line): Use new, shorter + format. + + Fri Jul 4 12:31:18 1997 Lars Magne Ingebrigtsen + + * gnus-score.el (gnus-score-headers): Let the score buffer inherit + variables from the summary buffer. + + * message.el (message-clone-locals): Made into own function. + + * gnus.el (gnus-select-method): Changed default. + + * gnus-start.el (gnus-read-active-file): Changed default to + `some'. + Tue Jul 1 01:51:24 1997 Lars Magne Ingebrigtsen * gnus.el: Gnus v5.4.61 is released. *** pub/rgnus/texi/gnus-faq.texi Tue Jan 7 20:13:51 1997 --- rgnus/texi/gnus-faq.texi Sun Jul 6 17:24:09 1997 *************** *** 214,222 **** @file{ftp://cag.lcs.mit.edu/pub/patl/mailcrypt-3.4.tar.gz}. @item ! Tiny Mime. ! Tiny Mime is an Emacs MUA interface to MIME. Installation is a two-step process unlike most other packages, so you should be prepared to move the byte-compiled code somewhere. There are currently two versions of this package available. It can --- 214,222 ---- @file{ftp://cag.lcs.mit.edu/pub/patl/mailcrypt-3.4.tar.gz}. @item ! Tools for Mime. ! Tools for Mime is an Emacs MUA interface to MIME. Installation is a two-step process unlike most other packages, so you should be prepared to move the byte-compiled code somewhere. There are currently two versions of this package available. It can *** pub/rgnus/texi/gnus.texi Tue Jul 1 01:57:05 1997 --- rgnus/texi/gnus.texi Sun Jul 6 17:24:10 1997 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Gnus 5.4.61 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Gnus 5.4.62 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 309,315 **** @tex @titlepage ! @title Gnus 5.4.61 Manual @author by Lars Magne Ingebrigtsen @page --- 309,315 ---- @tex @titlepage ! @title Gnus 5.4.62 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 345,351 **** spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Gnus 5.4.61. @end ifinfo --- 345,351 ---- spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Gnus 5.4.62. @end ifinfo *************** *** 434,440 **** The @code{gnus-select-method} variable says where Gnus should look for news. This variable should be a list where the first element says @dfn{how} and the second element says @dfn{where}. This method is your ! native method. All groups that are not fetched with this method are foreign groups. For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where --- 434,440 ---- The @code{gnus-select-method} variable says where Gnus should look for news. This variable should be a list where the first element says @dfn{how} and the second element says @dfn{where}. This method is your ! native method. All groups not fetched with this method are foreign groups. For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where *************** *** 460,467 **** @code{NNTPSERVER} environment variable. If that variable isn't set, Gnus will see whether @code{gnus-nntpserver-file} (@file{/etc/nntpserver} by default) has any opinions on the matter. If ! that fails as well, Gnus will try to use the machine that is ! running Emacs as an @sc{nntp} server. That's a long shot, though. @vindex gnus-nntp-server If @code{gnus-nntp-server} is set, this variable will override --- 460,466 ---- @code{NNTPSERVER} environment variable. If that variable isn't set, Gnus will see whether @code{gnus-nntpserver-file} (@file{/etc/nntpserver} by default) has any opinions on the matter. If ! that fails as well, Gnus will try to use the machine running Emacs as an @sc{nntp} server. That's a long shot, though. @vindex gnus-nntp-server If @code{gnus-nntp-server} is set, this variable will override *************** *** 943,949 **** @c @head The active file can be rather Huge, so if you have a slow network, you can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from ! reading the active file. This variable is @code{t} by default. Gnus will try to make do by getting information just on the groups that you actually subscribe to. --- 942,948 ---- @c @head The active file can be rather Huge, so if you have a slow network, you can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from ! reading the active file. This variable is @code{some} by default. Gnus will try to make do by getting information just on the groups that you actually subscribe to. *************** *** 981,997 **** @item gnus-load-hook @vindex gnus-load-hook ! A hook that is run while Gnus is being loaded. Note that this hook will normally be run just once in each Emacs session, no matter how many times you start Gnus. @item gnus-startup-hook @vindex gnus-startup-hook ! A hook that is run after starting up Gnus successfully. @item gnus-started-hook @vindex gnus-started-hook ! A hook that is run as the very last thing after starting up Gnus successfully. @item gnus-check-bogus-newsgroups --- 980,996 ---- @item gnus-load-hook @vindex gnus-load-hook ! A hook run while Gnus is being loaded. Note that this hook will normally be run just once in each Emacs session, no matter how many times you start Gnus. @item gnus-startup-hook @vindex gnus-startup-hook ! A hook run after starting up Gnus successfully. @item gnus-started-hook @vindex gnus-started-hook ! A hook run as the very last thing after starting up Gnus successfully. @item gnus-check-bogus-newsgroups *************** *** 1634,1640 **** @vindex gnus-keep-same-level If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands ! will only move to groups that are of the same level (or lower). In particular, going from the last article in one group to the next group will go to the next group of the same level (or lower). This might be handy if you want to read the most important groups before you read the --- 1633,1639 ---- @vindex gnus-keep-same-level If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands ! will only move to groups of the same level (or lower). In particular, going from the last article in one group to the next group will go to the next group of the same level (or lower). This might be handy if you want to read the most important groups before you read the *************** *** 1657,1663 **** use this level as the ``work'' level. @vindex gnus-activate-level ! Gnus will normally just activate groups that are on level @code{gnus-activate-level} or less. If you don't want to activate unsubscribed groups, for instance, you might set this variable to 5. The default is 6. --- 1656,1662 ---- use this level as the ``work'' level. @vindex gnus-activate-level ! Gnus will normally just activate groups on level @code{gnus-activate-level} or less. If you don't want to activate unsubscribed groups, for instance, you might set this variable to 5. The default is 6. *************** *** 1982,1988 **** @item auto-expire @cindex auto-expire If the group parameter has an element that looks like @code{(auto-expire ! . t)}, all articles that are read will be marked as expirable. For an alternative approach, @pxref{Expiring Mail}. @item total-expire --- 1981,1987 ---- @item auto-expire @cindex auto-expire If the group parameter has an element that looks like @code{(auto-expire ! . t)}, all articles read will be marked as expirable. For an alternative approach, @pxref{Expiring Mail}. @item total-expire *************** *** 2071,2077 **** @section Listing Groups @cindex group listing ! These commands all list various slices of the groups that are available. @table @kbd --- 2070,2076 ---- @section Listing Groups @cindex group listing ! These commands all list various slices of the groups available. @table @kbd *************** *** 2132,2138 **** @item A A @kindex A A (Group) @findex gnus-group-list-active ! List absolutely all groups that are in the active file(s) of the server(s) you are connected to (@code{gnus-group-list-active}). This might very well take quite a while. It might actually be a better idea to do a @kbd{A M} to list all matching, and just give @samp{.} as the --- 2131,2137 ---- @item A A @kindex A A (Group) @findex gnus-group-list-active ! List absolutely all groups in the active file(s) of the server(s) you are connected to (@code{gnus-group-list-active}). This might very well take quite a while. It might actually be a better idea to do a @kbd{A M} to list all matching, and just give @samp{.} as the *************** *** 3322,3328 **** @item gnus-summary-selected-face @vindex gnus-summary-selected-face ! This is the face (or @dfn{font} as some people call it) that is used to highlight the current article in the summary buffer. @item gnus-summary-highlight --- 3321,3327 ---- @item gnus-summary-selected-face @vindex gnus-summary-selected-face ! This is the face (or @dfn{font} as some people call it) used to highlight the current article in the summary buffer. @item gnus-summary-highlight *************** *** 3532,3538 **** @node Choosing Variables @subsection Choosing Variables ! Some variables that are relevant for moving and selecting articles: @table @code @item gnus-auto-extend-newsgroup --- 3531,3537 ---- @node Choosing Variables @subsection Choosing Variables ! Some variables relevant for moving and selecting articles: @table @code @item gnus-auto-extend-newsgroup *************** *** 4013,4019 **** Marking articles as @dfn{expirable} (or have them marked as such automatically) doesn't make much sense in normal groups---a user doesn't control expiring of news articles, but in mail groups, for instance, ! articles that are marked as @dfn{expirable} can be deleted by Gnus at any time. @end table --- 4012,4018 ---- Marking articles as @dfn{expirable} (or have them marked as such automatically) doesn't make much sense in normal groups---a user doesn't control expiring of news articles, but in mail groups, for instance, ! articles marked as @dfn{expirable} can be deleted by Gnus at any time. @end table *************** *** 4043,4054 **** @item @vindex gnus-cached-mark ! Articles that are stored in the article cache will be marked with an @samp{*} in the second column (@code{gnus-cached-mark}). @item @vindex gnus-saved-mark ! Articles that are ``saved'' (in some manner or other; not necessarily religiously) are marked with an @samp{S} in the second column (@code{gnus-saved-mark}). --- 4042,4053 ---- @item @vindex gnus-cached-mark ! Articles stored in the article cache will be marked with an @samp{*} in the second column (@code{gnus-cached-mark}). @item @vindex gnus-saved-mark ! Articles ``saved'' (in some manner or other; not necessarily religiously) are marked with an @samp{S} in the second column (@code{gnus-saved-mark}). *************** *** 4353,4361 **** @kindex / u (Summary) @kindex x (Summary) @findex gnus-summary-limit-to-unread ! Limit the summary buffer to articles that are not marked as read (@code{gnus-summary-limit-to-unread}). If given a prefix, limit the ! buffer to articles that are strictly unread. This means that ticked and dormant articles will also be excluded. @item / m --- 4352,4360 ---- @kindex / u (Summary) @kindex x (Summary) @findex gnus-summary-limit-to-unread ! Limit the summary buffer to articles not marked as read (@code{gnus-summary-limit-to-unread}). If given a prefix, limit the ! buffer to articles strictly unread. This means that ticked and dormant articles will also be excluded. @item / m *************** *** 4367,4376 **** @item / t @kindex / t (Summary) @findex gnus-summary-limit-to-age ! Ask for a number and then limit the summary buffer to articles that are ! older than (or equal to) that number of days (@code{gnus-summary-limit-to-marks}). If given a prefix, limit to ! articles that are younger than that number of days. @item / n @kindex / n (Summary) --- 4366,4374 ---- @item / t @kindex / t (Summary) @findex gnus-summary-limit-to-age ! Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days (@code{gnus-summary-limit-to-marks}). If given a prefix, limit to ! articles younger than that number of days. @item / n @kindex / n (Summary) *************** *** 4459,4465 **** @item gnus-fetch-old-headers @vindex gnus-fetch-old-headers If non-@code{nil}, Gnus will attempt to build old threads by fetching ! more old headers---headers to articles that are marked as read. If you would like to display as few summary lines as possible, but still connect as many loose threads as possible, you should set this variable to @code{some} or a number. If you set it to a number, no more than --- 4457,4463 ---- @item gnus-fetch-old-headers @vindex gnus-fetch-old-headers If non-@code{nil}, Gnus will attempt to build old threads by fetching ! more old headers---headers to articles marked as read. If you would like to display as few summary lines as possible, but still connect as many loose threads as possible, you should set this variable to @code{some} or a number. If you set it to a number, no more than *************** *** 4795,4801 **** when doing thread commands. If this variable is @code{nil}, articles in the same thread with different subjects will not be included in the operation in question. If this variable is @code{fuzzy}, only articles ! that have subjects that are fuzzily equal will be included (@pxref{Fuzzy Matching}). --- 4793,4799 ---- when doing thread commands. If this variable is @code{nil}, articles in the same thread with different subjects will not be included in the operation in question. If this variable is @code{fuzzy}, only articles ! that have subjects fuzzily equal will be included (@pxref{Fuzzy Matching}). *************** *** 4868,4874 **** If you are using an unthreaded display for some strange reason or other, you have to fiddle with the @code{gnus-article-sort-functions} variable. It is very similar to the @code{gnus-thread-sort-functions}, except that ! is uses slightly different functions for article comparison. Available sorting predicate functions are @code{gnus-article-sort-by-number}, @code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject}, @code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}. --- 4866,4872 ---- If you are using an unthreaded display for some strange reason or other, you have to fiddle with the @code{gnus-article-sort-functions} variable. It is very similar to the @code{gnus-thread-sort-functions}, except that ! it uses slightly different functions for article comparison. Available sorting predicate functions are @code{gnus-article-sort-by-number}, @code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject}, @code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}. *************** *** 4940,4947 **** @code{nil} on read articles. The function is called with an article data structure as the only parameter. ! If, for instance, you wish to pre-fetch only unread articles that are ! shorter than 100 lines, you could say something like: @lisp (defun my-async-short-unread-p (data) --- 4938,4944 ---- @code{nil} on read articles. The function is called with an article data structure as the only parameter. ! If, for instance, you wish to pre-fetch only unread articles shorter than 100 lines, you could say something like: @lisp (defun my-async-short-unread-p (data) *************** *** 4994,5000 **** @vindex gnus-cache-directory @vindex gnus-use-cache To turn caching on, set @code{gnus-use-cache} to @code{t}. By default, ! all articles that are ticked or marked as dormant will then be copied over to your local cache (@code{gnus-cache-directory}). Whether this cache is flat or hierarchal is controlled by the @code{gnus-use-long-file-name} variable, as usual. --- 4991,4997 ---- @vindex gnus-cache-directory @vindex gnus-use-cache To turn caching on, set @code{gnus-use-cache} to @code{t}. By default, ! all articles ticked or marked as dormant will then be copied over to your local cache (@code{gnus-cache-directory}). Whether this cache is flat or hierarchal is controlled by the @code{gnus-use-long-file-name} variable, as usual. *************** *** 5014,5020 **** variables. Both are lists of symbols. The first is @code{(ticked dormant)} by default, meaning that ticked and dormant articles will be put in the cache. The latter is @code{(read)} by default, meaning that ! articles that are marked as read are removed from the cache. Possibly symbols in these two lists are @code{ticked}, @code{dormant}, @code{unread} and @code{read}. --- 5011,5017 ---- variables. Both are lists of symbols. The first is @code{(ticked dormant)} by default, meaning that ticked and dormant articles will be put in the cache. The latter is @code{(read)} by default, meaning that ! articles marked as read are removed from the cache. Possibly symbols in these two lists are @code{ticked}, @code{dormant}, @code{unread} and @code{read}. *************** *** 5331,5337 **** name. Here's an example function to clean up file names somewhat. If you have ! lots of mail groups that are called things like @samp{nnml:mail.whatever}, you may want to chop off the beginning of these group names before creating the file name to save to. The following will do just that: --- 5328,5334 ---- name. Here's an example function to clean up file names somewhat. If you have ! lots of mail groups called things like @samp{nnml:mail.whatever}, you may want to chop off the beginning of these group names before creating the file name to save to. The following will do just that: *************** *** 5370,5376 **** @lisp (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy ! (setq gnus-default-article-save 'gnus-summary-save-in-file) ; no encoding @end lisp Then just save with @kbd{o}. You'd then read this hierarchy with --- 5367,5373 ---- @lisp (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy ! (setq gnus-default-article-saver 'gnus-summary-save-in-file) ; no encoding @end lisp Then just save with @kbd{o}. You'd then read this hierarchy with *************** *** 6797,6803 **** @findex gnus-summary-expire-articles-now Delete all the expirable articles in the group (@code{gnus-summary-expire-articles-now}). This means that @strong{all} ! articles that are eligible for expiry in the current group will disappear forever into that big @file{/dev/null} in the sky. @item B DEL --- 6794,6800 ---- @findex gnus-summary-expire-articles-now Delete all the expirable articles in the group (@code{gnus-summary-expire-articles-now}). This means that @strong{all} ! articles eligible for expiry in the current group will disappear forever into that big @file{/dev/null} in the sky. @item B DEL *************** *** 7377,7383 **** (setq gnus-visible-headers "^From:\\|^Subject:") @end lisp ! This variable can also be a list of regexps to match headers that are to remain visible. @item gnus-ignored-headers --- 7374,7380 ---- (setq gnus-visible-headers "^From:\\|^Subject:") @end lisp ! This variable can also be a list of regexps to match headers to remain visible. @item gnus-ignored-headers *************** *** 7394,7400 **** (setq gnus-ignored-headers "^References:\\|^Xref:") @end lisp ! This variable can also be a list of regexps to match headers that are to be removed. Note that if @code{gnus-visible-headers} is non-@code{nil}, this --- 7391,7397 ---- (setq gnus-ignored-headers "^References:\\|^Xref:") @end lisp ! This variable can also be a list of regexps to match headers to be removed. Note that if @code{gnus-visible-headers} is non-@code{nil}, this *************** *** 7416,7423 **** @end lisp Any headers that are to remain visible, but are not listed in this ! variable, will be displayed in random order after all the headers that ! are listed in this variable. @findex gnus-article-hide-boring-headers @vindex gnus-article-display-hook --- 7413,7419 ---- @end lisp Any headers that are to remain visible, but are not listed in this ! variable, will be displayed in random order after all the headers listed in this variable. @findex gnus-article-hide-boring-headers @vindex gnus-article-display-hook *************** *** 7755,7761 **** @node Mail and Post @section Mail and Post ! Here's a list of variables that are relevant to both mailing and posting: @table @code --- 7751,7757 ---- @node Mail and Post @section Mail and Post ! Here's a list of variables relevant to both mailing and posting: @table @code *************** *** 8082,8088 **** @cindex foreign groups @cindex select methods ! A @dfn{foreign group} is a group that is not read by the usual (or default) means. It could be, for instance, a group from a different @sc{nntp} server, it could be a virtual group, or it could be your own personal mail group. --- 8078,8084 ---- @cindex foreign groups @cindex select methods ! A @dfn{foreign group} is a group not read by the usual (or default) means. It could be, for instance, a group from a different @sc{nntp} server, it could be a virtual group, or it could be your own personal mail group. *************** *** 8140,8146 **** server, that would be too much work, so Gnus offers a way of naming select methods, which is what you do in the server buffer. ! To enter the server buffer, user the @kbd{^} (@code{gnus-group-enter-server-mode}) command in the group buffer. @menu --- 8136,8142 ---- server, that would be too much work, so Gnus offers a way of naming select methods, which is what you do in the server buffer. ! To enter the server buffer, use the @kbd{^} (@code{gnus-group-enter-server-mode}) command in the group buffer. @menu *************** *** 8296,8302 **** @code{nnmh} is a mail backend that reads a spool-like structure. Say you have two structures that you wish to access: One is your private mail spool, and the other is a public one. Here's the possible spec for ! you private mail: @lisp (nnmh "private" (nnmh-directory "~/private/mail/")) --- 8292,8298 ---- @code{nnmh} is a mail backend that reads a spool-like structure. Say you have two structures that you wish to access: One is your private mail spool, and the other is a public one. Here's the possible spec for ! your private mail: @lisp (nnmh "private" (nnmh-directory "~/private/mail/")) *************** *** 8694,8700 **** @vindex nntp-xover-commands @cindex nov @cindex XOVER ! List of strings that are used as commands to fetch @sc{nov} lines from a server. The default value of this variable is @code{("XOVER" "XOVERVIEW")}. --- 8690,8696 ---- @vindex nntp-xover-commands @cindex nov @cindex XOVER ! List of strings used as commands to fetch @sc{nov} lines from a server. The default value of this variable is @code{("XOVER" "XOVERVIEW")}. *************** *** 9174,9180 **** @var{FIELD} and @var{VALUE} can also be lisp symbols, in that case they are expanded as specified by the variable @code{nnmail-split-abbrev-alist}. This is an alist of cons cells, where ! the car of a cell contains the key, and the cdr contains the associated value. @vindex nnmail-split-fancy-syntax-table --- 9170,9176 ---- @var{FIELD} and @var{VALUE} can also be lisp symbols, in that case they are expanded as specified by the variable @code{nnmail-split-abbrev-alist}. This is an alist of cons cells, where ! the @code{car} of a cell contains the key, and the @code{cdr} contains the associated value. @vindex nnmail-split-fancy-syntax-table *************** *** 9343,9349 **** You do not have to mark articles as expirable by hand. Groups that match the regular expression @code{gnus-auto-expirable-newsgroups} will have all articles that you read marked as expirable automatically. All ! articles that are marked as expirable have an @samp{E} in the first column in the summary buffer. By default, if you have auto expiry switched on, Gnus will mark all the --- 9339,9345 ---- You do not have to mark articles as expirable by hand. Groups that match the regular expression @code{gnus-auto-expirable-newsgroups} will have all articles that you read marked as expirable automatically. All ! articles marked as expirable have an @samp{E} in the first column in the summary buffer. By default, if you have auto expiry switched on, Gnus will mark all the *************** *** 9360,9366 **** @end lisp Note that making a group auto-expirable doesn't mean that all read ! articles are expired---only the articles that are marked as expirable will be expired. Also note that using the @kbd{d} command won't make groups expirable---only semi-automatic marking of articles as read will mark the articles as expirable in auto-expirable groups. --- 9356,9362 ---- @end lisp Note that making a group auto-expirable doesn't mean that all read ! articles are expired---only the articles marked as expirable will be expired. Also note that using the @kbd{d} command won't make groups expirable---only semi-automatic marking of articles as read will mark the articles as expirable in auto-expirable groups. *************** *** 9854,9868 **** it, you might treat it as a newsgroup. The files have to have numerical names, of course. ! This might be an opportune moment to mention @code{ange-ftp}, that most ! wonderful of all wonderful Emacs packages. When I wrote @code{nndir}, I ! didn't think much about it---a backend to read directories. Big deal. @code{ange-ftp} changes that picture dramatically. For instance, if you enter the @code{ange-ftp} file name @file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} as the directory name, ! @code{ange-ftp} or @code{efs} will actually allow you to read this directory over at ! @samp{sina} as a newsgroup. Distributed news ahoy! @code{nndir} will use @sc{nov} files if they are present. --- 9850,9865 ---- it, you might treat it as a newsgroup. The files have to have numerical names, of course. ! This might be an opportune moment to mention @code{ange-ftp} (and its ! successor @code{ecf}), that most wonderful of all wonderful Emacs ! packages. When I wrote @code{nndir}, I didn't think much about it---a ! backend to read directories. Big deal. @code{ange-ftp} changes that picture dramatically. For instance, if you enter the @code{ange-ftp} file name @file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} as the directory name, ! @code{ange-ftp} or @code{efs} will actually allow you to read this ! directory over at @samp{sina} as a newsgroup. Distributed news ahoy! @code{nndir} will use @sc{nov} files if they are present. *************** *** 10623,10629 **** sequence of articles. Sorting on date might be an option here (@pxref{Selecting a Group}). ! One limitation, however---all groups that are included in a virtual group have to be alive (i.e., subscribed or unsubscribed). Killed or zombie groups can't be component groups for @code{nnvirtual} groups. --- 10620,10626 ---- sequence of articles. Sorting on date might be an option here (@pxref{Selecting a Group}). ! One limitation, however---all groups included in a virtual group have to be alive (i.e., subscribed or unsubscribed). Killed or zombie groups can't be component groups for @code{nnvirtual} groups. *************** *** 10687,10693 **** and the other is an additional @file{.newsrc} file to store information on what groups have been searched through to find component articles. ! Articles that are marked as read in the @code{nnkiboze} group will have their @sc{nov} lines removed from the @sc{nov} file. --- 10684,10690 ---- and the other is an additional @file{.newsrc} file to store information on what groups have been searched through to find component articles. ! Articles marked as read in the @code{nnkiboze} group will have their @sc{nov} lines removed from the @sc{nov} file. *************** *** 11032,11039 **** @cindex score cache All score files are normally cached to avoid excessive re-loading of score files. However, if this might make you Emacs grow big and ! bloated, so this regexp can be used to weed out score files that are ! unlikely to be needed again. It would be a bad idea to deny caching of @file{all.SCORE}, while it might be a good idea to not cache @file{comp.infosystems.www.authoring.misc.ADAPT}. In fact, this variable is @samp{ADAPT$} by default, so no adaptive score files will --- 11029,11035 ---- @cindex score cache All score files are normally cached to avoid excessive re-loading of score files. However, if this might make you Emacs grow big and ! bloated, so this regexp can be used to weed out score files unlikely to be needed again. It would be a bad idea to deny caching of @file{all.SCORE}, while it might be a good idea to not cache @file{comp.infosystems.www.authoring.misc.ADAPT}. In fact, this variable is @samp{ADAPT$} by default, so no adaptive score files will *************** *** 11262,11274 **** @cindex date A more useful match type is @code{regexp}. With it, you can match the date string using a regular expression. The date is normalized to ! ISO8601 compact format first---@samp{YYYYMMDDTHHMMSS}. If you want to ! match all articles that have been posted on April 1st in every year, you ! could use @samp{....0401.........} as a match string, for instance. ! (Note that the date is kept in its original time zone, so this will ! match articles that were posted when it was April 1st where the article ! was posted from. Time zones are such wholesome fun for the whole ! family, eh?) @item Head, Body, All These three match keys use the same match types as the @code{From} (etc) --- 11258,11270 ---- @cindex date A more useful match type is @code{regexp}. With it, you can match the date string using a regular expression. The date is normalized to ! ISO8601 compact format first---@var{YYYYMMDD}@code{T}@var{HHMMSS}. If ! you want to match all articles that have been posted on April 1st in ! every year, you could use @samp{....0401.........} as a match string, ! for instance. (Note that the date is kept in its original time zone, so ! this will match articles that were posted when it was April 1st where ! the article was posted from. Time zones are such wholesome fun for the ! whole family, eh?) @item Head, Body, All These three match keys use the same match types as the @code{From} (etc) *************** *** 11286,11293 **** @item Thread This match key works along the same lines as the @code{Followup} match ! key. If you say that you want to score on a (sub-)thread that is ! started by an article with a @code{Message-ID} @var{X}, then you add a @samp{thread} match. This will add a new @samp{thread} match for each article that has @var{X} in its @code{References} header. (These new @samp{thread} matches will use the @code{Message-ID}s of these matching --- 11282,11288 ---- @item Thread This match key works along the same lines as the @code{Followup} match ! key. If you say that you want to score on a (sub-)thread started by an article with a @code{Message-ID} @var{X}, then you add a @samp{thread} match. This will add a new @samp{thread} match for each article that has @var{X} in its @code{References} header. (These new @samp{thread} matches will use the @code{Message-ID}s of these matching *************** *** 11299,11304 **** --- 11294,11300 ---- @end table @end enumerate + @cindex Score File Atoms @item mark The value of this entry should be a number. Any articles with a score lower than this number will be marked as read. *************** *** 11552,11558 **** @end lisp This is the default value. If you have adaption on words enabled, every ! word that appears in subjects of articles that are marked with @code{gnus-read-mark} will result in a score rule that increase the score with 30 points. --- 11548,11554 ---- @end lisp This is the default value. If you have adaption on words enabled, every ! word that appears in subjects of articles marked with @code{gnus-read-mark} will result in a score rule that increase the score with 30 points. *************** *** 11832,11838 **** @itemize @bullet @item ! Articles that are heavily crossposted are probably junk. @item To lower a single inappropriate article, lower by @code{Message-ID}. @item --- 11828,11834 ---- @itemize @bullet @item ! Articles heavily crossposted are probably junk. @item To lower a single inappropriate article, lower by @code{Message-ID}. @item *************** *** 11881,11888 **** (gnus-expunge "X") @end lisp ! This will mark every article written by me as read, and remove them from ! the summary buffer. Very useful, you'll agree. Other programs use a totally different kill file syntax. If Gnus encounters what looks like a @code{rn} kill file, it will take a stab at --- 11877,11884 ---- (gnus-expunge "X") @end lisp ! This will mark every article written by me as read, and remove the ! marked articles from the summary buffer. Very useful, you'll agree. Other programs use a totally different kill file syntax. If Gnus encounters what looks like a @code{rn} kill file, it will take a stab at *************** *** 11927,11933 **** @file{soc.motss.KILL}. The suffix appended to the group name to get this file name is detailed by the @code{gnus-kill-file-name} variable. The ``global'' kill file (not in the score file sense of ``global'', of ! course) is called just @file{KILL}. @vindex gnus-kill-save-kill-file @item gnus-kill-save-kill-file --- 11923,11929 ---- @file{soc.motss.KILL}. The suffix appended to the group name to get this file name is detailed by the @code{gnus-kill-file-name} variable. The ``global'' kill file (not in the score file sense of ``global'', of ! course) is just called @file{KILL}. @vindex gnus-kill-save-kill-file @item gnus-kill-save-kill-file *************** *** 11985,11993 **** likewise and gives you a personalized prediction for each unread news article. Think of GroupLens as a matchmaker. GroupLens watches how you rate articles, and finds other people that rate articles the same way. ! Once it has found for you some people you agree with it tells you, in ! the form of a prediction, what they thought of the article. You can use ! this prediction to help you decide whether or not you want to read the article. @menu --- 11981,11989 ---- likewise and gives you a personalized prediction for each unread news article. Think of GroupLens as a matchmaker. GroupLens watches how you rate articles, and finds other people that rate articles the same way. ! Once it has found some people you agree with it tells you, in the form ! of a prediction, what they thought of the article. You can use this ! prediction to help you decide whether or not you want to read the article. @menu *************** *** 12004,12010 **** To use GroupLens you must register a pseudonym with your local Better Bit Bureau (BBB). @samp{http://www.cs.umn.edu/Research/GroupLens/bbb.html} is the only ! better bit in town is at the moment. Once you have registered you'll need to set a couple of variables. --- 12000,12006 ---- To use GroupLens you must register a pseudonym with your local Better Bit Bureau (BBB). @samp{http://www.cs.umn.edu/Research/GroupLens/bbb.html} is the only ! better bit in town at the moment. Once you have registered you'll need to set a couple of variables. *************** *** 12026,12032 **** @end table ! Thats the minimum of what you need to get up and running with GroupLens. Once you've registered, GroupLens will start giving you scores for articles based on the average of what other people think. But, to get the real benefit of GroupLens you need to start rating articles --- 12022,12028 ---- @end table ! That's the minimum of what you need to get up and running with GroupLens. Once you've registered, GroupLens will start giving you scores for articles based on the average of what other people think. But, to get the real benefit of GroupLens you need to start rating articles *************** *** 12133,12139 **** Plain-old numeric value. @item confidence-plus-minus ! Prediction +/i confidence. @end table --- 12129,12135 ---- Plain-old numeric value. @item confidence-plus-minus ! Prediction +/- confidence. @end table *************** *** 12144,12153 **** @table @code @item gnus-summary-grouplens-line-format ! The summary line format used in summary buffers that are GroupLens ! enhanced. It accepts the same specs as the normal summary line format ! (@pxref{Summary Buffer Lines}). The default is ! @samp{%U%R%z%l%I%(%[%4L: %-20,20n%]%) %s\n}. @item grouplens-bbb-host Host running the bbbd server. @samp{grouplens.cs.umn.edu} is the --- 12140,12149 ---- @table @code @item gnus-summary-grouplens-line-format ! The summary line format used in GroupLens-enhanced summary buffers. It ! accepts the same specs as the normal summary line format (@pxref{Summary ! Buffer Lines}). The default is @samp{%U%R%z%l%I%(%[%4L: %-20,20n%]%) ! %s\n}. @item grouplens-bbb-host Host running the bbbd server. @samp{grouplens.cs.umn.edu} is the *************** *** 12173,12179 **** Scoring on Subjects and From headers is nice enough, but what if you're really interested in what a person has to say only when she's talking ! about a particular subject? Or what about if you really don't want to read what person A has to say when she's following up to person B, but want to read what she says when she's following up to person C? --- 12169,12175 ---- Scoring on Subjects and From headers is nice enough, but what if you're really interested in what a person has to say only when she's talking ! about a particular subject? Or what if you really don't want to read what person A has to say when she's following up to person B, but want to read what she says when she's following up to person C? *************** *** 12218,12233 **** @itemx not @itemx ¬ This logical operator only takes a single argument. It returns the ! inverse of the value of its argument. @end table There is an @dfn{indirection operator} that will make its arguments apply to the ancestors of the current article being scored. For instance, @code{1-} will make score rules apply to the parent of the ! current article. @code{2-} will make score fules apply to the grandparent of the current article. Alternatively, you can write ! @code{^^}, where the number of @code{^}s (carets) say how far back into the ancestry you want to go. Finally, we have the match operators. These are the ones that do the --- 12214,12229 ---- @itemx not @itemx ¬ This logical operator only takes a single argument. It returns the ! logical negation of the value of its argument. @end table There is an @dfn{indirection operator} that will make its arguments apply to the ancestors of the current article being scored. For instance, @code{1-} will make score rules apply to the parent of the ! current article. @code{2-} will make score rules apply to the grandparent of the current article. Alternatively, you can write ! @code{^^}, where the number of @code{^}s (carets) says how far back into the ancestry you want to go. Finally, we have the match operators. These are the ones that do the *************** *** 12300,12306 **** result of the operation will be. For instance, if one of the arguments of an @code{&} evaluates to @code{false}, there's no point in evaluating the rest of the arguments. This means that you should put slow matches ! (@samp{body}, @code{header}) last and quick matches (@samp{from}, @samp{subject}) first. The indirection arguments (@code{1-} and so on) will make their --- 12296,12302 ---- result of the operation will be. For instance, if one of the arguments of an @code{&} evaluates to @code{false}, there's no point in evaluating the rest of the arguments. This means that you should put slow matches ! (@samp{body}, @samp{header}) last and quick matches (@samp{from}, @samp{subject}) first. The indirection arguments (@code{1-} and so on) will make their *************** *** 12423,12429 **** Many functions, among them functions for moving, decoding and saving articles, use what is known as the @dfn{Process/Prefix convention}. ! This is a method for figuring out what articles that the user wants the command to be performed on. It goes like this: --- 12419,12425 ---- Many functions, among them functions for moving, decoding and saving articles, use what is known as the @dfn{Process/Prefix convention}. ! This is a method for figuring out what articles the user wants the command to be performed on. It goes like this: *************** *** 12438,12444 **** active, all articles in the region will be worked upon. If there is no numeric prefix, but some articles are marked with the ! process mark, perform the operation on the articles that are marked with the process mark. If there is neither a numeric prefix nor any articles marked with the --- 12434,12440 ---- active, all articles in the region will be worked upon. If there is no numeric prefix, but some articles are marked with the ! process mark, perform the operation on the articles marked with the process mark. If there is neither a numeric prefix nor any articles marked with the *************** *** 12498,12505 **** @section Formatting Variables @cindex formatting variables ! Throughout this manual you've probably noticed lots of variables that ! are called things like @code{gnus-group-line-format} and @code{gnus-summary-mode-line-format}. These control how Gnus is to output lines in the various buffers. There's quite a lot of them. Fortunately, they all use the same syntax, so there's not that much to --- 12494,12500 ---- @section Formatting Variables @cindex formatting variables ! Throughout this manual you've probably noticed lots of variables called things like @code{gnus-group-line-format} and @code{gnus-summary-mode-line-format}. These control how Gnus is to output lines in the various buffers. There's quite a lot of them. Fortunately, they all use the same syntax, so there's not that much to *************** *** 12648,12656 **** Text inside the @samp{%[} and @samp{%]} specifiers will have their normal faces set using @code{gnus-face-0}, which is @code{bold} by ! default. If you say @samp{%1[} instead, you'll get @code{gnus-face-1} ! instead, and so on. Create as many faces as you wish. The same goes ! for the @code{mouse-face} specs---you can say @samp{%3(hello%)} to have @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}. Here's an alternative recipe for the group buffer: --- 12643,12651 ---- Text inside the @samp{%[} and @samp{%]} specifiers will have their normal faces set using @code{gnus-face-0}, which is @code{bold} by ! default. If you say @samp{%1[}, you'll get @code{gnus-face-1} instead, ! and so on. Create as many faces as you wish. The same goes for the ! @code{mouse-face} specs---you can say @samp{%3(hello%)} to have @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}. Here's an alternative recipe for the group buffer: *************** *** 12967,12977 **** @end lisp If this variable is @code{nil} (which is the default), the mode line ! strings won't be chopped off, and they won't be padded either. ! Note that the default is unlikely to be desirable, as even the ! percentage complete in the buffer may be crowded off the mode line; ! the user should configure this variable appropriately for their ! configuration. @node Highlighting and Menus --- 12962,12971 ---- @end lisp If this variable is @code{nil} (which is the default), the mode line ! strings won't be chopped off, and they won't be padded either. Note ! that the default is unlikely to be desirable, as even the percentage ! complete in the buffer may be crowded off the mode line; the user should ! configure this variable appropriately for her configuration. @node Highlighting and Menus *************** *** 12981,12987 **** @cindex menus @vindex gnus-visual ! The @code{gnus-visual} variable controls most of the prettifying Gnus aspects. If @code{nil}, Gnus won't attempt to create menus or use fancy colors or fonts. This will also inhibit loading the @file{gnus-vis.el} file. --- 12975,12981 ---- @cindex menus @vindex gnus-visual ! The @code{gnus-visual} variable controls most of the Gnus-prettifying aspects. If @code{nil}, Gnus won't attempt to create menus or use fancy colors or fonts. This will also inhibit loading the @file{gnus-vis.el} file. *************** *** 13021,13027 **** (setq gnus-visual '(article-highlight menu)) @end lisp ! If you want only highlighting and no menus whatsoever, you'd say: @lisp (setq gnus-visual '(highlight)) --- 13015,13021 ---- (setq gnus-visual '(article-highlight menu)) @end lisp ! If you want highlighting only and no menus whatsoever, you'd say: @lisp (setq gnus-visual '(highlight)) *************** *** 13123,13130 **** @end table All the @code{buttons} variables are lists. The elements in these list ! is either a cons cell where the car contains a text to be displayed and ! the cdr contains a function symbol, or a simple string. @node Daemons --- 13117,13124 ---- @end table All the @code{buttons} variables are lists. The elements in these list ! are either cons cells where the @code{car} contains a text to be displayed and ! the @code{cdr} contains a function symbol, or a simple string. @node Daemons *************** *** 13199,13205 **** @findex gnus-demon-add-rescan @findex gnus-demon-add-scan-timestamps @findex gnus-demon-add-disconnection ! Some ready-made functions to do this has been created: @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection}, @code{gnus-demon-add-scan-timestamps}, @code{gnus-demon-add-rescan}, and @code{gnus-demon-add-scanmail}. Just put those functions in your --- 13193,13199 ---- @findex gnus-demon-add-rescan @findex gnus-demon-add-scan-timestamps @findex gnus-demon-add-disconnection ! Some ready-made functions to do this have been created: @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection}, @code{gnus-demon-add-scan-timestamps}, @code{gnus-demon-add-rescan}, and @code{gnus-demon-add-scanmail}. Just put those functions in your *************** *** 13390,13396 **** @node Picon Requirements @subsection Picon Requirements ! To use have Gnus display Picons for you, you must be running XEmacs 19.13 or greater since all other versions of Emacs aren't yet able to display images. --- 13384,13390 ---- @node Picon Requirements @subsection Picon Requirements ! To have Gnus display Picons for you, you must be running XEmacs 19.13 or greater since all other versions of Emacs aren't yet able to display images. *************** *** 13464,13472 **** @table @code @item gnus-article-display-picons @findex gnus-article-display-picons ! Looks up and display the picons for the author and the author's domain ! in the @code{gnus-picons-display-where} buffer. Should be added to ! the @code{gnus-article-display-hook}. @item gnus-group-display-picons @findex gnus-article-display-picons --- 13458,13466 ---- @table @code @item gnus-article-display-picons @findex gnus-article-display-picons ! Looks up and displays the picons for the author and the author's domain ! in the @code{gnus-picons-display-where} buffer. Should be added to the ! @code{gnus-article-display-hook}. @item gnus-group-display-picons @findex gnus-article-display-picons *************** *** 13483,13489 **** @end table Note: You must append them to the hook, so make sure to specify 't' ! to the append flag of @code{add-hook}: @lisp (add-hook 'gnus-article-display-hook 'gnus-article-display-picons t) --- 13477,13483 ---- @end table Note: You must append them to the hook, so make sure to specify 't' ! for the append flag of @code{add-hook}: @lisp (add-hook 'gnus-article-display-hook 'gnus-article-display-picons t) *************** *** 13512,13518 **** @item gnus-picons-user-directories @vindex gnus-picons-user-directories List of subdirectories to search in @code{gnus-picons-database} for user ! faces. @code{("local" "users" "usenix" "misc/MISC")} is the default. @item gnus-picons-domain-directories @vindex gnus-picons-domain-directories --- 13506,13512 ---- @item gnus-picons-user-directories @vindex gnus-picons-user-directories List of subdirectories to search in @code{gnus-picons-database} for user ! faces. @code{("local" "users" "usenix" "misc")} is the default. @item gnus-picons-domain-directories @vindex gnus-picons-domain-directories *************** *** 13549,13555 **** In Gnus buffers, however, it isn't that simple. The things Gnus displays in its buffer is of no value whatsoever to ! Gnus---it's all just data that is designed to look nice to the user. Killing a group in the group buffer with @kbd{C-k} makes the line disappear, but that's just a side-effect of the real action---the removal of the group in question from the internal Gnus structures. --- 13543,13549 ---- In Gnus buffers, however, it isn't that simple. The things Gnus displays in its buffer is of no value whatsoever to ! Gnus---it's all just data designed to look nice to the user. Killing a group in the group buffer with @kbd{C-k} makes the line disappear, but that's just a side-effect of the real action---the removal of the group in question from the internal Gnus structures. *************** *** 13595,13601 **** in your @file{.gnus.el} file. ! If you are the moderation of @samp{rec.zoofle}, this is how it's supposed to work: @enumerate --- 13589,13595 ---- in your @file{.gnus.el} file. ! If you are the moderator of @samp{rec.zoofle}, this is how it's supposed to work: @enumerate *************** *** 13711,13717 **** The biggest problem I have with email spam is that it comes in under false pretenses. I press @kbd{g} and Gnus merrily informs me that I ! have 10 new emails. I say ``Golly gee! Happy is me!'' and selects the mail group, only to find two pyramid schemes, seven advertisements (``New! Miracle tonic for growing full, lustrouos hair on your toes!'') and one mail asking me to repent and find some god. --- 13705,13711 ---- The biggest problem I have with email spam is that it comes in under false pretenses. I press @kbd{g} and Gnus merrily informs me that I ! have 10 new emails. I say ``Golly gee! Happy is me!'' and select the mail group, only to find two pyramid schemes, seven advertisements (``New! Miracle tonic for growing full, lustrouos hair on your toes!'') and one mail asking me to repent and find some god. *************** *** 13832,13843 **** variable is @code{nil}, there is no upper read bound. If it is @code{t}, the backends won't try to read the articles piece by piece, but read the entire articles. This makes sense with some versions of ! @code{ange-ftp}. @item nnheader-head-chop-length @vindex nnheader-head-chop-length ! This variable says how big a piece of each article to read when doing ! the operation described above. @item nnheader-file-name-translation-alist @vindex nnheader-file-name-translation-alist --- 13826,13837 ---- variable is @code{nil}, there is no upper read bound. If it is @code{t}, the backends won't try to read the articles piece by piece, but read the entire articles. This makes sense with some versions of ! @code{ange-ftp} or @code{efs}. @item nnheader-head-chop-length @vindex nnheader-head-chop-length ! This variable (default 2048) says how big a piece of each article to ! read when doing the operation described above. @item nnheader-file-name-translation-alist @vindex nnheader-file-name-translation-alist *************** *** 13870,13876 **** @item gnus-shell-command-separator @vindex gnus-shell-command-separator ! String used to separate to shell commands. The default is @samp{;}. @end table --- 13864,13870 ---- @item gnus-shell-command-separator @vindex gnus-shell-command-separator ! String used to separate two shell commands. The default is @samp{;}. @end table *************** *** 13955,13961 **** On July 28th 1996 work on Red Gnus was begun, and it was released on January 25th 1997 (after 84 releases) as ``Gnus 5.4''. ! If you happen upon a version of Gnus that has a name that is prefixed -- ``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' -- don't panic. Don't let it know that you're frightened. Back away. Slowly. Whatever you do, don't run. Walk away, calmly, until you're --- 13949,13955 ---- On July 28th 1996 work on Red Gnus was begun, and it was released on January 25th 1997 (after 84 releases) as ``Gnus 5.4''. ! If you happen upon a version of Gnus that has a prefixed name -- ``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' -- don't panic. Don't let it know that you're frightened. Back away. Slowly. Whatever you do, don't run. Walk away, calmly, until you're *************** *** 13994,14003 **** to separate the newsreader from the backends, Gnus now offers a simple interface for anybody who wants to write new backends for fetching mail and news from different sources. I have added hooks for customizations ! everywhere I could imagine useful. By doing so, I'm inviting every one ! of you to explore and invent. ! May Gnus never be complete. @kbd{C-u 100 M-x hail-emacs}. @node Compatibility --- 13988,13998 ---- to separate the newsreader from the backends, Gnus now offers a simple interface for anybody who wants to write new backends for fetching mail and news from different sources. I have added hooks for customizations ! everywhere I could imagine it being useful. By doing so, I'm inviting ! every one of you to explore and invent. ! May Gnus never be complete. @kbd{C-u 100 M-x all-hail-emacs} and ! @kbd{C-u 100 M-x all-hail-xemacs}. @node Compatibility *************** *** 14018,14028 **** All commands have kept their names. Some internal functions have changed their names. ! The @code{gnus-uu} package has changed drastically. @pxref{Decoding Articles}. One major compatibility question is the presence of several summary ! buffers. All variables that are relevant while reading a group are buffer-local to the summary buffer they belong in. Although many important variables have their values copied into their global counterparts whenever a command is executed in the summary buffer, this --- 14013,14023 ---- All commands have kept their names. Some internal functions have changed their names. ! The @code{gnus-uu} package has changed drastically. @xref{Decoding Articles}. One major compatibility question is the presence of several summary ! buffers. All variables relevant while reading a group are buffer-local to the summary buffer they belong in. Although many important variables have their values copied into their global counterparts whenever a command is executed in the summary buffer, this *************** *** 14108,14114 **** @end table ! If you ever notice Gnus acting non-compliantly with regards to the texts mentioned above, don't hesitate to drop a note to Gnus Towers and let us know. --- 14103,14109 ---- @end table ! If you ever notice Gnus acting non-compliant with regards to the texts mentioned above, don't hesitate to drop a note to Gnus Towers and let us know. *************** *** 14224,14232 **** David Moore---rewrite of @file{nnvirtual.el} and many other things. @item - Ricardo Nassif, Mark Borges, and Jost Krieger---proof-reading. - - @item Kevin Davidson---came up with the name @dfn{ding}, so blame him. @item --- 14219,14224 ---- *************** *** 14234,14239 **** --- 14226,14234 ---- @end itemize + This manual was proof-read by Adrian Aichner, with Ricardo Nassif, Mark + Borges, and Jost Krieger proof-reading parts of the manual. + The following people have contributed many patches and suggestions: Christopher Davis, *************** *** 14456,14462 **** servers (@pxref{Browse Foreign Server}). @item ! Gnus can fetch articles asynchronously on a second connection to the server (@pxref{Asynchronous Fetching}). @item --- 14451,14457 ---- servers (@pxref{Browse Foreign Server}). @item ! Gnus can fetch articles, asynchronously, on a second connection to the server (@pxref{Asynchronous Fetching}). @item *************** *** 14536,14542 **** Picons (personal icons) can be displayed under XEmacs (@pxref{Picons}). @item ! A @code{trn}-line tree buffer can be displayed (@pxref{Tree Display}). @lisp (setq gnus-use-trees t) --- 14531,14537 ---- Picons (personal icons) can be displayed under XEmacs (@pxref{Picons}). @item ! A @code{trn}-like tree buffer can be displayed (@pxref{Tree Display}). @lisp (setq gnus-use-trees t) *************** *** 14597,14603 **** Groups}). @item ! New group parameters have been introduced to set list-address and expiry times (@pxref{Group Parameters}). @item --- 14592,14598 ---- Groups}). @item ! New group parameters have been introduced to set list-addresses and expiry times (@pxref{Group Parameters}). @item *************** *** 14770,14776 **** @item New variables for specifying what score and adapt files are to be ! considered home score and adapt files (@pxref{Home Score File}). @item @code{nndoc} was rewritten to be easily extendable (@pxref{Document --- 14765,14772 ---- @item New variables for specifying what score and adapt files are to be ! considered home score and adapt files (@pxref{Home Score File}) have ! been added. @item @code{nndoc} was rewritten to be easily extendable (@pxref{Document *************** *** 14797,14804 **** another have been added (@pxref{Changing Servers}). @item ! A way to specify that ``uninteresting'' fields be suppressed when ! generating lines in buffers (@pxref{Advanced Formatting}). @item Several commands in the group buffer can be undone with @kbd{M-C-_} --- 14793,14800 ---- another have been added (@pxref{Changing Servers}). @item ! There's a way now to specify that ``uninteresting'' fields be suppressed ! when generating lines in buffers (@pxref{Advanced Formatting}). @item Several commands in the group buffer can be undone with @kbd{M-C-_} *************** *** 15041,15047 **** @item body @cindex body ! The rest of an article. Everything that is not in the head is in the body. @item header --- 15037,15043 ---- @item body @cindex body ! The rest of an article. Everything not in the head is in the body. @item header *************** *** 15092,15098 **** @item server @cindex server ! A machine than one can connect to and get news (or mail) from. @item select method @cindex select method --- 15088,15094 ---- @item server @cindex server ! A machine one can connect to and get news (or mail) from. @item select method @cindex select method *************** *** 15101,15108 **** @item virtual server @cindex virtual server ! A named select method. Since a select methods defines all there is to ! know about connecting to a (physical) server, taking the things as a whole is a virtual server. @item washing --- 15097,15104 ---- @item virtual server @cindex virtual server ! A named select method. Since a select method defines all there is to ! know about connecting to a (physical) server, taking the thing as a whole is a virtual server. @item washing *************** *** 15172,15180 **** @node Slow Terminal Connection @subsection Slow Terminal Connection ! Let's say you use your home computer for dialing up the system that ! runs Emacs and Gnus. If your modem is slow, you want to reduce the ! amount of data that is sent over the wires as much as possible. @table @code --- 15168,15176 ---- @node Slow Terminal Connection @subsection Slow Terminal Connection ! Let's say you use your home computer for dialing up the system that runs ! Emacs and Gnus. If your modem is slow, you want to reduce (as much as ! possible) the amount of data sent over the wires. @table @code *************** *** 15185,15191 **** horizontal and vertical recentering. @item gnus-visible-headers ! Cut down on the headers that are included in the articles to the minimum. You can, in fact, make do without them altogether---most of the useful data is in the summary buffer, anyway. Set this variable to @samp{^NEVVVVER} or @samp{From:}, or whatever you feel you need. --- 15181,15187 ---- horizontal and vertical recentering. @item gnus-visible-headers ! Cut down on the headers included in the articles to the minimum. You can, in fact, make do without them altogether---most of the useful data is in the summary buffer, anyway. Set this variable to @samp{^NEVVVVER} or @samp{From:}, or whatever you feel you need. *************** *** 15245,15251 **** If you have a slow machine, or are just really impatient, there are a few things you can do to make Gnus run faster. ! Set@code{gnus-check-new-newsgroups} and @code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster. Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and --- 15241,15247 ---- If you have a slow machine, or are just really impatient, there are a few things you can do to make Gnus run faster. ! Set @code{gnus-check-new-newsgroups} and @code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster. Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and *************** *** 15312,15319 **** time. It is also important to remember that I have no memory whatsoever. If ! you send a bug report, and I send you a reply, and then you send back ! just ``No, it's not! Moron!'', I will have no idea what you are insulting me about. Always over-explain everything. It's much easier for all of us---if I don't have all the information I need, I will just mail you and ask for more info, and everything takes more time. --- 15308,15315 ---- time. It is also important to remember that I have no memory whatsoever. If ! you send a bug report, and I send you a reply, and then you just send ! back ``No, it's not! Moron!'', I will have no idea what you are insulting me about. Always over-explain everything. It's much easier for all of us---if I don't have all the information I need, I will just mail you and ask for more info, and everything takes more time. *************** *** 15345,15351 **** will be defining (in some details) the interface between Gnus and its backends (this is written in stone), the format of the score files (ditto), data structures (some are less likely to change than others) ! and general method of operations. @menu * Gnus Utility Functions:: Common functions and variable to use. --- 15341,15347 ---- will be defining (in some details) the interface between Gnus and its backends (this is written in stone), the format of the score files (ditto), data structures (some are less likely to change than others) ! and general methods of operation. @menu * Gnus Utility Functions:: Common functions and variable to use. *************** *** 15392,15446 **** @item gnus-get-info @findex gnus-get-info ! Return the group info list for @var{group}. @item gnus-add-current-to-buffer-list @findex gnus-add-current-to-buffer-list ! Add the current buffer to the list of buffers to be killed on Gnus exit. @item gnus-continuum-version @findex gnus-continuum-version ! Take a Gnus version string as a parameter and returns a floating point number. Earlier versions will always get a lower number than later versions. @item gnus-group-read-only-p @findex gnus-group-read-only-p ! Say whether @var{group} is read-only or not. @item gnus-news-group-p @findex gnus-news-group-p ! Say whether @var{group} came from a news backend. @item gnus-ephemeral-group-p @findex gnus-ephemeral-group-p ! Say whether @var{group} is ephemeral or not. @item gnus-server-to-method @findex gnus-server-to-method ! Return the select method corresponding to @var{server}. @item gnus-server-equal @findex gnus-server-equal ! Say whether two virtual servers are equal. @item gnus-group-native-p @findex gnus-group-native-p ! Say whether @var{group} is native or not. @item gnus-group-secondary-p @findex gnus-group-secondary-p ! Say whether @var{group} is secondary or not. @item gnus-group-foreign-p @findex gnus-group-foreign-p ! Say whether @var{group} is foreign or not. @item group-group-find-parameter @findex group-group-find-parameter ! Return the parameter list of @var{group}. If given a second parameter, ! return the value of that parameter for @var{group}. @item gnus-group-set-parameter @findex gnus-group-set-parameter --- 15388,15442 ---- @item gnus-get-info @findex gnus-get-info ! Returns the group info list for @var{group}. @item gnus-add-current-to-buffer-list @findex gnus-add-current-to-buffer-list ! Adds the current buffer to the list of buffers to be killed on Gnus exit. @item gnus-continuum-version @findex gnus-continuum-version ! Takes a Gnus version string as a parameter and returns a floating point number. Earlier versions will always get a lower number than later versions. @item gnus-group-read-only-p @findex gnus-group-read-only-p ! Says whether @var{group} is read-only or not. @item gnus-news-group-p @findex gnus-news-group-p ! Says whether @var{group} came from a news backend. @item gnus-ephemeral-group-p @findex gnus-ephemeral-group-p ! Says whether @var{group} is ephemeral or not. @item gnus-server-to-method @findex gnus-server-to-method ! Returns the select method corresponding to @var{server}. @item gnus-server-equal @findex gnus-server-equal ! Says whether two virtual servers are equal. @item gnus-group-native-p @findex gnus-group-native-p ! Says whether @var{group} is native or not. @item gnus-group-secondary-p @findex gnus-group-secondary-p ! Says whether @var{group} is secondary or not. @item gnus-group-foreign-p @findex gnus-group-foreign-p ! Says whether @var{group} is foreign or not. @item group-group-find-parameter @findex group-group-find-parameter ! Returns the parameter list of @var{group}. If given a second parameter, ! returns the value of that parameter for @var{group}. @item gnus-group-set-parameter @findex gnus-group-set-parameter *************** *** 15448,15454 **** @item gnus-narrow-to-body @findex gnus-narrow-to-body ! Narrow the current buffer to the body of the article. @item gnus-check-backend-function @findex gnus-check-backend-function --- 15444,15450 ---- @item gnus-narrow-to-body @findex gnus-narrow-to-body ! Narrows the current buffer to the body of the article. @item gnus-check-backend-function @findex gnus-check-backend-function *************** *** 15462,15468 **** @item gnus-read-method @findex gnus-read-method ! Prompt the user for a select method. @end table --- 15458,15464 ---- @item gnus-read-method @findex gnus-read-method ! Prompts the user for a select method. @end table *************** *** 15498,15508 **** The backends should be able to switch between several virtual servers. The standard backends implement this by keeping an alist of virtual ! server environments that it pulls down/pushes up when needed. There are two groups of interface functions: @dfn{required functions}, which must be present, and @dfn{optional functions}, which Gnus will ! always check whether are present before attempting to call. All these functions are expected to return data in the buffer @code{nntp-server-buffer} (@samp{ *nntpd*}), which is somewhat --- 15494,15504 ---- The backends should be able to switch between several virtual servers. The standard backends implement this by keeping an alist of virtual ! server environments that they pull down/pushe up when needed. There are two groups of interface functions: @dfn{required functions}, which must be present, and @dfn{optional functions}, which Gnus will ! always check for presence before attempting to call 'em. All these functions are expected to return data in the buffer @code{nntp-server-buffer} (@samp{ *nntpd*}), which is somewhat *************** *** 15513,15519 **** return value. Some backends could be said to be @dfn{server-forming} backends, and ! some might be said to not be. The latter are backends that generally only operate on one group at a time, and have no concept of ``server'' -- they have a group, and they deliver info on that group and nothing more. --- 15509,15515 ---- return value. Some backends could be said to be @dfn{server-forming} backends, and ! some might be said not to be. The latter are backends that generally only operate on one group at a time, and have no concept of ``server'' -- they have a group, and they deliver info on that group and nothing more. *************** *** 15550,15559 **** This might later be expanded to @code{various}, which will be a mixture of HEADs and NOV lines, but this is currently not supported by Gnus. ! If @var{fetch-old} is non-@code{nil} it says to try to fetch "extra ! headers, in some meaning of the word. This is generally done by fetching (at most) @var{fetch-old} extra headers less than the smallest ! article number in @code{articles}, and fill in the gaps as well. The presence of this parameter can be ignored if the backend finds it cumbersome to follow the request. If this is non-@code{nil} and not a number, do maximum fetches. --- 15546,15555 ---- This might later be expanded to @code{various}, which will be a mixture of HEADs and NOV lines, but this is currently not supported by Gnus. ! If @var{fetch-old} is non-@code{nil} it says to try fetching "extra ! headers", in some meaning of the word. This is generally done by fetching (at most) @var{fetch-old} extra headers less than the smallest ! article number in @code{articles}, and filling the gaps as well. The presence of this parameter can be ignored if the backend finds it cumbersome to follow the request. If this is non-@code{nil} and not a number, do maximum fetches. *************** *** 15599,15612 **** field = @end example ! For a closer explanation what should be in those fields, @pxref{Headers}. @item (nnchoke-open-server SERVER &optional DEFINITIONS) @var{server} is here the virtual server name. @var{definitions} is a ! list of @code{(VARIABLE VALUE)} pairs that defines this virtual server. If the server can't be opened, no error should be signaled. The backend may then choose to refuse further attempts at connecting to this --- 15595,15608 ---- field = @end example ! For a closer look at what should be in those fields, @pxref{Headers}. @item (nnchoke-open-server SERVER &optional DEFINITIONS) @var{server} is here the virtual server name. @var{definitions} is a ! list of @code{(VARIABLE VALUE)} pairs that define this virtual server. If the server can't be opened, no error should be signaled. The backend may then choose to refuse further attempts at connecting to this *************** *** 15640,15646 **** If @var{server} is the current virtual server, and the connection to the physical server is alive, then this function should return a non-@code{nil} vlue. This function should under no circumstances ! attempt to reconnect to a server that is has lost connection to. There should be no data returned. --- 15636,15642 ---- If @var{server} is the current virtual server, and the connection to the physical server is alive, then this function should return a non-@code{nil} vlue. This function should under no circumstances ! attempt to reconnect to a server we have lost connection to. There should be no data returned. *************** *** 15662,15676 **** If @var{to-buffer} is non-@code{nil}, the result data should be returned in this buffer instead of the normal data buffer. This is to make it possible to avoid copying large amounts of data from one buffer to ! another, and Gnus mainly request articles to be inserted directly into ! its article buffer. If it is at all possible, this function should return a cons cell where ! the car is the group name the article was fetched from, and the cdr is the article number. This will enable Gnus to find out what the real group and article numbers are when fetching articles by @code{Message-ID}. If this isn't possible, @code{t} should be returned ! on successful article retrievement. @item (nnchoke-request-group GROUP &optional SERVER FAST) --- 15658,15672 ---- If @var{to-buffer} is non-@code{nil}, the result data should be returned in this buffer instead of the normal data buffer. This is to make it possible to avoid copying large amounts of data from one buffer to ! another, while Gnus mainly requests articles to be inserted directly ! into its article buffer. If it is at all possible, this function should return a cons cell where ! the @code{car} is the group name the article was fetched from, and the @code{cdr} is the article number. This will enable Gnus to find out what the real group and article numbers are when fetching articles by @code{Message-ID}. If this isn't possible, @code{t} should be returned ! on successful article retrieval. @item (nnchoke-request-group GROUP &optional SERVER FAST) *************** *** 15735,15741 **** The flag says whether the group is read-only (@samp{n}), is moderated (@samp{m}), is dead (@samp{x}), is aliased to some other group ! (@samp{=other-group} or none of the above (@samp{y}). @item (nnchoke-request-post &optional SERVER) --- 15731,15737 ---- The flag says whether the group is read-only (@samp{n}), is moderated (@samp{m}), is dead (@samp{x}), is aliased to some other group ! (@samp{=other-group}) or none of the above (@samp{y}). @item (nnchoke-request-post &optional SERVER) *************** *** 15789,15795 **** When the user issues commands for ``sending news'' (@kbd{F} in the summary buffer, for instance), Gnus has to know whether the article the ! user is following up is news or mail. This function should return @code{news} if @var{article} in @var{group} is news, @code{mail} if it is mail and @code{unknown} if the type can't be decided. (The @var{article} parameter is necessary in @code{nnvirtual} groups which --- 15785,15791 ---- When the user issues commands for ``sending news'' (@kbd{F} in the summary buffer, for instance), Gnus has to know whether the article the ! user is following up on is news or mail. This function should return @code{news} if @var{article} in @var{group} is news, @code{mail} if it is mail and @code{unknown} if the type can't be decided. (The @var{article} parameter is necessary in @code{nnvirtual} groups which *************** *** 15807,15813 **** @var{mark}. If the backend doesn't care, it must return the original @var{mark}, and not @code{nil} or any other type of garbage. ! The only use for this that I can see is what @code{nnvirtual} does with it---if a component group is auto-expirable, marking an article as read in the virtual group should result in the article being marked as expirable. --- 15803,15809 ---- @var{mark}. If the backend doesn't care, it must return the original @var{mark}, and not @code{nil} or any other type of garbage. ! The only use for this I can see is what @code{nnvirtual} does with it---if a component group is auto-expirable, marking an article as read in the virtual group should result in the article being marked as expirable. *************** *** 15895,15902 **** that there will be more requests issued shortly, so that allows some optimizations. ! The function should return a cons where the car is the group name and ! the cdr is the article number that the article was entered as. There should be no data returned. --- 15891,15898 ---- that there will be more requests issued shortly, so that allows some optimizations. ! The function should return a cons where the @code{car} is the group name and ! the @code{cdr} is the article number that the article was entered as. There should be no data returned. *************** *** 15907,15914 **** If @var{last} in @code{nil}, that means that there will be more calls to this function in short order. ! The function should return a cons where the car is the group name and ! the cdr is the article number that the article was entered as. There should be no data returned. --- 15903,15910 ---- If @var{last} in @code{nil}, that means that there will be more calls to this function in short order. ! The function should return a cons where the @code{car} is the group name and ! the @code{cdr} is the article number that the article was entered as. There should be no data returned. *************** *** 15933,15939 **** @item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER) This function should rename @var{group} into @var{new-name}. All ! articles that are in @var{group} should move to @var{new-name}. There should be no data returned. --- 15929,15935 ---- @item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER) This function should rename @var{group} into @var{new-name}. All ! articles in @var{group} should move to @var{new-name}. There should be no data returned. *************** *** 15949,15956 **** error conditions---they should not raise errors when they aren't able to perform a request. The first argument to this function is the backend symbol, and the rest are interpreted as arguments to @code{format} if ! there are many of them, or just a string if there is one of them. ! This function always returns @code{nil}. @lisp (nnheader-report 'nnchoke "You did something totally bogus") --- 15945,15952 ---- error conditions---they should not raise errors when they aren't able to perform a request. The first argument to this function is the backend symbol, and the rest are interpreted as arguments to @code{format} if ! there are multiple of them, or just a string if there is one of them. ! This function must always returns @code{nil}. @lisp (nnheader-report 'nnchoke "You did something totally bogus") *************** *** 15963,15971 **** recently reported message for the backend in question. This function takes one argument---the server symbol. ! Internally, these function access @var{backend}@code{-status-string}, so ! the @code{nnchoke} backend will have its error message stored in ! @code{nnchoke-status-string}. @node Writing New Backends --- 15959,15967 ---- recently reported message for the backend in question. This function takes one argument---the server symbol. ! Internally, these functions access @var{backend}@code{-status-string}, ! so the @code{nnchoke} backend will have its error message stored in ! @code{nnchoke-status-string}. @node Writing New Backends *************** *** 15988,15994 **** To inherit functions from other backends (and allow other backends to inherit functions from the current backend), you should use the following macros: - following. @table @code --- 15984,15989 ---- *************** *** 16001,16007 **** nnml nnmh) @end lisp ! @code{nndir} has here declared that it intends to inherit functions from both @code{nnml} and @code{nnmh}. @item defvoo --- 15996,16002 ---- nnml nnmh) @end lisp ! @code{nndir} has declared here that it intends to inherit functions from both @code{nnml} and @code{nnmh}. @item defvoo *************** *** 16164,16170 **** @item post-mail This backend supports both mail and news. @item none ! This is neither a post or mail backend---it's something completely different. @item respool It supports respooling---or rather, it is able to modify its source --- 16159,16165 ---- @item post-mail This backend supports both mail and news. @item none ! This is neither a post nor mail backend---it's something completely different. @item respool It supports respooling---or rather, it is able to modify its source *************** *** 16193,16199 **** (nnmail-get-new-mail 'nnml 'nnml-save-nov nnml-directory group)) @end lisp ! It simply just calls @code{nnmail-get-new-mail} will a few parameters, and @code{nnmail} takes care of all the moving and splitting of the mail. --- 16188,16194 ---- (nnmail-get-new-mail 'nnml 'nnml-save-nov nnml-directory group)) @end lisp ! It simply calls @code{nnmail-get-new-mail} with a few parameters, and @code{nnmail} takes care of all the moving and splitting of the mail. *************** *** 16305,16317 **** one looong line, then that's ok. The meaning of the various atoms are explained elsewhere in this ! manual. @node Headers @subsection Headers ! Gnus uses internally a format for storing article headers that corresponds to the @sc{nov} format in a mysterious fashion. One could almost suspect that the author looked at the @sc{nov} specification and just shamelessly @emph{stole} the entire thing, and one would be right. --- 16300,16312 ---- one looong line, then that's ok. The meaning of the various atoms are explained elsewhere in this ! manual (@pxref{Score File Atoms}). @node Headers @subsection Headers ! Internally Gnus uses a format for storing article headers that corresponds to the @sc{nov} format in a mysterious fashion. One could almost suspect that the author looked at the @sc{nov} specification and just shamelessly @emph{stole} the entire thing, and one would be right. *************** *** 16563,16572 **** does this @code{defalias} thing with Gnus equivalents instead. Cleaner all over. ! In the cases when the XEmacs function interface was obviously ! cleaner, I used it instead. For example @code{gnus-region-active-p} ! is an alias for @code{region-active-p} in XEmacs, whereas in Emacs ! it is a function. Of course, I could have chosen XEmacs as my native platform and done mapping functions the other way around. But I didn't. The performance --- 16558,16566 ---- does this @code{defalias} thing with Gnus equivalents instead. Cleaner all over. ! In the cases where the XEmacs function interface was obviously cleaner, ! I used it instead. For example @code{gnus-region-active-p} is an alias ! for @code{region-active-p} in XEmacs, whereas in Emacs it is a function. Of course, I could have chosen XEmacs as my native platform and done mapping functions the other way around. But I didn't. The performance *************** *** 16585,16591 **** @node Active File Format @subsubsection Active File Format ! The active file lists all groups that are available on the server in question. It also lists the highest and lowest current article numbers in each group. --- 16579,16585 ---- @node Active File Format @subsubsection Active File Format ! The active file lists all groups available on the server in question. It also lists the highest and lowest current article numbers in each group. *************** *** 16668,16682 **** ``Escape-Meta-Alt-Control-Shift'', and not ``Editing Macros'', as you may have heard from other disreputable sources (like the Emacs author). ! The shift key is normally located near your pinky fingers, and are normally used to get capital letters and stuff. You probably use it all the time. The control key is normally marked ``CTRL'' or something like that. The meta key is, funnily enough, never marked as such on any ! keyboards. The one I'm currently at has a key that's marked ``Alt'', which is the meta key on this keyboard. It's usually located somewhere to the left hand side of the keyboard, usually on the bottom row. ! Now, us Emacs people doesn't say ``press the meta-control-m key'', because that's just too inconvenient. We say ``press the @kbd{M-C-m} key''. @kbd{M-} is the prefix that means ``meta'' and ``C-'' is the prefix that means ``control''. So ``press @kbd{C-k}'' means ``press --- 16662,16676 ---- ``Escape-Meta-Alt-Control-Shift'', and not ``Editing Macros'', as you may have heard from other disreputable sources (like the Emacs author). ! The shift keys are normally located near your pinky fingers, and are normally used to get capital letters and stuff. You probably use it all the time. The control key is normally marked ``CTRL'' or something like that. The meta key is, funnily enough, never marked as such on any ! keyboard. The one I'm currently at has a key that's marked ``Alt'', which is the meta key on this keyboard. It's usually located somewhere to the left hand side of the keyboard, usually on the bottom row. ! Now, us Emacs people don't say ``press the meta-control-m key'', because that's just too inconvenient. We say ``press the @kbd{M-C-m} key''. @kbd{M-} is the prefix that means ``meta'' and ``C-'' is the prefix that means ``control''. So ``press @kbd{C-k}'' means ``press *************** *** 16726,16732 **** and @code{eval}ed (which is lisp-ese for ``run'') the next time you start Emacs. If you want to change the variable right away, simply say @kbd{C-x C-e} after the closing parenthesis. That will @code{eval} the ! previous ``form'', which here is a simple @code{setq} statement. Go ahead---just try it, if you're located at your Emacs. After you @kbd{C-x C-e}, you will see @samp{4} appear in the echo area, which --- 16720,16726 ---- and @code{eval}ed (which is lisp-ese for ``run'') the next time you start Emacs. If you want to change the variable right away, simply say @kbd{C-x C-e} after the closing parenthesis. That will @code{eval} the ! previous ``form'', which is a simple @code{setq} statement here. Go ahead---just try it, if you're located at your Emacs. After you @kbd{C-x C-e}, you will see @samp{4} appear in the echo area, which *** pub/rgnus/texi/message.texi Tue Jul 1 01:57:05 1997 --- rgnus/texi/message.texi Sun Jul 6 17:24:11 1997 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 5.4.61 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 5.4.62 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 39,45 **** @tex @titlepage ! @title Message 5.4.61 Manual @author by Lars Magne Ingebrigtsen @page --- 39,45 ---- @tex @titlepage ! @title Message 5.4.62 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 79,85 **** * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Message 5.4.61. Message is distributed with the Gnus distribution bearing the same version number as this manual has. --- 79,85 ---- * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Message 5.4.62. Message is distributed with the Gnus distribution bearing the same version number as this manual has. *** pub/rgnus/GNUS-NEWS Thu Jan 9 23:52:44 1997 --- rgnus/GNUS-NEWS Sun Jul 6 17:24:11 1997 *************** *** 1,5 **** --- 1,10 ---- ** Gnus changes. + *** `gnus-select-method' now defaults to `(nntp "news")' instead + of `(nntp "localhost")'. + + *** `gnus-read-active-file' now defaults to `some' instead of t. + *** nntp.el has been totally rewritten in an asynchronous fashion. *** Article prefetching functionality has been moved up into *** pub/rgnus/texi/dir Wed Jun 18 00:54:19 1997 --- rgnus/texi/dir Sun Jul 6 17:24:11 1997 *************** *** 0 **** --- 1,77 ---- + -*- Text -*- + The Gnus-realated top node. +  + File: dir Node: Top This is the Gnus Info tree + + * Menu: + + * Gnus: (gnus). The news reader Gnus. + * Message: (message). The Message sending thingamabob. + * Widget: (widget). The Widget library. + * Custom: (custom). The Custom library. + -*- Text -*- + The Gnus-realated top node. +  + File: dir Node: Top This is the Gnus Info tree + + * Menu: + + * Gnus: (gnus). The news reader Gnus. + * Message: (message). The Message sending thingamabob. + * Widget: (widget). The Widget library. + * Custom: (custom). The Custom library. + -*- Text -*- + The Gnus-realated top node. +  + File: dir Node: Top This is the Gnus Info tree + + * Menu: + + * Gnus: (gnus). The news reader Gnus. + * Message: (message). The Message sending thingamabob. + * Widget: (widget). The Widget library. + * Custom: (custom). The Custom library. + -*- Text -*- + The Gnus-realated top node. +  + File: dir Node: Top This is the Gnus Info tree + + * Menu: + + * Gnus: (gnus). The news reader Gnus. + * Message: (message). The Message sending thingamabob. + * Widget: (widget). The Widget library. + * Custom: (custom). The Custom library. + -*- Text -*- + The Gnus-realated top node. +  + File: dir Node: Top This is the Gnus Info tree + + * Menu: + + * Gnus: (gnus). The news reader Gnus. + * Message: (message). The Message sending thingamabob. + * Widget: (widget). The Widget library. + * Custom: (custom). The Custom library. + -*- Text -*- + The Gnus-realated top node. +  + File: dir Node: Top This is the Gnus Info tree + + * Menu: + + * Gnus: (gnus). The news reader Gnus. + * Message: (message). The Message sending thingamabob. + * Widget: (widget). The Widget library. + * Custom: (custom). The Custom library. + -*- Text -*- + The Gnus-realated top node. +  + File: dir Node: Top This is the Gnus Info tree + + * Menu: + + * Gnus: (gnus). The news reader Gnus. + * Message: (message). The Message sending thingamabob. + * Widget: (widget). The Widget library. + * Custom: (custom). The Custom library.