*** pub/rgnus/lisp/dgnushack.el Sun Sep 8 12:09:21 1996 --- rgnus/lisp/dgnushack.el Thu Sep 19 02:45:57 1996 *************** *** 29,36 **** (require 'cl) (push "." load-path) - (setq custom-file "/THIS FILE DOES NOT eXiST!") - (defalias 'device-sound-enabled-p 'ignore) (defalias 'play-sound-file 'ignore) (defalias 'nndb-request-article 'ignore) --- 29,34 ---- *** pub/rgnus/lisp/gnus-async.el Mon Sep 9 19:30:15 1996 --- rgnus/lisp/gnus-async.el Thu Sep 19 02:45:57 1996 *************** *** 48,53 **** --- 48,58 ---- (defvar gnus-use-header-prefetch nil "*If non-nil, prefetch the headers to the next group.") + (defvar gnus-async-prefetch-article-p 'gnus-async-unread-p + "*Function called to say whether an article should be prefetched or not. + The function is called with one parameter -- the article data. + It should return non-nil if the article is to be prefetched.") + ;;; Internal variables. (defvar gnus-async-prefetch-article-buffer " *Async Prefetch Article*") *************** *** 147,153 **** n)) (unless (or (gnus-async-prefetched-article-entry group (setq article (gnus-data-number d))) ! (not (natnump article))) ;; Not already fetched -- so we add it to the list. (push article gnus-async-fetch-list))) (setq gnus-async-fetch-list --- 152,159 ---- n)) (unless (or (gnus-async-prefetched-article-entry group (setq article (gnus-data-number d))) ! (not (natnump article)) ! (not (funcall gnus-async-prefetch-article-p d))) ;; Not already fetched -- so we add it to the list. (push article gnus-async-fetch-list))) (setq gnus-async-fetch-list *************** *** 188,193 **** --- 194,203 ---- (gnus-async-with-semaphore (setq gnus-async-fetch-list nil)) (gnus-async-prefetch-article ,group ,next ,summary t))))) + + (defun gnus-async-unread-p (data) + "Return non-nil if DATA represents an unread article." + (gnus-data-unread-p data)) (defun gnus-async-request-fetched-article (group article buffer) "See whether we have ARTICLE from GROUP and put it in BUFFER." *** pub/rgnus/lisp/gnus-cite.el Tue Sep 17 02:42:40 1996 --- rgnus/lisp/gnus-cite.el Thu Sep 19 02:45:58 1996 *************** *** 95,108 **** (defvar gnus-cite-hide-absolute 10 "Only hide excess citation if above this number of lines in the body.") - (defun gnus-custom-import-cite-face-list (custom alist) - ;; Backward compatible grokking of light and dark. - (cond ((eq alist 'light) - (setq alist (mapcar 'gnus-make-face gnus-face-light-name-list))) - ((eq alist 'dark) - (setq alist (mapcar 'gnus-make-face gnus-face-dark-name-list)))) - (funcall (custom-super custom 'import) custom alist)) - ;;; Internal Variables: (defvar gnus-cite-article nil) --- 95,100 ---- *** pub/rgnus/lisp/gnus-dup.el Tue Sep 10 20:09:28 1996 --- rgnus/lisp/gnus-dup.el Thu Sep 19 02:50:56 1996 *************** *** 106,112 **** ;; and hash table. (while (setq datum (pop data)) (when (and (not (gnus-data-pseudo-p datum)) ! (gnus-data-read-p datum)) (intern (car (push (mail-header-id (gnus-data-header datum)) gnus-dup-list)) gnus-dup-hashtb)))) --- 106,114 ---- ;; and hash table. (while (setq datum (pop data)) (when (and (not (gnus-data-pseudo-p datum)) ! (gnus-data-read-p datum) ! (not (intern-soft (mail-header-id (gnus-data-header datum)) ! gnus-dup-hashtb))) (intern (car (push (mail-header-id (gnus-data-header datum)) gnus-dup-list)) gnus-dup-hashtb)))) *** pub/rgnus/lisp/gnus-load.el Tue Sep 17 02:39:45 1996 --- rgnus/lisp/gnus-load.el Thu Sep 19 02:45:58 1996 *************** *** 25,37 **** ;;; Code: (require 'gnus-util) (require 'nnheader) ! (defvar gnus-directory (or (getenv "SAVEDIR") "~/News/") "*Directory variable from which all other Gnus file variables are derived.") ! (defvar gnus-default-directory nil "*Default directory for all Gnus buffers.") ;; Site dependent variables. These variables should be defined in --- 25,42 ---- ;;; Code: + (require 'custom) (require 'gnus-util) (require 'nnheader) ! (defcustom gnus-directory (or (getenv "SAVEDIR") "~/News/") ! :group 'gnus ! :type 'directory "*Directory variable from which all other Gnus file variables are derived.") ! (defcustom gnus-default-directory nil ! :group 'gnus ! :type 'directory "*Default directory for all Gnus buffers.") ;; Site dependent variables. These variables should be defined in *************** *** 73,79 **** name) (kill-buffer (current-buffer)))))))) ! (defvar gnus-select-method (nconc (list 'nntp (or (condition-case () (gnus-getenv-nntpserver) --- 78,84 ---- name) (kill-buffer (current-buffer)))))))) ! (defcustom gnus-select-method (nconc (list 'nntp (or (condition-case () (gnus-getenv-nntpserver) *************** *** 86,91 **** --- 91,102 ---- (equal gnus-nntp-service "nntp")) nil (list gnus-nntp-service))) + :group 'gnus + :type '(list + (choice + (item :tag "NNTP server" nntp) + (item :tag "Local spool" nnspool)) + (field :tag "The name of server")) "*Default method for selecting a newsgroup. This variable should be a list, where the first element is how the news is to be fetched, the second is the address. *** pub/rgnus/lisp/gnus-nocem.el Tue Sep 10 20:09:58 1996 --- rgnus/lisp/gnus-nocem.el Thu Sep 19 02:45:59 1996 *************** *** 38,51 **** '("AutoMoose-1" "Automoose-1" ; CancelMoose[tm] "rbraver@ohww.norman.ok.us" ; Robert Braver "clewis@ferret.ocunix.on.ca;" ; Chris Lewis ! "jem@xpat.com;" ; Korean DeSpammer ! "snowhare@xmission.com" ; Benjamin "Snowhare" Franz "red@redpoll.mrfs.oh.us (Richard E. Depew)" ) "*List of NoCeM issuers to pay attention to.") (defvar gnus-nocem-directory ! (concat (file-name-as-directory gnus-article-save-directory) "NoCeM/") "*Directory where NoCeM files will be stored.") (defvar gnus-nocem-expiry-wait 15 --- 38,51 ---- '("AutoMoose-1" "Automoose-1" ; CancelMoose[tm] "rbraver@ohww.norman.ok.us" ; Robert Braver "clewis@ferret.ocunix.on.ca;" ; Chris Lewis ! "jem@xpat.com;" ; Despammer from Korea ! "snowhare@xmission.com" ; Benjamin "Snowhare" Franz "red@redpoll.mrfs.oh.us (Richard E. Depew)" ) "*List of NoCeM issuers to pay attention to.") (defvar gnus-nocem-directory ! (nnheader-concat gnus-article-save-directory "NoCeM/") "*Directory where NoCeM files will be stored.") (defvar gnus-nocem-expiry-wait 15 *** pub/rgnus/lisp/gnus-salt.el Mon Sep 9 20:13:33 1996 --- rgnus/lisp/gnus-salt.el Thu Sep 19 02:45:59 1996 *************** *** 113,118 **** --- 113,119 ---- (setq gnus-summary-line-format-spec nil) (gnus-update-format-specifications nil 'summary) (gnus-update-summary-mark-positions) + (set (make-local-variable 'gnus-summary-goto-unread) 'never) ;; Set up the menu. (when (and menu-bar-mode (gnus-visual-p 'pick-menu 'menu)) *** pub/rgnus/lisp/gnus-start.el Fri Sep 13 02:50:09 1996 --- rgnus/lisp/gnus-start.el Thu Sep 19 02:45:59 1996 *************** *** 1357,1363 **** t) (condition-case () (gnus-request-group group dont-check method) ! ; (error nil) (quit nil)) (gnus-set-active group (setq active (gnus-parse-active))) ;; Return the new active info. --- 1357,1363 ---- t) (condition-case () (gnus-request-group group dont-check method) ! (error nil) (quit nil)) (gnus-set-active group (setq active (gnus-parse-active))) ;; Return the new active info. *** pub/rgnus/lisp/gnus-uu.el Mon Sep 9 20:35:08 1996 --- rgnus/lisp/gnus-uu.el Tue Sep 17 04:12:01 1996 *************** *** 1138,1143 **** --- 1138,1144 ---- (defun gnus-uu-grab-articles (articles process-function &optional sloppy limit no-errors) (let ((state 'first) + (gnus-asynchronous nil) has-been-begin article result-file result-files process-state gnus-summary-display-article-function gnus-article-display-hook gnus-article-prepare-hook *************** *** 1183,1189 **** ;; If there is a `result-file' here, that means that the ;; file was unsuccessfully decoded, so we delete it. (when (and result-file ! (file-exists-p result-file)) (delete-file result-file))) (when (memq 'begin process-state) (setq result-file (car process-state))) --- 1184,1193 ---- ;; If there is a `result-file' here, that means that the ;; file was unsuccessfully decoded, so we delete it. (when (and result-file ! (file-exists-p result-file) ! (gnus-y-or-n-p ! (format "Delete unsuccessfully decoded file %s" ! result-file))) (delete-file result-file))) (when (memq 'begin process-state) (setq result-file (car process-state))) *************** *** 1208,1213 **** --- 1212,1218 ---- (setq funcs (list funcs))) (while funcs (funcall (pop funcs) result-file)))) + (setq result-file nil) ;; Check whether we have decoded enough articles. (and limit (= (length result-files) limit) (setq articles nil))) *************** *** 1219,1224 **** --- 1224,1230 ---- (not (memq 'end process-state)) result-file (file-exists-p result-file) + (gnus-y-or-n-p (format "Delete incomplete file %s? " result-file)) (delete-file result-file)) ;; If this was a file of the wrong sort, then *** pub/rgnus/lisp/gnus.el Tue Sep 17 03:24:58 1996 --- rgnus/lisp/gnus.el Thu Sep 19 03:03:07 1996 *************** *** 28,43 **** (eval '(run-hooks 'gnus-load-hook)) ! (defconst gnus-version-number "0.37" "Version number for this version of Gnus.") (defconst gnus-version (format "Red Gnus v%s" gnus-version-number) "Version string for this version of Gnus.") ! (defvar gnus-inhibit-startup-message nil "*If non-nil, the startup message will not be displayed.") ! (defvar gnus-play-startup-jingle nil "If non-nil, play the Gnus jingle at startup.") ;;; Kludges to help the transition from the old `custom.el'. --- 28,61 ---- (eval '(run-hooks 'gnus-load-hook)) ! (require 'custom) ! ! (defgroup gnus nil ! :group 'emacs ! "The coffee-brewing, all singing, all dancing, kitchen sink newsreader.") ! ! (defgroup gnus-start nil ! :group 'gnus ! "Starting your favorite newsreader.") ! ! (defgroup gnus-score nil ! :group 'gnus ! "Score and kill file handling.") ! ! (defconst gnus-version-number "0.38" "Version number for this version of Gnus.") (defconst gnus-version (format "Red Gnus v%s" gnus-version-number) "Version string for this version of Gnus.") ! (defcustom gnus-inhibit-startup-message nil ! :group 'gnus-start ! :type 'toggle "*If non-nil, the startup message will not be displayed.") ! (defcustom gnus-play-startup-jingle nil ! :group 'gnus-start ! :type 'toggle "If non-nil, play the Gnus jingle at startup.") ;;; Kludges to help the transition from the old `custom.el'. *************** *** 756,762 **** (and (buffer-modified-p) (save-buffer)) (kill-buffer (current-buffer)))))) ! (defvar gnus-kill-file-name "KILL" "Suffix of the kill files.") (defun gnus-newsgroup-kill-file (newsgroup) --- 774,782 ---- (and (buffer-modified-p) (save-buffer)) (kill-buffer (current-buffer)))))) ! (defcustom gnus-kill-file-name "KILL" ! :group 'gnus-score ! :type 'string "Suffix of the kill files.") (defun gnus-newsgroup-kill-file (newsgroup) *** pub/rgnus/lisp/nnmail.el Sun Sep 15 00:47:07 1996 --- rgnus/lisp/nnmail.el Thu Sep 19 02:46:00 1996 *************** *** 1155,1170 **** (funcall nnmail-treat-duplicates message-id)) (t nnmail-treat-duplicates)))) ! (group-art (nreverse (nnmail-article-group artnum-func)))) ;; Let the backend save the article (or not). (cond - ((null group-art) - (delete-region (point-min) (point-max))) ((not duplication) (nnmail-cache-insert message-id) ! (funcall func group-art)) ((eq action 'delete) - (delete-region (point-min) (point-max)) (setq group-art nil)) ((eq action 'warn) ;; We insert a warning. --- 1155,1168 ---- (funcall nnmail-treat-duplicates message-id)) (t nnmail-treat-duplicates)))) ! group-art) ;; Let the backend save the article (or not). (cond ((not duplication) (nnmail-cache-insert message-id) ! (funcall func (setq group-art ! (nreverse (nnmail-article-group artnum-func))))) ((eq action 'delete) (setq group-art nil)) ((eq action 'warn) ;; We insert a warning. *************** *** 1179,1189 **** "Message-ID: " newid "\n" "Gnus-Warning: This is a duplicate of message " message-id "\n") (nnmail-cache-insert newid) ! (funcall func group-art))) (t ! (funcall func group-art))) ;; Add the group-art list to the history list. ! (push group-art nnmail-split-history))) ;;; Get new mail. --- 1177,1191 ---- "Message-ID: " newid "\n" "Gnus-Warning: This is a duplicate of message " message-id "\n") (nnmail-cache-insert newid) ! (funcall func (setq group-art ! (nreverse (nnmail-article-group artnum-func)))))) (t ! (funcall func (setq group-art ! (nreverse (nnmail-article-group artnum-func)))))) ;; Add the group-art list to the history list. ! (if group-art ! (push group-art nnmail-split-history) ! (delete-region (point-min) (point-max))))) ;;; Get new mail. *************** *** 1375,1384 **** (let ((history nnmail-split-history) elem ga) (while (setq elem (pop history)) ! (insert (mapcar (lambda (ga) ! (concat (car ga) ":" (int-to-string (cdr ga)))) ! elem ! ", ") "\n")) (goto-char (point-min)))) --- 1377,1386 ---- (let ((history nnmail-split-history) elem ga) (while (setq elem (pop history)) ! (insert (mapconcat (lambda (ga) ! (concat (car ga) ":" (int-to-string (cdr ga)))) ! elem ! ", ") "\n")) (goto-char (point-min)))) *** pub/rgnus/lisp/ChangeLog Tue Sep 17 03:24:19 1996 --- rgnus/lisp/ChangeLog Thu Sep 19 02:46:00 1996 *************** *** 1,3 **** --- 1,40 ---- + Wed Sep 18 10:36:08 1996 Lars Magne Ingebrigtsen + + * gnus-async.el (gnus-async-prefetch-article-p): New variable. + (gnus-async-prefetch-article): Use it. + (gnus-async-unread-p): New function. + + Tue Sep 17 14:41:56 1996 Per Abrahamsen + + * gnus-cite.el (gnus-custom-import-cite-face-list): Removed. + + Wed Sep 18 04:28:16 1996 Lars Magne Ingebrigtsen + + * nnmail.el (nnmail-split-history): mapcar instead of mapconcat. + + Tue Sep 17 14:41:56 1996 Per Abrahamsen + + * gnus.el: Customized. + + * dgnushack.el (custom-file): Removed. + + Wed Sep 18 03:04:17 1996 Lars Magne Ingebrigtsen + + * nnmail.el (nnmail-check-duplication): Do splitting after + duplicate suppression. + + * gnus-salt.el (gnus-pick-mode): Don't go to unread article. + + * gnus-dup.el (gnus-dup-enter-articles): Don't enter Message-IDs + ento lists multiple times. + + Tue Sep 17 03:44:08 1996 Lars Magne Ingebrigtsen + + * gnus-uu.el (gnus-uu-grab-articles): Don't prefetch. Ask before + deleting. + + * gnus.el: Red Gnus v0.37 is released. + Tue Sep 17 03:15:26 1996 Lars Magne Ingebrigtsen * custom.el: 0.9 included. *** pub/rgnus/texi/gnus.texi Tue Sep 17 03:33:47 1996 --- rgnus/texi/gnus.texi Thu Sep 19 03:03:22 1996 *************** *** 14,24 **** @iflatex \documentclass[twoside,a4paper,openright]{book} \usepackage[latin1]{inputenc} - % \usepackage{fontenc} - % \usepackage{babel} \usepackage{pagestyle} \usepackage{epsfig} - % \usepackage{ifitricks} \fontfamily{bembo}\selectfont \makeindex --- 14,21 ---- *************** *** 57,63 **** \newcommand{\gnushash}{\#} \newcommand{\gnushat}{\symbol{"5E}} \newcommand{\gnusunderline}{\symbol{"5F}} ! \newcommand{\gnusnot}{\#} \newcommand{\gnustilde}{\symbol{"7E}} \newcommand{\gnusless}{{$<$}} \newcommand{\gnusgreater}{{$>$}} --- 54,60 ---- \newcommand{\gnushash}{\#} \newcommand{\gnushat}{\symbol{"5E}} \newcommand{\gnusunderline}{\symbol{"5F}} ! \newcommand{\gnusnot}{$\neg$} \newcommand{\gnustilde}{\symbol{"7E}} \newcommand{\gnusless}{{$<$}} \newcommand{\gnusgreater}{{$>$}} *************** *** 410,415 **** --- 407,413 ---- @node Finding the News @section Finding the News + @cindex finding news @vindex gnus-select-method @c @head *************** *** 443,449 **** 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 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 --- 441,447 ---- 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 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 *************** *** 542,548 **** @cindex slave You might want to run more than one Emacs with more than one Gnus at the ! same time. If you are using different @file{.newsrc} files (eg., if you are using the two different Gnusae to read from two different servers), that is no problem whatsoever. You just do it. --- 540,546 ---- @cindex slave You might want to run more than one Emacs with more than one Gnus at the ! same time. If you are using different @file{.newsrc} files (e.g., if you are using the two different Gnusae to read from two different servers), that is no problem whatsoever. You just do it. *************** *** 560,580 **** Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or however you do it). Each subsequent slave Gnusae should be started with @kbd{M-x gnus-slave}. These slaves won't save normal @file{.newsrc} ! files, but instead save @dfn{slave files} that contains information only on what groups have been read in the slave session. When a master Gnus starts, it will read (and delete) these slave files, incorporating all information from them. (The slave files will be read in the sequence they were created, so the latest changes will have precedence.) Information from the slave files has, of course, precedence over the ! information in the normal (i. e., master) @code{.newsrc} file. @node Fetching a Group @section Fetching a Group @findex gnus-fetch-group ! It it sometime convenient to be able to just say ``I want to read this group and I don't care whether Gnus has been started or not''. This is perhaps more useful for people who write code than for users, but the command @code{gnus-fetch-group} provides this functionality in any case. --- 558,579 ---- Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or however you do it). Each subsequent slave Gnusae should be started with @kbd{M-x gnus-slave}. These slaves won't save normal @file{.newsrc} ! files, but instead save @dfn{slave files} that contain information only on what groups have been read in the slave session. When a master Gnus starts, it will read (and delete) these slave files, incorporating all information from them. (The slave files will be read in the sequence they were created, so the latest changes will have precedence.) Information from the slave files has, of course, precedence over the ! information in the normal (i.e., master) @code{.newsrc} file. @node Fetching a Group @section Fetching a Group + @cindex fetching a group @findex gnus-fetch-group ! It it sometimes convenient to be able to just say ``I want to read this group and I don't care whether Gnus has been started or not''. This is perhaps more useful for people who write code than for users, but the command @code{gnus-fetch-group} provides this functionality in any case. *************** *** 584,589 **** --- 583,589 ---- @node New Groups @section New Groups @cindex new groups + @cindex subscription @vindex gnus-subscribe-newsgroup-method What Gnus does when it encounters a new group is determined by the *************** *** 691,697 **** list of groups from the active file(s) with the lists of subscribed and dead groups. This isn't a particularly fast method. If @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the ! server for new groups since the last time. This is both faster & cheaper. This also means that you can get rid of the list of killed groups altogether, so you may set @code{gnus-save-killed-list} to @code{nil}, which will save time both at startup, at exit, and all over. --- 691,697 ---- list of groups from the active file(s) with the lists of subscribed and dead groups. This isn't a particularly fast method. If @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the ! server for new groups since the last time. This is both faster and cheaper. This also means that you can get rid of the list of killed groups altogether, so you may set @code{gnus-save-killed-list} to @code{nil}, which will save time both at startup, at exit, and all over. *************** *** 702,708 **** server supports @code{ask-server}? No? Good, because I don't have a fail-safe answer. I would suggest just setting this variable to @code{ask-server} and see whether any new groups appear within the next ! few days. If any do, then it works. If any don't, then it doesn't work. I could write a function to make Gnus guess whether the server supports @code{ask-server}, but it would just be a guess. So I won't. You could @code{telnet} to the server and say @code{HELP} and see --- 702,708 ---- server supports @code{ask-server}? No? Good, because I don't have a fail-safe answer. I would suggest just setting this variable to @code{ask-server} and see whether any new groups appear within the next ! few days. If any do, then it works. If none do, then it doesn't work. I could write a function to make Gnus guess whether the server supports @code{ask-server}, but it would just be a guess. So I won't. You could @code{telnet} to the server and say @code{HELP} and see *************** *** 720,729 **** @node Changing Servers @section Changing Servers Sometimes it is necessary to move from one @sc{nntp} server to another. This happens very rarely, but perhaps you change jobs, or one server is ! very flake and you want to use another. Changing the server is pretty easy, right? You just change @code{gnus-select-method} to point to the new server? --- 720,730 ---- @node Changing Servers @section Changing Servers + @cindex changing servers Sometimes it is necessary to move from one @sc{nntp} server to another. This happens very rarely, but perhaps you change jobs, or one server is ! very flakey and you want to use another. Changing the server is pretty easy, right? You just change @code{gnus-select-method} to point to the new server? *************** *** 744,753 **** @kindex M-x gnus-change-server @findex gnus-change-server If you have access to both servers, Gnus can request the headers for all ! the articles you have read and compare @code{Message-ID}s and map ! reads and article marks. The @kbd{M-x gnus-change-server} command will ! do this for all your native groups. It will prompt for the method you ! want to move to. @kindex M-x gnus-group-move-group-to-server @findex gnus-group-move-group-to-server --- 745,754 ---- @kindex M-x gnus-change-server @findex gnus-change-server If you have access to both servers, Gnus can request the headers for all ! the articles you have read and compare @code{Message-ID}s and map the ! article numbers of the read articles and article marks. The @kbd{M-x ! gnus-change-server} command will do this for all your native groups. It ! will prompt for the method you want to move to. @kindex M-x gnus-group-move-group-to-server @findex gnus-group-move-group-to-server *************** *** 767,772 **** --- 768,775 ---- @section Startup Files @cindex startup files @cindex .newsrc + @cindex .newsrc.el + @cindex .newsrc.eld Now, you all know about the @file{.newsrc} file. All subscription information is traditionally stored in this file. *************** *** 818,824 **** @code{gnus-save-standard-newsrc-hook} is called just before saving the @file{.newsrc} file. The latter two are commonly used to turn version control on or off. Version control is on by default when saving the ! startup files. If you want to backup creation off, say something like: @lisp (defun turn-off-backup () --- 821,827 ---- @code{gnus-save-standard-newsrc-hook} is called just before saving the @file{.newsrc} file. The latter two are commonly used to turn version control on or off. Version control is on by default when saving the ! startup files. If you want to turn backup creation off, say something like: @lisp (defun turn-off-backup () *************** *** 944,951 **** @item gnus-inhibit-startup-message @vindex gnus-inhibit-startup-message If non-@code{nil}, the startup message won't be displayed. That way, ! your boss might not notice that you are reading news instead of doing ! your job as easily. @item gnus-no-groups-message @vindex gnus-no-groups-message --- 947,954 ---- @item gnus-inhibit-startup-message @vindex gnus-inhibit-startup-message If non-@code{nil}, the startup message won't be displayed. That way, ! your boss might not notice as easily that you are reading news instead of doing ! your job. @item gnus-no-groups-message @vindex gnus-no-groups-message *************** *** 983,989 **** @node Group Buffer Format @section Group Buffer Format - @cindex group buffer format @menu * Group Line Specification:: Deciding how the group buffer is to look. --- 986,991 ---- *************** *** 994,999 **** --- 996,1002 ---- @node Group Line Specification @subsection Group Line Specification + @cindex group buffer format The default format of the group buffer is nice and dull, but you can make it as exciting and ugly as you feel like. *************** *** 1036,1042 **** @table @samp @item M ! Only marked articles. @item S Whether the group is subscribed. --- 1039,1045 ---- @table @samp @item M ! An asterisk if the group only has marked articles. @item S Whether the group is subscribed. *************** *** 1117,1122 **** --- 1120,1126 ---- @node Group Modeline Specification @subsection Group Modeline Specification + @cindex group modeline @vindex gnus-group-mode-line-format The mode line can be changed by setting *************** *** 1133,1138 **** --- 1137,1144 ---- @node Group Highlighting @subsection Group Highlighting + @cindex highlighting + @cindex group highlighting @vindex gnus-group-highlight Highlighting in the group buffer is controlled by the *************** *** 1211,1222 **** (@code{gnus-group-next-unread-group}). @item p - @itemx DEL @kindex DEL (Group) @kindex p (Group) @findex gnus-group-prev-unread-group ! Go to the previous group group that has unread articles (@code{gnus-group-prev-unread-group}). @item N --- 1217,1227 ---- (@code{gnus-group-next-unread-group}). @item p @itemx DEL @kindex DEL (Group) @kindex p (Group) @findex gnus-group-prev-unread-group ! Go to the previous group that has unread articles (@code{gnus-group-prev-unread-group}). @item N *************** *** 1232,1244 **** @item M-p @kindex M-p (Group) @findex gnus-group-next-unread-group-same-level ! Go to the next unread group on the same level (or lower) (@code{gnus-group-next-unread-group-same-level}). @item M-n @kindex M-n (Group) @findex gnus-group-prev-unread-group-same-level ! Go to the previous unread group on the same level (or lower) (@code{gnus-group-prev-unread-group-same-level}). @end table --- 1237,1249 ---- @item M-p @kindex M-p (Group) @findex gnus-group-next-unread-group-same-level ! Go to the next unread group on the same (or lower) level (@code{gnus-group-next-unread-group-same-level}). @item M-n @kindex M-n (Group) @findex gnus-group-prev-unread-group-same-level ! Go to the previous unread group on the same (or lower) level (@code{gnus-group-prev-unread-group-same-level}). @end table *************** *** 1304,1314 **** @kindex M-RET (Group) @findex gnus-group-quick-select-group This does the same as the command above, but tries to do it with the ! minimum amount off fuzz (@code{gnus-group-quick-select-group}). No scoring/killing will be performed, there will be no highlights and no expunging. This might be useful if you're in a real hurry and have to enter some humongous group. If you give a 0 prefix to this command ! (i. e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer. This might be useful if you want to toggle threading before entering the group. --- 1309,1319 ---- @kindex M-RET (Group) @findex gnus-group-quick-select-group This does the same as the command above, but tries to do it with the ! minimum amount of fuzz (@code{gnus-group-quick-select-group}). No scoring/killing will be performed, there will be no highlights and no expunging. This might be useful if you're in a real hurry and have to enter some humongous group. If you give a 0 prefix to this command ! (i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer. This might be useful if you want to toggle threading before entering the group. *************** *** 1325,1331 **** @vindex gnus-group-catchup-group-hook Mark all unticked articles in this group as read (@code{gnus-group-catchup-current}). ! @code{gnus-group-catchup-group-hook} is when catching up a group from the group buffer. @item C --- 1330,1336 ---- @vindex gnus-group-catchup-group-hook Mark all unticked articles in this group as read (@code{gnus-group-catchup-current}). ! @code{gnus-group-catchup-group-hook} is called when catching up a group from the group buffer. @item C *************** *** 1386,1392 **** @node Subscription Commands @section Subscription Commands ! @cindex subscribing @table @kbd --- 1391,1397 ---- @node Subscription Commands @section Subscription Commands ! @cindex subscription @table @kbd *************** *** 1459,1464 **** --- 1464,1470 ---- @node Group Levels @section Group Levels @cindex group level + @cindex level All groups have a level of @dfn{subscribedness}. For instance, if a group is on level 2, it is more subscribed than a group on level 5. You *************** *** 1495,1501 **** for reasons of efficiency. It is recommended that you keep all your mail groups (if any) on quite ! low levels (eg. 1 or 2). If you want to play with the level variables, you should show some care. Set them once, and don't touch them ever again. Better yet, don't touch --- 1501,1507 ---- for reasons of efficiency. It is recommended that you keep all your mail groups (if any) on quite ! low levels (e.g. 1 or 2). If you want to play with the level variables, you should show some care. Set them once, and don't touch them ever again. Better yet, don't touch *************** *** 1631,1636 **** --- 1637,1643 ---- @node Foreign Groups @section Foreign Groups + @cindex foreign groups Below are some group mode commands for making and editing general foreign groups, as well as commands to ease the creation of a few *************** *** 1643,1648 **** --- 1650,1656 ---- @item G m @kindex G m (Group) @findex gnus-group-make-group + @cindex making groups Make a new group (@code{gnus-group-make-group}). Gnus will prompt you for a name, a method and possibly an @dfn{address}. For an easier way to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}. *************** *** 1650,1655 **** --- 1658,1664 ---- @item G r @kindex G r (Group) @findex gnus-group-rename-group + @cindex renaming groups Rename the current group to something else (@code{gnus-group-rename-group}). This is legal only on some groups---mail groups mostly. This command might very well be quite slow *************** *** 1658,1663 **** --- 1667,1673 ---- @item G e @kindex G e (Group) @findex gnus-group-edit-group-method + @cindex renaming groups Enter a buffer where you can edit the select method of the current group (@code{gnus-group-edit-group-method}). *************** *** 1676,1691 **** --- 1686,1705 ---- @item G d @kindex G d (Group) @findex gnus-group-make-directory-group + @cindex nndir Make a directory group (@pxref{Directory Groups}). You will be prompted for a directory name (@code{gnus-group-make-directory-group}). @item G h @kindex G h (Group) + @cindex help group @findex gnus-group-make-help-group Make the Gnus help group (@code{gnus-group-make-help-group}). @item G a @kindex G a (Group) + @cindex (ding) archive + @cindex archive group @findex gnus-group-make-archive-group @vindex gnus-group-archive-directory @vindex gnus-group-recent-archive-directory *************** *** 1697,1710 **** @item G k @kindex G k (Group) @findex gnus-group-make-kiboze-group Make a kiboze group. You will be prompted for a name, for a regexp to match groups to be ``included'' in the kiboze group, and a series of strings to match on headers (@code{gnus-group-make-kiboze-group}). ! @xref{Kibozed Groups} @item G D @kindex G D (Group) @findex gnus-group-enter-directory Read an arbitrary directory as if with were a newsgroup with the @code{nneething} backend (@code{gnus-group-enter-directory}). @xref{Anything Groups}. --- 1711,1726 ---- @item G k @kindex G k (Group) @findex gnus-group-make-kiboze-group + @cindex nnkiboze Make a kiboze group. You will be prompted for a name, for a regexp to match groups to be ``included'' in the kiboze group, and a series of strings to match on headers (@code{gnus-group-make-kiboze-group}). ! @xref{Kibozed Groups}. @item G D @kindex G D (Group) @findex gnus-group-enter-directory + @cindex nneething Read an arbitrary directory as if with were a newsgroup with the @code{nneething} backend (@code{gnus-group-enter-directory}). @xref{Anything Groups}. *************** *** 1713,1718 **** --- 1729,1735 ---- @kindex G f (Group) @findex gnus-group-make-doc-group @cindex ClariNet Briefs + @cindex nndoc Make a group based on some file or other (@code{gnus-group-make-doc-group}). If you give a prefix to this command, you will be prompted for a file name and a file type. *************** *** 1727,1732 **** --- 1744,1750 ---- @cindex DejaNews @cindex Alta Vista @cindex InReference + @cindex nnweb Make an ephemeral group based on a web search (@code{gnus-group-make-web-group}). If you give a prefix to this command, make a solid group instead. You will be prompted for the *************** *** 1915,1921 **** Use the @kbd{G p} command to edit group parameters of a group. ! Also @xref{Topic Parameters}. @node Listing Groups --- 1933,1939 ---- Use the @kbd{G p} command to edit group parameters of a group. ! Also @pxref{Topic Parameters}. @node Listing Groups *************** *** 2602,2607 **** --- 2620,2626 ---- @node Topic Parameters @subsection Topic Parameters + @cindex topic parameters All groups in a topic will inherit group parameters from the parent (and ancestor) topic parameters. All legal group parameters are legal topic *************** *** 2664,2671 **** @item ^ @kindex ^ (Group) @findex gnus-group-enter-server-mode ! Enter the server buffer (@code{gnus-group-enter-server-mode}). @xref{The ! Server Buffer}. @item a @kindex a (Group) --- 2683,2690 ---- @item ^ @kindex ^ (Group) @findex gnus-group-enter-server-mode ! Enter the server buffer (@code{gnus-group-enter-server-mode}). ! @xref{The Server Buffer}. @item a @kindex a (Group) *************** *** 3599,3628 **** @node Unread Articles @subsection Unread Articles ! The following marks mark articles as unread, in one form or other. - @vindex gnus-dormant-mark - @vindex gnus-ticked-mark @table @samp @item ! @dfn{Ticked articles} are articles that will remain visible always. If you see an article that you find interesting, or you want to put off reading it, or replying to it, until sometime later, you'd typically tick it. However, articles can be expired, so if you want to keep an ! article forever, you'll have to save it. Ticked articles have a ! @samp{!} (@code{gnus-ticked-mark}) in the first column. @item ? @vindex gnus-dormant-mark ! A @dfn{dormant} article is marked with a @samp{?} ! (@code{gnus-dormant-mark}), and will only appear in the summary buffer ! if there are followups to it. @item SPACE @vindex gnus-unread-mark ! An @dfn{unread} article is marked with a @samp{SPACE} ! (@code{gnus-unread-mark}). These are articles that haven't been read at ! all yet. @end table --- 3618,3650 ---- @node Unread Articles @subsection Unread Articles ! The following marks mark articles as (kinda) unread, in one form or ! other. @table @samp @item ! + @vindex gnus-ticked-mark + Marked as ticked (@code{gnus-ticked-mark}). + @dfn{Ticked articles} are articles that will remain visible always. If you see an article that you find interesting, or you want to put off reading it, or replying to it, until sometime later, you'd typically tick it. However, articles can be expired, so if you want to keep an ! article forever, you'll have to make it persistent (@pxref{Persistent ! Articles}). @item ? @vindex gnus-dormant-mark ! Marked as dormant (@code{gnus-dormant-mark}). ! ! @dfn{Dormant articles} will only appear in the summary buffer if there ! are followups to it. @item SPACE @vindex gnus-unread-mark ! Markes as unread (@code{gnus-unread-mark}). ! ! @dfn{Unread articles} are articles that haven't been read at all yet. @end table *************** *** 3636,3654 **** @item r @vindex gnus-del-mark ! Articles that are marked as read. They have a @samp{r} ! (@code{gnus-del-mark}) in the first column. These are articles that the ! user has marked as read more or less manually. @item R @vindex gnus-read-mark ! Articles that are actually read are marked with @samp{R} ! (@code{gnus-read-mark}). @item O @vindex gnus-ancient-mark ! Articles that were marked as read in previous sessions are now ! @dfn{old} and marked with @samp{O} (@code{gnus-ancient-mark}). @item K @vindex gnus-killed-mark --- 3658,3674 ---- @item r @vindex gnus-del-mark ! These are articles that the user has marked as read with the @kbd{d} ! command manually, more or less (@code{gnus-del-mark}). @item R @vindex gnus-read-mark ! Articles that have actually been read (@code{gnus-read-mark}). @item O @vindex gnus-ancient-mark ! Articles that were marked as read in previous sessions and are now ! @dfn{old} (@code{gnus-ancient-mark}). @item K @vindex gnus-killed-mark *************** *** 3672,3706 **** @item F @vindex gnus-souped-mark ! @sc{SOUP}ed article (@code{gnus-souped-mark}). @xref{SOUP} @item Q @vindex gnus-sparse-mark Sparsely reffed article (@code{gnus-sparse-mark}). @xref{Customizing ! Threading} @item M @vindex gnus-duplicate-mark Article marked as read by duplicate suppression ! (@code{gnus-duplicated-mark}). @xref{Duplicate Suppression} @end table All these marks just mean that the article is marked as read, really. ! They are interpreted differently by the adaptive scoring scheme, ! however. One more special mark, though: @table @samp @item E @vindex gnus-expirable-mark ! You can also mark articles as @dfn{expirable} (or have them marked as ! such automatically). That doesn't make much sense in normal groups, ! because a user does not control the 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. Expirable articles are marked with ! @samp{E} (@code{gnus-expirable-mark}). @end table --- 3692,3726 ---- @item F @vindex gnus-souped-mark ! @sc{SOUP}ed article (@code{gnus-souped-mark}). @xref{SOUP}. @item Q @vindex gnus-sparse-mark Sparsely reffed article (@code{gnus-sparse-mark}). @xref{Customizing ! Threading}. @item M @vindex gnus-duplicate-mark Article marked as read by duplicate suppression ! (@code{gnus-duplicated-mark}). @xref{Duplicate Suppression}. @end table All these marks just mean that the article is marked as read, really. ! They are interpreted differently when doing adaptive scoring, though. One more special mark, though: @table @samp @item E @vindex gnus-expirable-mark ! Marked as expirable (@code{gnus-expirable-mark}). ! ! 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 the 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 *************** *** 4536,4541 **** --- 4556,4563 ---- @node Asynchronous Fetching @section Asynchronous Article Fetching @cindex asynchronous article fetching + @cindex article pre-fetch + @cindex pre-fetch If you read your news from an @sc{nntp} server that's far away, the network latencies may make reading articles a chore. You have to wait *************** *** 4578,4583 **** --- 4600,4632 ---- pre-fetch all the articles that it can without bound. If it is @code{nil}, no pre-fetching will be made. + @vindex gnus-async-prefetch-article-p + @findex gnus-async-read-p + There are probably some articles that you don't want to pre-fetch---read + articles, for instance. Which articles to pre-fetch is controlled by + the @code{gnus-async-prefetch-article-p} variable. This function should + return non-@code{nil} when the article in question is to be + pre-fetched. The default is @code{gnus-async-read-p}, which returns + @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) + "Return non-nil for short, unread articles." + (and (gnus-data-unread-p data) + (< (mail-header-lines (gnus-data-header data)) + 100))) + + (setq gnus-async-prefetch-article-p 'my-async-short-unread-p) + @end lisp + + These functions will be called many, many times, so they should + preferrably be short and sweet to avoid slowing down Gnus too much. + It's also probably a good idea to byte-compile things like this. + @vindex gnus-prefetched-article-deletion-strategy Articles have to be removed from the asynch buffer sooner or later. The @code{gnus-prefetched-article-deletion-strategy} says when to remove *************** *** 6663,6669 **** C'est la vie. ! For an alternative approach, @xref{Duplicate Suppression}. @node Duplicate Suppression --- 6712,6718 ---- C'est la vie. ! For an alternative approach, @pxref{Duplicate Suppression}. @node Duplicate Suppression *************** *** 6755,6761 **** * Hiding Headers:: Deciding what headers should be displayed. * Using MIME:: Pushing articles through @sc{mime} before reading them. * Customizing Articles:: Tailoring the look of the articles. ! * Article Keymap:: Keystrokes available in the article buffer * Misc Article:: Other stuff. @end menu --- 6804,6810 ---- * Hiding Headers:: Deciding what headers should be displayed. * Using MIME:: Pushing articles through @sc{mime} before reading them. * Customizing Articles:: Tailoring the look of the articles. ! * Article Keymap:: Keystrokes available in the article buffer. * Misc Article:: Other stuff. @end menu *************** *** 7151,7157 **** can use a non-zero prefix to the @kbd{C-c C-c} command to force using the ``current'' server for posting. ! If you give a zero prefix (i. e., @kbd{C-u 0 C-c C-c}) to that command, Gnus will prompt you for what method to use for posting. You can also set @code{gnus-post-method} to a list of select methods. --- 7200,7206 ---- can use a non-zero prefix to the @kbd{C-c C-c} command to force using the ``current'' server for posting. ! If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command, Gnus will prompt you for what method to use for posting. You can also set @code{gnus-post-method} to a list of select methods. *************** *** 7492,7498 **** A foreign group (or any group, really) is specified by a @dfn{name} and a @dfn{select method}. To take the latter first, a select method is a ! list where the first element says what backend to use (eg. @code{nntp}, @code{nnspool}, @code{nnml}) and the second element is the @dfn{server name}. There may be additional elements in the select method, where the value may have special meaning for the backend in question. --- 7541,7547 ---- A foreign group (or any group, really) is specified by a @dfn{name} and a @dfn{select method}. To take the latter first, a select method is a ! list where the first element says what backend to use (e.g. @code{nntp}, @code{nnspool}, @code{nnml}) and the second element is the @dfn{server name}. There may be additional elements in the select method, where the value may have special meaning for the backend in question. *************** *** 7748,7754 **** @subsection Servers and Methods Wherever you would normally use a select method ! (eg. @code{gnus-secondary-select-method}, in the group select method, when browsing a foreign server) you can use a virtual server name instead. This could potentially save lots of typing. And it's nice all over. --- 7797,7803 ---- @subsection Servers and Methods Wherever you would normally use a select method ! (e.g. @code{gnus-secondary-select-method}, in the group select method, when browsing a foreign server) you can use a virtual server name instead. This could potentially save lots of typing. And it's nice all over. *************** *** 9126,9132 **** forgetting. @code{nneething} does this in a two-step process. First, it snoops each file in question. If the file looks like an article (i.e., the first few lines look like headers), it will use this as the head. ! If this is just some arbitrary file without a head (eg. a C source file), @code{nneething} will cobble up a header out of thin air. It will use file ownership, name and date and do whatever it can with these elements. --- 9175,9181 ---- forgetting. @code{nneething} does this in a two-step process. First, it snoops each file in question. If the file looks like an article (i.e., the first few lines look like headers), it will use this as the head. ! If this is just some arbitrary file without a head (e.g. a C source file), @code{nneething} will cobble up a header out of thin air. It will use file ownership, name and date and do whatever it can with these elements. *************** *** 9952,9958 **** The current score file is by default the group's local score file, even if no such score file actually exists. To insert score commands into ! some other score file (eg. @file{all.SCORE}), you must first make this score file the current one. General score commands that don't actually change the score file: --- 10001,10007 ---- The current score file is by default the group's local score file, even if no such score file actually exists. To insert score commands into ! some other score file (e.g. @file{all.SCORE}), you must first make this score file the current one. General score commands that don't actually change the score file: *************** *** 11040,11046 **** sort of primitive hook function to be run on group entry, even though that isn't a very good idea. ! XCNormal kill files look like this: @lisp (gnus-kill "From" "Lars Ingebrigtsen") --- 11089,11095 ---- sort of primitive hook function to be run on group entry, even though that isn't a very good idea. ! Normal kill files look like this: @lisp (gnus-kill "From" "Lars Ingebrigtsen") *************** *** 11553,11558 **** --- 11602,11608 ---- * Daemons:: Gnus can do things behind your back. * NoCeM:: How to avoid spam and other fatty foods. * Picons:: How to display pictures of what your reading. + * Undo:: Some actions can be undone. * Moderation:: What to do if you're a moderator. * XEmacs Enhancements:: There are more pictures and stuff under XEmacs. * Various Various:: Things that are really various. *************** *** 11850,11856 **** configuration function will use @code{group} as the key. A full list of possible names is listed below. ! The @dfn{value} (i. e., the @dfn{split}) says how much space each buffer should occupy. To take the @code{article} split as an example - @lisp --- 11900,11906 ---- configuration function will use @code{group} as the key. A full list of possible names is listed below. ! The @dfn{value} (i.e., the @dfn{split}) says how much space each buffer should occupy. To take the @code{article} split as an example - @lisp *************** *** 12090,12100 **** @vindex gnus-mode-non-string-length By default, Gnus displays information on the current article in the mode lines of the summary and article buffers. The information Gnus wishes ! to display (eg. the subject of the article) is often longer than the mode lines, and therefore have to be cut off at some point. The @code{gnus-mode-non-string-length} variable says how long the other elements on the line is (i.e., the non-info part). If you put ! additional elements on the mode line (eg. a clock), you should modify this variable: @c Hook written by Francesco Potorti` --- 12140,12150 ---- @vindex gnus-mode-non-string-length By default, Gnus displays information on the current article in the mode lines of the summary and article buffers. The information Gnus wishes ! to display (e.g. the subject of the article) is often longer than the mode lines, and therefore have to be cut off at some point. The @code{gnus-mode-non-string-length} variable says how long the other elements on the line is (i.e., the non-info part). If you put ! additional elements on the mode line (e.g. a clock), you should modify this variable: @c Hook written by Francesco Potorti` *************** *** 12536,12542 **** valid places could be @code{article}, @code{summary}, or @samp{*scratch*} for all I care. Just make sure that you've made the buffer visible using the standard Gnus window configuration ! routines---@xref{Windows Configuration}. @end table --- 12586,12592 ---- valid places could be @code{article}, @code{summary}, or @samp{*scratch*} for all I care. Just make sure that you've made the buffer visible using the standard Gnus window configuration ! routines---@pxref{Windows Configuration}. @end table *************** *** 12628,12633 **** --- 12678,12720 ---- @end table + @node Undo + @section Undo + @cindex undo + + It is very useful to be able to undo actions one has done. In normal + Emacs buffers, it's easy enough---you just push the @code{undo} button. + 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. + Undoing something like that can't be done by the normal Emacs + @code{undo} function. + + Gnus tries to remedy this somewhat by keeping track of what the user + does and coming up with actions that would reverse the actions the user + takes. When the user then presses the @code{undo} key, Gnus will run + the code to reverse the previous action, or the previous actions. + However, not all actions are easily reversible, so Gnus currently offers + a few key functions to be undoable. These include killing groups, + yanking groups, and changing the list of read articles of groups. + That's it, really. More functions may be added in the future, but each + added function means an increase in data to be stored, so Gnus will + never be totally undoable. + + @findex gnus-undo-mode + @vindex gnus-use-undo + @findex gnus-undo + The undoability is provided by the @code{gnus-undo-mode} minor mode. It + is used if @code{gnus-use-undo} is non-@code{nil}, which is the + default. The @kbd{M-C-_} key performs the @code{gnus-undo} command + command, which should feel kinda like the normal Emacs @code{undo} + command. + + @node Moderation @section Moderation @cindex moderation *************** *** 12869,12875 **** as The Site That Destroys Newsrcs And Drives People Mad. During the first extended alpha period of development, the new Gnus was ! called ``(ding) Gnus''. @dfn{(ding)}, is, of course, short for @dfn{ding is not Gnus}, which is a total and utter lie, but who cares? (Besides, the ``Gnus'' in this abbreviation should probably be pronounced ``news'' as @sc{Umeda} intended, which makes it a more --- 12956,12962 ---- as The Site That Destroys Newsrcs And Drives People Mad. During the first extended alpha period of development, the new Gnus was ! called ``(ding) Gnus''. @dfn{(ding)} is, of course, short for @dfn{ding is not Gnus}, which is a total and utter lie, but who cares? (Besides, the ``Gnus'' in this abbreviation should probably be pronounced ``news'' as @sc{Umeda} intended, which makes it a more *************** *** 13118,13187 **** @itemize @bullet ! @item Masanobu @sc{Umeda} ! The writer of the original @sc{gnus}. ! @item Per Abrahamsen ! Custom, scoring, highlighting and @sc{soup} code (as well as numerous ! other things). ! @item Luis Fernandes ! Design and graphics. ! @item Wes Hardaker ! @file{gnus-picon.el} and the manual section on @dfn{picons} ! (@pxref{Picons}). ! @item Brad Miller ! @file{gnus-gl.el} and the GroupLens manual section (@pxref{GroupLens}). ! @item Sudish Joseph ! Innumerable bug fixes. ! @item Ilja Weis ! @file{gnus-topic.el}. ! @item Steven L. Baur ! Lots and lots of bugs detections and fixes. ! @item Vladimir Alexiev ! The refcard and reference booklets. ! @item Felix Lee & JWZ ! I stole some pieces from the XGnus distribution by Felix Lee and JWZ. ! @item Scott Byer ! @file{nnfolder.el} enhancements & rewrite. ! @item Peter Mutsaers ! Orphan article scoring code. ! @item Ken Raeburn ! POP mail support. ! @item Hallvard B Furuseth ! Various bits and pieces, especially dealing with .newsrc files. ! @item Brian Edmonds ! @file{gnus-bbdb.el}. ! @item Ricardo Nassif and Mark Borges ! Proof-reading. ! @item Kevin Davidson ! Came up with the name @dfn{ding}, so blame him. @end itemize ! Peter Arius, Stainless Steel Rat, Ulrik Dickow, Jack Vinson, Daniel ! Quinlan, Frank D. Cringle, Geoffrey T. Dairiki, Fabrice Popineau and ! Andrew Eskilsson have all contributed code and suggestions. @node New Features @subsection New Features @cindex new features @itemize @bullet @item --- 13205,13376 ---- @itemize @bullet ! @item ! Masanobu @sc{Umeda}---the writer of the original @sc{gnus}. ! @item ! Per Abrahamsen---custom, scoring, highlighting and @sc{soup} code (as ! well as numerous other things). ! @item ! Luis Fernandes---design and graphics. ! @item ! Wes Hardaker---@file{gnus-picon.el} and the manual section on ! @dfn{picons} (@pxref{Picons}). ! @item ! Brad Miller---@file{gnus-gl.el} and the GroupLens manual section ! (@pxref{GroupLens}). ! @item ! Sudish Joseph---innumerable bug fixes. ! @item ! Ilja Weis---@file{gnus-topic.el}. ! @item ! Steven L. Baur---lots and lots and lots of bugs detections and fixes. ! @item ! Vladimir Alexiev---the refcard and reference booklets. ! @item ! Felix Lee & Jamie Zawinsky---I stole some pieces from the XGnus ! distribution by Felix Lee and JWZ. ! @item ! Scott Byer---@file{nnfolder.el} enhancements & rewrite. ! @item ! Peter Mutsaers---orphan article scoring code. ! @item ! Ken Raeburn---POP mail support. ! ! @item ! Hallvard B Furuseth---various bits and pieces, especially dealing with ! .newsrc files. ! @item ! Brian Edmonds---@file{gnus-bbdb.el}. ! @item ! Ricardo Nassif, Mark Borges, and Jost Krieger---proof-reading. ! @item ! Kevin Davidson---came up with the name @dfn{ding}, so blame him. ! @item ! François Pinard---many, many interesting and thorough bug reports. @end itemize ! The following people have contributed many patches and suggestions: ! ! Christopher Davis, ! Andrew Eskilsson, ! Kai Grossjohann, ! David Kċgedal, ! Richard Pieri, ! Fabrice Popineau, ! Daniel Quinlan, ! Jason L. Tibbitts, III, ! and ! Jack Vinson. ! ! Also thanks to the following for patches and stuff: ! ! Peter Arius, ! Marc Auslander, ! Mark Borges, ! Lance A. Brown, ! Martin Buchholz, ! Alastair Burt, ! Joao Cachopo, ! Massimo Campostrini, ! Michael Cook, ! Glenn Coombs, ! Frank D. Cringle, ! Geoffrey T. Dairiki, ! Ulrik Dickow, ! Dave Disser, ! Paul Eggert, ! Michael Ernst, ! Luc Van Eycken, ! Sam Falkner, ! Paul Franklin, ! David S. Goldberg, ! D. Hall, ! Magnus Hammerin, ! Raja R. Harinath, ! Marc Horowitz, ! Ishikawa Ichiro, ! Francois Felix Ingrand, ! Lee Iverson, ! Fred Johansen, ! Thor Kristoffersen, ! Jens Lautenbacher, ! Christian Limpach, ! Nat Makarevitch, ! Timo Metzemakers, ! Richard Mlynarik, ! Lantz Moore, ! MORIOKA Tomohiko, ! Hrvoje Niksic, ! Andy Norman, ! Ken Olstad, ! Masaharu Onishi, ! Hideki Ono, ! Ulrich Pfeifer, ! Colin Rafferty, ! Bart Robinson, ! Ralph Schleicher, ! Danny Siu, ! Paul D. Smith, ! Jeff Sparkes, ! Michael Sperber, ! Richard Stallman, ! Greg Stark, ! Kurt Swanson, ! Samuel Tardieu, ! Teddy, ! Chuck Thompson, ! Philippe Troin, ! Jan Vroonhof, ! Barry A. Warsaw, ! Christoph Wedler, ! Joe Wells, ! and ! Katsumi Yamaoka. ! ! Apologies to everybody that I've forgotten, of which there are many, I'm ! sure. ! ! Gee, that's quite a list of people. I guess that must mean that there ! actually are people who are using Gnus. Who'd'a thunk it! @node New Features @subsection New Features @cindex new features + @menu + * ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus. + * September Gnus:: The Thing Formally Known As Gnus 5.3/5.3. + * Red Gnus:: The future. + @end menu + + These lists are, of course, just @emph{short} overviews of the + @emph{most} important new features. No, really. There are tons more. + Yes, we have feeping creaturism in full effect. + + + @node ding Gnus + @subsubsection (ding) Gnus + + New features in Gnus 5.0/5.1: + @itemize @bullet @item *************** *** 13291,13305 **** You can click on buttons instead of using the keyboard (@pxref{Buttons}). ! @item ! Gnus can use NoCeM files to weed out spam (@pxref{NoCeM}). @end itemize ! This is, of course, just a @emph{short} overview of the @emph{most} ! important new features. No, really. There are tons more. Yes, we have ! feeping creaturism in full effect, but nothing too gratuitous, I would ! hope. @node Newest Features --- 13480,13863 ---- You can click on buttons instead of using the keyboard (@pxref{Buttons}). ! @end itemize ! ! ! @node September Gnus ! @subsubsection September Gnus ! ! New features in Gnus 5.2/5.3: ! ! @itemize ! ! @item ! A new message composition mode is used. All old customization variables ! for @code{mail-mode}, @code{rnews-reply-mode} and @code{gnus-msg} are ! now obsolete. ! ! @item ! Gnus is now able to generate @dfn{sparse} threads---threads where ! missing articles are represented by empty nodes (@pxref{Customizing ! Threading}). ! ! @lisp ! (setq gnus-build-sparse-threads 'some) ! @end lisp ! ! @item ! Outgoing articles are stored on a special archive server ! (@pxref{Archived Messages}). ! ! @item ! Partial thread regeneration now happens when articles are ! referred. ! ! @item ! Gnus can make use of GroupLens predictions (@pxref{GroupLens}). ! ! @item ! 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) ! @end lisp ! ! @item ! An @code{nn}-like pick-and-read minor mode is available for the summary ! buffers (@pxref{Pick and Read}). ! ! @lisp ! (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode) ! @end lisp ! ! @item ! In binary groups you can use a special binary minor mode (@pxref{Binary ! Groups}). ! ! @item ! Groups can be grouped in a folding topic hierarchy (@pxref{Group ! Topics}). ! ! @lisp ! (add-hook 'gnus-group-mode-hook 'gnus-topic-mode) ! @end lisp ! ! @item ! Gnus can re-send and bounce mail (@pxref{Summary Mail Commands}). ! ! @item ! Groups can now have a score, and bubbling based on entry frequency ! is possible (@pxref{Group Score}). ! ! @lisp ! (add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group) ! @end lisp ! ! @item ! Groups can be process-marked, and commands can be performed on ! groups of groups (@pxref{Marking Groups}). ! ! @item ! Caching is possible in virtual groups. ! ! @item ! @code{nndoc} now understands all kinds of digests, mail boxes, rnews ! news batches, ClariNet briefs collections, and just about everything ! else (@pxref{Document Groups}). ! ! @item ! Gnus has a new backend (@code{nnsoup}) to create/read SOUP packets ! (@pxref{SOUP}). ! ! @item ! The Gnus cache is much faster. ! ! @item ! Groups can be sorted according to many criteria (@pxref{Sorting ! Groups}). ! ! @item ! New group parameters have been introduced to set list-address and ! expiry times (@pxref{Group Parameters}). ! ! @item ! All formatting specs allow specifying faces to be used ! (@pxref{Formatting Fonts}). ! ! @item ! There are several more commands for setting/removing/acting on process ! marked articles on the @kbd{M P} submap (@pxref{Setting Process Marks}). ! ! @item ! The summary buffer can be limited to show parts of the available ! articles based on a wide range of criteria. These commands have been ! bound to keys on the @kbd{/} submap (@pxref{Limiting}). ! ! @item ! Articles can be made persistent with the @kbd{*} command ! (@pxref{Persistent Articles}). ! ! @item ! All functions for hiding article elements are now toggles. ! ! @item ! Article headers can be buttonized (@pxref{Article Washing}). ! ! @lisp ! (add-hook 'gnus-article-display-hook ! 'gnus-article-add-buttons-to-head) ! @end lisp ! ! @item ! All mail backends support fetching articles by @code{Message-ID}. ! ! @item ! Duplicate mail can now be treated properly (@pxref{Duplicates}). ! ! @item ! All summary mode commands are available directly from the article ! buffer (@pxref{Article Keymap}). ! ! @item ! Frames can be part of @code{gnus-buffer-configuration} (@pxref{Windows ! Configuration}). ! ! @item ! Mail can be re-scanned by a daemonic process (@pxref{Daemons}). ! ! @item ! Gnus can make use of NoCeM files to weed out spam (@pxref{NoCeM}). ! ! @lisp ! (setq gnus-use-nocem t) ! @end lisp ! ! @item ! Groups can be made permanently visible (@pxref{Listing Groups}). ! ! @lisp ! (setq gnus-permanently-visible-groups "^nnml:") ! @end lisp ! ! @item ! Many new hooks have been introduced to make customizing easier. ! ! @item ! Gnus respects the @code{Mail-Copies-To} header. ! ! @item ! Threads can be gathered by looking at the @code{References} header ! (@pxref{Customizing Threading}). ! ! @lisp ! (setq gnus-summary-thread-gathering-function ! 'gnus-gather-threads-by-references) ! @end lisp ! ! @item ! Read articles can be stored in a special backlog buffer to avoid ! refetching (@pxref{Article Backlog}). ! ! @lisp ! (setq gnus-keep-backlog 50) ! @end lisp ! ! @item ! A clean copy of the current article is always stored in a separate ! buffer to allow easier treatment. ! ! @item ! Gnus can suggest where to save articles (@pxref{Saving Articles}). ! ! @item ! Gnus doesn't have to do as much prompting when saving (@pxref{Saving ! Articles}). ! ! @lisp ! (setq gnus-prompt-before-saving t) ! @end lisp ! ! @item ! @code{gnus-uu} can view decoded files asynchronously while fetching ! articles (@pxref{Other Decode Variables}). ! ! @lisp ! (setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view) ! @end lisp ! ! @item ! Filling in the article buffer now works properly on cited text ! (@pxref{Article Washing}). ! ! @item ! Hiding cited text adds buttons to toggle hiding, and how much ! cited text to hide is now customizable (@pxref{Article Hiding}). ! ! @lisp ! (setq gnus-cited-lines-visible 2) ! @end lisp ! ! @item ! Boring headers can be hidden (@pxref{Article Hiding}). ! ! @lisp ! (add-hook 'gnus-article-display-hook ! 'gnus-article-hide-boring-headers) ! @end lisp ! ! @item ! Default scoring values can now be set from the menu bar. ! ! @item ! Further syntax checking of outgoing articles have been added. @end itemize ! ! @node Red Gnus ! @subsubsection Red Gnus ! ! New features in Gnus 5.4/5.5: ! ! @itemize ! ! @item ! @file{nntp.el} has been totally rewritten in an asynchronous fashion. ! ! @item ! Article prefetching functionality has been moved up into ! Gnus (@pxref{Asynchronous Fetching}). ! ! @item ! Scoring can now be performed with logical operators like @code{and}, ! @code{or}, @code{not}, and parent redirection (@pxref{Advanced ! Scoring}). ! ! @item ! Article washing status can be displayed in the ! article mode line (@pxref{Misc Article}). ! ! @item ! @file{gnus.el} has been split into many smaller files. ! ! @item ! Suppression of duplicate articles based on Message-ID can be done ! (@pxref{Duplicate Suppression}). ! ! @lisp ! (setq gnus-suppress-duplicates t) ! @end lisp ! ! @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 ! Server Internals}). ! ! @item ! Groups can inherit group parameters from parent topics (@pxref{Topic ! Parameters}). ! ! @item ! Article editing has been revamped and is now actually usable. ! ! @item ! Signatures can be recognized in more intelligent fashions ! (@pxref{Article Signature}). ! ! @item ! Summary pick mode has been made to look more @code{nn}-like. Line ! numbers are displayed and the @kbd{.} command can be used to pick ! articles (@code{Pick and Read}). ! ! @item ! Commands for moving the @file{.newsrc.eld} from one server to ! 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-_} ! (@pxref{Undo}). ! ! @item ! Scoring can be done on words using the new score type @code{w} ! (@pxref{Score File Format}). ! ! @item ! Adaptive scoring can be done on a Subject word-by-word basis ! (@pxref{Adaptive Scoring}). ! ! @lisp ! (setq gnus-use-adaptive-scoring '(word)) ! @end lisp ! ! @item ! Scores can be decayed (@pxref{Score Decays}). ! ! @lisp ! (setq gnus-decay-scores t) ! @end lisp ! ! @item ! Scoring can be performed using a regexp on the Date header. The Date is ! normalized to compact ISO 8601 format first (@pxref{Score File Format}). ! ! @item ! A new command has been added to remove all data on articles from ! the native server (@pxref{Changing Servers}). ! ! @item ! A new command for reading collections of documents ! (@code{nndoc} with @code{nnvirtual} on top) has been added---@kbd{M-C-d} ! (@pxref{Really Various Summary Commands}). ! ! @item ! Process mark sets can be pushed and popped (@pxref{Setting Process ! Marks}). ! ! @item ! A new mail-to-news backend makes it possible to post even when the NNTP ! server doesn't allow posting (@pxref{Mail-To-News Gateways}). ! ! @item ! A new backend for reading searches from Web search engines ! (@dfn{DejaNews}, @dfn{Alta Vista}, @dfn{InReference}) has been added ! (@pxref{Web Searches}). ! ! @item ! Groups inside topics can now be sorted using the standard sorting ! functions, and each topic can be sorted independently (@pxref{Topic ! Sorting}). ! ! @item ! Subsets of the groups can be sorted independently (@code{Sorting ! Groups}). ! ! @item ! Cached articles can be pulled into the groups (@pxref{Summary Generation ! Commands}). ! ! @item ! Score files are now applied in a more reliable order (@pxref{Score ! Variables}). ! ! @item ! Reports on where mail messages end up can be generated (@pxref{Splitting ! Mail}). ! ! @item ! More hooks and functions have been added to remove junk from incoming ! mail before saving the mail (@pxref{Washing Mail}). ! ! @end itemize @node Newest Features *************** *** 13315,13334 **** @item Native @sc{mime} support is something that should be done. @item - A better and simpler method for specifying mail composing methods. - @item - Allow posting through mail-to-news gateways. - @item Really do unbinhexing. @end itemize And much, much, much more. There is more to come than has already been implemented. (But that's always true, isn't it?) ! @code{} is where the actual up-to-the-second todo list is located, so if you're really curious, you could point your Web browser over that-a-way. @node Terminology @section Terminology --- 13873,13943 ---- @item Native @sc{mime} support is something that should be done. @item Really do unbinhexing. @end itemize And much, much, much more. There is more to come than has already been implemented. (But that's always true, isn't it?) ! @file{} is where the actual up-to-the-second todo list is located, so if you're really curious, you could point your Web browser over that-a-way. + @iftex + + @node The Manual + @section The Manual + + This manual was generated from a TeXinfo file and then run through + either @code{texi2dvi} or my own home-brewed texi to LaTeX transformer, + and then run through @code{latex} and @code{dvips} to get what you hold + in your hands now. + + The following conventions have been used: + + @enumerate + + @item + This is a @samp{string} + + @item + This is a @kbd{keystroke} + + @item + This is a @file{file} + + @item + This is a @code{symbol} + + @end enumerate + + So if I were to say ``set @code{flargnoze} to @samp{yes}'', that would + mean: + + @lisp + (setq flargnoze "yes") + @end lisp + + If I say ``set @code{flumphel} to @code{yes}'', that would mean: + + @lisp + (setq flumphel 'yes) + @end lisp + + @samp{yes} and @code{yes} are two @emph{very} different things---don't + ever get them confused. + + @c @head + Of course, everything in this manual is of vital interest, so you should + read it all. Several times. However, if you feel like skimming the + manual, look for that gnu head you should see in the margin over + there---it means that what's being discussed is of more importance than + the rest of the stuff. (On the other hand, if everything is infinitely + important, how can anything be more important than that? Just one more + of the mysteries of this world, I guess.) + + @end iftex + @node Terminology @section Terminology *************** *** 13446,13452 **** @item bogus groups @cindex bogus groups A group that exists in the @file{.newsrc} file, but isn't known to the ! server (i. e., it isn't in the active file), is a @emph{bogus group}. This means that the group probably doesn't exist (any more). @item server --- 14055,14061 ---- @item bogus groups @cindex bogus groups A group that exists in the @file{.newsrc} file, but isn't known to the ! server (i.e., it isn't in the active file), is a @emph{bogus group}. This means that the group probably doesn't exist (any more). @item server *************** *** 13461,13467 **** @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 who things as a whole is a virtual server. @item washing --- 14070,14076 ---- @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 *************** *** 13470,13475 **** --- 14079,14095 ---- result will (more often than not) be cleaner and more pleasing than the original. + @item ephemeral groups + @cindex ephemeral groups + Most groups store data on what articles you have read. @dfn{Ephemeral} + groups are groups that will have no data stored---when you exit the + group, it'll disappear into the aether. + + @item solid groups + @cindex solid groups + This is the opposite of ephemeral groups. All groups listed in the + group buffer are solid groups. + @end table *************** *** 13664,13670 **** If the problem you're seeing is very visual, and you can't quite explain it, copy the Emacs window to a file (with @code{xwd}, for instance), put it somewhere it can be reached, and include the URL of the picture in ! the bug report.a If you just need help, you are better off asking on @samp{gnu.emacs.gnus}. I'm not very helpful. --- 14284,14290 ---- If the problem you're seeing is very visual, and you can't quite explain it, copy the Emacs window to a file (with @code{xwd}, for instance), put it somewhere it can be reached, and include the URL of the picture in ! the bug report. If you just need help, you are better off asking on @samp{gnu.emacs.gnus}. I'm not very helpful. *************** *** 14506,14512 **** just shamelessly @emph{stole} the entire thing, and one would be right. @dfn{Header} is a severely overloaded term. ``Header'' is used in ! RFC1036 to talk about lines in the head of an article (eg., @code{From}). It is used by many people as a synonym for ``head''---``the header and the body''. (That should be avoided, in my opinion.) And Gnus uses a format internally that it calls ``header'', --- 15126,15132 ---- just shamelessly @emph{stole} the entire thing, and one would be right. @dfn{Header} is a severely overloaded term. ``Header'' is used in ! RFC1036 to talk about lines in the head of an article (e.g., @code{From}). It is used by many people as a synonym for ``head''---``the header and the body''. (That should be avoided, in my opinion.) And Gnus uses a format internally that it calls ``header'', *** pub/rgnus/texi/ChangeLog Fri Sep 13 00:39:36 1996 --- rgnus/texi/ChangeLog Thu Sep 19 02:46:03 1996 *************** *** 1,3 **** --- 1,15 ---- + Wed Sep 18 07:33:11 1996 Lars Magne Ingebrigtsen + + * gnus.texi (Other Marks): Edited. + (The Manual): New. + (Contributors): Updated. + (Asynchronous Fetching): Addition. + (New Features): Split. + ((ding) Gnus): Renamed. + (September Gnus): New. + (Red Gnus): New, + (Undo): New. + Thu Sep 12 23:55:53 1996 Lars Magne Ingebrigtsen * gnus.texi (Archived Messages): Fix.