diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/ChangeLog dgnus/lisp/ChangeLog *** pub/dgnus/lisp/ChangeLog Sun Apr 16 00:38:38 1995 --- dgnus/lisp/ChangeLog Wed Apr 19 03:32:40 1995 *************** *** 1,8 **** --- 1,73 ---- + Wed Apr 19 03:28:37 1995 Lars Magne Ingebrigtsen + + * gnus.el: Major changes in server handling; new mode; and lots of + stuff all over in all files. + + * gnus.el: 0.51 is released. + + Mon Apr 17 08:38:57 1995 Lars Ingebrigtsen + + * gnus.el (gnus-clear-system): Kill nntp-server-buffer upon exit. + + * gnus.el: Added "*" to the beginning of the docs strings of all + user variables. + + Sun Apr 16 03:18:15 1995 Lars Ingebrigtsen + + * gnus.el (gnus-post-news): Yank before running + news-reply-header-hook. + (gnus-group-list-groups): Go to the right group after listing. + (gnus-summary-respool-article): Allow respooling from newsgroups. + (gnus-split-methods): New variable. + (gnus-read-save-file-name): New function. + (gnus-summary-save-in-rmail): Have all the saving functions use + this new function. + + * gnus-visual.el (gnus-summary-make-menu-bar): Menu change. + + * gnus.el (gnus-cancel-news): Don't ask experts. + (gnus-summary-mark-region-as-read): New command and keystroke. + + Sun Apr 16 20:45:38 1995 Lars Magne Ingebrigtsen + + * gnus.el (gnus-save-newsrc-file): Run save-newsrc-hook even if + the file is not saved. + (gnus-summary-insert-pseudos): Would interleave pseudos and real + articles. + (gnus-cancel-news): Generate a better error message. + + * nnmh.el (nnmh-request-list): Do not try to read unreadable + directories. + + * gnus.el (gnus-copy-sequence): Would choke on just a single cons + cell. + (gnus-inews-article): Would insert two \n's too many. + + Sat Apr 15 04:29:22 1995 Lars Ingebrigtsen + + * gnus.el (gnus-use-long-file-name): One quote symbol too many. + (gnus-article-x-face-command): New variable. + (gnus-article-display-x-face): New command and keystroke. + (gnus-newsgroup-active): New internal variable. + (gnus-update-read-articles): Use this variable to ensure that new + articles that have arrived while the summary buffer existed are + not inadvertantly marked as read. + (gnus-score-headers): Remove exluded score files from the list of + score file alists. Probably. + + * nntp.el (nntp-news-default-headers): New variable. + (nntp-request-post-buffer): Use it. + + * gnus.el (gnus-inews-insert-headers): Extended syntax of + gnus-required-headers. + Sun Apr 16 00:02:02 1995 Lars Magne Ingebrigtsen * gnus.el (gnus-summary-update-line): Don't mark ancient and read articles as low-scored. (gnus-inews-article): Would insert headers one line too early. + + * gnus.el: 0.50 is released. Sat Apr 15 22:16:26 1995 Lars Magne Ingebrigtsen diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-uu.el dgnus/lisp/gnus-uu.el *** pub/dgnus/lisp/gnus-uu.el Sun Apr 16 00:38:34 1995 --- dgnus/lisp/gnus-uu.el Mon Apr 17 11:47:37 1995 *************** *** 47,54 **** ("\\.\\(flc\\|fli\\|rle\\|iff\\|pfx\\|avi\\|sme\\|rpza\\|dl\\|qt\\|rsrc\\|mov\\)$" "xanim") ("\\.\\(tar\\|arj\\|zip\\|zoo\\|arc\\|gz\\|Z\\|lzh\\|ar\\|lha\\)$" "gnus-uu-archive")) ! ! "Default actions to be taken when the user asks to view a file. To change the behaviour, you can either edit this variable or set `gnus-uu-user-view-rules' to something useful. --- 47,53 ---- ("\\.\\(flc\\|fli\\|rle\\|iff\\|pfx\\|avi\\|sme\\|rpza\\|dl\\|qt\\|rsrc\\|mov\\)$" "xanim") ("\\.\\(tar\\|arj\\|zip\\|zoo\\|arc\\|gz\\|Z\\|lzh\\|ar\\|lha\\)$" "gnus-uu-archive")) ! "*Default actions to be taken when the user asks to view a file. To change the behaviour, you can either edit this variable or set `gnus-uu-user-view-rules' to something useful. *************** *** 78,90 **** match.") (defvar gnus-uu-user-view-rules nil ! "Variable detailing what actions are to be taken to view a file. See the documentation on the `gnus-uu-default-view-rules' variable for details.") (defvar gnus-uu-user-view-rules-end '(("" "file")) ! "Variable saying what actions are to be taken if no rule matched the file name. See the documentation on the `gnus-uu-default-view-rules' variable for details.") --- 77,89 ---- match.") (defvar gnus-uu-user-view-rules nil ! "*Variable detailing what actions are to be taken to view a file. See the documentation on the `gnus-uu-default-view-rules' variable for details.") (defvar gnus-uu-user-view-rules-end '(("" "file")) ! "*Variable saying what actions are to be taken if no rule matched the file name. See the documentation on the `gnus-uu-default-view-rules' variable for details.") *************** *** 105,111 **** (list "uncompress" "gunzip")) (defvar gnus-uu-user-archive-rules nil ! "A list that can be set to override the default archive unpacking commands. To use, for instance, 'untar' to unpack tar files and 'zip -x' to unpack zip files, say the following: (setq gnus-uu-user-archive-rules --- 104,110 ---- (list "uncompress" "gunzip")) (defvar gnus-uu-user-archive-rules nil ! "*A list that can be set to override the default archive unpacking commands. To use, for instance, 'untar' to unpack tar files and 'zip -x' to unpack zip files, say the following: (setq gnus-uu-user-archive-rules *************** *** 113,119 **** (\"\\\\.zip$\" \"zip -x\")))") (defvar gnus-uu-ignore-files-by-name nil ! "A regular expression saying what files should not be viewed based on name. If, for instance, you want gnus-uu to ignore all .au and .wav files, you could say something like --- 112,118 ---- (\"\\\\.zip$\" \"zip -x\")))") (defvar gnus-uu-ignore-files-by-name nil ! "*A regular expression saying what files should not be viewed based on name. If, for instance, you want gnus-uu to ignore all .au and .wav files, you could say something like *************** *** 123,129 **** `gnus-uu-ignore-files-by-type' variable.") (defvar gnus-uu-ignore-files-by-type nil ! "A regular expression saying what files that shouldn't be viewed, based on MIME file type. If, for instance, you want gnus-uu to ignore all audio files and all mpegs, you could say something like --- 122,128 ---- `gnus-uu-ignore-files-by-type' variable.") (defvar gnus-uu-ignore-files-by-type nil ! "*A regular expression saying what files that shouldn't be viewed, based on MIME file type. If, for instance, you want gnus-uu to ignore all audio files and all mpegs, you could say something like *************** *** 176,228 **** ;; Various variables users may set (defvar gnus-uu-tmp-dir "/tmp/" ! "Variable saying where gnus-uu is to do its work. Default is \"/tmp/\".") (defvar gnus-uu-do-not-unpack-archives nil ! "Non-nil means that gnus-uu won't peek inside archives looking for files to dispay. Default is nil.") (defvar gnus-uu-view-and-save nil ! "Non-nil means that the user will always be asked to save a file after viewing it. If the variable is nil, the suer will only be asked to save if the viewing is unsuccessful. Default is nil.") (defvar gnus-uu-ignore-default-view-rules nil ! "Non-nil means that gnus-uu will ignore the default viewing rules. Only the user viewing rules will be consulted. Default is nil.") (defvar gnus-uu-ignore-default-archive-rules nil ! "Non-nil means that gnus-uu will ignore the default archive unpacking commands. Only the user unpacking commands will be consulted. Default is nil.") (defvar gnus-uu-kill-carriage-return t ! "Non-nil means that gnus-uu will strip all carriage returns from articles. Default is t.") (defvar gnus-uu-view-with-metamail nil ! "Non-nil means that files will be viewed with metamail. The gnus-uu viewing functions will be ignored and gnus-uu will try to guess at a content-type based on file name suffixes. Default it nil.") (defvar gnus-uu-unmark-articles-not-decoded nil ! "Non-nil means that gnus-uu will mark articles that were unsuccessfully decoded as unread. Default is nil.") (defvar gnus-uu-correct-stripped-uucode nil ! "Non-nil means that gnus-uu will *try* to fix uuencoded files that have had traling spaces deleted. Default is nil.") (defvar gnus-uu-save-in-digest nil ! "Non-nil means that gnus-uu, when asked to save without decoding, will save in digests. If this variable is nil, gnus-uu will just save everything in a file without any embellishments. The digesting almost conforms to RFC1153 - no easy way to specify any meaningful volume and issue numbers were found, so I simply dropped them.") (defvar gnus-uu-save-separate-articles nil ! "Non-nil means that gnus-uu will save articles in separate files.") ;; Internal variables --- 175,227 ---- ;; Various variables users may set (defvar gnus-uu-tmp-dir "/tmp/" ! "*Variable saying where gnus-uu is to do its work. Default is \"/tmp/\".") (defvar gnus-uu-do-not-unpack-archives nil ! "*Non-nil means that gnus-uu won't peek inside archives looking for files to dispay. Default is nil.") (defvar gnus-uu-view-and-save nil ! "*Non-nil means that the user will always be asked to save a file after viewing it. If the variable is nil, the suer will only be asked to save if the viewing is unsuccessful. Default is nil.") (defvar gnus-uu-ignore-default-view-rules nil ! "*Non-nil means that gnus-uu will ignore the default viewing rules. Only the user viewing rules will be consulted. Default is nil.") (defvar gnus-uu-ignore-default-archive-rules nil ! "*Non-nil means that gnus-uu will ignore the default archive unpacking commands. Only the user unpacking commands will be consulted. Default is nil.") (defvar gnus-uu-kill-carriage-return t ! "*Non-nil means that gnus-uu will strip all carriage returns from articles. Default is t.") (defvar gnus-uu-view-with-metamail nil ! "*Non-nil means that files will be viewed with metamail. The gnus-uu viewing functions will be ignored and gnus-uu will try to guess at a content-type based on file name suffixes. Default it nil.") (defvar gnus-uu-unmark-articles-not-decoded nil ! "*Non-nil means that gnus-uu will mark articles that were unsuccessfully decoded as unread. Default is nil.") (defvar gnus-uu-correct-stripped-uucode nil ! "*Non-nil means that gnus-uu will *try* to fix uuencoded files that have had traling spaces deleted. Default is nil.") (defvar gnus-uu-save-in-digest nil ! "*Non-nil means that gnus-uu, when asked to save without decoding, will save in digests. If this variable is nil, gnus-uu will just save everything in a file without any embellishments. The digesting almost conforms to RFC1153 - no easy way to specify any meaningful volume and issue numbers were found, so I simply dropped them.") (defvar gnus-uu-save-separate-articles nil ! "*Non-nil means that gnus-uu will save articles in separate files.") ;; Internal variables diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-visual.el dgnus/lisp/gnus-visual.el *** pub/dgnus/lisp/gnus-visual.el Sun Apr 16 00:38:34 1995 --- dgnus/lisp/gnus-visual.el Mon Apr 17 11:47:39 1995 *************** *** 28,39 **** (require (if gnus-xemacs 'auc-menu 'easymenu)) (defvar gnus-summary-selected-face 'underline ! "Face used for highlighting the current article in the summary buffer.") (defvar gnus-visual-summary-highlight '(((> score default) . bold) ((< score default) . italic)) ! "Alist of `(FORM . FACE)'. Summary lines are highlighted with the FACE for the first FORM which evaluate to a non-nil value. --- 28,39 ---- (require (if gnus-xemacs 'auc-menu 'easymenu)) (defvar gnus-summary-selected-face 'underline ! "*Face used for highlighting the current article in the summary buffer.") (defvar gnus-visual-summary-highlight '(((> score default) . bold) ((< score default) . italic)) ! "*Alist of `(FORM . FACE)'. Summary lines are highlighted with the FACE for the first FORM which evaluate to a non-nil value. *************** *** 149,170 **** gnus-summary-mode-map "" '("Mark" ! ["Tick" gnus-summary-tick-article-forward t] ! ["Mark as read" gnus-summary-mark-as-read-forward t] ! ["Mark as unread" gnus-summary-clear-mark-forward t] ! ["Mark same subject and select" gnus-summary-kill-same-subject-and-select t] ! ["Mark same subject" gnus-summary-kill-same-subject t] ! ["Remove lines marked as read" gnus-summary-remove-lines-marked-as-read t] ! ["Remove lines marked with..." gnus-summary-remove-lines-marked-with t] ! ["Set expirable mark" gnus-summary-mark-as-expirable t] ! ["Set bookmark" gnus-summary-set-bookmark t] ! ["Remove bookmark" gnus-summary-remove-bookmark t] ! ["Catchup" gnus-summary-catchup t] ! ["Catchup all" gnus-summary-catchup-all t] ! ["Catchup to here" gnus-summary-catchup-to-here t] ! ["Raise score" gnus-summary-raise-score t] ! ["Lower score" gnus-summary-lower-score t] ! ["Set score" gnus-summary-set-score t] ("Process mark" ["Set mark" gnus-summary-mark-as-processable t] ["Remove mark" gnus-summary-unmark-as-processable t] --- 149,179 ---- gnus-summary-mode-map "" '("Mark" ! ("Read" ! ["Mark as read" gnus-summary-mark-as-read-forward t] ! ["Mark same subject and select" gnus-summary-kill-same-subject-and-select t] ! ["Mark same subject" gnus-summary-kill-same-subject t] ! ["Catchup" gnus-summary-catchup t] ! ["Catchup all" gnus-summary-catchup-all t] ! ["Catchup to here" gnus-summary-catchup-to-here t] ! ["Catchup region" gnus-summary-mark-region-as-read t]) ! ("Various" ! ["Tick" gnus-summary-tick-article-forward t] ! ["Mark as dormant" gnus-summary-mark-as-dormant t] ! ["Remove marks" gnus-summary-clear-mark-forward t] ! ["Set expirable mark" gnus-summary-mark-as-expirable t] ! ["Set bookmark" gnus-summary-set-bookmark t] ! ["Remove bookmark" gnus-summary-remove-bookmark t]) ! ("Score" ! ["Raise score" gnus-summary-raise-score t] ! ["Lower score" gnus-summary-lower-score t] ! ["Set score" gnus-summary-set-score t]) ! ("Display" ! ["Remove lines marked as read" gnus-summary-remove-lines-marked-as-read t] ! ["Remove lines marked with..." gnus-summary-remove-lines-marked-with t] ! ["Show dormant articles" gnus-summary-show-all-dormant t] ! ["Hide dormant articles" gnus-summary-hide-all-dormant t] ! ["Show expunged articles" gnus-summary-show-all-expunged t]) ("Process mark" ["Set mark" gnus-summary-mark-as-processable t] ["Remove mark" gnus-summary-unmark-as-processable t] *************** *** 208,213 **** --- 217,223 ---- ["Overstrike" gnus-article-treat-overstrike t] ["Word wrap" gnus-article-word-wrap t] ["CR" gnus-article-remove-cr t] + ["Show X-Face" gnus-article-display-x-face t] ["Quoted-Printable" gnus-article-de-quoted-unreadable t]) ("Extract" ["Uudecode" gnus-uu-decode-uu t] *************** *** 265,284 **** ["Sort by author" gnus-summary-sort-by-author t] ["Sort by subject" gnus-summary-sort-by-subject t] ["Sort by date" gnus-summary-sort-by-date t]) ["Fetch group FAQ" gnus-summary-fetch-faq t] ["Filter articles" gnus-summary-execute-command t] - ["Catchup and exit" gnus-summary-catchup-and-exit t] - ["Catchup and goto next" gnus-summary-catchup-and-goto-next-group t] ["Toggle line truncation" gnus-summary-toggle-truncation t] ["Expire expirable articles" gnus-summary-expire-articles t] - ["Show dormant articles" gnus-summary-show-all-dormant t] - ["Hide dormant articles" gnus-summary-hide-all-dormant t] - ["Show expunged articles" gnus-summary-show-all-expunged t] - ["Reselect group" gnus-summary-reselect-current-group t] - ["Rescan group" gnus-summary-rescan-group t] ["Describe group" gnus-summary-describe-group t] - ["Exit group" gnus-summary-exit t] - ["Exit group without updating" gnus-summary-quit t] ["Edit local kill file" gnus-summary-edit-local-kill t] ["Edit global kill file" gnus-summary-edit-global-kill t] )) --- 275,292 ---- ["Sort by author" gnus-summary-sort-by-author t] ["Sort by subject" gnus-summary-sort-by-subject t] ["Sort by date" gnus-summary-sort-by-date t]) + ("Exit" + ["Catchup and exit" gnus-summary-catchup-and-exit t] + ["Catchup and goto next" gnus-summary-catchup-and-goto-next-group t] + ["Exit group" gnus-summary-exit t] + ["Exit group without updating" gnus-summary-quit t] + ["Reselect group" gnus-summary-reselect-current-group t] + ["Rescan group" gnus-summary-rescan-group t]) ["Fetch group FAQ" gnus-summary-fetch-faq t] ["Filter articles" gnus-summary-execute-command t] ["Toggle line truncation" gnus-summary-toggle-truncation t] ["Expire expirable articles" gnus-summary-expire-articles t] ["Describe group" gnus-summary-describe-group t] ["Edit local kill file" gnus-summary-edit-local-kill t] ["Edit global kill file" gnus-summary-edit-global-kill t] )) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus.el dgnus/lisp/gnus.el *** pub/dgnus/lisp/gnus.el Sun Apr 16 00:38:36 1995 --- dgnus/lisp/gnus.el Wed Apr 19 03:35:42 1995 *************** *** 49,55 **** gnus-default-nntp-server) (system-name)) "nntp") ! "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. An optional third element can be included to specify a port number if nntp is used. --- 49,55 ---- gnus-default-nntp-server) (system-name)) "nntp") ! "*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. An optional third element can be included to specify a port number if nntp is used. *************** *** 67,73 **** ;; Added by Sudish Joseph . (defvar gnus-post-method nil ! "Preferred method for posting USENET news. If this variable is nil, Gnus will use the current method to decide which method to use when posting. If it is non-nil, it will override the current method. This method will not be used in mail groups and --- 67,73 ---- ;; Added by Sudish Joseph . (defvar gnus-post-method nil ! "*Preferred method for posting USENET news. If this variable is nil, Gnus will use the current method to decide which method to use when posting. If it is non-nil, it will override the current method. This method will not be used in mail groups and *************** *** 77,83 **** `gnus-select-method'.") (defvar gnus-refer-article-method nil ! "Preferred method for fetching an article by Message-ID. If you are reading news from the local spool (with nnspool), fetching articles by Message-ID is painfully slow. By setting this method to an nntp method, you might get acceptable results. --- 77,83 ---- `gnus-select-method'.") (defvar gnus-refer-article-method nil ! "*Preferred method for fetching an article by Message-ID. If you are reading news from the local spool (with nnspool), fetching articles by Message-ID is painfully slow. By setting this method to an nntp method, you might get acceptable results. *************** *** 86,92 **** in the documentation of `gnus-select-method'") (defvar gnus-secondary-select-methods nil ! "A list of secondary methods that will be used for reading news. This is a list where each element is a complete select methdod (see `gnus-select-method'). --- 86,92 ---- in the documentation of `gnus-select-method'") (defvar gnus-secondary-select-methods nil ! "*A list of secondary methods that will be used for reading news. This is a list where each element is a complete select methdod (see `gnus-select-method'). *************** *** 96,112 **** (setq gnus-secondary-select-methods '((nnml \"\"))") (defvar gnus-secondary-servers nil ! "List of NNTP servers that the user can choose between interactively. To make Gnus query you for a server, you have to give `gnus' a non-numeric prefix - `C-u M-x gnus', in short.") (defvar gnus-nntp-server nil ! "The name of the host running the NNTP server. This variable is semi-obsolete. Use the `gnus-select-method' variable instead.") (defvar gnus-nntp-service "nntp" ! "NNTP service name (\"nntp\" or 119). This is an obsolete variable, which is scarcely used. If you use an nntp server for your newsgroup and want to change the port number used to 899, you would say something along these lines: --- 96,112 ---- (setq gnus-secondary-select-methods '((nnml \"\"))") (defvar gnus-secondary-servers nil ! "*List of NNTP servers that the user can choose between interactively. To make Gnus query you for a server, you have to give `gnus' a non-numeric prefix - `C-u M-x gnus', in short.") (defvar gnus-nntp-server nil ! "*The name of the host running the NNTP server. This variable is semi-obsolete. Use the `gnus-select-method' variable instead.") (defvar gnus-nntp-service "nntp" ! "*NNTP service name (\"nntp\" or 119). This is an obsolete variable, which is scarcely used. If you use an nntp server for your newsgroup and want to change the port number used to 899, you would say something along these lines: *************** *** 114,129 **** (setq gnus-select-method '(nntp \"my.nntp.server\" 899))") (defvar gnus-startup-file "~/.newsrc" ! "Your `.newsrc' file. `.newsrc-SERVER' will be used instead if that exists.") (defvar gnus-signature-file "~/.signature" ! "Your signature file. If the variable is a string that doesn't correspond to a file, the string itself is inserted.") (defvar gnus-signature-function nil ! "A function that should return a signature file name. The function will be called with the name of the newsgroup being posted to. If the function returns a string that doesn't correspond to a file, the --- 114,129 ---- (setq gnus-select-method '(nntp \"my.nntp.server\" 899))") (defvar gnus-startup-file "~/.newsrc" ! "*Your `.newsrc' file. `.newsrc-SERVER' will be used instead if that exists.") (defvar gnus-signature-file "~/.signature" ! "*Your signature file. If the variable is a string that doesn't correspond to a file, the string itself is inserted.") (defvar gnus-signature-function nil ! "*A function that should return a signature file name. The function will be called with the name of the newsgroup being posted to. If the function returns a string that doesn't correspond to a file, the *************** *** 132,183 **** be used instead.") (defvar gnus-init-file "~/.gnus" ! "Your Gnus elisp startup file. If a file with the .el or .elc suffixes exist, it will be read instead.") (defvar gnus-group-faq-directory "/anonymous@rtfm.mit.edu:/pub/usenet-by-group/" ! "Directory where the group FAQs are stored. This will most commonly be on a remote machine, and the file will be fetched by ange-ftp.") (defvar gnus-group-archive-directory "/ftp@sina.tcamc.uh.edu:/pub/emacs/ding-list/" ! "The address of the (ding) archives.") (defvar gnus-default-subscribed-newsgroups nil ! "This variable lists what newsgroups should be susbcribed the first time Gnus is used. It should be a list of strings. If it is `t', Gnus will not do anything special the first time it is started; it'll just use the normal newsgroups subscription methods.") (defvar gnus-post-prepare-function nil ! "Function that is run after a post buffer has been prepared. It is called with the name of the newsgroup that is posted to. It might be used, for instance, for inserting signatures based on the newsgroup name. (In that case, `gnus-signature-file' and `mail-signature' should both be set to nil).") (defvar gnus-use-cross-reference t ! "Non-nil means that cross referenced articles will be marked as read. If nil, ignore cross references. If t, mark articles as read in subscribed newsgroups. If neither t nor nil, mark as read in all newsgroups.") (defvar gnus-use-dribble-file t ! "Non-nil means that Gnus will use a dribble file to store user updates. If Emacs should crash without saving the .newsrc files, complete information can be restored from the dribble file.") (defvar gnus-use-followup-to 'use ! "Specifies what to do with Followup-To header. If nil, ignore the header. If it is t, use its value, but ignore `poster'. If it is neither nil nor t, which is the default, always use the value.") (defvar gnus-followup-to-function nil ! "A variable that contains a function that returns a followup address. The function will be called in the buffer of the article that is being followed up. The buffer will be narrowed to the headers of the article. To pick header headers, one might use `mail-fetch-field'. The --- 132,183 ---- be used instead.") (defvar gnus-init-file "~/.gnus" ! "*Your Gnus elisp startup file. If a file with the .el or .elc suffixes exist, it will be read instead.") (defvar gnus-group-faq-directory "/anonymous@rtfm.mit.edu:/pub/usenet-by-group/" ! "*Directory where the group FAQs are stored. This will most commonly be on a remote machine, and the file will be fetched by ange-ftp.") (defvar gnus-group-archive-directory "/ftp@sina.tcamc.uh.edu:/pub/emacs/ding-list/" ! "*The address of the (ding) archives.") (defvar gnus-default-subscribed-newsgroups nil ! "*This variable lists what newsgroups should be subscribed the first time Gnus is used. It should be a list of strings. If it is `t', Gnus will not do anything special the first time it is started; it'll just use the normal newsgroups subscription methods.") (defvar gnus-post-prepare-function nil ! "*Function that is run after a post buffer has been prepared. It is called with the name of the newsgroup that is posted to. It might be used, for instance, for inserting signatures based on the newsgroup name. (In that case, `gnus-signature-file' and `mail-signature' should both be set to nil).") (defvar gnus-use-cross-reference t ! "*Non-nil means that cross referenced articles will be marked as read. If nil, ignore cross references. If t, mark articles as read in subscribed newsgroups. If neither t nor nil, mark as read in all newsgroups.") (defvar gnus-use-dribble-file t ! "*Non-nil means that Gnus will use a dribble file to store user updates. If Emacs should crash without saving the .newsrc files, complete information can be restored from the dribble file.") (defvar gnus-use-followup-to 'use ! "*Specifies what to do with Followup-To header. If nil, ignore the header. If it is t, use its value, but ignore `poster'. If it is neither nil nor t, which is the default, always use the value.") (defvar gnus-followup-to-function nil ! "*A variable that contains a function that returns a followup address. The function will be called in the buffer of the article that is being followed up. The buffer will be narrowed to the headers of the article. To pick header headers, one might use `mail-fetch-field'. The *************** *** 196,202 **** (mail-fetch-field \"from\"))))))") (defvar gnus-reply-to-function nil ! "A variable that contains a function that returns a reply address. See the `gnus-followup-to-function' variable for an explanation of how this variable is used. --- 196,202 ---- (mail-fetch-field \"from\"))))))") (defvar gnus-reply-to-function nil ! "*A variable that contains a function that returns a reply address. See the `gnus-followup-to-function' variable for an explanation of how this variable is used. *************** *** 207,222 **** value.") (defvar gnus-large-newsgroup 200 ! "The number of articles which indicates a large newsgroup. If the number of articles in a newsgroup is greater than this value, confirmation is required for selecting the newsgroup.") ;; Suggested by Andrew Eskilsson . (defvar gnus-no-groups-message "No news is horrible news" ! "Message displayed by Gnus when no groups are available.") (defvar gnus-author-copy (getenv "AUTHORCOPY") ! "Save outgoing articles in this file. Initialized from the AUTHORCOPY environment variable. If this variable begins with the character \"|\", outgoing articles --- 207,222 ---- value.") (defvar gnus-large-newsgroup 200 ! "*The number of articles which indicates a large newsgroup. If the number of articles in a newsgroup is greater than this value, confirmation is required for selecting the newsgroup.") ;; Suggested by Andrew Eskilsson . (defvar gnus-no-groups-message "No news is horrible news" ! "*Message displayed by Gnus when no groups are available.") (defvar gnus-author-copy (getenv "AUTHORCOPY") ! "*Save outgoing articles in this file. Initialized from the AUTHORCOPY environment variable. If this variable begins with the character \"|\", outgoing articles *************** *** 229,268 **** function specified by the `gnus-author-copy-saver' variable.") (defvar gnus-mail-self-blind nil ! "Non-nil means insert a BCC header in all outgoing articles. This will result in having a copy of the article mailed to yourself. The BCC header is inserted when the post buffer is initialized, so you can remove or alter the BCC header to override the default.") (defvar gnus-author-copy-saver (function rmail-output) ! "A function called to save outgoing articles. This function will be called with the same of the file to store the article in. The default function is `rmail-output' which saves in Unix mailbox format.") (defvar gnus-use-long-file-name (not (memq system-type '(usg-unix-v xenix))) ! "Non-nil means that the default name of a file to save articles in is the group name. If it's nil, the directory form of the group name is used instead. If this variable is a list, and the list contains the element ! `not-score', long file names will not be used for score files, if it contains the element `not-save', long file names will not be used for ! saving, and if it contains the element `not-kill', long file names will not be used for kill files.") (defvar gnus-article-save-directory (or (getenv "SAVEDIR") "~/News/") ! "Name of the directory articles will be saved in (default \"~/News\"). Initialized from the SAVEDIR environment variable.") (defvar gnus-kill-files-directory (or (getenv "SAVEDIR") "~/News/") ! "Name of the directory where kill files will be stored (default \"~/News\"). Initialized from the SAVEDIR environment variable.") (defvar gnus-score-expiry-days 7 "*Number of days before unused score file entries are expired.") (defvar gnus-default-article-saver (function gnus-summary-save-in-rmail) ! "A function to save articles in your favorite format. The function must be interactively callable (in other words, it must be an Emacs command). --- 229,268 ---- function specified by the `gnus-author-copy-saver' variable.") (defvar gnus-mail-self-blind nil ! "*Non-nil means insert a BCC header in all outgoing articles. This will result in having a copy of the article mailed to yourself. The BCC header is inserted when the post buffer is initialized, so you can remove or alter the BCC header to override the default.") (defvar gnus-author-copy-saver (function rmail-output) ! "*A function called to save outgoing articles. This function will be called with the same of the file to store the article in. The default function is `rmail-output' which saves in Unix mailbox format.") (defvar gnus-use-long-file-name (not (memq system-type '(usg-unix-v xenix))) ! "*Non-nil means that the default name of a file to save articles in is the group name. If it's nil, the directory form of the group name is used instead. If this variable is a list, and the list contains the element ! `not-score', long file names will not be used for score files; if it contains the element `not-save', long file names will not be used for ! saving; and if it contains the element `not-kill', long file names will not be used for kill files.") (defvar gnus-article-save-directory (or (getenv "SAVEDIR") "~/News/") ! "*Name of the directory articles will be saved in (default \"~/News\"). Initialized from the SAVEDIR environment variable.") (defvar gnus-kill-files-directory (or (getenv "SAVEDIR") "~/News/") ! "*Name of the directory where kill files will be stored (default \"~/News\"). Initialized from the SAVEDIR environment variable.") (defvar gnus-score-expiry-days 7 "*Number of days before unused score file entries are expired.") (defvar gnus-default-article-saver (function gnus-summary-save-in-rmail) ! "*A function to save articles in your favorite format. The function must be interactively callable (in other words, it must be an Emacs command). *************** *** 274,299 **** * gnus-summary-save-in-file (article format).") (defvar gnus-rmail-save-name (function gnus-plain-save-name) ! "A function generating a file name to save articles in Rmail format. The function is called with NEWSGROUP, HEADERS, and optional LAST-FILE.") (defvar gnus-mail-save-name (function gnus-plain-save-name) ! "A function generating a file name to save articles in Unix mail format. The function is called with NEWSGROUP, HEADERS, and optional LAST-FILE.") (defvar gnus-folder-save-name (function gnus-folder-save-name) ! "A function generating a file name to save articles in MH folder. The function is called with NEWSGROUP, HEADERS, and optional LAST-FOLDER.") (defvar gnus-file-save-name (function gnus-numeric-save-name) ! "A function generating a file name to save articles in article format. ! The function is called with NEWSGROUP, HEADERS, and optional LAST-FILE.") (defvar gnus-score-file-suffix "SCORE" ! "Suffix of the score files.") (defvar gnus-fetch-old-headers nil ! "Non-nil means that Gnus will try to build threads by grabbing old headers. If an unread article in the group refers to an older, already read (or just marked as read) article, the old article will not normally be displayed in the Summary buffer. If this variable is non-nil, Gnus --- 274,311 ---- * gnus-summary-save-in-file (article format).") (defvar gnus-rmail-save-name (function gnus-plain-save-name) ! "*A function generating a file name to save articles in Rmail format. The function is called with NEWSGROUP, HEADERS, and optional LAST-FILE.") (defvar gnus-mail-save-name (function gnus-plain-save-name) ! "*A function generating a file name to save articles in Unix mail format. The function is called with NEWSGROUP, HEADERS, and optional LAST-FILE.") (defvar gnus-folder-save-name (function gnus-folder-save-name) ! "*A function generating a file name to save articles in MH folder. The function is called with NEWSGROUP, HEADERS, and optional LAST-FOLDER.") (defvar gnus-file-save-name (function gnus-numeric-save-name) ! "*A function generating a file name to save articles in article format. ! The function is called with NEWSGROUP, HEADERS, and optional ! LAST-FILE.") ! ! (defvar gnus-split-methods nil ! "*Variable used to suggest where articles are to be saved. ! The syntax of this variable is the same as `nnmail-split-methods'. ! ! For instance, if you would like to save articles related to Gnus in ! the file \"gnus-stuff\", and articles related to VM in \"vm-stuff\", ! you could set this variable to something like: ! ! '(("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff") ! ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff"))") (defvar gnus-score-file-suffix "SCORE" ! "*Suffix of the score files.") (defvar gnus-fetch-old-headers nil ! "*Non-nil means that Gnus will try to build threads by grabbing old headers. If an unread article in the group refers to an older, already read (or just marked as read) article, the old article will not normally be displayed in the Summary buffer. If this variable is non-nil, Gnus *************** *** 319,325 **** And that means *anything*.") (defvar gnus-keep-same-level nil ! "Non-nil means that the next newsgroup after the current will be on the same level. When you type, for instance, `n' after reading the last article in the current newsgroup, you will go to the next newsgroup. If this variable is nil, the next newsgroup will be the next from the group --- 331,337 ---- And that means *anything*.") (defvar gnus-keep-same-level nil ! "*Non-nil means that the next newsgroup after the current will be on the same level. When you type, for instance, `n' after reading the last article in the current newsgroup, you will go to the next newsgroup. If this variable is nil, the next newsgroup will be the next from the group *************** *** 332,338 **** with the best level.") (defvar gnus-summary-make-false-root 'adopt ! "nil means that Gnus won't gather loose threads. If the root of a thread has expired or been read in a previous session, the information necessary to build a complete thread has been lost. Instead of having many small sub-threads from this original thread --- 344,350 ---- with the best level.") (defvar gnus-summary-make-false-root 'adopt ! "*nil means that Gnus won't gather loose threads. If the root of a thread has expired or been read in a previous session, the information necessary to build a complete thread has been lost. Instead of having many small sub-threads from this original thread *************** *** 367,381 **** ;; Added by Per Abrahamsen . (defvar gnus-summary-same-subject "" ! "String indicating that the current article has the same subject as the previous. This variable will only be used if the value of `gnus-summary-make-false-root' is `empty'.") (defvar gnus-summary-goto-unread nil ! "If non-nil, marking commands will go to the next unread article.") (defvar gnus-check-new-newsgroups t ! "Non-nil means that Gnus will add new newsgroups at startup. If this variable is `ask-server', Gnus will ask the server for new groups since the last time it checked. This means that the killed list is no longer necessary, so you could set `gnus-save-killed-list' to --- 379,393 ---- ;; Added by Per Abrahamsen . (defvar gnus-summary-same-subject "" ! "*String indicating that the current article has the same subject as the previous. This variable will only be used if the value of `gnus-summary-make-false-root' is `empty'.") (defvar gnus-summary-goto-unread nil ! "*If non-nil, marking commands will go to the next unread article.") (defvar gnus-check-new-newsgroups t ! "*Non-nil means that Gnus will add new newsgroups at startup. If this variable is `ask-server', Gnus will ask the server for new groups since the last time it checked. This means that the killed list is no longer necessary, so you could set `gnus-save-killed-list' to *************** *** 393,404 **** check for new newsgroups with \\\\[gnus-find-new-newsgroups].") (defvar gnus-check-bogus-newsgroups nil ! "Non-nil means that Gnus will check and remove bogus newsgroup at startup. If this variable is nil, then you have to tell Gnus explicitly to check for bogus newsgroups with \\\\[gnus-group-check-bogus-groups].") (defvar 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. --- 405,416 ---- check for new newsgroups with \\\\[gnus-find-new-newsgroups].") (defvar gnus-check-bogus-newsgroups nil ! "*Non-nil means that Gnus will check and remove bogus newsgroup at startup. If this variable is nil, then you have to tell Gnus explicitly to check for bogus newsgroups with \\\\[gnus-group-check-bogus-groups].") (defvar 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. *************** *** 408,414 **** properly with all servers.") (defvar gnus-activate-foreign-newsgroups nil ! "If nil, Gnus will not check foreign newsgroups at startup. If it is non-nil, it should be a number between one and nine. Foreign newsgroups that have a level lower or equal to this number will be activated on startup. For instance, if you want to active all --- 420,426 ---- properly with all servers.") (defvar gnus-activate-foreign-newsgroups nil ! "*If nil, Gnus will not check foreign newsgroups at startup. If it is non-nil, it should be a number between one and nine. Foreign newsgroups that have a level lower or equal to this number will be activated on startup. For instance, if you want to active all *************** *** 420,426 **** groups.") (defvar gnus-save-newsrc-file t ! "Non-nil means that Gnus will save the `.newsrc' file. Gnus always saves its own startup file, which is called \".newsrc.eld\". The file called \".newsrc\" is in a format that can be readily understood by other newsreaders. If you don't plan on --- 432,438 ---- groups.") (defvar gnus-save-newsrc-file t ! "*Non-nil means that Gnus will save the `.newsrc' file. Gnus always saves its own startup file, which is called \".newsrc.eld\". The file called \".newsrc\" is in a format that can be readily understood by other newsreaders. If you don't plan on *************** *** 428,434 **** exit.") (defvar gnus-save-killed-list t ! "If non-nil, save the list of killed groups to the startup file. This will save both time (when starting and quitting) and space (both memory and disk), but it will also mean that Gnus has no record of which groups are new and which are old, so the automatic new --- 440,446 ---- exit.") (defvar gnus-save-killed-list t ! "*If non-nil, save the list of killed groups to the startup file. This will save both time (when starting and quitting) and space (both memory and disk), but it will also mean that Gnus has no record of which groups are new and which are old, so the automatic new *************** *** 437,471 **** variable to nil.") (defvar gnus-interactive-catchup t ! "If non-nil, require your confirmation when catching up a group.") (defvar gnus-interactive-post t ! "If non-nil, group name will be asked for when posting.") (defvar gnus-interactive-exit t ! "If non-nil, require your confirmation when exiting Gnus.") (defvar gnus-kill-killed nil ! "If non-nil, Gnus will apply kill files to already killed articles. If it is nil, Gnus will never apply kill files to articles that have already been through the scoring process, which might very well save lots of time.") (defvar gnus-extract-address-components 'gnus-extract-address-components ! "Function for extracting address components from a From header. Two pre-defined function exist: `gnus-extract-address-components', which is the default, quite fast, and too simplistic solution, and `mail-extract-address-components', which works much better, but is slower.") (defvar gnus-score-interactive-default-score 1000 ! "Scoring commands will raise/lower the score with this number as the default.") (defvar gnus-save-score nil ! "If non-nil, save group scoring info.") (defvar gnus-global-score-files nil ! "List of global score files and directories. Set this variable if you want to use people's score files. One entry for each score file or each score file directory. Gnus will decide by itself what score files are applicable to which group. --- 449,483 ---- variable to nil.") (defvar gnus-interactive-catchup t ! "*If non-nil, require your confirmation when catching up a group.") (defvar gnus-interactive-post t ! "*If non-nil, group name will be asked for when posting.") (defvar gnus-interactive-exit t ! "*If non-nil, require your confirmation when exiting Gnus.") (defvar gnus-kill-killed nil ! "*If non-nil, Gnus will apply kill files to already killed articles. If it is nil, Gnus will never apply kill files to articles that have already been through the scoring process, which might very well save lots of time.") (defvar gnus-extract-address-components 'gnus-extract-address-components ! "*Function for extracting address components from a From header. Two pre-defined function exist: `gnus-extract-address-components', which is the default, quite fast, and too simplistic solution, and `mail-extract-address-components', which works much better, but is slower.") (defvar gnus-score-interactive-default-score 1000 ! "*Scoring commands will raise/lower the score with this number as the default.") (defvar gnus-save-score nil ! "*If non-nil, save group scoring info.") (defvar gnus-global-score-files nil ! "*List of global score files and directories. Set this variable if you want to use people's score files. One entry for each score file or each score file directory. Gnus will decide by itself what score files are applicable to which group. *************** *** 479,500 **** \"/ftp.some-where:/pub/score\"))") (defvar gnus-summary-default-score 0 ! "Default article score level. If this variable is nil, scoring will be disabled.") (defvar gnus-group-default-list-level 5 ! "Default listing level.") (defvar gnus-user-login-name nil ! "The login name of the user. Got from the function `user-login-name' if undefined.") (defvar gnus-user-full-name nil ! "The full name of the user. Got from the NAME environment variable if undefined.") (defvar gnus-user-from-line nil ! "Your full, complete e-mail address. Overrides the other Gnus variables if it is non-nil. Here are two example values of this variable: --- 491,512 ---- \"/ftp.some-where:/pub/score\"))") (defvar gnus-summary-default-score 0 ! "*Default article score level. If this variable is nil, scoring will be disabled.") (defvar gnus-group-default-list-level 5 ! "*Default listing level.") (defvar gnus-user-login-name nil ! "*The login name of the user. Got from the function `user-login-name' if undefined.") (defvar gnus-user-full-name nil ! "*The full name of the user. Got from the NAME environment variable if undefined.") (defvar gnus-user-from-line nil ! "*Your full, complete e-mail address. Overrides the other Gnus variables if it is non-nil. Here are two example values of this variable: *************** *** 514,541 **** `gnus-show-mime-method'.") (defvar gnus-show-mime-method (function metamail-buffer) ! "Function to process a MIME message. The function is called from the article buffer.") (defvar gnus-show-threads t "*If non-nil, display threads in summary mode.") (defvar gnus-thread-hide-subtree nil ! "If non-nil, hide all threads initially. If threads are hidden, you have to run the command `gnus-summary-show-thread' by hand or use `gnus-select-article-hook' to expose hidden threads.") (defvar gnus-thread-hide-killed t ! "If non-nil, hide killed threads automatically.") (defvar gnus-thread-ignore-subject nil ! "If non-nil, ignore subjects and do all threading based on the Reference header. If nil, which is the default, articles that have different subjects from their parents will start separate threads.") (defvar gnus-thread-indent-level 4 ! "Number that says how much each sub-thread should be indented.") ;; jwz: nuke newsgroups whose name is all digits - that means that ;; some loser has let articles get into the root of the news spool, --- 526,553 ---- `gnus-show-mime-method'.") (defvar gnus-show-mime-method (function metamail-buffer) ! "*Function to process a MIME message. The function is called from the article buffer.") (defvar gnus-show-threads t "*If non-nil, display threads in summary mode.") (defvar gnus-thread-hide-subtree nil ! "*If non-nil, hide all threads initially. If threads are hidden, you have to run the command `gnus-summary-show-thread' by hand or use `gnus-select-article-hook' to expose hidden threads.") (defvar gnus-thread-hide-killed t ! "*If non-nil, hide killed threads automatically.") (defvar gnus-thread-ignore-subject nil ! "*If non-nil, ignore subjects and do all threading based on the Reference header. If nil, which is the default, articles that have different subjects from their parents will start separate threads.") (defvar gnus-thread-indent-level 4 ! "*Number that says how much each sub-thread should be indented.") ;; jwz: nuke newsgroups whose name is all digits - that means that ;; some loser has let articles get into the root of the news spool, *************** *** 548,582 **** "[][\"#'() ;\\]" ; bogus characters ) "\\|")) ! "A regexp to match uninteresting newsgroups in the active file. Any lines in the active file matching this regular expression are removed from the newsgroup list before anything else is done to it, thus making them effectively non-existant.") (defvar gnus-ignored-headers "^Path:\\|^Posting-Version:\\|^Article-I.D.:\\|^Expires:\\|^Date-Received:\\|^References:\\|^Control:\\|^Xref:\\|^Lines:\\|^Posted:\\|^Relay-Version:\\|^Message-ID:\\|^Nf-ID:\\|^Nf-From:\\|^Approved:\\|^Sender:\\|^Received:\\|^Mail-from:" ! "All headers that match this regexp will be hidden. Also see `gnus-visible-headers'.") (defvar gnus-visible-headers "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:" ! "All headers that do not match this regexp will be hidden. Also see `gnus-ignored-headers'.") (defvar gnus-sorted-header-list '("^From:" "^Subject:" "^Summary:" "^Keywords:" "^Newsgroups:" "^To:" "^Cc:" "^Date:" "^Organization:") ! "This variable is a list of regular expressions. If it is non-nil, headers that match the regular expressions will be placed first in the article buffer in the sequence specified by this list.") (defvar gnus-required-headers '(From Date Newsgroups Subject Message-ID Organization Lines X-Newsreader) ! "Headers to be generated or prompted for when posting an article. ! RFC977 and RFC1036 require From, Date, Newsgroups, Subject, Message-ID ! and Path headers. Organization, Lines and X-Newsreader are optional. ! If you want Gnus not to insert some header, remove it from this ! list.") (defvar gnus-show-all-headers nil "*If non-nil, don't hide any headers.") --- 560,593 ---- "[][\"#'() ;\\]" ; bogus characters ) "\\|")) ! "*A regexp to match uninteresting newsgroups in the active file. Any lines in the active file matching this regular expression are removed from the newsgroup list before anything else is done to it, thus making them effectively non-existant.") (defvar gnus-ignored-headers "^Path:\\|^Posting-Version:\\|^Article-I.D.:\\|^Expires:\\|^Date-Received:\\|^References:\\|^Control:\\|^Xref:\\|^Lines:\\|^Posted:\\|^Relay-Version:\\|^Message-ID:\\|^Nf-ID:\\|^Nf-From:\\|^Approved:\\|^Sender:\\|^Received:\\|^Mail-from:" ! "*All headers that match this regexp will be hidden. Also see `gnus-visible-headers'.") (defvar gnus-visible-headers "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:" ! "*All headers that do not match this regexp will be hidden. Also see `gnus-ignored-headers'.") (defvar gnus-sorted-header-list '("^From:" "^Subject:" "^Summary:" "^Keywords:" "^Newsgroups:" "^To:" "^Cc:" "^Date:" "^Organization:") ! "*This variable is a list of regular expressions. If it is non-nil, headers that match the regular expressions will be placed first in the article buffer in the sequence specified by this list.") (defvar gnus-required-headers '(From Date Newsgroups Subject Message-ID Organization Lines X-Newsreader) ! "*Headers to be generated or prompted for when posting an article. ! RFC977 and RFC1036 require From, Date, Newsgroups, Subject, ! Message-ID. Organization, Lines and X-Newsreader are optional. If ! you want Gnus not to insert some header, remove it from this list.") (defvar gnus-show-all-headers nil "*If non-nil, don't hide any headers.") *************** *** 585,603 **** "*If non-nil, don't remove any headers before saving.") (defvar gnus-inhibit-startup-message nil ! "If non-nil, the startup message will not be displayed.") (defvar gnus-auto-extend-newsgroup t ! "If non-nil, extend newsgroup forward and backward when requested.") (defvar gnus-auto-select-first t ! "If non-nil, select the first unread article when entering a group. If you want to prevent automatic selection of the first unread article in some newsgroups, set the variable to nil in `gnus-select-group-hook'.") (defvar gnus-auto-select-next t ! "If non-nil, offer to go to the next group from the end of the previous. If the value is t and the next newsgroup is empty, Gnus will exit summary mode and go back to group mode. If the value is neither nil nor t, Gnus will select the following unread newsgroup. In --- 596,614 ---- "*If non-nil, don't remove any headers before saving.") (defvar gnus-inhibit-startup-message nil ! "*If non-nil, the startup message will not be displayed.") (defvar gnus-auto-extend-newsgroup t ! "*If non-nil, extend newsgroup forward and backward when requested.") (defvar gnus-auto-select-first t ! "*If non-nil, select the first unread article when entering a group. If you want to prevent automatic selection of the first unread article in some newsgroups, set the variable to nil in `gnus-select-group-hook'.") (defvar gnus-auto-select-next t ! "*If non-nil, offer to go to the next group from the end of the previous. If the value is t and the next newsgroup is empty, Gnus will exit summary mode and go back to group mode. If the value is neither nil nor t, Gnus will select the following unread newsgroup. In *************** *** 605,611 **** newsgroup will be selected without any confirmations.") (defvar gnus-auto-select-same nil ! "If non-nil, select the next article with the same subject.") (defvar gnus-auto-center-summary t "*If non-nil, always center the current summary buffer.") --- 616,622 ---- newsgroup will be selected without any confirmations.") (defvar gnus-auto-select-same nil ! "*If non-nil, select the next article with the same subject.") (defvar gnus-auto-center-summary t "*If non-nil, always center the current summary buffer.") *************** *** 621,627 **** ;; Added by Ethan Bradford . (defvar gnus-mail-courtesy-message ! "The following message is a courtesy copy of an article\nthat has been posted as well.\n\n" "This is inserted at the start of a mailed copy of a posted message. If this variable is nil, no such courtesy message will be added.") --- 632,638 ---- ;; Added by Ethan Bradford . (defvar gnus-mail-courtesy-message ! "*The following message is a courtesy copy of an article\nthat has been posted as well.\n\n" "This is inserted at the start of a mailed copy of a posted message. If this variable is nil, no such courtesy message will be added.") *************** *** 631,637 **** variable.") (defvar gnus-page-delimiter "^\^L" ! "Regexp describing what to use as article page delimiters. The default value is \"^\^L\", which is a form linefeed at the beginning of a line.") --- 642,648 ---- variable.") (defvar gnus-page-delimiter "^\^L" ! "*Regexp describing what to use as article page delimiters. The default value is \"^\^L\", which is a form linefeed at the beginning of a line.") *************** *** 642,648 **** '((summary (0 1 0)) (newsgroups (1 0 0)) (article (0 3 10))) ! "Specify window configurations for each action. The format of the variable is either a list of (ACTION (G S A)), where G, S, and A are the relative height of group, summary, and article windows, respectively, or a list of (ACTION FUNCTION), where FUNCTION --- 653,659 ---- '((summary (0 1 0)) (newsgroups (1 0 0)) (article (0 3 10))) ! "*Specify window configurations for each action. The format of the variable is either a list of (ACTION (G S A)), where G, S, and A are the relative height of group, summary, and article windows, respectively, or a list of (ACTION FUNCTION), where FUNCTION *************** *** 650,676 **** can be `summary', `newsgroups', or `article'.") (defvar gnus-mail-reply-method (function gnus-mail-reply-using-mail) ! "Function to compose a reply. Two pre-made functions are `gnus-mail-reply-using-mail' (sendmail) and `gnus-mail-reply-using-mhe' (MH-E).") (defvar gnus-mail-forward-method (function gnus-mail-forward-using-mail) ! "Function to forward the current message to another user. Two pre-made functions are `gnus-mail-forward-using-mail' (sendmail) and `gnus-mail-forward-using-mhe' (MH-E).") (defvar gnus-mail-other-window-method 'gnus-mail-other-window-using-mail ! "Function to compose mail in the other window. Two pre-made functions are `gnus-mail-other-window-using-mail' (sendmail) and `gnus-mail-other-window-using-mhe' (MH-E).") (defvar gnus-mail-send-method send-mail-function ! "Function to mail a message which is also being posted as an article. The message must have To or Cc header. The default is copied from the variable `send-mail-function'.") (defvar gnus-subscribe-newsgroup-method 'gnus-subscribe-zombies ! "Function called with a group name when new group is detected. A few pre-made functions are supplied: `gnus-subscribe-randomly' inserts new groups at the beginning of the list of groups; `gnus-subscribe-alphabetically' inserts new groups in strict --- 661,687 ---- can be `summary', `newsgroups', or `article'.") (defvar gnus-mail-reply-method (function gnus-mail-reply-using-mail) ! "*Function to compose a reply. Two pre-made functions are `gnus-mail-reply-using-mail' (sendmail) and `gnus-mail-reply-using-mhe' (MH-E).") (defvar gnus-mail-forward-method (function gnus-mail-forward-using-mail) ! "*Function to forward the current message to another user. Two pre-made functions are `gnus-mail-forward-using-mail' (sendmail) and `gnus-mail-forward-using-mhe' (MH-E).") (defvar gnus-mail-other-window-method 'gnus-mail-other-window-using-mail ! "*Function to compose mail in the other window. Two pre-made functions are `gnus-mail-other-window-using-mail' (sendmail) and `gnus-mail-other-window-using-mhe' (MH-E).") (defvar gnus-mail-send-method send-mail-function ! "*Function to mail a message which is also being posted as an article. The message must have To or Cc header. The default is copied from the variable `send-mail-function'.") (defvar gnus-subscribe-newsgroup-method 'gnus-subscribe-zombies ! "*Function called with a group name when new group is detected. A few pre-made functions are supplied: `gnus-subscribe-randomly' inserts new groups at the beginning of the list of groups; `gnus-subscribe-alphabetically' inserts new groups in strict *************** *** 682,688 **** ;; . (defvar gnus-subscribe-options-newsgroup-method (function gnus-subscribe-alphabetically) ! "This function is called to subscribe newsgroups mentioned on \"options -n\" lines. If, for instance, you want to subscribe to all newsgroups in the \"no\" and \"alt\" hierarchies, you'd put the following in your .newsrc file: --- 693,699 ---- ;; . (defvar gnus-subscribe-options-newsgroup-method (function gnus-subscribe-alphabetically) ! "*This function is called to subscribe newsgroups mentioned on \"options -n\" lines. If, for instance, you want to subscribe to all newsgroups in the \"no\" and \"alt\" hierarchies, you'd put the following in your .newsrc file: *************** *** 693,699 **** the subscription method in this variable.") (defvar gnus-subscribe-hierarchical-interactive nil ! "If non-nil, Gnus will offer to subscribe hierarchically. When a new hierarchy appears, Gnus will ask the user: 'alt.binaries': Do you want to subscribe to this hierarchy? ([d]ys): --- 704,710 ---- the subscription method in this variable.") (defvar gnus-subscribe-hierarchical-interactive nil ! "*If non-nil, Gnus will offer to subscribe hierarchically. When a new hierarchy appears, Gnus will ask the user: 'alt.binaries': Do you want to subscribe to this hierarchy? ([d]ys): *************** *** 703,709 **** hierarchy in its entirety.") (defvar gnus-group-sort-function 'gnus-group-sort-by-alphabet ! "Function used for sorting the group buffer. This function will be called with group info entries as the arguments for the groups to be sorted. Pre-made functions include `gnus-sort-by-alphabet', `gnus-sort-by-unread' and --- 714,720 ---- hierarchy in its entirety.") (defvar gnus-group-sort-function 'gnus-group-sort-by-alphabet ! "*Function used for sorting the group buffer. This function will be called with group info entries as the arguments for the groups to be sorted. Pre-made functions include `gnus-sort-by-alphabet', `gnus-sort-by-unread' and *************** *** 712,759 **** ;; Mark variables suggested by Thomas Michanek ;; . (defvar gnus-unread-mark ? ! "Mark used for unread articles.") (defvar gnus-ticked-mark ?! ! "Mark used for ticked articles.") (defvar gnus-dormant-mark ?? ! "Mark used for dormant articles.") (defvar gnus-dread-mark ?D ! "Mark used for read articles.") (defvar gnus-read-mark ?d ! "Mark used for read articles.") (defvar gnus-expirable-mark ?E ! "Mark used for expirable articles.") (defvar gnus-killed-mark ?K ! "Mark used for killed articles.") (defvar gnus-kill-file-mark ?X ! "Mark used for articles killed by kill files.") (defvar gnus-low-score-mark ?Y ! "Mark used for articles with a low score.") (defvar gnus-catchup-mark ?C ! "Mark used for articles that are caught up.") (defvar gnus-replied-mark ?R ! "Mark used for articles that have been replied to.") (defvar gnus-process-mark ?# ! "Process mark.") (defvar gnus-ancient-mark ?A ! "Mark used for ancient articles.") (defvar gnus-canceled-mark ?G ! "Mark used for cancelled articles.") (defvar gnus-score-over-mark ?+ ! "Score mark used for articles with high scores.") (defvar gnus-score-below-mark ?- ! "Score mark used for articles with low scores.") (defvar gnus-view-pseudo-asynchronously nil "*If non-nil, Gnus will view pseudo-articles asynchronously.") (defvar gnus-view-pseudos nil ! "If `automatic', pseudo-articles will be viewed automatically. If `not-confirm', pseudos will be viewed automatically, and the user will not be asked to confirm the command.") (defvar gnus-group-line-format "%M%S%5y: %(%g%)\n" ! "Format of groups lines. It works along the same lines as a normal formatting string, with some simple extensions. --- 723,770 ---- ;; Mark variables suggested by Thomas Michanek ;; . (defvar gnus-unread-mark ? ! "*Mark used for unread articles.") (defvar gnus-ticked-mark ?! ! "*Mark used for ticked articles.") (defvar gnus-dormant-mark ?? ! "*Mark used for dormant articles.") (defvar gnus-dread-mark ?D ! "*Mark used for read articles.") (defvar gnus-read-mark ?d ! "*Mark used for read articles.") (defvar gnus-expirable-mark ?E ! "*Mark used for expirable articles.") (defvar gnus-killed-mark ?K ! "*Mark used for killed articles.") (defvar gnus-kill-file-mark ?X ! "*Mark used for articles killed by kill files.") (defvar gnus-low-score-mark ?Y ! "*Mark used for articles with a low score.") (defvar gnus-catchup-mark ?C ! "*Mark used for articles that are caught up.") (defvar gnus-replied-mark ?R ! "*Mark used for articles that have been replied to.") (defvar gnus-process-mark ?# ! "*Process mark.") (defvar gnus-ancient-mark ?A ! "*Mark used for ancient articles.") (defvar gnus-canceled-mark ?G ! "*Mark used for cancelled articles.") (defvar gnus-score-over-mark ?+ ! "*Score mark used for articles with high scores.") (defvar gnus-score-below-mark ?- ! "*Score mark used for articles with low scores.") (defvar gnus-view-pseudo-asynchronously nil "*If non-nil, Gnus will view pseudo-articles asynchronously.") (defvar gnus-view-pseudos nil ! "*If `automatic', pseudo-articles will be viewed automatically. If `not-confirm', pseudos will be viewed automatically, and the user will not be asked to confirm the command.") (defvar gnus-group-line-format "%M%S%5y: %(%g%)\n" ! "*Format of group lines. It works along the same lines as a normal formatting string, with some simple extensions. *************** *** 798,804 **** effect.") (defvar gnus-summary-line-format "%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n" ! "The format specification of the lines in the summary buffer. It works along the same lines as a normal formatting string, with some simple extensions. --- 809,815 ---- effect.") (defvar gnus-summary-line-format "%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n" ! "*The format specification of the lines in the summary buffer. It works along the same lines as a normal formatting string, with some simple extensions. *************** *** 846,873 **** This restriction may disappear in later versions of Gnus.") (defvar gnus-summary-dummy-line-format "* : : %S\n" ! "The format specification for the dummy roots in the summary buffer. It works along the same lines as a normal formatting string, with some simple extensions. %S The subject") (defvar gnus-summary-mode-line-format "(ding) %G/%A %Z" ! "The format specification for the summary mode line.") (defvar gnus-article-mode-line-format "(ding) %G/%A %S" ! "The format specification for the article mode line.") (defvar gnus-group-mode-line-format "(ding) List of groups {%M:%S} " ! "The format specification for the group mode line.") (defvar gnus-valid-select-methods '(("nntp" post address prompt-address) ! ("nnspool" post) ("nnvirtual" none virtual prompt-address) ! ("nnmbox" mail respool) ("nnml" mail respool) ! ("nnmh" mail respool) ("nndir" none prompt-address) ("nndigest" none) ! ("nndoc" none prompt-address) ("nnbabyl" mail respool) ! ("nnkiboze" none virtual) ("nnfolder" mail respool)) "An alist of valid select methods. The first element of each list lists should be a string with the name of the select method. The other elements may be be the category of --- 857,890 ---- This restriction may disappear in later versions of Gnus.") (defvar gnus-summary-dummy-line-format "* : : %S\n" ! "*The format specification for the dummy roots in the summary buffer. It works along the same lines as a normal formatting string, with some simple extensions. %S The subject") (defvar gnus-summary-mode-line-format "(ding) %G/%A %Z" ! "*The format specification for the summary mode line.") (defvar gnus-article-mode-line-format "(ding) %G/%A %S" ! "*The format specification for the article mode line.") (defvar gnus-group-mode-line-format "(ding) List of groups {%M:%S} " ! "*The format specification for the group mode line.") (defvar gnus-valid-select-methods '(("nntp" post address prompt-address) ! ("nnspool" post) ! ("nnvirtual" none virtual prompt-address address) ! ("nnmbox" mail respool) ! ("nnml" mail respool) ! ("nnmh" mail respool) ! ("nndir" none prompt-address address) ! ("nndigest" none) ! ("nndoc" none prompt-address) ! ("nnbabyl" mail respool) ! ("nnkiboze" none virtual) ! ("nnfolder" mail respool)) "An alist of valid select methods. The first element of each list lists should be a string with the name of the select method. The other elements may be be the category of *************** *** 877,883 **** this variable. I think.") (defvar gnus-updated-mode-lines '(group article summary) ! "List of buffers that should update their mode lines. The list may contain the symbols `group', `article' and `summary'. If the corresponding symbol is present, Gnus will keep that mode line updated with information that may be pertinent. --- 894,900 ---- this variable. I think.") (defvar gnus-updated-mode-lines '(group article summary) ! "*List of buffers that should update their mode lines. The list may contain the symbols `group', `article' and `summary'. If the corresponding symbol is present, Gnus will keep that mode line updated with information that may be pertinent. *************** *** 885,907 **** ;; Added by Keinonen Kari . (defvar gnus-mode-non-string-length 21 ! "Max length of mode-line non-string contents buffer contents.") ;; Added by Per Abrahamsen . (defvar gnus-mouse-face 'highlight ! "Face used for mouse highlighting in Gnus. No mouse highlights will be done if `gnus-visual' is nil.") (defvar gnus-summary-mark-below nil ! "Mark all articles with a score below this variable as read. This variable is local to each summary buffer and usually set by the score file.") (defvar gnus-orphan-score nil ! "All orphans get this score added. Set in the score file.") (defvar gnus-thread-sort-functions '(gnus-thread-sort-by-number) ! "List of functions used for sorting threads in the summary buffer. By default, threads are sorted by article number. Each function takes two threads and return non-nil if the first thread --- 902,924 ---- ;; Added by Keinonen Kari . (defvar gnus-mode-non-string-length 21 ! "*Max length of mode-line non-string contents buffer contents.") ;; Added by Per Abrahamsen . (defvar gnus-mouse-face 'highlight ! "*Face used for mouse highlighting in Gnus. No mouse highlights will be done if `gnus-visual' is nil.") (defvar gnus-summary-mark-below nil ! "*Mark all articles with a score below this variable as read. This variable is local to each summary buffer and usually set by the score file.") (defvar gnus-orphan-score nil ! "*All orphans get this score added. Set in the score file.") (defvar gnus-thread-sort-functions '(gnus-thread-sort-by-number) ! "*List of functions used for sorting threads in the summary buffer. By default, threads are sorted by article number. Each function takes two threads and return non-nil if the first thread *************** *** 917,923 **** entering the newsgroup.") (defvar gnus-thread-score-function '+ ! "Function used for calculating the total score of a thread. The function is called with the scores of the article and each subthread and should then return the score of the thread. --- 934,940 ---- entering the newsgroup.") (defvar gnus-thread-score-function '+ ! "*Function used for calculating the total score of a thread. The function is called with the scores of the article and each subthread and should then return the score of the thread. *************** *** 925,931 **** Some functions you can use are `+', `max', or `min'.") (defvar gnus-score-find-score-files-function 'gnus-score-find-bnews ! "Function used to find SCORE files. The function will be called with the group name as the argument, and should return a list of score files to apply to that group. The score files do not actually have to exist. --- 942,948 ---- Some functions you can use are `+', `max', or `min'.") (defvar gnus-score-find-score-files-function 'gnus-score-find-bnews ! "*Function used to find SCORE files. The function will be called with the group name as the argument, and should return a list of score files to apply to that group. The score files do not actually have to exist. *************** *** 939,986 **** See the documentation to these functions for more information. This variable can also be a list of functions to be called. Each ! function should either return a list of score files, or the functions ! may also return lists of score alists.") (defvar gnus-options-subscribe nil ! "All new groups matching this regexp will be subscribed unconditionally. Note that this variable deals only with new newsgroups. This variable does not affect old newsgroups.") (defvar gnus-options-not-subscribe nil ! "All new groups matching this regexp will be ignored. Note that this variable deals only with new newsgroups. This variable does not affect old (already subscribed) newsgroups.") (defvar gnus-auto-expirable-newsgroups nil ! "Groups in which to automatically mark read articles as expirable. If non-nil, this should be a regexp that should match all groups in ! which to perform auto-expiry. This only makes sense for mail groups.") ;; Hooks. (defvar gnus-group-mode-hook nil ! "A hook for Gnus group mode.") (defvar gnus-summary-mode-hook nil ! "A hook for Gnus summary mode.") (defvar gnus-article-mode-hook nil ! "A hook for Gnus article mode.") (defvar gnus-open-server-hook nil ! "A hook called just before opening connection to the news server.") (defvar gnus-startup-hook nil ! "A hook called at startup. This hook is called after Gnus is connected to the NNTP server.") (defvar gnus-get-new-news-hook nil ! "A hook run just before Gnus checks for new news.") (defvar gnus-group-prepare-function 'gnus-group-prepare-flat ! "A function that is called to generate the group buffer. The function is called with three arguments: The first is a number; all group with a level less or equal to that number should be listed, if the second is non-nil, empty groups should also be displayed. If --- 956,1003 ---- See the documentation to these functions for more information. This variable can also be a list of functions to be called. Each ! function should either return a list of score files, or a list of ! score alists.") (defvar gnus-options-subscribe nil ! "*All new groups matching this regexp will be subscribed unconditionally. Note that this variable deals only with new newsgroups. This variable does not affect old newsgroups.") (defvar gnus-options-not-subscribe nil ! "*All new groups matching this regexp will be ignored. Note that this variable deals only with new newsgroups. This variable does not affect old (already subscribed) newsgroups.") (defvar gnus-auto-expirable-newsgroups nil ! "*Groups in which to automatically mark read articles as expirable. If non-nil, this should be a regexp that should match all groups in ! which to perform auto-expiry. This only makes sense for mail groups.") ;; Hooks. (defvar gnus-group-mode-hook nil ! "*A hook for Gnus group mode.") (defvar gnus-summary-mode-hook nil ! "*A hook for Gnus summary mode.") (defvar gnus-article-mode-hook nil ! "*A hook for Gnus article mode.") (defvar gnus-open-server-hook nil ! "*A hook called just before opening connection to the news server.") (defvar gnus-startup-hook nil ! "*A hook called at startup. This hook is called after Gnus is connected to the NNTP server.") (defvar gnus-get-new-news-hook nil ! "*A hook run just before Gnus checks for new news.") (defvar gnus-group-prepare-function 'gnus-group-prepare-flat ! "*A function that is called to generate the group buffer. The function is called with three arguments: The first is a number; all group with a level less or equal to that number should be listed, if the second is non-nil, empty groups should also be displayed. If *************** *** 990,1008 **** The only current function implemented is `gnus-group-prepare-flat'.") (defvar gnus-group-prepare-hook nil ! "A hook called after the group buffer has been generated. If you want to modify the group buffer, you can use this hook.") (defvar gnus-summary-prepare-hook nil ! "A hook called after the summary buffer has been generated. If you want to modify the summary buffer, you can use this hook.") (defvar gnus-article-prepare-hook nil ! "A hook called after an article has been prepared in the article buffer. If you want to run a special decoding program like nkf, use this hook.") (defvar gnus-article-display-hook nil ! "A hook called after the article is displayed in the article buffer. The hook is designed to change the contents of the article buffer. Typical functions that this hook may contain are `gnus-article-hide-headers' (hide selected headers), --- 1007,1025 ---- The only current function implemented is `gnus-group-prepare-flat'.") (defvar gnus-group-prepare-hook nil ! "*A hook called after the group buffer has been generated. If you want to modify the group buffer, you can use this hook.") (defvar gnus-summary-prepare-hook nil ! "*A hook called after the summary buffer has been generated. If you want to modify the summary buffer, you can use this hook.") (defvar gnus-article-prepare-hook nil ! "*A hook called after an article has been prepared in the article buffer. If you want to run a special decoding program like nkf, use this hook.") (defvar gnus-article-display-hook nil ! "*A hook called after the article is displayed in the article buffer. The hook is designed to change the contents of the article buffer. Typical functions that this hook may contain are `gnus-article-hide-headers' (hide selected headers), *************** *** 1011,1018 **** (add-hook 'gnus-article-display-hook 'gnus-article-hide-headers-if-wanted) (add-hook 'gnus-article-display-hook 'gnus-article-treat-overstrike) (defvar gnus-select-group-hook nil ! "A hook called when a newsgroup is selected. If you'd like to simplify subjects like the `gnus-summary-next-same-subject' command does, you can use the --- 1028,1040 ---- (add-hook 'gnus-article-display-hook 'gnus-article-hide-headers-if-wanted) (add-hook 'gnus-article-display-hook 'gnus-article-treat-overstrike) + (defconst gnus-article-x-face-command "uncompface | ikon2xbm | xv -" + "String or function to be executed to display an X-Face header. + If it is a string, the command will be executed in a sub-shell + asynchronously. The compressed face will be piped to this command.") + (defvar gnus-select-group-hook nil ! "*A hook called when a newsgroup is selected. If you'd like to simplify subjects like the `gnus-summary-next-same-subject' command does, you can use the *************** *** 1030,1041 **** (defvar gnus-select-article-hook '(gnus-summary-show-thread) ! "A hook called when an article is selected. The default hook shows conversation thread subtrees of the selected article automatically using `gnus-summary-show-thread'.") (defvar gnus-apply-kill-hook '(gnus-apply-kill-file) ! "A hook called to apply kill files to a group. This hook is intended to apply a kill file to the selected newsgroup. The function `gnus-apply-kill-file' is called by default. --- 1052,1063 ---- (defvar gnus-select-article-hook '(gnus-summary-show-thread) ! "*A hook called when an article is selected. The default hook shows conversation thread subtrees of the selected article automatically using `gnus-summary-show-thread'.") (defvar gnus-apply-kill-hook '(gnus-apply-kill-file) ! "*A hook called to apply kill files to a group. This hook is intended to apply a kill file to the selected newsgroup. The function `gnus-apply-kill-file' is called by default. *************** *** 1054,1093 **** (defvar gnus-visual-mark-article-hook (list 'gnus-visual-highlight-selected-summary) ! "Hook run after selecting an article in the summary buffer. It is meant to be used for highlighting the article in some way. It is not run if `gnus-visual' is nil.") (defvar gnus-prepare-article-hook (list 'gnus-inews-insert-signature) ! "A hook called after preparing body, but before preparing header headers. The default hook (`gnus-inews-insert-signature') inserts a signature file specified by the variable `gnus-signature-file'.") (defvar gnus-inews-article-hook (list 'gnus-inews-do-fcc) ! "A hook called before finally posting an article. The default hook (`gnus-inews-do-fcc') does FCC processing (ie. saves the article to a file).") (defvar gnus-inews-article-header-hook nil ! "A hook called after inserting the headers in an article to be posted. The hook is called from the *post-news* buffer, narrowed to the headers.") (defvar gnus-exit-group-hook nil ! "A hook called when exiting (not quitting) summary mode.") (defvar gnus-suspend-gnus-hook nil ! "A hook called when suspending (not exiting) Gnus.") (defvar gnus-exit-gnus-hook nil ! "A hook called when exiting Gnus.") (defvar gnus-save-newsrc-hook nil ! "A hook called when saving the newsrc file.") (defvar gnus-visual-summary-update-hook (list 'gnus-visual-summary-highlight-line) ! "A hook called when a summary line is changed. The hook will not be called if `gnus-visual' is nil. The default function `gnus-visual-summary-highlight-line' will --- 1076,1115 ---- (defvar gnus-visual-mark-article-hook (list 'gnus-visual-highlight-selected-summary) ! "*Hook run after selecting an article in the summary buffer. It is meant to be used for highlighting the article in some way. It is not run if `gnus-visual' is nil.") (defvar gnus-prepare-article-hook (list 'gnus-inews-insert-signature) ! "*A hook called after preparing body, but before preparing header headers. The default hook (`gnus-inews-insert-signature') inserts a signature file specified by the variable `gnus-signature-file'.") (defvar gnus-inews-article-hook (list 'gnus-inews-do-fcc) ! "*A hook called before finally posting an article. The default hook (`gnus-inews-do-fcc') does FCC processing (ie. saves the article to a file).") (defvar gnus-inews-article-header-hook nil ! "*A hook called after inserting the headers in an article to be posted. The hook is called from the *post-news* buffer, narrowed to the headers.") (defvar gnus-exit-group-hook nil ! "*A hook called when exiting (not quitting) summary mode.") (defvar gnus-suspend-gnus-hook nil ! "*A hook called when suspending (not exiting) Gnus.") (defvar gnus-exit-gnus-hook nil ! "*A hook called when exiting Gnus.") (defvar gnus-save-newsrc-hook nil ! "*A hook called when saving the newsrc file.") (defvar gnus-visual-summary-update-hook (list 'gnus-visual-summary-highlight-line) ! "*A hook called when a summary line is changed. The hook will not be called if `gnus-visual' is nil. The default function `gnus-visual-summary-highlight-line' will *************** *** 1095,1101 **** variable.") (defvar gnus-mark-article-hook (list 'gnus-summary-mark-unread-as-read) ! "A hook called when an article is selected for the first time. The hook is intended to mark an article as read (or unread) automatically when it is selected.") --- 1117,1123 ---- variable.") (defvar gnus-mark-article-hook (list 'gnus-summary-mark-unread-as-read) ! "*A hook called when an article is selected for the first time. The hook is intended to mark an article as read (or unread) automatically when it is selected.") *************** *** 1103,1109 **** ;; paths.el. (defvar gnus-default-nntp-server nil ! "Specify a default NNTP server. This variable should be defined in paths.el, and should never be set by the user. If you want to change servers, you should use `gnus-select-method'. --- 1125,1131 ---- ;; paths.el. (defvar gnus-default-nntp-server nil ! "*Specify a default NNTP server. This variable should be defined in paths.el, and should never be set by the user. If you want to change servers, you should use `gnus-select-method'. *************** *** 1115,1127 **** Should be set in paths.el, and shouldn't be touched by the user.") (defvar gnus-local-domain nil ! "Local domain name without a host name. The DOMAINNAME environment variable is used instead if it is defined. If the `system-name' function returns the full Internet name, there is no need to set this variable.") (defvar gnus-local-organization nil ! "String with a description of what organization (if any) the user belongs to. The ORGANIZATION environment variable is used instead if it is defined. If this variable contains a function, this function will be called with the current newsgroup name as the argument. The function should --- 1137,1149 ---- Should be set in paths.el, and shouldn't be touched by the user.") (defvar gnus-local-domain nil ! "*Local domain name without a host name. The DOMAINNAME environment variable is used instead if it is defined. If the `system-name' function returns the full Internet name, there is no need to set this variable.") (defvar gnus-local-organization nil ! "*String with a description of what organization (if any) the user belongs to. The ORGANIZATION environment variable is used instead if it is defined. If this variable contains a function, this function will be called with the current newsgroup name as the argument. The function should *************** *** 1131,1143 **** this file will be used as the organization.") (defvar gnus-use-generic-from nil ! "If nil, the full host name will be the system name prepended to the domain name. If this is a string, the full host name will be this string. If this is non-nil, non-string, the domain name will be used as the full host name.") (defvar gnus-use-generic-path nil ! "If nil, use the NNTP server name in the Path header. If stringp, use this; if non-nil, use no host name (user name only).") --- 1153,1165 ---- this file will be used as the organization.") (defvar gnus-use-generic-from nil ! "*If nil, the full host name will be the system name prepended to the domain name. If this is a string, the full host name will be this string. If this is non-nil, non-string, the domain name will be used as the full host name.") (defvar gnus-use-generic-path nil ! "*If nil, use the NNTP server name in the Path header. If stringp, use this; if non-nil, use no host name (user name only).") *************** *** 1178,1183 **** --- 1200,1206 ---- (defvar gnus-score-cache nil) (defvar gnus-scores-articles nil) + (defvar gnus-scores-exclude-files nil) (defvar gnus-header-index nil) (defvar gnus-score-index nil) *************** *** 1264,1270 **** (defconst gnus-maintainer "Lars Magne Ingebrigtsen " "The mail address of the Gnus maintainer.") ! (defconst gnus-version "(ding) Gnus v0.50" "Version number for this version of Gnus.") (defvar gnus-info-nodes --- 1287,1293 ---- (defconst gnus-maintainer "Lars Magne Ingebrigtsen " "The mail address of the Gnus maintainer.") ! (defconst gnus-version "(ding) Gnus v0.51" "Version number for this version of Gnus.") (defvar gnus-info-nodes *************** *** 1279,1292 **** (defvar gnus-group-buffer "*Group*") (defvar gnus-summary-buffer "*Summary*") (defvar gnus-article-buffer "*Article*") (defvar gnus-buffer-list nil "Gnus buffers that should be killed on exit.") (defvar gnus-variable-list '(gnus-newsrc-options gnus-newsrc-options-n ! gnus-newsrc-last-checked-date ! gnus-newsrc-assoc gnus-killed-list gnus-zombie-list) "Gnus variables saved in the quick startup file.") (defvar gnus-overload-functions --- 1302,1320 ---- (defvar gnus-group-buffer "*Group*") (defvar gnus-summary-buffer "*Summary*") (defvar gnus-article-buffer "*Article*") + (defvar gnus-server-buffer "*Server*") (defvar gnus-buffer-list nil "Gnus buffers that should be killed on exit.") + (defvar gnus-server-alist nil + "List of available servers.") + (defvar gnus-variable-list '(gnus-newsrc-options gnus-newsrc-options-n ! gnus-newsrc-last-checked-date ! gnus-newsrc-assoc gnus-server-alist ! gnus-killed-list gnus-zombie-list) "Gnus variables saved in the quick startup file.") (defvar gnus-overload-functions *************** *** 1356,1361 **** --- 1384,1390 ---- (defvar gnus-newsgroup-last-folder nil) (defvar gnus-newsgroup-last-file nil) (defvar gnus-newsgroup-auto-expire nil) + (defvar gnus-newsgroup-active nil) (defvar gnus-newsgroup-unreads nil "List of unread articles in the current newsgroup.") *************** *** 1439,1445 **** gnus-newsgroup-dependencies gnus-newsgroup-selected-overlay gnus-newsgroup-scored gnus-newsgroup-kill-headers gnus-score-alist gnus-current-score-file gnus-summary-expunge-below ! gnus-summary-mark-below gnus-newsgroup-history gnus-newsgroup-ancient) "Variables that are buffer-local to the summary buffers.") --- 1468,1474 ---- gnus-newsgroup-dependencies gnus-newsgroup-selected-overlay gnus-newsgroup-scored gnus-newsgroup-kill-headers gnus-score-alist gnus-current-score-file gnus-summary-expunge-below ! gnus-summary-mark-below gnus-newsgroup-active gnus-scores-exclude-files gnus-newsgroup-history gnus-newsgroup-ancient) "Variables that are buffer-local to the summary buffers.") *************** *** 1459,1464 **** --- 1488,1494 ---- (autoload 'mail-position-on-field "sendmail") (autoload 'mail-setup "sendmail") (autoload 'news-mail-other-window "rnewspost") + (autoload 'news-reply-yank-original "rnewspost") (autoload 'gnus-mail-reply-using-mhe "gnus-mh") (autoload 'gnus-mail-forward-using-mhe "gnus-mh") *************** *** 2087,2092 **** --- 2117,2123 ---- gnus-newsgroup-headers-hashtb-by-number nil gnus-newsgroup-name nil gnus-internal-global-score-files nil + gnus-server-alist nil gnus-current-select-method nil) ;; Kill the startup file. (and gnus-current-startup-file *************** *** 2096,2101 **** --- 2127,2134 ---- ;; Kill global KILL file buffer. (if (get-file-buffer (gnus-newsgroup-kill-file nil)) (kill-buffer (get-file-buffer (gnus-newsgroup-kill-file nil)))) + (and (buffer-name nntp-server-buffer) + (kill-buffer nntp-server-buffer)) ;; Kill Gnus buffers. (while gnus-buffer-list (if (and (get-buffer (car gnus-buffer-list)) *************** *** 2370,2378 **** ;; Check whether to use long file names. (defun gnus-use-long-file-name (symbol) (and gnus-use-long-file-name (or (not (listp gnus-use-long-file-name)) ! (not (memq 'symbol gnus-use-long-file-name))))) ;; List and range functions --- 2403,2415 ---- ;; Check whether to use long file names. (defun gnus-use-long-file-name (symbol) + ;; The variable has to be set... (and gnus-use-long-file-name + ;; If it isn't a list, then we return t. (or (not (listp gnus-use-long-file-name)) ! ;; If it is a list, and the list contains `symbol', we ! ;; return nil. ! (not (memq symbol gnus-use-long-file-name))))) ;; List and range functions *************** *** 2384,2395 **** (defun gnus-copy-sequence (list) "Do a complete, total copy of a list." ! (mapcar (lambda (elem) (if (consp elem) ! (if (consp (cdr elem)) ! (gnus-copy-sequence elem) ! (cons (car elem) (cdr elem))) ! elem)) ! list)) (defun gnus-set-difference (list1 list2) "Return a list of elements of LIST1 that do not appear in LIST2." --- 2421,2434 ---- (defun gnus-copy-sequence (list) "Do a complete, total copy of a list." ! (if (and (consp list) (not (consp (cdr list)))) ! (cons (car list) (cdr list)) ! (mapcar (lambda (elem) (if (consp elem) ! (if (consp (cdr elem)) ! (gnus-copy-sequence elem) ! (cons (car elem) (cdr elem))) ! elem)) ! list))) (defun gnus-set-difference (list1 list2) "Return a list of elements of LIST1 that do not appear in LIST2." *************** *** 2714,2719 **** --- 2753,2759 ---- (define-key gnus-group-mode-map "?" 'gnus-group-describe-briefly) (define-key gnus-group-mode-map "\C-c\C-i" 'gnus-info-find-node) (define-key gnus-group-mode-map "\M-e" 'gnus-group-edit-group) + (define-key gnus-group-mode-map "^" 'gnus-group-enter-server-mode) (define-key gnus-group-mode-map (if gnus-xemacs [button2] [mouse-2]) 'gnus-mouse-pick-group) *************** *** 2904,2911 **** (not (gnus-goto-char (text-property-any (point-min) (point-max) 'gnus-group ! (intern group))))) ! (setq newsrc (cdr newsrc)))))) ;; Adjust cursor point. (gnus-group-position-cursor)))) --- 2944,2953 ---- (not (gnus-goto-char (text-property-any (point-min) (point-max) 'gnus-group ! (intern (car (car newsrc))))))) ! (setq newsrc (cdr newsrc))) ! (or newsrc (progn (goto-char (point-max)) ! (forward-line -1)))))) ;; Adjust cursor point. (gnus-group-position-cursor)))) *************** *** 2980,2987 **** (defun gnus-group-prefixed-name (group method) "Return the whole name from GROUP and METHOD." (concat (format "%s" (car method)) ! (if (assoc (format "%s" (car method)) (gnus-methods-using 'address)) (concat "+" (nth 1 method))) ":" group)) --- 3022,3032 ---- (defun gnus-group-prefixed-name (group method) "Return the whole name from GROUP and METHOD." + (and (stringp method) (setq method (gnus-server-to-method method))) (concat (format "%s" (car method)) ! (if (and ! (assoc (format "%s" (car method)) (gnus-methods-using 'address)) ! (not (string= (nth 1 method) ""))) (concat "+" (nth 1 method))) ":" group)) *************** *** 3104,3109 **** --- 3149,3155 ---- "")) (moderated (if (member group gnus-moderated-list) ?m ? )) (moderated-string (if (eq moderated ?m) "(m)" "")) + (method (gnus-server-get-method group method)) (news-server (or (car (cdr method)) "")) (news-method (or (car method) "")) (news-method-string *************** *** 3384,3389 **** --- 3430,3442 ---- (goto-char (point-min)) (gnus-group-next-unread-group 1)) + (defun gnus-group-enter-server-mode () + "Jump to the server buffer." + (interactive) + (gnus-server-setup-buffer) + (switch-to-buffer gnus-server-buffer) + (gnus-server-prepare)) + (defun gnus-group-make-group (name method address) "Add a new newsgroup. The user will be prompted for a NAME, for a select METHOD, and an *************** *** 3393,3410 **** (read-string "Group name: ") (let ((method (completing-read ! "Method: " gnus-valid-select-methods nil t))) ! (list method ! (if (memq 'prompt-address ! (assoc method gnus-valid-select-methods)) ! (read-string "Address: ") ! ""))))) ! (let ((nname (gnus-group-prefixed-name name (list (intern method) address))) ! info) (and (gnus-gethash nname gnus-active-hashtb) (error "Group %s already exists" nname)) (gnus-group-change-level ! (setq info (list t nname 3 nil nil (list (intern method) address))) 3 9 (gnus-gethash (or (gnus-group-group-name) "dummy.group") gnus-newsrc-hashtb) t) (gnus-sethash nname '(0 . 0) gnus-active-hashtb) --- 3446,3468 ---- (read-string "Group name: ") (let ((method (completing-read ! "Method: " (append gnus-valid-select-methods gnus-server-alist) ! nil t))) ! (if (assoc method gnus-valid-select-methods) ! (list method ! (if (memq 'prompt-address ! (assoc method gnus-valid-select-methods)) ! (read-string "Address: ") ! "")) ! (list method nil))))) ! ! (let* ((meth (if address (list (intern method) address) method)) ! (nname (gnus-group-prefixed-name name meth)) ! info) (and (gnus-gethash nname gnus-active-hashtb) (error "Group %s already exists" nname)) (gnus-group-change-level ! (setq info (list t nname 3 nil nil meth)) 3 9 (gnus-gethash (or (gnus-group-group-name) "dummy.group") gnus-newsrc-hashtb) t) (gnus-sethash nname '(0 . 0) gnus-active-hashtb) *************** *** 3416,3421 **** --- 3474,3480 ---- (gnus-request-create-group nname)))) (defun gnus-group-edit-group (group) + "Edit the group on the current line." (interactive (list (gnus-group-group-name))) (let (info) (if group (setq info (nth 2 (gnus-gethash group gnus-newsrc-hashtb))) *************** *** 4380,4385 **** --- 4439,4445 ---- (define-key gnus-summary-mode-map "\M-\C-d" 'gnus-summary-down-thread) (define-key gnus-summary-mode-map "&" 'gnus-summary-execute-command) (define-key gnus-summary-mode-map "c" 'gnus-summary-catchup-and-exit) + (define-key gnus-summary-mode-map "\C-w" 'gnus-summary-mark-region-as-read) (define-key gnus-summary-mode-map "\C-t" 'gnus-summary-toggle-truncation) (define-key gnus-summary-mode-map "?" 'gnus-summary-mark-as-dormant) (define-key gnus-summary-mode-map "\C-c\M-\C-s" 'gnus-summary-show-all-expunged) *************** *** 4414,4420 **** (if gnus-xemacs [button2] [mouse-2]) 'gnus-mouse-pick-article) (define-key gnus-summary-mode-map "m" 'gnus-summary-mail-other-window) (define-key gnus-summary-mode-map "a" 'gnus-summary-post-news) ! (define-key gnus-summary-mode-map "x" 'gnus-summary-delete-marked-as-read) ; (define-key gnus-summary-mode-map "X" 'gnus-summary-remove-lines-marked-with) (define-key gnus-summary-mode-map "s" 'gnus-summary-isearch-article) (define-key gnus-summary-mode-map "t" 'gnus-summary-toggle-header) --- 4474,4480 ---- (if gnus-xemacs [button2] [mouse-2]) 'gnus-mouse-pick-article) (define-key gnus-summary-mode-map "m" 'gnus-summary-mail-other-window) (define-key gnus-summary-mode-map "a" 'gnus-summary-post-news) ! (define-key gnus-summary-mode-map "x" 'gnus-summary-remove-lines-marked-as-read) ; (define-key gnus-summary-mode-map "X" 'gnus-summary-remove-lines-marked-with) (define-key gnus-summary-mode-map "s" 'gnus-summary-isearch-article) (define-key gnus-summary-mode-map "t" 'gnus-summary-toggle-header) *************** *** 4557,4562 **** --- 4617,4623 ---- (define-key gnus-summary-article-map "hw" 'gnus-article-word-wrap) (define-key gnus-summary-article-map "hd" 'gnus-article-remove-cr) (define-key gnus-summary-article-map "hq" 'gnus-article-de-quoted-unreadable) + (define-key gnus-summary-article-map "hf" 'gnus-article-display-x-face) (define-key gnus-summary-article-map "m" 'gnus-summary-toggle-mime) (define-key gnus-summary-article-map "s" 'gnus-summary-isearch-article) *************** *** 4952,4963 **** (if (gnus-select-newsgroup group show-all) (progn (gnus-set-global-variables) ;; You can change the subjects in this hook. (run-hooks 'gnus-select-group-hook) ! ;; Do Score Processing. (gnus-score-headers) ;; Update the format specifiers. (gnus-update-format-specifications) (gnus-summary-prepare) (if (zerop (buffer-size)) (cond (gnus-newsgroup-dormant --- 5013,5029 ---- (if (gnus-select-newsgroup group show-all) (progn (gnus-set-global-variables) + ;; Save the active value in effect when the group was entered. + (setq gnus-newsgroup-active + (gnus-copy-sequence + (gnus-gethash gnus-newsgroup-name gnus-active-hashtb))) ;; You can change the subjects in this hook. (run-hooks 'gnus-select-group-hook) ! ;; Do score processing. (gnus-score-headers) ;; Update the format specifiers. (gnus-update-format-specifications) + ;; Generate the summary buffer. (gnus-summary-prepare) (if (zerop (buffer-size)) (cond (gnus-newsgroup-dormant *************** *** 5445,5459 **** (let* ((entry (gnus-gethash group gnus-newsrc-hashtb)) (info (nth 2 entry)) articles header-marks) ! (and (eq (car entry) t) ! (or (gnus-activate-newsgroup (car info)) ! (progn ! (kill-buffer (current-buffer)) ! (error "Couldn't request group %s: %s" ! group (gnus-status-message group))))) ! (setq gnus-current-select-method (or (nth 4 info) gnus-select-method)) ! (gnus-check-news-server (nth 4 info)) ! (or (gnus-request-group group t) (progn (kill-buffer (current-buffer)) (error "Couldn't request group %s: %s" --- 5511,5526 ---- (let* ((entry (gnus-gethash group gnus-newsrc-hashtb)) (info (nth 2 entry)) articles header-marks) ! (gnus-check-news-server ! (setq gnus-current-select-method (gnus-find-method-for-group group))) ! ! (or (gnus-server-opened gnus-current-select-method) ! (gnus-open-server gnus-current-select-method) ! (error "Couldn't open server")) ! ! (or (and (eq (car entry) t) ! (gnus-activate-newsgroup (car info))) ! (gnus-request-group group t) (progn (kill-buffer (current-buffer)) (error "Couldn't request group %s: %s" *************** *** 5779,5785 **** (assoc (symbol-name (car (gnus-find-method-for-group from-newsgroup))) gnus-valid-select-methods))) ! name entry read info xref-hashtb idlist active num range exps method) (save-excursion (set-buffer gnus-group-buffer) (if (setq xref-hashtb --- 5846,5853 ---- (assoc (symbol-name (car (gnus-find-method-for-group from-newsgroup))) gnus-valid-select-methods))) ! name entry read info xref-hashtb idlist active num range exps method ! nth4) (save-excursion (set-buffer gnus-group-buffer) (if (setq xref-hashtb *************** *** 5790,5808 **** () (setq idlist (symbol-value group)) ;; Dead groups are not updated. ! (if (and (setq entry (gnus-gethash name gnus-newsrc-hashtb) ! info (nth 2 entry)) ;; Only do the xrefs if the group has the same ;; select method as the group we have just read. (or (gnus-methods-equal-p ! (nth 4 info) ! (gnus-find-method-for-group from-newsgroup)) virtual ! (equal (nth 4 info) (setq method (gnus-find-method-for-group from-newsgroup))) ! (and (equal (car (nth 4 info)) (car method)) ! (equal (nth 1 (nth 4 info)) (nth 1 method)))) gnus-use-cross-reference (or (not (eq gnus-use-cross-reference t)) virtual --- 5858,5878 ---- () (setq idlist (symbol-value group)) ;; Dead groups are not updated. ! (if (and (prog1 ! (setq entry (gnus-gethash name gnus-newsrc-hashtb) ! info (nth 2 entry)) ! (if (stringp (setq nth4 (nth 4 info))) ! (setq nth4 (gnus-server-to-method nth4)))) ;; Only do the xrefs if the group has the same ;; select method as the group we have just read. (or (gnus-methods-equal-p ! nth4 (gnus-find-method-for-group from-newsgroup)) virtual ! (equal nth4 (setq method (gnus-find-method-for-group from-newsgroup))) ! (and (equal (car nth4) (car method)) ! (equal (nth 1 nth4) (nth 1 method)))) gnus-use-cross-reference (or (not (eq gnus-use-cross-reference t)) virtual *************** *** 7384,7400 **** If N is a negative number, respool the N previous articles. If N is nil and any articles have been marked with the process mark, respool those articles instead. ! For this function to work, both the current newsgroup and the ! newsgroup that you want to move to have to support the `request-move' ! and `request-accept' functions. (Ie. mail newsgroups at present.)" (interactive "P") (gnus-set-global-variables) ! (or respool-method ! (setq respool-method ! (completing-read ! "What method do you want to use when respooling? " ! (gnus-methods-using 'respool) nil t))) ! (gnus-summary-move-article n nil (intern respool-method))) ;; Suggested by gregj@unidata.com (Gregory J. Grubbs). (defun gnus-summary-copy-article (n &optional to-newsgroup select-method) --- 7454,7477 ---- If N is a negative number, respool the N previous articles. If N is nil and any articles have been marked with the process mark, respool those articles instead. ! ! Respooling can be done both from mail groups and \"real\" newsgroups. ! In the former case, the articles in question will be moved from the ! current group into whatever groups they are destined to. In the ! latter case, they will be copied into the relevant groups." (interactive "P") (gnus-set-global-variables) ! (let ((respool-methods (gnus-methods-using 'respool))) ! (or respool-method ! (setq respool-method ! (completing-read ! "What method do you want to use when respooling? " ! respool-methods nil t))) ! (if (assoc (symbol-name ! (car (gnus-find-method-for-group gnus-newsgroup-name))) ! respool-methods) ! (gnus-summary-copy-article n nil (intern respool-method))) ! (gnus-summary-move-article n nil (intern respool-method)))) ;; Suggested by gregj@unidata.com (Gregory J. Grubbs). (defun gnus-summary-copy-article (n &optional to-newsgroup select-method) *************** *** 7435,7441 **** (or (gnus-check-backend-function 'request-accept-article (or select-method to-newsgroup)) (error "%s does not support article copying" to-newsgroup)) ! (message "Moving to %s: %s..." (or select-method to-newsgroup) articles) (while articles (if (setq art-group (save-excursion --- 7512,7518 ---- (or (gnus-check-backend-function 'request-accept-article (or select-method to-newsgroup)) (error "%s does not support article copying" to-newsgroup)) ! (message "Copying to %s: %s..." (or select-method to-newsgroup) articles) (while articles (if (setq art-group (save-excursion *************** *** 8007,8012 **** --- 8084,8112 ---- (memq gnus-current-article gnus-newsgroup-expirable) (gnus-summary-mark-as-read gnus-current-article gnus-read-mark))) + (defun gnus-summary-mark-region-as-read (point mark all) + "Mark all unread articles between point and mark as read. + If given a prefix, mark all articles between point and mark as read, + even ticked and dormant ones." + (interactive "r\nP") + (save-excursion + (goto-char point) + (beginning-of-line) + (while (and + (< (point) mark) + (progn + (and + (or all + (and + (not (memq (gnus-summary-article-number) + gnus-newsgroup-marked)) + (not (memq (gnus-summary-article-number) + gnus-newsgroup-dormant)))) + (gnus-summary-mark-article + (gnus-summary-article-number) gnus-dread-mark)) + t) + (zerop (forward-line 1)))))) + ;; Fix by Per Abrahamsen . (defalias 'gnus-summary-delete-marked-as-read 'gnus-summary-remove-lines-marked-as-read) *************** *** 8598,8603 **** --- 8698,8741 ---- (let ((gnus-default-article-saver 'gnus-summary-save-in-folder)) (gnus-summary-save-article arg))) + (defun gnus-read-save-file-name (prompt default-name) + (let ((methods gnus-split-methods) + split-name) + (if (not gnus-split-methods) + () + (save-excursion + (set-buffer gnus-article-buffer) + (gnus-narrow-to-headers) + (while methods + (goto-char (point-min)) + (and (condition-case () + (re-search-forward (car (car methods)) nil t) + (error nil)) + (setq split-name (cons (nth 1 (car methods)) split-name))) + (setq methods (cdr methods))) + (widen))) + (cond ((null split-name) + (read-file-name + (concat prompt " (default " + (file-name-nondirectory default-name) ") ") + (file-name-directory default-name) + default-name)) + ((= 1 (length split-name)) + (read-file-name + (concat prompt " (default " (car split-name) ") ") + gnus-article-save-directory + (concat gnus-article-save-directory (car split-name)))) + (t + (setq split-name (mapcar (lambda (el) (list el)) + (nreverse split-name))) + (let ((result (completing-read + (concat prompt " ") + split-name nil nil))) + (concat gnus-article-save-directory + (if (string= result "") + (car (car split-name)) + result))))))) + (defun gnus-summary-save-in-rmail (&optional filename) "Append this article to Rmail file. Optional argument FILENAME specifies file name. *************** *** 8608,8619 **** (funcall gnus-rmail-save-name gnus-newsgroup-name gnus-current-headers gnus-newsgroup-last-rmail))) (or filename ! (setq filename ! (read-file-name ! (concat "Save in rmail file: (default " ! (file-name-nondirectory default-name) ") ") ! (file-name-directory default-name) ! default-name))) (gnus-make-directory (file-name-directory filename)) (gnus-eval-in-buffer-window gnus-article-buffer --- 8746,8753 ---- (funcall gnus-rmail-save-name gnus-newsgroup-name gnus-current-headers gnus-newsgroup-last-rmail))) (or filename ! (setq filename (gnus-read-save-file-name ! "Save in rmail file:" default-name))) (gnus-make-directory (file-name-directory filename)) (gnus-eval-in-buffer-window gnus-article-buffer *************** *** 8634,8645 **** (funcall gnus-mail-save-name gnus-newsgroup-name gnus-current-headers gnus-newsgroup-last-mail))) (or filename ! (setq filename ! (read-file-name ! (concat "Save in Unix mail file: (default " ! (file-name-nondirectory default-name) ") ") ! (file-name-directory default-name) ! default-name))) (setq filename (expand-file-name filename (and default-name --- 8768,8775 ---- (funcall gnus-mail-save-name gnus-newsgroup-name gnus-current-headers gnus-newsgroup-last-mail))) (or filename ! (setq filename (gnus-read-save-file-name ! "Save in Unix mail file:" default-name))) (setq filename (expand-file-name filename (and default-name *************** *** 8666,8677 **** (funcall gnus-file-save-name gnus-newsgroup-name gnus-current-headers gnus-newsgroup-last-file))) (or filename ! (setq filename ! (read-file-name ! (concat "Save in file: (default " ! (file-name-nondirectory default-name) ") ") ! (file-name-directory default-name) ! default-name))) (gnus-make-directory (file-name-directory filename)) (gnus-eval-in-buffer-window gnus-article-buffer --- 8796,8803 ---- (funcall gnus-file-save-name gnus-newsgroup-name gnus-current-headers gnus-newsgroup-last-file))) (or filename ! (setq filename (gnus-read-save-file-name ! "Save in file:" default-name))) (gnus-make-directory (file-name-directory filename)) (gnus-eval-in-buffer-window gnus-article-buffer *************** *** 8728,8733 **** --- 8854,8860 ---- 'gnus-mark gnus-unread-mark 'gnus-pseudo (car pslist) 'gnus-thread 0)) + (forward-line -1) (gnus-sethash (int-to-string gnus-reffed-article-number) (car pslist) gnus-newsgroup-headers-hashtb-by-number) (setq gnus-reffed-article-number (1- gnus-reffed-article-number)) *************** *** 9418,9424 **** ;; Written by Per Abrahamsen . (defun gnus-article-treat-overstrike () ! ;; Prepare article for overstrike commands. (interactive) (save-excursion (set-buffer gnus-article-buffer) --- 9545,9551 ---- ;; Written by Per Abrahamsen . (defun gnus-article-treat-overstrike () ! "Translate overstrikes into bold text." (interactive) (save-excursion (set-buffer gnus-article-buffer) *************** *** 9456,9461 **** --- 9583,9589 ---- (end-of-line 2)))))) (defun gnus-article-remove-cr () + "Remove carriage returns from an article." (interactive) (save-excursion (set-buffer gnus-article-buffer) *************** *** 9464,9470 **** --- 9592,9630 ---- (while (search-forward "\r" nil t) (replace-match ""))))) + (defun gnus-article-display-x-face () + "Look for an X-Face header and display it if present." + (interactive) + (save-excursion + (set-buffer gnus-article-buffer) + (goto-char (point-min)) + (if (or (not gnus-article-x-face-command) + (not (re-search-forward "^X-Face: " nil t))) + () + (let ((face + (buffer-substring + (point) + (progn + (forward-line 1) + (while (and (looking-at "[ \t]") + (zerop (forward-line 1)))) + (point)))) + (command gnus-article-x-face-command)) + (if (symbolp command) + (and (or (fboundp command) (error "%s is not a function" command)) + (funcall command face)) + (let ((process (start-process "gnus-x-face" nil "sh" "-c" command))) + (if process + (progn + (process-send-string process face) + (process-send-eof process)) + (error "Couldn't start process")))))))) + (defun gnus-article-de-quoted-unreadable () + "Do a naive translation of a quoted-printable-encoded article. + This is in no way, shape or form meant as a replacement for real MIME + processing, but is simply a stop-gap measure until MIME support is + written." (interactive) (save-excursion (save-restriction *************** *** 10012,10017 **** --- 10172,10178 ---- (gnus-score-load-file file)) files)))) (and eval (not global) (eval eval)) + (setq gnus-scores-exclude-files exclude-files) (if orphan (setq gnus-orphan-score (car orphan))) (setq gnus-summary-mark-below (or mark mark-and-expunge gnus-summary-mark-below)) *************** *** 10160,10168 **** --- 10321,10343 ---- ;; Load the SCORE files. (while score-files (if (stringp (car score-files)) + ;; It is a string, which means that it's a score file name, + ;; so we load the score file and add the score alist to + ;; the list of alists. (setq scores (nconc (gnus-score-load-file (car score-files)) scores)) + ;; It is an alist, so we just add it to the list directly. (setq scores (nconc (car score-files) scores))) (setq score-files (cdr score-files))) + ;; Prune the score files that are to be excluded, if any. + (if (not gnus-scores-exclude-files) + () + (let ((s scores) + c) + (while s + (and (setq c (rassq (car s) gnus-score-cache)) + (member (car c) gnus-scores-exclude-files) + (setq scores (delq (car s) scores))) + (setq s (cdr s))))) (if (not (and gnus-summary-default-score scores (> (length gnus-newsgroup-headers) *************** *** 11023,11032 **** (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) (forward-line 1) ! (if yank ! (save-excursion ! (run-hooks 'news-reply-header-hook) ! (mail-yank-original nil))) (if gnus-post-prepare-function (funcall gnus-post-prepare-function group)))))) (setq gnus-article-check-size (cons (buffer-size) (gnus-article-checksum))) --- 11198,11204 ---- (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) (forward-line 1) ! (and yank (save-excursion (news-reply-yank-original nil))) (if gnus-post-prepare-function (funcall gnus-post-prepare-function group)))))) (setq gnus-article-check-size (cons (buffer-size) (gnus-article-checksum))) *************** *** 11295,11301 **** (defun gnus-cancel-news () "Cancel an article you posted." (interactive) ! (if (gnus-yes-or-no-p "Do you really want to cancel this article? ") (let ((from nil) (newsgroups nil) (message-id nil) --- 11467,11474 ---- (defun gnus-cancel-news () "Cancel an article you posted." (interactive) ! (if (or gnus-expert-user ! (gnus-yes-or-no-p "Do you really want to cancel this article? ")) (let ((from nil) (newsgroups nil) (message-id nil) *************** *** 11332,11338 **** (message "Canceling your article...") (if (gnus-inews-article) (message "Canceling your article... done") ! (ding) (message "Failed to cancel your article")) ;; Kill the article buffer. (kill-buffer (current-buffer))))))) --- 11505,11513 ---- (message "Canceling your article...") (if (gnus-inews-article) (message "Canceling your article... done") ! (ding) ! (message "Cancel failed; %s" ! (gnus-status-message gnus-newsgroup-name))) ;; Kill the article buffer. (kill-buffer (current-buffer))))))) *************** *** 11370,11376 **** (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) ! (replace-match "\n\n") ;; This hook may insert a signature. (run-hooks 'gnus-prepare-article-hook) ;; Run final inews hooks. This hook may do FCC. --- 11545,11551 ---- (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) ! (replace-match "") ;; This hook may insert a signature. (run-hooks 'gnus-prepare-article-hook) ;; Run final inews hooks. This hook may do FCC. *************** *** 11402,11408 **** (X-Newsreader gnus-version) (headers gnus-required-headers) (case-fold-search t) ! header value) ;; First we remove any old Message-IDs. This might be slightly ;; fascist, but if the user really wants to generate Message-IDs ;; by herself, she should remove it from the `gnus-required-list'. --- 11577,11583 ---- (X-Newsreader gnus-version) (headers gnus-required-headers) (case-fold-search t) ! header value elem) ;; First we remove any old Message-IDs. This might be slightly ;; fascist, but if the user really wants to generate Message-IDs ;; by herself, she should remove it from the `gnus-required-list'. *************** *** 11413,11419 **** (progn (forward-line 1) (point)))) ;; Remove NNTP-posting-host. (goto-char (point-min)) ! (and (re-search-forward "nntp-posting-host^:" nil t) (delete-region (progn (beginning-of-line) (point)) (progn (forward-line 1) (point)))) ;; Insert new Sender if the From is strange. --- 11588,11594 ---- (progn (forward-line 1) (point)))) ;; Remove NNTP-posting-host. (goto-char (point-min)) ! (and (re-search-forward "^nntp-posting-host:" nil t) (delete-region (progn (beginning-of-line) (point)) (progn (forward-line 1) (point)))) ;; Insert new Sender if the From is strange. *************** *** 11458,11474 **** ;; Distribution. (while headers (goto-char (point-min)) ! (setq header (car headers)) (if (or (not (re-search-forward (concat "^" (downcase (symbol-name header)) ":") nil t)) (progn (if (= (following-char) ? ) (forward-char 1) (insert " ")) (looking-at "[ \t]*$"))) (progn ! (setq value (or (and (boundp header) (symbol-value header)) ! (read-from-minibuffer ! (format "Empty header for %s; enter value: " ! header)))) (if (bolp) (save-excursion (goto-char (point-max)) --- 11633,11663 ---- ;; Distribution. (while headers (goto-char (point-min)) ! (setq elem (car headers)) ! (if (consp elem) ! (setq header (car elem)) ! (setq header elem)) (if (or (not (re-search-forward (concat "^" (downcase (symbol-name header)) ":") nil t)) (progn (if (= (following-char) ? ) (forward-char 1) (insert " ")) (looking-at "[ \t]*$"))) (progn ! (setq value ! (or (if (consp elem) ! ;; The element is a cons. Either the cdr is ! ;; a string to be inserted verbatim, or it ! ;; is a function, and we insert the value ! ;; returned from this function. ! (or (and (stringp (cdr elem)) (cdr elem)) ! (and (fboundp (cdr elem)) (funcall (cdr elem)))) ! ;; The element is a symbol. We insert the ! ;; value of this symbol, if any. ! (and (boundp header) (symbol-value header))) ! ;; We couldn't generate a value for this header, ! ;; so we just ask the user. ! (read-from-minibuffer ! (format "Empty header for %s; enter value: " header)))) (if (bolp) (save-excursion (goto-char (point-max)) *************** *** 12183,12188 **** --- 12372,12379 ---- (defun gnus-check-news-server (method) "If the news server is down, start it up again." (let ((method (if method method gnus-select-method))) + (and (stringp method) + (setq method (gnus-server-to-method method))) (if (gnus-server-opened method) ;; Stream is already opened. t *************** *** 12204,12209 **** --- 12395,12402 ---- status message))) (defun gnus-get-function (method function) + (and (stringp method) + (setq method (gnus-server-to-method method))) (let ((func (intern (format "%s-%s" (car method) function)))) (if (not (fboundp func)) (progn *************** *** 12212,12220 **** (error "No such function: %s" func)))) func)) ! ;; Specifying port number suggested by Stephane Laveau . (defun gnus-open-server (method) ! (apply (gnus-get-function method 'open-server) (cdr method))) (defun gnus-close-server (method) (funcall (gnus-get-function method 'close-server) (nth 1 method))) --- 12405,12415 ---- (error "No such function: %s" func)))) func)) ! ;;; Interface functions to the backends. ! (defun gnus-open-server (method) ! (funcall (gnus-get-function method 'open-server) ! (nth 1 method) (nthcdr 2 method))) (defun gnus-close-server (method) (funcall (gnus-get-function method 'close-server) (nth 1 method))) *************** *** 12297,12302 **** --- 12492,12499 ---- respect-poster)))) (defun gnus-request-post (method &optional force) + (and (stringp method) + (setq method (gnus-server-to-method method))) (and (not force) gnus-post-method (memq 'post (assoc (format "%s" (car method)) gnus-valid-select-methods)) *************** *** 12334,12349 **** (funcall (gnus-get-function method 'request-create-group) (gnus-group-real-name group) (nth 1 method)))) - (defun gnus-find-method-for-group (group) (or gnus-override-method (and (not group) gnus-select-method) ! (let ((info (nth 2 (gnus-gethash group gnus-newsrc-hashtb)))) (if (or (not info) ! (not (nth 4 info))) ! gnus-select-method ! (nth 4 info))))) (defun gnus-check-backend-function (func group) (let ((method (if (stringp group) (car (gnus-find-method-for-group group)) --- 12531,12564 ---- (funcall (gnus-get-function method 'request-create-group) (gnus-group-real-name group) (nth 1 method)))) (defun gnus-find-method-for-group (group) (or gnus-override-method (and (not group) gnus-select-method) ! (let ((info (nth 2 (gnus-gethash group gnus-newsrc-hashtb))) ! method) (if (or (not info) ! (not (setq method (nth 4 info)))) ! (setq method gnus-select-method) ! (setq method ! (cond ((stringp method) ! (gnus-server-to-method method)) ! ((stringp (car method)) ! (gnus-server-extend-method group method)) ! (t ! method)))) ! (let ((method-name (symbol-name (car method)))) ! (if (and (memq 'address (assoc method-name ! gnus-valid-select-methods)) ! (not (assq (intern (concat method-name "-address")) ! method))) ! (setq method ! (append method ! (list (list (intern (concat ! method-name "-address")) ! (nth 1 method))))))) ! method))) ! (defun gnus-check-backend-function (func group) (let ((method (if (stringp group) (car (gnus-find-method-for-group group)) *************** *** 12933,12939 **** UNREAD and TICKED lists. Note: UNSELECTED has to be sorted over `<'. Returns whether the updating was successful." ! (let* ((active (gnus-gethash group gnus-active-hashtb)) (entry (gnus-gethash group gnus-newsrc-hashtb)) (number (car entry)) (info (nth 2 entry)) --- 13148,13155 ---- UNREAD and TICKED lists. Note: UNSELECTED has to be sorted over `<'. Returns whether the updating was successful." ! (let* ((active (or gnus-newsgroup-active ! (gnus-gethash group gnus-active-hashtb))) (entry (gnus-gethash group gnus-newsrc-hashtb)) (number (car entry)) (info (nth 2 entry)) *************** *** 13412,13451 **** ;; from the variable gnus-newsrc-assoc. (and (or gnus-newsrc-assoc gnus-killed-list) gnus-current-startup-file ! (save-excursion ! (if (or (not gnus-dribble-buffer) ! (not (buffer-name gnus-dribble-buffer)) ! (zerop (save-excursion ! (set-buffer gnus-dribble-buffer) ! (buffer-size)))) ! (message "(No changes need to be saved)") ! (if gnus-save-newsrc-file ! (let ((make-backup-files t) ! (version-control nil) ! (require-final-newline t)) ;Don't ask even if requested. ! (message "Saving %s..." gnus-current-startup-file) ! ;; Make backup file of master newsrc. ! ;; You can stop or change version control of backup file. ! ;; Suggested by jason@violet.berkeley.edu. ! (run-hooks 'gnus-save-newsrc-hook) ! (gnus-gnus-to-newsrc-format) ! (message "Saving %s... done" gnus-current-startup-file))) ! ;; Quickly loadable .newsrc. ! (set-buffer (get-buffer-create " *Gnus-newsrc*")) ! (gnus-add-current-to-buffer-list) ! (buffer-disable-undo (current-buffer)) ! (erase-buffer) ! (message "Saving %s.eld..." gnus-current-startup-file) ! (gnus-gnus-to-quick-newsrc-format) ! (let ((make-backup-files nil) ! (version-control nil) ! (require-final-newline t)) ;Don't ask even if requested. (write-region 1 (point-max) (concat gnus-current-startup-file ".eld") ! nil 'nomesg)) ! (kill-buffer (current-buffer)) ! (message "Saving %s.eld... done" gnus-current-startup-file) ! (gnus-dribble-delete-file))))) (defun gnus-gnus-to-quick-newsrc-format () "Insert Gnus variables such as gnus-newsrc-assoc in lisp format." --- 13628,13665 ---- ;; from the variable gnus-newsrc-assoc. (and (or gnus-newsrc-assoc gnus-killed-list) gnus-current-startup-file ! (let ((make-backup-files t) ! (version-control nil) ! (require-final-newline t)) ;Don't ask even if requested. ! ;; You can stop or change version control of backup file. ! ;; Suggested by jason@violet.berkeley.edu. ! (run-hooks 'gnus-save-newsrc-hook) ! (save-excursion ! (if (or (not gnus-dribble-buffer) ! (not (buffer-name gnus-dribble-buffer)) ! (zerop (save-excursion ! (set-buffer gnus-dribble-buffer) ! (buffer-size)))) ! (message "(No changes need to be saved)") ! (if gnus-save-newsrc-file ! (progn ! (message "Saving %s..." gnus-current-startup-file) ! ;; Make backup file of master newsrc. ! (gnus-gnus-to-newsrc-format) ! (message "Saving %s... done" gnus-current-startup-file))) ! ;; Quickly loadable .newsrc. ! (set-buffer (get-buffer-create " *Gnus-newsrc*")) ! (gnus-add-current-to-buffer-list) ! (buffer-disable-undo (current-buffer)) ! (erase-buffer) ! (message "Saving %s.eld..." gnus-current-startup-file) ! (gnus-gnus-to-quick-newsrc-format) (write-region 1 (point-max) (concat gnus-current-startup-file ".eld") ! nil 'nomesg) ! (kill-buffer (current-buffer)) ! (message "Saving %s.eld... done" gnus-current-startup-file) ! (gnus-dribble-delete-file)))))) (defun gnus-gnus-to-quick-newsrc-format () "Insert Gnus variables such as gnus-newsrc-assoc in lisp format." *************** *** 13547,13552 **** --- 13761,14052 ---- (goto-char (point-min)) (and (looking-at "[^ \t]+[ \t]+\\(.*\\)") (buffer-substring (match-beginning 1) (match-end 1)))))) + + ;;; + ;;; Server + ;;; + + (defvar gnus-server-mode-hook nil + "Hook run in `gnus-server-mode' buffers.") + + (defconst gnus-server-line-format " {%(%h:%w%)}\n" + "Format of server lines. + It works along the same lines as a normal formatting string, + with some simple extensions.") + + (defvar gnus-server-mode-line-format "(ding) List of servers" + "The format specification for the server mode line.") + + (defconst gnus-server-line-format-alist + (list (list ?h 'how ?s) + (list ?n 'name ?s) + (list ?w 'where ?s) + )) + + (defconst gnus-server-mode-line-format-alist + (list (list ?S 'news-server ?s) + (list ?M 'news-method ?s) + (list ?u 'user-defined ?s))) + + (defvar gnus-server-line-format-spec nil) + (defvar gnus-server-mode-line-format-spec nil) + (defvar gnus-server-killed-servers nil) + + (defvar gnus-server-mode-map nil) + (put 'gnus-server-mode 'mode-class 'special) + + (if gnus-server-mode-map + nil + (setq gnus-server-mode-map (make-sparse-keymap)) + (suppress-keymap gnus-server-mode-map) + (define-key gnus-server-mode-map " " 'gnus-server-read-server) + (define-key gnus-server-mode-map "q" 'gnus-server-exit) + (define-key gnus-server-mode-map "l" 'gnus-server-list-servers) + (define-key gnus-server-mode-map "k" 'gnus-server-kill-server) + (define-key gnus-server-mode-map "y" 'gnus-server-yank-server) + (define-key gnus-server-mode-map "c" 'gnus-server-copy-server) + (define-key gnus-server-mode-map "a" 'gnus-server-add-server) + (define-key gnus-server-mode-map "e" 'gnus-server-edit-server)) + + (defun gnus-server-mode () + "Major mode for listing and editing servers. + + All normal editing commands are switched off. + \\ + + For more in-depth information on this mode, read the manual (`\\[gnus-info-find-node]'). + + The following commands are available: + + \\{gnus-server-mode-map}" + (interactive) + ; (if gnus-visual (gnus-server-make-menu-bar)) + (kill-all-local-variables) + (setq mode-line-modified "-- ") + (make-local-variable 'mode-line-format) + (setq mode-line-format (copy-sequence mode-line-format)) + (and (equal (nth 3 mode-line-format) " ") + (setcar (nthcdr 3 mode-line-format) "")) + (setq major-mode 'gnus-server-mode) + (setq mode-name "Server") + ; (gnus-group-set-mode-line) + (setq mode-line-process nil) + (use-local-map gnus-server-mode-map) + (buffer-disable-undo (current-buffer)) + (setq truncate-lines t) + (setq buffer-read-only t) + (run-hooks 'gnus-server-mode-hook)) + + (defun gnus-server-insert-server-line (sformat name method) + (let* ((sformat (or sformat gnus-server-line-format-spec)) + (how (car method)) + (where (nth 1 method)) + b) + (beginning-of-line) + (setq b (point)) + ;; Insert the text. + (insert (eval sformat)) + (add-text-properties + b (1+ b) (list 'gnus-server (intern name))))) + + (defun gnus-server-setup-buffer () + (if (get-buffer gnus-server-buffer) + () + (save-excursion + (set-buffer (get-buffer-create gnus-server-buffer)) + (gnus-server-mode)))) + + (defun gnus-server-prepare () + (setq gnus-server-mode-line-format-spec + (gnus-parse-format gnus-server-mode-line-format + gnus-server-mode-line-format-alist)) + (setq gnus-server-line-format-spec + (gnus-parse-format gnus-server-line-format + gnus-server-line-format-alist)) + (let ((alist gnus-server-alist) + (buffer-read-only nil)) + (erase-buffer) + (while alist + (gnus-server-insert-server-line nil (car (car alist)) (cdr (car alist))) + (setq alist (cdr alist)))) + (goto-char (point-min)) + (gnus-server-position-cursor)) + + (defun gnus-server-server-name () + (let ((server (get-text-property + (save-excursion (beginning-of-line) (point)) 'gnus-server))) + (and server (symbol-name server)))) + + (defalias 'gnus-server-position-cursor 'gnus-goto-colon) + + (defvar gnus-winconf-edit-server nil) + (defconst gnus-server-edit-buffer "*Gnus edit server*") + + (defun gnus-server-update-server (server) + (save-excursion + (set-buffer gnus-server-buffer) + (let ((buffer-read-only nil) + (info (cdr (assoc server gnus-server-alist)))) + (gnus-dribble-enter + (concat "(gnus-server-set-info \"" server "\" '" + (prin1-to-string info) ")")) + ;; Buffer may be narrowed. + (save-restriction + (widen) + (if (gnus-server-goto-server server) + (delete-region (progn (beginning-of-line) (point)) + (progn (forward-line 1) (point)))) + (let ((entry (assoc server gnus-server-alist))) + (gnus-server-insert-server-line nil (car entry) (cdr entry)) + (gnus-server-position-cursor)))))) + + (defun gnus-server-set-info (info) + (gnus-dribble-enter + (concat "(gnus-server-set-info '" + (prin1-to-string info) ")")) + (let* ((server (nth 1 info)) + (entry (assoc server gnus-server-alist))) + (if entry (setcdr entry info) + (setq gnus-server-alist + (nconc gnus-server-alist (list (cons server info))))))) + + (defun gnus-server-to-method (server) + (cdr (assoc server gnus-server-alist))) + + (defun gnus-server-extend-method (group method) + (let ((entry + (gnus-copy-sequence (cdr (assoc (car method) gnus-server-alist))))) + (setcar (cdr entry) (concat (nth 1 entry) "+" group)) + (nconc entry (cdr method)))) + + (defun gnus-server-get-method (group method) + (cond ((stringp method) + (gnus-server-to-method method)) + ((stringp (car method)) + (gnus-server-extend-method group method)) + (t + method))) + + ;;; Interactive server functions. + + (defun gnus-server-kill-server (server) + "Kill the server on the current line." + (interactive (list (gnus-server-server-name))) + (or (gnus-server-goto-server server) + (if server (error "No such server: %s" server) + (error "No server on the current line"))) + (let ((buffer-read-only nil)) + (delete-region (progn (beginning-of-line) (point)) + (progn (forward-line 1) (point)))) + (setq gnus-server-killed-servers + (cons (assoc server gnus-server-alist) gnus-server-killed-servers)) + (setq gnus-server-alist (delq (car gnus-server-killed-servers) + gnus-server-alist)) + (gnus-server-position-cursor)) + + (defun gnus-server-yank-server () + "Yank the previously killed server." + (interactive) + (or gnus-server-killed-servers + (error "No killed servers to be yanked")) + (let ((alist gnus-server-alist) + (server (gnus-server-server-name)) + (killed (car gnus-server-killed-servers))) + (if (not server) + (setq gnus-server-alist (nconc gnus-server-alist (list killed))) + (if (string= server (car (car gnus-server-alist))) + (setq gnus-server-alist (cons killed gnus-server-alist)) + (while (and (cdr alist) + (not (string= server (car (car (cdr alist)))))) + (setq alist (cdr alist))) + (setcdr alist (cons killed (cdr alist))))) + (gnus-server-update-server (car killed)) + (setq gnus-server-killed-servers (cdr gnus-server-killed-servers)) + (gnus-server-position-cursor))) + + (defun gnus-server-exit () + "Return to the group buffer." + (interactive) + (kill-buffer (current-buffer)) + (switch-to-buffer gnus-group-buffer)) + + (defun gnus-server-list-servers () + "List all available servers." + (interactive) + (let ((cur (gnus-server-server-name))) + (gnus-server-prepare) + (if cur (gnus-server-goto-server cur) + (goto-char (point-max)) + (forward-line -1)) + (gnus-server-position-cursor))) + + (defun gnus-server-copy-server (from to) + (interactive + (list + (or (gnus-server-server-name) + (error "No server on the current line")) + (read-string "Copy to: "))) + (or from (error "No server on current line")) + (or (and to (not (string= to ""))) (error "No name to copy to")) + (and (assoc to gnus-server-alist) (error "%s already exists" to)) + (or (assoc from gnus-server-alist) + (error "%s: no such server" from)) + (let ((to-entry (gnus-copy-sequence (assoc from gnus-server-alist)))) + (setcar to-entry to) + (setcar (nthcdr 2 to-entry) to) + (setq gnus-server-killed-servers + (cons to-entry gnus-server-killed-servers)) + (gnus-server-yank-server))) + + (defun gnus-server-add-server (how where) + (interactive + (list (intern (completing-read "Server method: " + gnus-valid-select-methods nil t)) + (read-string "Server name: "))) + (setq gnus-server-killed-servers + (cons (list where how where) gnus-server-killed-servers)) + (gnus-server-yank-server)) + + (defun gnus-server-goto-server (server) + "Jump to a server line." + (interactive + (list (completing-read "Goto server: " gnus-server-alist nil t))) + (let ((to (text-property-any (point-min) (point-max) + 'gnus-server (intern server)))) + (and to + (progn + (goto-char to) + (gnus-server-position-cursor))))) + + (defun gnus-server-edit-server (server) + "Edit the server on the current line." + (interactive (list (gnus-server-server-name))) + (or server + (error "No server on current line")) + (setq gnus-winconf-edit-server (current-window-configuration)) + (pop-to-buffer (get-buffer-create gnus-server-edit-buffer)) + (gnus-add-current-to-buffer-list) + (emacs-lisp-mode) + (use-local-map (copy-keymap (current-local-map))) + (local-set-key "\C-c\C-c" 'gnus-server-edit-server-done) + (erase-buffer) + (insert ";; Type `C-c C-c' after you have edited the server.\n\n") + (insert "(gnus-server-set-info \n " + (pp-to-string (list 'quote (cdr (assoc server gnus-server-alist)))) + " )\n")) + + (defun gnus-server-edit-server-done () + (interactive) + (set-buffer (get-buffer-create gnus-server-edit-buffer)) + (eval-current-buffer) + (kill-buffer (current-buffer)) + (and gnus-winconf-edit-server + (set-window-configuration gnus-winconf-edit-server)) + (setq gnus-winconf-edit-server nil) + (set-buffer gnus-server-buffer) + (gnus-server-update-server (gnus-server-server-name)) + (gnus-server-position-cursor)) + (provide 'gnus) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnbabyl.el dgnus/lisp/nnbabyl.el *** pub/dgnus/lisp/nnbabyl.el Sun Apr 16 00:38:36 1995 --- dgnus/lisp/nnbabyl.el Mon Apr 17 06:29:08 1995 *************** *** 39,45 **** "The name of the active file for the mail box.") (defvar nnbabyl-get-new-mail t ! "If non-nil, nnml will check the incoming mail file and split the mail.") --- 39,45 ---- "The name of the active file for the mail box.") (defvar nnbabyl-get-new-mail t ! "If non-nil, nnbabyl will check the incoming mail file and split the mail.") *************** *** 48,62 **** (defconst nnbabyl-version "nnbabyl 0.1" "nnbabyl version.") - (defvar nnbabyl-current-group nil - "Current nnbabyl news group directory.") - (defconst nnbabyl-mbox-buffer " *nnbabyl mbox buffer*") (defvar nnbabyl-status-string "") - (defvar nnbabyl-group-alist nil) ;;; Interface functions (defun nnbabyl-retrieve-headers (sequence &optional newsgroup server) --- 48,74 ---- (defconst nnbabyl-version "nnbabyl 0.1" "nnbabyl version.") (defconst nnbabyl-mbox-buffer " *nnbabyl mbox buffer*") + (defvar nnbabyl-current-group nil) (defvar nnbabyl-status-string "") (defvar nnbabyl-group-alist nil) + + + (defvar nnbabyl-current-server nil) + (defvar nnbabyl-server-alist nil) + (defvar nnbabyl-server-variables + (list + (list 'nnbabyl-mbox-file nnbabyl-mbox-file) + (list 'nnbabyl-active-file nnbabyl-active-file) + (list 'nnbabyl-get-new-mail nnbabyl-get-new-mail) + '(nnbabyl-current-group nil) + '(nnbabyl-status-string "") + '(nnbabyl-group-alist nil))) + + + ;;; Interface functions (defun nnbabyl-retrieve-headers (sequence &optional newsgroup server) *************** *** 111,127 **** (replace-match " " t t)) 'headers))) ! (defun nnbabyl-open-server (host &optional service) ! (setq nnbabyl-status-string "") ! (setq nnbabyl-group-alist nil) ! (nnheader-init-server-buffer)) (defun nnbabyl-close-server (&optional server) t) (defun nnbabyl-server-opened (&optional server) ! (and nntp-server-buffer ! (get-buffer nntp-server-buffer))) (defun nnbabyl-status-message (&optional server) nnbabyl-status-string) --- 123,150 ---- (replace-match " " t t)) 'headers))) ! (defun nnbabyl-open-server (server &optional defs) ! (nnheader-init-server-buffer) ! (if (equal server nnbabyl-current-server) ! t ! (if nnbabyl-current-server ! (setq nnbabyl-server-alist ! (cons (list nnbabyl-current-server ! (nnheader-save-variables nnbabyl-server-variables)) ! nnbabyl-server-alist))) ! (let ((state (assoc server nnbabyl-server-alist))) ! (if state ! (progn ! (nnheader-restore-variables (nth 1 state)) ! (setq nnbabyl-server-alist (delq state nnbabyl-server-alist))) ! (nnheader-set-init-variables nnbabyl-server-variables defs))) ! (setq nnbabyl-current-server server))) (defun nnbabyl-close-server (&optional server) t) (defun nnbabyl-server-opened (&optional server) ! (equal server nnbabyl-current-server)) (defun nnbabyl-status-message (&optional server) nnbabyl-status-string) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnfolder.el dgnus/lisp/nnfolder.el *** pub/dgnus/lisp/nnfolder.el Sun Apr 16 00:38:36 1995 --- dgnus/lisp/nnfolder.el Mon Apr 17 06:29:09 1995 *************** *** 63,68 **** --- 63,86 ---- (defmacro nnfolder-article-string (article) (` (concat "\n" nnfolder-article-marker (int-to-string (, article)) ""))) + + + (defvar nnfolder-current-server nil) + (defvar nnfolder-server-alist nil) + (defvar nnfolder-server-variables + (list + (list 'nnfolder-directory nnfolder-directory) + (list 'nnfolder-active-file nnfolder-active-file) + (list 'nnfolder-newsgroups-file nnfolder-newsgroups-file) + (list 'nnfolder-get-new-mail nnfolder-get-new-mail) + '(nnfolder-current-group nil) + '(nnfolder-current-buffer nil) + '(nnfolder-status-string "") + '(nnfolder-group-alist nil) + '(nnfolder-buffer-alist nil))) + + + ;;; Interface functions (defun nnfolder-retrieve-headers (sequence &optional newsgroup server) *************** *** 104,117 **** (replace-match " " t t)) 'headers))) ! (defun nnfolder-open-server (host &optional service) ! (setq nnfolder-status-string "") ! (setq nnfolder-group-alist nil) ! (nnheader-init-server-buffer)) (defun nnfolder-close-server (&optional server) t) (defun nnfolder-request-close () (let ((alist nnfolder-buffer-alist)) (while alist --- 122,150 ---- (replace-match " " t t)) 'headers))) ! (defun nnfolder-open-server (server &optional defs) ! (nnheader-init-server-buffer) ! (if (equal server nnfolder-current-server) ! t ! (if nnfolder-current-server ! (setq nnfolder-server-alist ! (cons (list nnfolder-current-server ! (nnheader-save-variables nnfolder-server-variables)) ! nnfolder-server-alist))) ! (let ((state (assoc server nnfolder-server-alist))) ! (if state ! (progn ! (nnheader-restore-variables (nth 1 state)) ! (setq nnfolder-server-alist (delq state nnfolder-server-alist))) ! (nnheader-set-init-variables nnfolder-server-variables defs))) ! (setq nnfolder-current-server server))) (defun nnfolder-close-server (&optional server) t) + (defun nnfolder-server-opened (&optional server) + (equal server nnfolder-current-server)) + (defun nnfolder-request-close () (let ((alist nnfolder-buffer-alist)) (while alist *************** *** 119,128 **** (setq alist (cdr alist)))) (setq nnfolder-buffer-alist nil nnfolder-group-alist nil)) - - (defun nnfolder-server-opened (&optional server) - (and nntp-server-buffer - (buffer-name nntp-server-buffer))) (defun nnfolder-status-message (&optional server) nnfolder-status-string) --- 152,157 ---- diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnheader.el dgnus/lisp/nnheader.el *** pub/dgnus/lisp/nnheader.el Sun Apr 16 00:38:36 1995 --- dgnus/lisp/nnheader.el Wed Apr 19 03:28:11 1995 *************** *** 148,153 **** --- 148,186 ---- (setq case-fold-search t) ;Should ignore case. t)) + (defun nnheader-set-init-variables (server defs) + (let ((s server) + val) + ;; First we set the server variables in the sequence required. We + ;; use the definitions from the `defs' list where that is + ;; possible. + (while s + (set (car (car s)) + (if (setq val (assq (car (car s)) defs)) + (nth 1 val) + (nth 1 (car s)))) + (setq s (cdr s))) + ;; The we go through the defs list and set any variables that were + ;; not set in the first sweep. + (while defs + (if (not (assq (car (car defs)) server)) + (set (car (car defs)) (eval (nth 1 (car defs))))) + (setq defs (cdr defs))))) + + (defun nnheader-save-variables (server) + (let (out) + (while server + (setq out (cons (list (car (car server)) + (symbol-value (car (car server)))) + out)) + (setq server (cdr server))) + (nreverse out))) + + (defun nnheader-restore-variables (state) + (while state + (set (car (car state)) (nth 1 (car state))) + (setq state (cdr state)))) + (provide 'nnheader) ;;; nnheader.el ends here diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnmbox.el dgnus/lisp/nnmbox.el *** pub/dgnus/lisp/nnmbox.el Sun Apr 16 00:38:36 1995 --- dgnus/lisp/nnmbox.el Mon Apr 17 06:29:09 1995 *************** *** 55,60 **** --- 55,75 ---- (defvar nnmbox-group-alist nil) + + + (defvar nnmbox-current-server nil) + (defvar nnmbox-server-alist nil) + (defvar nnmbox-server-variables + (list + (list 'nnmbox-mbox-file nnmbox-mbox-file) + (list 'nnmbox-active-file nnmbox-active-file) + (list 'nnmbox-get-new-mail nnmbox-get-new-mail) + '(nnmbox-current-group nil) + '(nnmbox-status-string "") + '(nnmbox-group-alist nil))) + + + ;;; Interface functions (defun nnmbox-retrieve-headers (sequence &optional newsgroup server) *************** *** 107,123 **** (replace-match " " t t)) 'headers))) ! (defun nnmbox-open-server (host &optional service) ! (setq nnmbox-status-string "") ! (setq nnmbox-group-alist nil) ! (nnheader-init-server-buffer)) (defun nnmbox-close-server (&optional server) t) (defun nnmbox-server-opened (&optional server) ! (and nntp-server-buffer ! (get-buffer nntp-server-buffer))) (defun nnmbox-status-message (&optional server) nnmbox-status-string) --- 122,149 ---- (replace-match " " t t)) 'headers))) ! (defun nnmbox-open-server (server &optional defs) ! (nnheader-init-server-buffer) ! (if (equal server nnmbox-current-server) ! t ! (if nnmbox-current-server ! (setq nnmbox-server-alist ! (cons (list nnmbox-current-server ! (nnheader-save-variables nnmbox-server-variables)) ! nnmbox-server-alist))) ! (let ((state (assoc server nnmbox-server-alist))) ! (if state ! (progn ! (nnheader-restore-variables (nth 1 state)) ! (setq nnmbox-server-alist (delq state nnmbox-server-alist))) ! (nnheader-set-init-variables nnmbox-server-variables defs))) ! (setq nnmbox-current-server server))) (defun nnmbox-close-server (&optional server) t) (defun nnmbox-server-opened (&optional server) ! (equal server nnmbox-current-server)) (defun nnmbox-status-message (&optional server) nnmbox-status-string) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnmh.el dgnus/lisp/nnmh.el *** pub/dgnus/lisp/nnmh.el Sun Apr 16 00:38:36 1995 --- dgnus/lisp/nnmh.el Mon Apr 17 06:29:09 1995 *************** *** 49,59 **** "Current news group directory.") (defvar nnmh-status-string "") - (defvar nnmh-group-alist nil) ;;; Interface functions. (defun nnmh-retrieve-headers (sequence &optional newsgroup server) --- 49,70 ---- "Current news group directory.") (defvar nnmh-status-string "") (defvar nnmh-group-alist nil) + (defvar nnmh-current-server nil) + (defvar nnmh-server-alist nil) + (defvar nnmh-server-variables + (list + (list 'nnmh-directory nnmh-directory) + (list 'nnmh-get-new-mail nnmh-get-new-mail) + '(nnmh-current-directory nil) + '(nnmh-status-string "") + '(nnmh-group-alist))) + + + ;;; Interface functions. (defun nnmh-retrieve-headers (sequence &optional newsgroup server) *************** *** 101,116 **** (replace-match " " t t)) 'headers))) ! (defun nnmh-open-server (host &optional service) ! (setq nnmh-status-string "") ! (nnheader-init-server-buffer)) (defun nnmh-close-server (&optional server) t) (defun nnmh-server-opened (&optional server) ! (and nntp-server-buffer ! (get-buffer nntp-server-buffer))) (defun nnmh-status-message (&optional server) nnmh-status-string) --- 112,139 ---- (replace-match " " t t)) 'headers))) ! (defun nnmh-open-server (server &optional defs) ! (nnheader-init-server-buffer) ! (if (equal server nnmh-current-server) ! t ! (if nnmh-current-server ! (setq nnmh-server-alist ! (cons (list nnmh-current-server ! (nnheader-save-variables nnmh-server-variables)) ! nnmh-server-alist))) ! (let ((state (assoc server nnmh-server-alist))) ! (if state ! (progn ! (nnheader-restore-variables (nth 1 state)) ! (setq nnmh-server-alist (delq state nnmh-server-alist))) ! (nnheader-set-init-variables nnmh-server-variables defs))) ! (setq nnmh-current-server server))) (defun nnmh-close-server (&optional server) t) (defun nnmh-server-opened (&optional server) ! (equal server nnmh-current-server)) (defun nnmh-status-message (&optional server) nnmh-status-string) *************** *** 167,177 **** (setq dir nnmh-directory))) (setq dir (expand-file-name dir)) ;; Recurse down all directories. ! (let ((dirs (directory-files dir t nil t))) (while dirs (if (and (not (string-match "/\\.\\.$" (car dirs))) (not (string-match "/\\.$" (car dirs))) ! (file-directory-p (car dirs))) (nnmh-request-list server (car dirs))) (setq dirs (cdr dirs)))) ;; For each directory, generate an active file line. --- 190,202 ---- (setq dir nnmh-directory))) (setq dir (expand-file-name dir)) ;; Recurse down all directories. ! (let ((dirs (and (file-readable-p dir) ! (directory-files dir t nil t)))) (while dirs (if (and (not (string-match "/\\.\\.$" (car dirs))) (not (string-match "/\\.$" (car dirs))) ! (file-directory-p (car dirs)) ! (file-readable-p (car dirs))) (nnmh-request-list server (car dirs))) (setq dirs (cdr dirs)))) ;; For each directory, generate an active file line. diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnml.el dgnus/lisp/nnml.el *** pub/dgnus/lisp/nnml.el Sun Apr 16 00:38:36 1995 --- dgnus/lisp/nnml.el Mon Apr 17 06:29:09 1995 *************** *** 70,75 **** --- 70,94 ---- + ;; Server variables. + + (defvar nnml-current-server nil) + (defvar nnml-server-alist nil) + (defvar nnml-server-variables + (list + (list 'nnml-directory nnml-directory) + (list 'nnml-active-file nnml-active-file) + (list 'nnml-newsgroups-file nnml-newsgroups-file) + (list 'nnml-get-new-mail nnml-get-new-mail) + (list 'nnml-nov-is-evil nnml-nov-is-evil) + '(nnml-current-directory nil) + '(nnml-status-string "") + '(nnml-nov-buffer-alist nil) + '(nnml-group-alist nil) + '(nnml-active-timestamp nil))) + + + ;;; Interface functions. (defun nnml-retrieve-headers (sequence &optional newsgroup server) *************** *** 120,135 **** (replace-match " " t t)) 'headers)))) ! (defun nnml-open-server (host &optional service) ! (setq nnml-status-string "") ! (nnheader-init-server-buffer)) (defun nnml-close-server (&optional server) t) (defun nnml-server-opened (&optional server) ! (and nntp-server-buffer ! (get-buffer nntp-server-buffer))) (defun nnml-status-message (&optional server) nnml-status-string) --- 139,166 ---- (replace-match " " t t)) 'headers)))) ! (defun nnml-open-server (server &optional defs) ! (nnheader-init-server-buffer) ! (if (equal server nnml-current-server) ! t ! (if nnml-current-server ! (setq nnml-server-alist ! (cons (list nnml-current-server ! (nnheader-save-variables nnml-server-variables)) ! nnml-server-alist))) ! (let ((state (assoc server nnml-server-alist))) ! (if state ! (progn ! (nnheader-restore-variables (nth 1 state)) ! (setq nnml-server-alist (delq state nnml-server-alist))) ! (nnheader-set-init-variables nnml-server-variables defs))) ! (setq nnml-current-server server))) (defun nnml-close-server (&optional server) t) (defun nnml-server-opened (&optional server) ! (equal server nnml-current-server)) (defun nnml-status-message (&optional server) nnml-status-string) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnspool.el dgnus/lisp/nnspool.el *** pub/dgnus/lisp/nnspool.el Sun Apr 16 00:38:36 1995 --- dgnus/lisp/nnspool.el Mon Apr 17 06:29:08 1995 *************** *** 80,85 **** --- 80,106 ---- + (defvar nnspool-current-server nil) + (defvar nnspool-server-alist nil) + (defvar nnspool-server-variables + (list + (list 'nnspool-inews-program nnspool-inews-program) + (list 'nnspool-inews-switches nnspool-inews-switches) + (list 'nnspool-spool-directory nnspool-spool-directory) + (list 'nnspool-nov-directory nnspool-nov-directory) + (list 'nnspool-lib-dir nnspool-lib-dir) + (list 'nnspool-active-file nnspool-active-file) + (list 'nnspool-newsgroups-file nnspool-newsgroups-file) + (list 'nnspool-distributions-file nnspool-distributions-file) + (list 'nnspool-history-file nnspool-history-file) + (list 'nnspool-active-times-file nnspool-active-times-file) + (list 'nnspool-large-newsgroup nnspool-large-newsgroup) + (list 'nnspool-nov-is-evil nnspool-nov-is-evil) + '(nnspool-current-directory nil) + '(nnspool-current-group nil) + '(nnspool-status-string ""))) + + ;;; Interface functions. (defun nnspool-retrieve-headers (sequence &optional newsgroup server) *************** *** 126,151 **** (replace-match " " t t)) 'headers))))) ! (defun nnspool-open-server (host &optional service) ! "Open local spool." ! (setq nnspool-status-string "") ! (cond ((and (file-directory-p nnspool-spool-directory) ! (file-exists-p nnspool-active-file)) ! (nnheader-init-server-buffer)) ! (t ! (setq nnspool-status-string ! (format "NNSPOOL: cannot talk to %s." host)) ! nil))) (defun nnspool-close-server (&optional server) - "Close news server." t) (defun nnspool-server-opened (&optional server) ! "Return server process status, T or NIL. ! If the stream is opened, return T, otherwise return NIL." ! (and nntp-server-buffer ! (buffer-name nntp-server-buffer))) (defun nnspool-status-message (&optional server) "Return server status response as string." --- 147,174 ---- (replace-match " " t t)) 'headers))))) ! (defun nnspool-open-server (server &optional defs) ! (nnheader-init-server-buffer) ! (if (equal server nnspool-current-server) ! t ! (if nnspool-current-server ! (setq nnspool-server-alist ! (cons (list nnspool-current-server ! (nnheader-save-variables nnspool-server-variables)) ! nnspool-server-alist))) ! (let ((state (assoc server nnspool-server-alist))) ! (if state ! (progn ! (nnheader-restore-variables (nth 1 state)) ! (setq nnspool-server-alist (delq state nnspool-server-alist))) ! (nnheader-set-init-variables nnspool-server-variables defs))) ! (setq nnspool-current-server server))) (defun nnspool-close-server (&optional server) t) (defun nnspool-server-opened (&optional server) ! (equal server nnspool-current-server)) (defun nnspool-status-message (&optional server) "Return server status response as string." diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nntp.el dgnus/lisp/nntp.el *** pub/dgnus/lisp/nntp.el Sun Apr 16 00:38:36 1995 --- dgnus/lisp/nntp.el Wed Apr 19 03:48:23 1995 *************** *** 48,54 **** (setq kanji-fileio-code 0)))) If you'd like to change something depending on the server in this ! hook, use the variable `nntp-server-name'.") (defvar nntp-server-opened-hook nil "Hook used for sending commands to the server at startup. The --- 48,54 ---- (setq kanji-fileio-code 0)))) If you'd like to change something depending on the server in this ! hook, use the variable `nntp-address'.") (defvar nntp-server-opened-hook nil "Hook used for sending commands to the server at startup. The *************** *** 59,64 **** --- 59,70 ---- on servers that use strict access control.") (add-hook 'nntp-server-opened-hook 'nntp-send-mode-reader) + (defvar nntp-address nil + "The name of the NNTP server.") + + (defvar nntp-port-number "nntp" + "Port number to connect to.") + (defvar nntp-large-newsgroup 50 "The number of the articles which indicates a large newsgroup. If the number of the articles is greater than the value, verbose *************** *** 93,105 **** "Number of seconds to wait before an nntp connection times out. If this variable is nil, which is the default, no timers are set.") (defconst nntp-version "nntp 4.0" "Version numbers of this version of NNTP.") - (defvar nntp-server-name nil - "The name of the NNTP server.") - (defvar nntp-server-buffer nil "Buffer associated with the NNTP server process.") --- 99,112 ---- "Number of seconds to wait before an nntp connection times out. If this variable is nil, which is the default, no timers are set.") + (defvar nntp-news-default-headers nil + "If non-nil, override `mail-default-headers' when posting news.") + + (defconst nntp-version "nntp 4.0" "Version numbers of this version of NNTP.") (defvar nntp-server-buffer nil "Buffer associated with the NNTP server process.") *************** *** 113,124 **** You'd better not use this variable in NNTP front-end program but instead call function `nntp-status-message' to get status message.") - (defvar nntp-current-server "") - (defvar nntp-server-alist nil) (defvar nntp-server-xover t) (defvar nntp-server-list-active-group t) (defvar nntp-current-group "") ;;; Interface funtions. (defun nntp-retrieve-headers (sequence &optional newsgroup server) --- 120,153 ---- You'd better not use this variable in NNTP front-end program but instead call function `nntp-status-message' to get status message.") (defvar nntp-server-xover t) (defvar nntp-server-list-active-group t) (defvar nntp-current-group "") + + (defvar nntp-current-server nil) + (defvar nntp-server-alist nil) + (defvar nntp-server-variables + (list + (list 'nntp-server-hook nntp-server-hook) + (list 'nntp-server-opened-hook nntp-server-opened-hook) + (list 'nntp-port-number nntp-port-number) + (list 'nntp-address nntp-address) + (list 'nntp-large-newsgroup nntp-large-newsgroup) + (list 'nntp-buggy-select nntp-buggy-select) + (list 'nntp-maximum-request nntp-maximum-request) + (list 'nntp-debug-read nntp-debug-read) + (list 'nntp-nov-is-evil nntp-nov-is-evil) + (list 'nntp-xover-commands nntp-xover-commands) + (list 'nntp-connection-timeout nntp-connection-timeout) + (list 'nntp-news-default-headers nntp-news-default-headers) + '(nntp-server-process nil) + '(nntp-status-string nil) + '(nntp-server-xover t) + '(nntp-server-list-active-group t) + '(nntp-current-group ""))) + + ;;; Interface funtions. (defun nntp-retrieve-headers (sequence &optional newsgroup server) *************** *** 185,222 **** (replace-match "" t t)) 'headers)))) ! (defun nntp-open-server (server &optional service) ! "Open SERVER. ! If SERVER is nil, use value of environment variable `NNTPSERVER'. ! If SERVICE, this this as the port number." ! (let ((server (or server (getenv "NNTPSERVER"))) ! (status nil) ! (timer ! (and nntp-connection-timeout ! (run-at-time nntp-connection-timeout ! nil 'nntp-kill-connection server)))) ! (setq nntp-status-string "") ! (message "nntp: Connecting to server on %s..." server) ! (cond ((and server (nntp-open-server-internal server service)) ! (setq nntp-current-server server) ! (setq status ! (condition-case nil ! (nntp-wait-for-response "^[23].*\r$") ! (error nil) ! (quit nil))) ! (or status (nntp-close-server-internal server)) ! (and nntp-server-process ! (progn ! (set-process-sentinel ! nntp-server-process 'nntp-default-sentinel) ! ;; You can send commands at startup like AUTHINFO here. ! ;; Added by Hallvard B Furuseth ! (run-hooks 'nntp-server-opened-hook)))) ! ((null server) ! (setq nntp-status-string "NNTP server is not specified."))) ! (and timer (cancel-timer timer)) ! (message "") ! status)) (defun nntp-close-server (&optional server) "Close connection to SERVER." --- 214,239 ---- (replace-match "" t t)) 'headers)))) ! (defun nntp-open-server (server &optional defs) ! (nnheader-init-server-buffer) ! (if (nntp-server-opened server) ! t ! (or (assq 'nntp-address defs) ! (setq defs (append defs (list (list 'nntp-address server))))) ! (if (and nntp-current-server ! (not (equal server nntp-current-server))) ! (setq nntp-server-alist ! (cons (list nntp-current-server ! (nnheader-save-variables nntp-server-variables)) ! nntp-server-alist))) ! (let ((state (assoc server nntp-server-alist))) ! (if state ! (progn ! (nnheader-restore-variables (nth 1 state)) ! (setq nntp-server-alist (delq state nntp-server-alist))) ! (nnheader-set-init-variables nntp-server-variables defs))) ! (setq nntp-current-server server) ! (nntp-open-server-semi-internal nntp-address))) (defun nntp-close-server (&optional server) "Close connection to SERVER." *************** *** 237,255 **** (defun nntp-request-close () "Close all server connections." ! (while nntp-server-alist ! (delete-process (car (cdr (car nntp-server-alist)))) ! (setq nntp-server-alist (cdr nntp-server-alist))) ! (setq nntp-current-server "") ! (setq nntp-server-process nil)) (defun nntp-server-opened (&optional server) "Say whether a connection to SERVER has been opened." ! (if (or server nntp-current-server) ! (let ((process (nth 1 (assoc (or server nntp-current-server) ! nntp-server-alist)))) ! (and process ! (memq (process-status process) '(open run)))))) (defun nntp-status-message (&optional server) "Return server status as a string." --- 254,271 ---- (defun nntp-request-close () "Close all server connections." ! (let (proc) ! (while nntp-server-alist ! (setq proc (nth 1 (assq 'nntp-server-process (car nntp-server-alist)))) ! (and proc (delete-process proc)) ! (setq nntp-server-alist (cdr nntp-server-alist))) ! (setq nntp-current-server nil))) (defun nntp-server-opened (&optional server) "Say whether a connection to SERVER has been opened." ! (and (equal server nntp-current-server) ! nntp-server-process ! (memq (process-status nntp-server-process) '(open run)))) (defun nntp-status-message (&optional server) "Return server status as a string." *************** *** 300,343 **** (defun nntp-request-group (group &optional server dont-check) "Select GROUP." ! (if (not (nntp-possibly-change-server nil server)) ! () ! (if dont-check ! (nntp-send-command "^.*\r$" "GROUP" group) ! (if nntp-server-list-active-group ! (save-excursion ! (nntp-list-active-group group server) ! (set-buffer nntp-server-buffer) ! (goto-char (point-min)) ! ;; We look at the output from `nntp-list-active-group' to ! ;; see whether the server supports this command. If it ! ;; does, we transform the output. ! (cond ((looking-at "2[0-9]+") ! (forward-line 1) ! (if (looking-at "[^ ] +\\([0-9]\\) +\\([0-9]\\)") ! (let ((end (progn (goto-char (match-beginning 1)) ! (read (current-buffer)))) ! (beg (read (current-buffer)))) ! (and (> beg end) ! (setq end 0 ! beg 0)) ! (erase-buffer) ! (insert (format "211 %s %d %d %d\n" ! group (max (- (1+ end) beg) 0) ! beg end))))) ! ;; The server does not support the command. ! ((looking-at "5[0-9]+") ! (setq nntp-server-list-active-group nil) ! (setcar (nthcdr ! 3 (assoc nntp-current-server nntp-server-alist)) ! nntp-server-xover) ! (nntp-send-command "^.*\r$" "GROUP" group)) ! ;; The server supports it, but the group doesn't ! ;; exist. ! ((looking-at "4[0-9]+") ! (erase-buffer) ! nil))) ! (nntp-send-command "^.*\r$" "GROUP" group))))) (defun nntp-list-active-group (group &optional server) (nntp-send-command "^.*\r$" "LIST ACTIVE" group)) --- 316,354 ---- (defun nntp-request-group (group &optional server dont-check) "Select GROUP." ! (if dont-check ! (nntp-send-command "^.*\r$" "GROUP" group) ! (if nntp-server-list-active-group ! (save-excursion ! (nntp-list-active-group group server) ! (set-buffer nntp-server-buffer) ! (goto-char (point-min)) ! ;; We look at the output from `nntp-list-active-group' to ! ;; see whether the server supports this command. If it ! ;; does, we transform the output. ! (cond ((looking-at "2[0-9]+") ! (forward-line 1) ! (if (looking-at "[^ ] +\\([0-9]\\) +\\([0-9]\\)") ! (let ((end (progn (goto-char (match-beginning 1)) ! (read (current-buffer)))) ! (beg (read (current-buffer)))) ! (and (> beg end) ! (setq end 0 ! beg 0)) ! (erase-buffer) ! (insert (format "211 %s %d %d %d\n" ! group (max (- (1+ end) beg) 0) ! beg end))))) ! ;; The server does not support the command. ! ((looking-at "5[0-9]+") ! (setq nntp-server-list-active-group nil) ! (nntp-send-command "^.*\r$" "GROUP" group)) ! ;; The server supports it, but the group doesn't ! ;; exist. ! ((looking-at "4[0-9]+") ! (erase-buffer) ! nil))) ! (nntp-send-command "^.*\r$" "GROUP" group)))) (defun nntp-list-active-group (group &optional server) (nntp-send-command "^.*\r$" "LIST ACTIVE" group)) *************** *** 420,427 **** (if (assq 'to-address (nth 4 info)) (nnmail-request-post-buffer post group subject header article-buffer info follow-to respect-poster) ! (let (from date to followup-to newsgroups message-of ! references distribution message-id) (save-excursion (set-buffer (get-buffer-create "*post-news*")) (news-reply-mode) --- 431,440 ---- (if (assq 'to-address (nth 4 info)) (nnmail-request-post-buffer post group subject header article-buffer info follow-to respect-poster) ! (let ((mail-default-headers ! (or nntp-news-default-headers mail-default-headers)) ! from date to followup-to newsgroups message-of ! references distribution message-id) (save-excursion (set-buffer (get-buffer-create "*post-news*")) (news-reply-mode) *************** *** 516,530 **** ;; server that the process that sent the signal is connected to. ;; If you get my drift. (while (and servers ! (not (equal proc (nth 1 (car servers))))) (setq servers (cdr servers))) (message "nntp: Connection closed to server %s." (or (car (car servers)) "(none)")) (ding))) (defun nntp-kill-connection (server) ! (let ((proc (nth 1 (assoc server nntp-server-alist)))) ! (if proc (delete-process (process-name proc))) (nntp-close-server server) (setq nntp-status-string (message "Connection timed out to server %s." server)) --- 529,545 ---- ;; server that the process that sent the signal is connected to. ;; If you get my drift. (while (and servers ! (not (equal proc (nth 1 (assq 'nntp-server-process ! (car servers)))))) (setq servers (cdr servers))) (message "nntp: Connection closed to server %s." (or (car (car servers)) "(none)")) (ding))) (defun nntp-kill-connection (server) ! (let ((proc (nth 1 (assq 'nntp-server-process ! (assoc server nntp-server-alist))))) ! (and proc (delete-process (process-name proc))) (nntp-close-server server) (setq nntp-status-string (message "Connection timed out to server %s." server)) *************** *** 676,683 **** (setq commands (cdr commands))) (if (eq t nntp-server-xover) (setq nntp-server-xover nil)) - (setcar (nthcdr 2 (assoc nntp-current-server nntp-server-alist)) - nntp-server-xover) nntp-server-xover)) (if nntp-server-xover (nntp-decode-text) (erase-buffer)))))) --- 691,696 ---- *************** *** 692,699 **** ;; Command line must be terminated by a CR-LF. (if (not (nntp-server-opened nntp-current-server)) (progn ! (nntp-close-server nntp-current-server) ! (if (not (nntp-open-server nntp-current-server)) (error (nntp-status-message))) (save-excursion (set-buffer nntp-server-buffer) --- 705,712 ---- ;; Command line must be terminated by a CR-LF. (if (not (nntp-server-opened nntp-current-server)) (progn ! (nntp-close-server nntp-address) ! (if (not (nntp-open-server nntp-address)) (error (nntp-status-message))) (save-excursion (set-buffer nntp-server-buffer) *************** *** 732,737 **** --- 745,785 ---- ;; We cannot erase buffer, because reply may be received. (delete-region begin end))) + (defun nntp-open-server-semi-internal (server &optional service) + "Open SERVER. + If SERVER is nil, use value of environment variable `NNTPSERVER'. + If SERVICE, this this as the port number." + (let ((server (or server (getenv "NNTPSERVER"))) + (status nil) + (timer + (and nntp-connection-timeout + (run-at-time nntp-connection-timeout + nil 'nntp-kill-connection server)))) + (setq nntp-status-string "") + (message "nntp: Connecting to server on %s..." server) + (cond ((and server (nntp-open-server-internal server service)) + (setq nntp-address server) + (setq status + (condition-case nil + (nntp-wait-for-response "^[23].*\r$") + (error nil) + (quit nil))) + (or status (nntp-close-server-internal server)) + (and nntp-server-process + (progn + (set-process-sentinel + nntp-server-process 'nntp-default-sentinel) + ;; You can send commands at startup like AUTHINFO here. + ;; Added by Hallvard B Furuseth + (run-hooks 'nntp-server-opened-hook)))) + ((null server) + (setq nntp-status-string "NNTP server is not specified."))) + (and timer (cancel-timer timer)) + (message "") + (or status + (setq nntp-current-server nil)) + status)) + (defun nntp-open-server-internal (server &optional service) "Open connection to news server on SERVER by SERVICE (default is nntp)." (let (proc) *************** *** 745,751 **** (if (setq proc (condition-case nil (open-network-stream ! "nntpd" (current-buffer) server (or service "nntp")) (error nil))) (progn (setq nntp-server-process proc) --- 793,799 ---- (if (setq proc (condition-case nil (open-network-stream ! "nntpd" (current-buffer) server nntp-port-number) (error nil))) (progn (setq nntp-server-process proc) *************** *** 753,761 **** (process-kill-without-query proc) (setq nntp-server-xover t) (setq nntp-server-list-active-group t) ! (setq nntp-server-name server) ! (setq nntp-server-alist (cons (list server nntp-server-process t t) ! nntp-server-alist)) ;; It is possible to change kanji-fileio-code in this hook. (run-hooks 'nntp-server-hook) nntp-server-process))))) --- 801,807 ---- (process-kill-without-query proc) (setq nntp-server-xover t) (setq nntp-server-list-active-group t) ! (setq nntp-address server) ;; It is possible to change kanji-fileio-code in this hook. (run-hooks 'nntp-server-hook) nntp-server-process))))) *************** *** 766,774 **** (if nntp-server-process (delete-process nntp-server-process)) (setq nntp-server-process nil) ! (setq nntp-server-alist (delq (assoc nntp-current-server nntp-server-alist) ! nntp-server-alist)) ! (setq nntp-current-server "")) (defun nntp-accept-response () "Read response of server. --- 812,818 ---- (if nntp-server-process (delete-process nntp-server-process)) (setq nntp-server-process nil) ! (setq nntp-address "")) (defun nntp-accept-response () "Read response of server. *************** *** 805,834 **** (car list)) (defun nntp-possibly-change-server (newsgroup server) ! (let (result changed-server) ! ;; First see if we need to change the server - or even open a new ! ;; server. ! (if (and server (not (string= server nntp-current-server))) ! (progn ! ;; Fix by Sudish Joseph . ! (if (or (assoc server nntp-server-alist) ! (nntp-open-server server)) ! ;; `nntp-open-server' may change `nntp-server-alist', so ! ;; we assoc again. ! (let ((info (assoc server nntp-server-alist))) ! (setq nntp-current-server server) ! ;; Variable for backwards compatability. ! (setq nntp-server-name server) ! (setq nntp-server-process (nth 1 info)) ! (setq nntp-server-xover (nth 2 info)) ! (setq nntp-server-list-active-group (nth 3 info)) ! (setq changed-server t) ! (setq result t)))) ! (setq result t)) ! ;; The we see whether it is necessary to change newsgroup. ! (and newsgroup result ! (or (not (string= newsgroup nntp-current-group)) ! changed-server) (progn (setq result (nntp-request-group newsgroup server)) (setq nntp-current-group newsgroup))) --- 849,858 ---- (car list)) (defun nntp-possibly-change-server (newsgroup server) ! (let ((result t)) ! ;; We see whether it is necessary to change newsgroup. ! (and newsgroup ! (or (not (string= newsgroup nntp-current-group))) (progn (setq result (nntp-request-group newsgroup server)) (setq nntp-current-group newsgroup))) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/texi/gnus.texi dgnus/texi/gnus.texi *** pub/dgnus/texi/gnus.texi Sun Apr 16 00:38:40 1995 --- dgnus/texi/gnus.texi Mon Apr 17 07:39:04 1995 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @comment %**start of header (This is for running Texinfo on a region.) @setfilename gnus ! @settitle Gnus 0.50 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @comment %**start of header (This is for running Texinfo on a region.) @setfilename gnus ! @settitle Gnus 0.51 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 20,26 **** This file documents Gnus, the GNU Emacs newsreader. ! Copyright (C) 1989, 1990, 1993, 1995 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice --- 20,26 ---- This file documents Gnus, the GNU Emacs newsreader. ! Copyright (C) 1995 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice *************** *** 48,54 **** @author by Lars Magne Ingebrigtsen @page @vskip 0pt plus 1filll ! Copyright @copyright{} 1989, 1990, 1993 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice --- 48,54 ---- @author by Lars Magne Ingebrigtsen @page @vskip 0pt plus 1filll ! Copyright @copyright{} 1995 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice *************** *** 81,90 **** * The Group Buffer:: Selecting, subscribing and killing groups. * The Summary Buffer:: Reading, saving and posting articles. * The Article Buffer:: Displaying and handling articles. * Various:: General purpose settings. * Customization:: Tailoring Gnus to your needs. * Troubleshooting:: What you might try if things do not work. ! * Reporting Bugs:: Bugs? What bugs?! * Index:: Variable, function and concept index. * Key Index:: Key Index. @end menu --- 81,91 ---- * The Group Buffer:: Selecting, subscribing and killing groups. * The Summary Buffer:: Reading, saving and posting articles. * The Article Buffer:: Displaying and handling articles. + * The Server Buffer:: Making and editing virtual servers. * Various:: General purpose settings. * Customization:: Tailoring Gnus to your needs. * Troubleshooting:: What you might try if things do not work. ! * The End:: Farewell, and goodbye. * Index:: Variable, function and concept index. * Key Index:: Key Index. @end menu *************** *** 200,206 **** The new Gnus version couldn't have been done without the help of all the people on the (ding) mailing list. Every day for months I have gotten tens of nice bug reports from them, filling me with joy, every single ! one of them. Smooches. I would like to take this opportunity to thank the Academy for... oops, wrong show. --- 201,212 ---- The new Gnus version couldn't have been done without the help of all the people on the (ding) mailing list. Every day for months I have gotten tens of nice bug reports from them, filling me with joy, every single ! one of them. Smooches. The people on the list have been tried beyond ! endurance, what with my "oh, that's a neat idea , yup, I'll ! release it right away no wait, that doesn't work at all , yup, I'll ship that one off right away no, wait, that ! aboslutely does not work" policy for releases. Microsoft - bah. I'm ! @emph{much} worse. I would like to take this opportunity to thank the Academy for... oops, wrong show. *************** *** 226,233 **** Various bits and pieces, especially dealing with .newsrc files, was suggested and added by Hallvard B Furuseth. @item ! Stainless Steel Rat, Brian Edmonds, Jack Vinson, Daniel Quinlan, Ilja ! Weis, Andrew Eskilsson have all contributed code and suggestions. @end itemize --- 232,242 ---- Various bits and pieces, especially dealing with .newsrc files, was suggested and added by Hallvard B Furuseth. @item ! Brian Edmonds has written @code{gnus-bbdb}, as well as other bits and ! pieces. ! @item ! Stainless Steel Rat, Jack Vinson, Daniel Quinlan, Ilja Weis and Andrew ! Eskilsson have all contributed code and suggestions. @end itemize *************** *** 382,387 **** --- 391,404 ---- @item foreign You can also have any number of foreign groups at the same time. These are groups that use different backends for getting news. + @item head + @cindex head + The top part of an article, where administration information (etc.) is + put. + @item body + @cindex + The rest of an article. Everything that is not in the head is in the + body. @item header @cindex header A line from the head of an article. *************** *** 400,409 **** Each group is subscribed at some @dfn{level} or other (1-9). The ones that have a lower level are "more" subscribed than the groups with a higher level. In fact, groups on levels 1-5 are considered ! "subscribed"; 6-7 are "unsubscribed"; 8 are zombies; and 9 are killed. ! Commands for listing groups and scanning for new articles will all use ! the numeric prefix as @dfn{working level}. @item active file The news server has to keep track of what articles it carries, and what groups exist. All this information in stored in the active file, which is rather large, as you might surmise. --- 417,434 ---- Each group is subscribed at some @dfn{level} or other (1-9). The ones that have a lower level are "more" subscribed than the groups with a higher level. In fact, groups on levels 1-5 are considered ! @dfn{subscribed}; 6-7 are @dfn{unsubscribed}; 8 are @dfn{zombies}; and 9 ! are @dfn{killed}. Commands for listing groups and scanning for new ! articles will all use the numeric prefix as @dfn{working level}. ! @item killed groups ! @cindex killed groups ! No information on killed groups is stored or updated, which makes killed ! groups much easier to handle than subscribed groups. ! @item zombie groups ! @cindex zombie groups ! Just like killed groups, only slightly less dead. @item active file + @cindex active file The news server has to keep track of what articles it carries, and what groups exist. All this information in stored in the active file, which is rather large, as you might surmise. *************** *** 436,453 **** @vindex gnus-select-method The @code{gnus-select-method} variable controls how Gnus finds news. ! This variable should be a list where the first element says "how" and ! the second element says "where". This method is is your native method. ! All groups that are not fetched with this method are foreign groups. For instance, if you want to get your daily dosage of news from the ! @sc{nntp} server @samp{news.friendly.server}, you'd say: @lisp ! (setq gnus-select-method '(nntp "news.friendly.server")) @end lisp ! If you want to use a local spool, say: @lisp (setq gnus-select-method '(nnspool "")) --- 461,479 ---- @vindex gnus-select-method The @code{gnus-select-method} variable controls how Gnus finds news. ! This variable should be a list where the first element says @dfn{how} ! and the second element says @dfn{where}. This method is is your native ! method. All groups that are not fetched with this method are foreign ! groups. For instance, if you want to get your daily dosage of news from the ! @samp{news.somewhere.edu} @sc{nntp} server, you'd say: @lisp ! (setq gnus-select-method '(nntp "news.somewhere.edu")) @end lisp ! If you want to read directly from the local spool, say: @lisp (setq gnus-select-method '(nnspool "")) *************** *** 673,679 **** @vindex gnus-startup-file The @code{gnus-startup-file} variable says where the startup files are. The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup ! file being whatever that one is with a @samp{".eld"} appended. @vindex gnus-save-newsrc-hook @code{gnus-save-newsrc-hook} is called before saving the @file{.newsrc} --- 699,705 ---- @vindex gnus-startup-file The @code{gnus-startup-file} variable says where the startup files are. The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup ! file being whatever that one is with a @samp{.eld} appended. @vindex gnus-save-newsrc-hook @code{gnus-save-newsrc-hook} is called before saving the @file{.newsrc} *************** *** 900,906 **** Go to the next group that has unread articles (@code{gnus-group-next-unread-group}). @item p ! @item DEL @kindex DEL (Group) @kindex p (Group) @findex gnus-group-prev-unread-group --- 926,932 ---- Go to the next group that has unread articles (@code{gnus-group-next-unread-group}). @item p ! @itemx DEL @kindex DEL (Group) @kindex p (Group) @findex gnus-group-prev-unread-group *************** *** 1036,1049 **** @table @kbd @item S t ! @item u @kindex S t (Group) @kindex u (Group) @findex gnus-group-unsubscribe-current-group Toggle subscription to the current group (@code{gnus-group-unsubscribe-current-group}). @item S s ! @item U @kindex S s (Group) @kindex U (Group) @findex gnus-group-unsubscribe-group --- 1062,1075 ---- @table @kbd @item S t ! @itemx u @kindex S t (Group) @kindex u (Group) @findex gnus-group-unsubscribe-current-group Toggle subscription to the current group (@code{gnus-group-unsubscribe-current-group}). @item S s ! @itemx U @kindex S s (Group) @kindex U (Group) @findex gnus-group-unsubscribe-group *************** *** 1051,1069 **** subscribed already, unsubscribe it instead (@code{gnus-group-unsubscribe-group}). @item S k ! @item C-k @kindex S k (Group) @kindex C-k (Group) @findex gnus-group-kill-group Kill the current group (@code{gnus-group-kill-group}). @item S y ! @item C-y @kindex S y (Group) @kindex C-y (Group) @findex gnus-group-yank-group Yank the last killed group (@code{gnus-group-yank-group}). @item S w ! @item C-w @kindex S w (Group) @kindex C-w (Group) @findex gnus-group-kill-region --- 1077,1095 ---- subscribed already, unsubscribe it instead (@code{gnus-group-unsubscribe-group}). @item S k ! @itemx C-k @kindex S k (Group) @kindex C-k (Group) @findex gnus-group-kill-group Kill the current group (@code{gnus-group-kill-group}). @item S y ! @itemx C-y @kindex S y (Group) @kindex C-y (Group) @findex gnus-group-yank-group Yank the last killed group (@code{gnus-group-yank-group}). @item S w ! @itemx C-w @kindex S w (Group) @kindex C-w (Group) @findex gnus-group-kill-region *************** *** 1115,1120 **** --- 1141,1151 ---- handy if you want to read the most important groups before you read the rest. + @vindex gnus-group-default-list-level + All groups with a level less than or equal to + @code{gnus-group-default-list-level} will be listed in the group buffer + by default. + @node Foreign Groups @section Foreign Groups @cindex foreign groups *************** *** 1243,1270 **** Quite simple, eh? @strong{Ouch}. - Let's take time out for a poem by Reznikoff: - - @quotation - Te Deum - @sp 1 - Not because of victories @* - I sing,@* - having none,@* - but for the common sunshine,@* - the breeze,@* - the largess of the spring. - @sp 1 - Not for victory@* - but for the day's work done@* - as well as I was able;@* - not for a seat upon the dais@* - but at the common table.@* - @end quotation - @node nntp ! @subsection @sc{nntp} ! @cindex nntp Subscribing to a foreign group from an @sc{nntp} server is rather easy. You just specify @code{nntp} as method and the address of the @sc{nntp} --- 1274,1282 ---- Quite simple, eh? @strong{Ouch}. @node nntp ! @subsection nntp ! @cindex @sc{nntp} Subscribing to a foreign group from an @sc{nntp} server is rather easy. You just specify @code{nntp} as method and the address of the @sc{nntp} *************** *** 1460,1468 **** nndoc is a cute little thing that will let you read a single file as a newsgroup. The file has to be divided into articles by the use of Unix ! mbox "From " lines. nndoc will not try to change the file or insert any ! extra headers into it - it will simply, like, let you use the file as ! the basis for a group. And that's it. @node nndigest @subsection nndigest --- 1472,1480 ---- nndoc is a cute little thing that will let you read a single file as a newsgroup. The file has to be divided into articles by the use of Unix ! mbox @samp{From } lines. nndoc will not try to change the file or ! insert any extra headers into it - it will simply, like, let you use the ! file as the basis for a group. And that's it. @node nndigest @subsection nndigest *************** *** 1519,1525 **** @code{nnmail-spool-file} says where to look for new mail. If this variable is @code{nil}, the mail backends will never attempt to fetch mail by themselves. It is quite likely that Gnus supports POP-mail. ! Set this variable to begin with the string @samp{"po:"}, and everything should go smoothly, even though I have never tested this. @vindex nnmail-prepare-incoming-hook --- 1531,1537 ---- @code{nnmail-spool-file} says where to look for new mail. If this variable is @code{nil}, the mail backends will never attempt to fetch mail by themselves. It is quite likely that Gnus supports POP-mail. ! Set this variable to begin with the string @samp{po:}, and everything should go smoothly, even though I have never tested this. @vindex nnmail-prepare-incoming-hook *************** *** 1530,1536 **** @code{nnmail-tmp-directory} says where to move the incoming mail to while processing it. This is usually done in the same directory that the mail backend habitates (ie. @file{~/Mail/}), but if this variable is ! non-nil, it will be used instead. Gnus gives you all the opportunity you could possibly want for shooting yourself in the foot. Let's say you create a group that will contain --- 1542,1548 ---- @code{nnmail-tmp-directory} says where to move the incoming mail to while processing it. This is usually done in the same directory that the mail backend habitates (ie. @file{~/Mail/}), but if this variable is ! non-@code{nil}, it will be used instead. Gnus gives you all the opportunity you could possibly want for shooting yourself in the foot. Let's say you create a group that will contain *************** *** 1568,1574 **** This variable is a list of lists, where the first element of each of these lists is the name of the mail group (they do not have to be called ! something beginning with @samp{"mail"}, by the way), and the second element is a regular expression used on the header of each mail to determine if it belongs in this mail group. --- 1580,1586 ---- This variable is a list of lists, where the first element of each of these lists is the name of the mail group (they do not have to be called ! something beginning with @samp{mail}, by the way), and the second element is a regular expression used on the header of each mail to determine if it belongs in this mail group. *************** *** 1706,1713 **** habit of assuming that you want to read mail with them. This might not be unreasonable, but it might not be what you want. ! If you set @code{nnmail-spool-file} to nil, none of the backends will ! ever attempt to read incoming mail, which should help. @vindex nnbabyl-get-new-mail @vindex nnmbox-get-new-mail --- 1718,1725 ---- habit of assuming that you want to read mail with them. This might not be unreasonable, but it might not be what you want. ! If you set @code{nnmail-spool-file} to @code{nil}, none of the backends ! will ever attempt to read incoming mail, which should help. @vindex nnbabyl-get-new-mail @vindex nnmbox-get-new-mail *************** *** 1765,1771 **** If you use this backend, Gnus will split all incoming mail into files; one file for each mail, and put the articles into the correct directories under the directory specified by the @code{nnml-directory} ! variable. The default value is @samp{"~/Mail/"}. You do not have to create any directories beforehand; Gnus will take care of all that. --- 1777,1783 ---- If you use this backend, Gnus will split all incoming mail into files; one file for each mail, and put the articles into the correct directories under the directory specified by the @code{nnml-directory} ! variable. The default value is @file{~/Mail/}. You do not have to create any directories beforehand; Gnus will take care of all that. *************** *** 1825,1831 **** @table @kbd @item l ! @item G s @kindex G s (Group) @kindex l (Group) @findex gnus-group-list-groups --- 1837,1843 ---- @table @kbd @item l ! @itemx G s @kindex G s (Group) @kindex l (Group) @findex gnus-group-list-groups *************** *** 1834,1840 **** command will list only groups of level ARG and lower. By default, it only lists groups of level five or lower (ie. just subscribed groups). @item L ! @item G u @kindex G u (Group) @kindex L (Group) @findex gnus-group-list-all-groups --- 1846,1852 ---- command will list only groups of level ARG and lower. By default, it only lists groups of level five or lower (ie. just subscribed groups). @item L ! @itemx G u @kindex G u (Group) @kindex L (Group) @findex gnus-group-list-all-groups *************** *** 1944,1950 **** Unsubscribe to the current group, or, as will be the case here, subscribe to it (@code{gnus-browse-unsubscribe-current-group}). @item l ! @item q @kindex q (Browse) @kindex l (Browse) @findex gnus-browse-exit --- 1956,1962 ---- Unsubscribe to the current group, or, as will be the case here, subscribe to it (@code{gnus-browse-unsubscribe-current-group}). @item l ! @itemx q @kindex q (Browse) @kindex l (Browse) @findex gnus-browse-exit *************** *** 2088,2095 **** @chapter The Summary Buffer @cindex summary buffer ! A line for each article is displayed in the Summay buffer. You can move ! around, read articles, post articles and reply to them. @menu * Summary Buffer Format:: Deciding how the summar buffer is to look. --- 2100,2107 ---- @chapter The Summary Buffer @cindex summary buffer ! A line for each article is displayed in the summary buffer. You can ! move around, read articles, post articles and reply to articles. @menu * Summary Buffer Format:: Deciding how the summar buffer is to look. *************** *** 2125,2135 **** @findex gnus-extract-address-components @vindex gnus-extract-address-components Gnus will use the value of the @code{gnus-extract-address-components} ! variable as a function for getting the name and address parts of a From ! header. Two pre-defined function exist: ! @code{gnus-extract-address-components}, which is the default, quite fast, and ! too simplistic solution, and @code{mail-extract-address-components}, which ! works very nicely, but is slower. @vindex gnus-summary-same-subject @code{gnus-summary-same-subject} is a string indicating that the current --- 2137,2148 ---- @findex gnus-extract-address-components @vindex gnus-extract-address-components Gnus will use the value of the @code{gnus-extract-address-components} ! variable as a function for getting the name and address parts of a ! @code{From} header. Two pre-defined function exist: ! @code{gnus-extract-address-components}, which is the default, quite ! fast, and too simplistic solution, and ! @code{mail-extract-address-components}, which works very nicely, but is ! slower. @vindex gnus-summary-same-subject @code{gnus-summary-same-subject} is a string indicating that the current *************** *** 2150,2215 **** @table @samp @item N ! Article number @item S ! Subject string @item s Subject if the article is the root, @code{gnus-summary-same-subject} otherwise. @item F ! Full From line @item n ! The name (from the @code{From} header field) @item A ! The address (from the @code{From} header field) @item L ! Number of lines in the article @item c ! Number of characters in the article @item I ! Indentation based on thread level @item T Nothing if the article is a root and lots of spaces if it isn't (it ! pushes everything after it off the screen) @item \[ Opening bracket, which is normally @samp{\[}, but can also be @samp{<} for adopted articles. @item \] ! Closing bracked, which is normally @samp{\]}, but can also be @samp{<} for adopted articles. @item < One space for each thread level. @item > Twenty minus thread level spaces. @item U ! Unread ! @item X ! Expirable @item R ! Replied @item i ! Score @item z ! Zcore @item x ! Xref @item D ! Date @item M ! Message-ID @item r ! References @item t ! Number of articles in the current subthread. ! @item x ! Xref @item u User defined specifier. The next character in the format string should be a letter. @sc{gnus} will call the function ! gnus-user-format-function-X, where X is the letter following @samp{%u}. ! The function will be passed the current header as argument. The ! function should return a string, which will be inserted into the summary ! just like information from any other summary specifier. @end table Text between @samp{%(} and @samp{%)} will be highlighted with --- 2163,2226 ---- @table @samp @item N ! Article number. @item S ! Subject string. @item s Subject if the article is the root, @code{gnus-summary-same-subject} otherwise. @item F ! Full @code{From} line. @item n ! The name (from the @code{From} header). @item A ! The address (from the @code{From} header). @item L ! Number of lines in the article. @item c ! Number of characters in the article. @item I ! Indentation based on thread level (@pxref{Customizing Threading}). @item T Nothing if the article is a root and lots of spaces if it isn't (it ! pushes everything after it off the screen). @item \[ Opening bracket, which is normally @samp{\[}, but can also be @samp{<} for adopted articles. @item \] ! Closing bracked, which is normally @samp{\]}, but can also be @samp{>} for adopted articles. @item < One space for each thread level. @item > Twenty minus thread level spaces. @item U ! Unread. @item R ! Replied. @item i ! Score as a number. @item z ! Zcore, @samp{+} if above the default level and @samp{-} if below the ! default level. @item x ! @code{Xref}. @item D ! @code{Date}. @item M ! @code{Message-Id}. @item r ! @code{References}. @item t ! Number of articles in the current subthread. Using this spec will slow ! down summary buffer generation somewhat. @item u User defined specifier. The next character in the format string should be a letter. @sc{gnus} will call the function ! @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter ! following @samp{%u}. The function will be passed the current header as ! argument. The function should return a string, which will be inserted ! into the summary just like information from any other summary specifier. @end table Text between @samp{%(} and @samp{%)} will be highlighted with *************** *** 2233,2257 **** @vindex gnus-summary-mode-line-format You can also change the format of the summary mode bar. Set ! @code{gnus-summary-mode-line-format} to whatever you like. Here's what ! elements you have to play with: @table @samp @item G ! Group name @item A ! Current article number @item V ! Gnus version @item U ! Number of unread articles in this group @item e ! Number of unselected articles in this group @item Z A string with the number of unread and unselected articles represented ! either as @samp{<%U(+%u) more>} if there are both unselected articles, ! and just as @samp{<%U more>} if there are just unread articles and no ! unselected ones. @item g Shortish group name. For instance, @samp{rec.arts.anime} will be shortened to @samp{r.a.anime}. --- 2244,2268 ---- @vindex gnus-summary-mode-line-format You can also change the format of the summary mode bar. Set ! @code{gnus-summary-mode-line-format} to whatever you like. Here are the ! elements you can play with: @table @samp @item G ! Group name. @item A ! Current article number. @item V ! Gnus version. @item U ! Number of unread articles in this group. @item e ! Number of unselected articles in this group. @item Z A string with the number of unread and unselected articles represented ! either as @samp{<%U(+%u) more>} if there are both anread and unselected ! articles, and just as @samp{<%U more>} if there are just unread articles ! and no unselected ones. @item g Shortish group name. For instance, @samp{rec.arts.anime} will be shortened to @samp{r.a.anime}. *************** *** 2275,2295 **** @table @kbd @item G M-n ! @item M-n @kindex M-n (Summary) @kindex G M-n (Summary) @findex gnus-summary-next-unread-subject Go to the next summary line of an unread article (@code{gnus-summary-next-unread-subject}). @item G M-p ! @item M-p @kindex M-p (Summary) @kindex G M-p (Summary) @findex gnus-summary-prev-unread-subject Go to the previous summary line of an unread article (@code{gnus-summary-prev-unread-subject}). @item G g ! @item j @kindex j (Summary) @kindex G g (Summary) @findex gnus-summary-goto-subject --- 2286,2306 ---- @table @kbd @item G M-n ! @itemx M-n @kindex M-n (Summary) @kindex G M-n (Summary) @findex gnus-summary-next-unread-subject Go to the next summary line of an unread article (@code{gnus-summary-next-unread-subject}). @item G M-p ! @itemx M-p @kindex M-p (Summary) @kindex G M-p (Summary) @findex gnus-summary-prev-unread-subject Go to the previous summary line of an unread article (@code{gnus-summary-prev-unread-subject}). @item G g ! @itemx j @kindex j (Summary) @kindex G g (Summary) @findex gnus-summary-goto-subject *************** *** 2303,2312 **** @code{gnus-auto-select-next} is @code{t} and the next group is empty, Gnus will exit summary mode and return to the group buffer. If this variable is neither @code{t} nor @code{nil}, Gnus will select the next ! group, no matter if it has any unread articles or not. As a special ! case, if this variable equals @code{quietly}, Gnus will select the next ! group without asking for confirmation. Also see ! @code{gnus-keep-same-level}. If Gnus asks you to press a key to confirm going to the next group, you can use the @kbd{C-n} and @kbd{C-p} keys to move around the group --- 2314,2322 ---- @code{gnus-auto-select-next} is @code{t} and the next group is empty, Gnus will exit summary mode and return to the group buffer. If this variable is neither @code{t} nor @code{nil}, Gnus will select the next ! group, no matter whether it has any unread articles or not. As a ! special case, if this variable is @code{quietly}, Gnus will select the ! next group without asking for confirmation. Also @xref{Group Levels}. If Gnus asks you to press a key to confirm going to the next group, you can use the @kbd{C-n} and @kbd{C-p} keys to move around the group *************** *** 2316,2322 **** @vindex gnus-auto-center-summary If @code{gnus-auto-center-summary} is non-@code{nil}, Gnus will keep the point in the summary buffer centered at all times. This makes things ! quite tidy, but if you have a slow network connection, or do simply not like this un-Emacsism, you can set this variable to @code{nil} to get the normal Emacs scrolling action. --- 2326,2332 ---- @vindex gnus-auto-center-summary If @code{gnus-auto-center-summary} is non-@code{nil}, Gnus will keep the point in the summary buffer centered at all times. This makes things ! quite tidy, but if you have a slow network connection, or simply do not like this un-Emacsism, you can set this variable to @code{nil} to get the normal Emacs scrolling action. *************** *** 2334,2357 **** Select the current article, or, if that one's read already, the next unread article (@code{gnus-summary-next-page}). @item G n ! @item n @kindex n (Summary) @kindex G n (Summary) @findex gnus-summary-next-unread-article Go to next unread article (@code{gnus-summary-next-unread-article}). @item G p ! @item p @kindex p (Summary) @findex gnus-summary-prev-unread-article Go to previous unread article (@code{gnus-summary-prev-unread-article}). @item G N ! @item N @kindex N (Summary) @kindex G N (Summary) @findex gnus-summary-next-article Go to the next article (@code{gnus-summary-next-article}). @item G P ! @item P @kindex P (Summary) @kindex G P (Summary) @findex gnus-summary-prev-article --- 2344,2367 ---- Select the current article, or, if that one's read already, the next unread article (@code{gnus-summary-next-page}). @item G n ! @itemx n @kindex n (Summary) @kindex G n (Summary) @findex gnus-summary-next-unread-article Go to next unread article (@code{gnus-summary-next-unread-article}). @item G p ! @itemx p @kindex p (Summary) @findex gnus-summary-prev-unread-article Go to previous unread article (@code{gnus-summary-prev-unread-article}). @item G N ! @itemx N @kindex N (Summary) @kindex G N (Summary) @findex gnus-summary-next-article Go to the next article (@code{gnus-summary-next-article}). @item G P ! @itemx P @kindex P (Summary) @kindex G P (Summary) @findex gnus-summary-prev-article *************** *** 2367,2395 **** Go to the previous article with the same subject (@code{gnus-summary-prev-same-subject}). @item G f ! @item . @kindex G f (Summary) @kindex . (Summary) @findex gnus-summary-first-unread-article Go to the first unread article (@code{gnus-summary-first-unread-article}). @item G b ! @item , @kindex G b (Summary) @kindex , (Summary) Go to the article with the highest score (@code{gnus-summary-best-unread-article}). @item G l ! @item l @kindex l (Summary) @kindex G l (Summary) @findex gnus-summary-goto-last-article ! Go to the summary line of the previous article ! (@code{gnus-summary-goto-last-article}). @item G p ! @kindex G p @findex gnus-summary-pop-article ! Pop an article off the summary history and go to the previous article (@code{gnus-summary-pop-article}). This command differs from the command above in that you can pop as many previous articles off the history as you like. --- 2377,2404 ---- Go to the previous article with the same subject (@code{gnus-summary-prev-same-subject}). @item G f ! @itemx . @kindex G f (Summary) @kindex . (Summary) @findex gnus-summary-first-unread-article Go to the first unread article (@code{gnus-summary-first-unread-article}). @item G b ! @itemx , @kindex G b (Summary) @kindex , (Summary) Go to the article with the highest score (@code{gnus-summary-best-unread-article}). @item G l ! @itemx l @kindex l (Summary) @kindex G l (Summary) @findex gnus-summary-goto-last-article ! Go to the previous article read (@code{gnus-summary-goto-last-article}). @item G p ! @kindex G p (Summary) @findex gnus-summary-pop-article ! Pop an article off the summary history and go to this article (@code{gnus-summary-pop-article}). This command differs from the command above in that you can pop as many previous articles off the history as you like. *************** *** 2410,2418 **** exposes any threads hidden under the selected article. @item gnus-mark-article-hook @vindex gnus-mark-article-hook ! This hook is called when an article is selected for the first time. It ! is intended to be used for marking articles as read automatically when ! articles are selected. @item gnus-visual-mark-article-hook @vindex gnus-visual-mark-article-hook This hook is run after selecting an article. It is meant to be used for --- 2419,2426 ---- exposes any threads hidden under the selected article. @item gnus-mark-article-hook @vindex gnus-mark-article-hook ! This hook is called whenever an article is selected. It is intended to ! be used for marking articles as read. @item gnus-visual-mark-article-hook @vindex gnus-visual-mark-article-hook This hook is run after selecting an article. It is meant to be used for *************** *** 2429,2442 **** @item gnus-visual-summary-highlight @vindex gnus-visual-summary-highlight Summary lines are highlighted according to this variable, which is a ! list where the elements are on the format @code{FORM . FACE}. If you would, for instance, like ticked articles to be italic and high-scored articles to be bold, you could set this variable to something like @lisp (((eq mark gnus-ticked-mark) . italic) ((> score default) . bold)) @end lisp ! As you may have guessed, if @var{FORM} returns a non-nil value, @var{FACE} will be applied to the line. @end table --- 2437,2450 ---- @item gnus-visual-summary-highlight @vindex gnus-visual-summary-highlight Summary lines are highlighted according to this variable, which is a ! list where the elements are on the format @code{(FORM . FACE)}. If you would, for instance, like ticked articles to be italic and high-scored articles to be bold, you could set this variable to something like @lisp (((eq mark gnus-ticked-mark) . italic) ((> score default) . bold)) @end lisp ! As you may have guessed, if @var{FORM} returns a non-@code{nil} value, @var{FACE} will be applied to the line. @end table *************** *** 2461,2474 **** Scroll the current article one line forward (@code{gnus-summary-scroll-up}). @item A < ! @item < @kindex < (Summary) @kindex A < (Summary) @findex gnus-summary-beginning-of-article Scroll to the beginning of the article (@code{gnus-summary-beginning-of-article}). @item A > ! @item > @kindex > (Summary) @kindex A > (Summary) @findex gnus-summary-end-of-article --- 2469,2482 ---- Scroll the current article one line forward (@code{gnus-summary-scroll-up}). @item A < ! @itemx < @kindex < (Summary) @kindex A < (Summary) @findex gnus-summary-beginning-of-article Scroll to the beginning of the article (@code{gnus-summary-beginning-of-article}). @item A > ! @itemx > @kindex > (Summary) @kindex A > (Summary) @findex gnus-summary-end-of-article *************** *** 2476,2482 **** @end table @node Reply Followup and Post ! @section Reply Followup and Post @cindex reply @cindex followup @cindex post --- 2484,2490 ---- @end table @node Reply Followup and Post ! @section Reply, Followup and Post @cindex reply @cindex followup @cindex post *************** *** 2502,2515 **** @table @kbd @item S r ! @item r @kindex S r (Summary) @kindex r (Summary) @findex gnus-summary-reply Mail a reply to the author of the current article (@code{gnus-summary-reply}). @item S R ! @item R @kindex R (Summary) @kindex S R (Summary) @findex gnus-summary-reply-with-original --- 2510,2523 ---- @table @kbd @item S r ! @itemx r @kindex S r (Summary) @kindex r (Summary) @findex gnus-summary-reply Mail a reply to the author of the current article (@code{gnus-summary-reply}). @item S R ! @itemx R @kindex R (Summary) @kindex S R (Summary) @findex gnus-summary-reply-with-original *************** *** 2521,2527 **** Forward the current article to some other person (@code{gnus-summary-mail-forward}). @item S m ! @item m @kindex m (Summary) @kindex S m (Summary) @findex gnus-summary-mail-other-window --- 2529,2535 ---- Forward the current article to some other person (@code{gnus-summary-mail-forward}). @item S m ! @itemx m @kindex m (Summary) @kindex S m (Summary) @findex gnus-summary-mail-other-window *************** *** 2531,2537 **** @kindex S M-f (Summary) @findex gnus-uu-digest-and-forward Digest the current series and forward the result using mail ! (@code{gnus-uu-digest-and-forward}). @end table Variables for customizing outgoing mail: --- 2539,2546 ---- @kindex S M-f (Summary) @findex gnus-uu-digest-and-forward Digest the current series and forward the result using mail ! (@code{gnus-uu-digest-and-forward}). This command uses the ! process/prefix convention (@pxref{Process/Prefix}). @end table Variables for customizing outgoing mail: *************** *** 2540,2550 **** @item gnus-reply-to-function @vindex gnus-reply-to-function Gnus uses the normal methods to determine where replies are to go, but ! you can change the behaviour to suit your needs by fiddling with the ! @code{gnus-reply-to-function} variable. ! If you want the replies to go to the "sender" instead of the "from" in ! the group "mail.stupid-list", you could do something like this: @lisp (setq gnus-reply-to-function --- 2549,2560 ---- @item gnus-reply-to-function @vindex gnus-reply-to-function Gnus uses the normal methods to determine where replies are to go, but ! you can change the behaviour to suit your needs by fiddling with this ! variable. ! If you want the replies to go to the @samp{Sender} instead of the ! @samp{From} in the group @samp{mail.stupid-list}, you could do something ! like this: @lisp (setq gnus-reply-to-function *************** *** 2555,2567 **** nil)))) @end lisp ! This function will be called narrow to the headers of the article that ! is being replied to. As you can see, this function should return a string if it has an opinion as to what the To header should be. If it does not, it should ! just return nil, and the normal methods for determining the To header ! will be used. This function can also return a list. In that case, each list element should be a cons, where the car should be the name of an header --- 2565,2577 ---- nil)))) @end lisp ! This function will be called narrowed to the head of the article that is ! being replied to. As you can see, this function should return a string if it has an opinion as to what the To header should be. If it does not, it should ! just return @code{nil}, and the normal methods for determining the To ! header will be used. This function can also return a list. In that case, each list element should be a cons, where the car should be the name of an header *************** *** 2583,2602 **** @table @kbd @item S p ! @item a @kindex a (Summary) @kindex S p (Summary) @findex gnus-summary-post-news Post an article to the current group (@code{gnus-summary-post-news}). @item S f ! @item f @kindex f (Summary) @kindex S f (Summary) @findex gnus-summary-followup Post a followup to the current article (@code{gnus-summary-followup}). @item S F ! @item F @kindex S F (Summary) @kindex F (Summary) @findex gnus-summary-followup-with-original --- 2593,2612 ---- @table @kbd @item S p ! @itemx a @kindex a (Summary) @kindex S p (Summary) @findex gnus-summary-post-news Post an article to the current group (@code{gnus-summary-post-news}). @item S f ! @itemx f @kindex f (Summary) @kindex S f (Summary) @findex gnus-summary-followup Post a followup to the current article (@code{gnus-summary-followup}). @item S F ! @itemx F @kindex S F (Summary) @kindex F (Summary) @findex gnus-summary-followup-with-original *************** *** 2605,2629 **** @item S u @kindex S u (Summary) @findex gnus-uu-post-news ! Uuencode a file, split it up into parts, and post it as a series ! (@code{gnus-uu-post-news}). @end table ! Variables for customizing outgoing articles: @table @code ! @item gnus-required-headers ! @vindex gnus-required-headers ! Gnus determines which headers it should generate in outgoing posts by ! consulting the this variable. All headers mentioned in this list will ! either be generated automatically or prompted for before an article is ! posted. @item gnus-post-method @vindex gnus-post-method If non-@code{nil}, Gnus will use this method instead of the default select method when posting. @item gnus-use-followup-to @vindex gnus-use-followup-to If @code{nil}, always ignore the Followup-To header. If it is @code{t}, --- 2615,2677 ---- @item S u @kindex S u (Summary) @findex gnus-uu-post-news ! Uuencode a file, split it into parts, and post it as a series ! (@code{gnus-uu-post-news}) (@pxref{Uuencoding & Posting}). @end table ! @vindex gnus-required-headers ! @code{gnus-required-headers} a list of header symbols. These headers ! will either be automatically generated, or, if that's impossible, they ! will be prompted for. The following symbols are legal: @table @code ! @item From ! This required header will be filled out with the result of the ! @code{gnus-inews-user-name} function, which depends on the ! @code{gnus-user-from-line}, @code{gnus-user-login-name}, ! @code{gnus-local-domain} and @code{user-mail-address} variables. ! @item Subject ! This required header will be prompted for if not present already. ! @item Newsgroups ! This required header says which newsgroups the article is to be posted ! to. If it isn't present already, it will be prompted for. ! @item Organization ! This optional header will be filled out depending on the ! @code{gnus-local-organization} variable. ! @item Lines ! This optional header will be computed by Gnus. ! @item Message-ID ! This required header will be generated by Gnus. A unique ID will be ! created based on date, time, user name and system name. ! @item X-Newsreader ! This optional header will be filled out with the Gnus version numbers. ! @end table ! ! In addition, you can enter conses into this list. The car of this cons ! should be a symbol who's name is the name of the header, and the cdr can ! either a string to be entered verbatim as the value of this header, or ! it can be a function to be called. This function should return a string ! to be inserted. For instance, if you want to insert @samp{Mime-Version: ! 1.0}, you should enter @code{(Mime-Version . "1.0")} into the list. If ! you want to insert a funny quote, you could enter something like ! @code{(X-Yow . yow)} into the list. The function @code{yow} will then ! be called without any arguments. ! ! Other variables for customizing outgoing articles: + @table @code @item gnus-post-method @vindex gnus-post-method If non-@code{nil}, Gnus will use this method instead of the default select method when posting. + @item nntp-news-default-headers + @vindex nntp-news-default-headers + If non-@code{nil}, this variable will override + @code{mail-default-headers} when posting. This variable should then be + a string. This string will be inserted, as is, in the head of all + outgoing articles. + @item gnus-use-followup-to @vindex gnus-use-followup-to If @code{nil}, always ignore the Followup-To header. If it is @code{t}, *************** *** 2634,2645 **** @item gnus-followup-to-function @vindex gnus-followup-to-function ! Gnus uses the normal methods to determine where follow-ups are to go, ! but you can change the behaviour to suit your needs by fiddling with ! this variable. ! ! If you want the followups to go to the "sender" instead of the "from" in ! the group "mail.stupid-list", you could do something like this: @lisp (setq gnus-followup-to-function --- 2682,2695 ---- @item gnus-followup-to-function @vindex gnus-followup-to-function ! This variable is most useful in mail groups, where "following up" really ! means sending a mail to a list address. Gnus uses the normal methods to ! determine where follow-ups are to go, but you can change the behaviour ! to suit your needs by fiddling with this variable. ! ! If you want the followups to go to the @samp{Sender} instead of the ! @samp{From} in the group @samp{mail.stupid-list}, you could do something ! like this: @lisp (setq gnus-followup-to-function *************** *** 2650,2656 **** nil)))) @end lisp ! This functions will be called from the buffer of the article that is being followed up. @item gnus-signature-function --- 2700,2706 ---- nil)))) @end lisp ! This function will be called narrowed to header of the article that is being followed up. @item gnus-signature-function *************** *** 2683,2693 **** This will create lines like: @example ! In article Lars Mars writes: @end example ! Having the Message-Id in this line is probably overkill, so I would ! suggest this hook instead: @lisp (setq news-reply-header-hook --- 2733,2743 ---- This will create lines like: @example ! In article Lars Mars writes: @end example ! Having the @code{Message-Id} in this line is probably overkill, so I ! would suggest this hook instead: @lisp (setq news-reply-header-hook *************** *** 2708,2715 **** @vindex gnus-inews-article-header-hook This hook is called after inserting the required headers in an article to be posted. The hook is called from the @code{*post-news*} buffer, ! narrowed to the headers, and is intended for people who would like to ! insert additional headers, or just change headers in some way. @end table --- 2758,2765 ---- @vindex gnus-inews-article-header-hook This hook is called after inserting the required headers in an article to be posted. The hook is called from the @code{*post-news*} buffer, ! narrowed to the head, and is intended for people who would like to ! insert additional headers, or just change headers in some way or other. @end table *************** *** 2731,2744 **** original message (@code{gnus-summary-followup-and-reply-with-original}). @end table ! Here's a list of variables that are relevant for both mailing and ! posting: @table @code @item gnus-signature-file ! @item mail-signature @vindex mail-signature @vindex gnus-signature-file If @code{gnus-signature-file} is non-@code{nil}, it should be the name of a file containing a signature (@samp{~/.signature} by default). This signature will be appended to all outgoing post. Most people find it --- 2781,2796 ---- original message (@code{gnus-summary-followup-and-reply-with-original}). @end table ! Here's a list of variables that are relevant to both mailing and ! posting: @table @code @item gnus-signature-file ! @itemx mail-signature @vindex mail-signature @vindex gnus-signature-file + @cindex double signature + @cindex signature If @code{gnus-signature-file} is non-@code{nil}, it should be the name of a file containing a signature (@samp{~/.signature} by default). This signature will be appended to all outgoing post. Most people find it *************** *** 2749,2757 **** Note that RFC1036 says that a signature should be preceded by the three characters @samp{-- } on a line by themselves. This is to make it ! easier for the recipient to automatically filter the signature away. So ! don't remove those characters, even though you might feel that they ruin ! you beautiful design, like, totally. Also note that no signature should be more than four lines long. Including ASCII graphics is an efficient way to get everybody to believe --- 2801,2809 ---- Note that RFC1036 says that a signature should be preceded by the three characters @samp{-- } on a line by themselves. This is to make it ! easier for the recipient to automatically recognize and process the ! signature. So don't remove those characters, even though you might feel ! that they ruin you beautiful design, like, totally. Also note that no signature should be more than four lines long. Including ASCII graphics is an efficient way to get everybody to believe *************** *** 2761,2802 **** @vindex mail-yank-prefix @cindex yanking @cindex quoting ! When you are replying or following up an article, you normally want to ! quote the person you are replying to. Inserting quoted text is done by @dfn{yanking}, and each quoted line you yank will have ! @code{mail-yank-prefix} prepended to it. This is @samp{ } by default, which isn't very pretty. Most everybody prefers that lines are prepended with @samp{> }, so @code{(setq mail-yank-prefix "> ")} in your ! @file{.emacs} file. @item mail-yank-ignored-headers @vindex mail-yank-ignored-headers ! When you yank a message, you do not want to include any headers from ! this message, so @code{(setq mail-yank-ignored-headers ":")}. @item user-mail-address @vindex user-mail-address If all of @code{gnus-user-login-name}, @code{gnus-use-generic-from} and ! @code{gnus-local-domain} are nil, Gnus will use @code{user-mail-address} ! as the address part of the From header. @item gnus-user-from-line @vindex gnus-user-from-line Your full, complete e-mail address. This variable overrides the other ! Gnus variables if it is non-nil. ! Here are two example values of this variable: ! @samp{"Lars Magne Ingebrigtsen "} ! and @samp{"larsi@@ifi.uio.no (Lars Magne Ingebrigtsen)"}. ! The first version is recommended, but the name has to be quoted if it ! contains non-alphanumerical characters - @samp{"\"Lars M. Ingebrigtsen\" ! "}. @item mail-default-headers @vindex mail-default-headers This is a string that will be inserted into the header of all outgoing mail messages and news articles. Convenient to use to insert standard ! headers. @item gnus-auto-mail-to-author @vindex gnus-auto-mail-to-author --- 2813,2854 ---- @vindex mail-yank-prefix @cindex yanking @cindex quoting ! When you are replying to or following up an article, you normally want ! to quote the person you are answering. Inserting quoted text is done by @dfn{yanking}, and each quoted line you yank will have ! @code{mail-yank-prefix} prepended to it. This is @samp{ } by default, which isn't very pretty. Most everybody prefers that lines are prepended with @samp{> }, so @code{(setq mail-yank-prefix "> ")} in your ! @file{.emacs} file. @item mail-yank-ignored-headers @vindex mail-yank-ignored-headers ! When you yank a message, you do not want to quote any headers, so ! @code{(setq mail-yank-ignored-headers ":")}. @item user-mail-address @vindex user-mail-address If all of @code{gnus-user-login-name}, @code{gnus-use-generic-from} and ! @code{gnus-local-domain} are @code{nil}, Gnus will use ! @code{user-mail-address} as the address part of the @code{From} header. @item gnus-user-from-line @vindex gnus-user-from-line Your full, complete e-mail address. This variable overrides the other ! Gnus variables if it is non-@code{nil}. ! Here are two example values of this variable: @samp{"larsi@@ifi.uio.no ! (Lars Magne Ingebrigtsen)"} and @samp{"Lars Magne Ingebrigtsen ! "}. The latter version is recommended, but the name ! has to be quoted if it contains non-alphanumerical characters - ! @samp{"\"Lars M. Ingebrigtsen\" "}. @item mail-default-headers @vindex mail-default-headers This is a string that will be inserted into the header of all outgoing mail messages and news articles. Convenient to use to insert standard ! headers. If @code{nntp-news-default-headers} is non-@code{nil}, that ! variable will override this one when posting articles. @item gnus-auto-mail-to-author @vindex gnus-auto-mail-to-author *************** *** 2809,2814 **** --- 2861,2872 ---- for it, because it means that they will first get a mail, and then have to read the same article later when they read the news. It is @code{nil} by default. + + @item gnus-mail-courtesy-message + @vindex gnus-mail-courtesy-message + This is a string that will be prepended to all mails that are the result + of using the variable described above. + @end table @node Cancelling and Superseding *************** *** 2817,2823 **** @cindex superseding articles Have you ever written something, and then decided that you really, ! really, really hadn't posted that? Well, you can't cancel mail, but you can cancel posts. --- 2875,2881 ---- @cindex superseding articles Have you ever written something, and then decided that you really, ! really, really wish you hadn't posted that? Well, you can't cancel mail, but you can cancel posts. *************** *** 2826,2836 **** Find the article you wish to cancel (you can only cancel your own articles, so don't try any funny stuff). Then press @kbd{C} or @kbd{S c} (@code{gnus-summary-cancel-article}). Your article will be ! cancelled. Be aware, however, that not all sites honor cancels, so your article may ! live on in some parts of the world, while most sites will delete the ! cancelled article. If you discover that you have made some mistakes and want to do some corrections, you can post a @dfn{superseding} article that will replace --- 2884,2894 ---- Find the article you wish to cancel (you can only cancel your own articles, so don't try any funny stuff). Then press @kbd{C} or @kbd{S c} (@code{gnus-summary-cancel-article}). Your article will be ! cancelled - machines all over the world will be deleting your article. Be aware, however, that not all sites honor cancels, so your article may ! live on here and there, while most sites will delete the article in ! question. If you discover that you have made some mistakes and want to do some corrections, you can post a @dfn{superseding} article that will replace *************** *** 2866,2872 **** There are several marks you can set on an article. ! You have marks that decide the "readed-ness" (whoo, neato-keano neologism ohoy!) of the article. Alphabetic marks generally mean @dfn{read}, while non-alphabetic characters generally mean @dfn{unread}. --- 2924,2930 ---- There are several marks you can set on an article. ! You have marks that decide the @dfn{readed-ness} (whoo, neato-keano neologism ohoy!) of the article. Alphabetic marks generally mean @dfn{read}, while non-alphabetic characters generally mean @dfn{unread}. *************** *** 2878,2884 **** --- 2936,2944 ---- * Other Marks:: Marks that do not affect readedness. @end menu + @ifinfo There's a plethora of commands for manipulating these marks: + @end ifinfo @menu * Setting Marks:: How to set and remove marks. *************** *** 2928,2947 **** Articles that were marked as read in previous sessions are now @dfn{ancient} and marked with @samp{A} (@code{gnus-ancient-mark}). @item K ! Marked as killed ((@code{gnus-killed-mark})). @item X Marked as killed by kill files (@code{gnus-kill-file-mark}). @item Y Marked as read by having a too low score (@code{gnus-low-score-mark}). @item C ! Marked as read by a catch-up (@code{gnus-catchup-mark}). @item G Cancelled article (@code{gnus-cancelled-mark}) @end table ! All these mark 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: --- 2988,3007 ---- Articles that were marked as read in previous sessions are now @dfn{ancient} and marked with @samp{A} (@code{gnus-ancient-mark}). @item K ! Marked as killed (@code{gnus-killed-mark}). @item X Marked as killed by kill files (@code{gnus-kill-file-mark}). @item Y Marked as read by having a too low score (@code{gnus-low-score-mark}). @item C ! Marked as read by a catchup (@code{gnus-catchup-mark}). @item G Cancelled article (@code{gnus-cancelled-mark}) @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: *************** *** 2969,2974 **** --- 3029,3037 ---- in the article, and Gnus will jump to this bookmark the next time it encounters the article. + All articles that you have replied to or made a followup to will be + marked with an @samp{R} in the second column (@code{gnus-replied-mark}). + Finally we have the @dfn{process mark}. A variety of commands react to the presence of the process mark. For instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view all articles that have *************** *** 2983,3009 **** @table @kbd @item M t ! @item ! @kindex ! (Summary) @kindex M t (Summary) @findex gnus-summary-tick-article-forward Tick the current article (@code{gnus-summary-tick-article-forward}). @item M ? ! @item ? @kindex ? (Summary) @kindex M ? (Summary) @findex gnus-summary-mark-as-dormant Mark the current article as dormant (@code{gnus-summary-mark-as-dormant}). @item M d ! @item d @kindex M d (Summary) @kindex d (Summary) @findex gnus-summary-mark-as-read-forward Mark the current article as read (@code{gnus-summary-mark-as-read-forward}). @item M k ! @item k @kindex k (Summary) @kindex M k (Summary) @findex gnus-summary-kill-same-subject-and-select --- 3046,3072 ---- @table @kbd @item M t ! @itemx ! @kindex ! (Summary) @kindex M t (Summary) @findex gnus-summary-tick-article-forward Tick the current article (@code{gnus-summary-tick-article-forward}). @item M ? ! @itemx ? @kindex ? (Summary) @kindex M ? (Summary) @findex gnus-summary-mark-as-dormant Mark the current article as dormant (@code{gnus-summary-mark-as-dormant}). @item M d ! @itemx d @kindex M d (Summary) @kindex d (Summary) @findex gnus-summary-mark-as-read-forward Mark the current article as read (@code{gnus-summary-mark-as-read-forward}). @item M k ! @itemx k @kindex k (Summary) @kindex M k (Summary) @findex gnus-summary-kill-same-subject-and-select *************** *** 3011,3017 **** and then select the next unread article (@code{gnus-summary-kill-same-subject-and-select}). @item M K ! @item C-k @kindex M K (Summary) @kindex C-k (Summary) @findex gnus-summary-kill-same-subject --- 3074,3080 ---- and then select the next unread article (@code{gnus-summary-kill-same-subject-and-select}). @item M K ! @itemx C-k @kindex M K (Summary) @kindex C-k (Summary) @findex gnus-summary-kill-same-subject *************** *** 3028,3043 **** @item M H @kindex M H (Summary) @findex gnus-summary-catchup-to-here ! Catchup the current group to point (@code{gnus-summary-catchup-to-here}). @item M c ! @item M-u @kindex M c (Summary) @kindex M-u (Summary) @findex gnus-summary-clear-mark-forward ! Clear tick and read marks from the current article (@code{gnus-summary-clear-mark-forward}). @item M e ! @item E @kindex M e (Summary) @kindex E (Summary) @findex gnus-summary-mark-as-expirable --- 3091,3112 ---- @item M H @kindex M H (Summary) @findex gnus-summary-catchup-to-here ! Catchup the current group to point ! (@code{gnus-summary-catchup-to-here}). ! @item C-w ! @kindex C-w (Summary) ! @findex gnus-summary-mark-region-as-read ! Mark all articles between point and mark as read ! (@code{gnus-summary-mark-region-as-read}). @item M c ! @itemx M-u @kindex M c (Summary) @kindex M-u (Summary) @findex gnus-summary-clear-mark-forward ! Clear all readedness-marks from the current article (@code{gnus-summary-clear-mark-forward}). @item M e ! @itemx E @kindex M e (Summary) @kindex E (Summary) @findex gnus-summary-mark-as-expirable *************** *** 3054,3069 **** Remove the bookmark from the current article (@code{gnus-summary-remove-bookmark}). @item M M-r ! @item M-d @kindex M M-r (Summary) @kindex M-d (Summary) @findex gnus-summary-remove-lines-marked-as-read Expunge all deleted articles from the summary buffer (@code{gnus-summary-remove-lines-marked-as-read}). @item M M-C-r - @item M-C-d @kindex M M-C-r (Summary) - @kindex M-C-d (Summary) @findex gnus-summary-remove-lines-marked-with Ask for a mark and then expunge all articles that have been marked with that mark (@code{gnus-summary-remove-lines-marked-with}). --- 3123,3136 ---- Remove the bookmark from the current article (@code{gnus-summary-remove-bookmark}). @item M M-r ! @itemx x @kindex M M-r (Summary) @kindex M-d (Summary) @findex gnus-summary-remove-lines-marked-as-read Expunge all deleted articles from the summary buffer (@code{gnus-summary-remove-lines-marked-as-read}). @item M M-C-r @kindex M M-C-r (Summary) @findex gnus-summary-remove-lines-marked-with Ask for a mark and then expunge all articles that have been marked with that mark (@code{gnus-summary-remove-lines-marked-with}). *************** *** 3093,3099 **** @kindex M s u (Summary) @findex gnus-summary-tick-above Tick all articles with scores over the default score (or over the ! numeric prefix) (@code{gnus-summary-clear-above}). @item M s m @kindex M s m (Summary) @findex gnus-summary-mark-above --- 3160,3166 ---- @kindex M s u (Summary) @findex gnus-summary-tick-above Tick all articles with scores over the default score (or over the ! numeric prefix) (@code{gnus-summary-tick-above}). @item M s m @kindex M s m (Summary) @findex gnus-summary-mark-above *************** *** 3113,3119 **** @table @kbd @item M p p ! @item # @kindex # (Summary) @kindex M p p (Summary) @findex gnus-summary-mark-as-processable --- 3180,3186 ---- @table @kbd @item M p p ! @itemx # @kindex # (Summary) @kindex M p p (Summary) @findex gnus-summary-mark-as-processable *************** *** 3121,3131 **** (@code{gnus-summary-mark-as-processable}). @findex gnus-summary-unmark-as-processable @item M p u ! @item M-# @kindex M p u (Summary) @kindex M-# (Summary) ! Remove the process mark from the current article ! (@code{gnus-summary-unmark-as-processable}). @item M p U @kindex M p U (Summary) @findex gnus-summary-unmark-all-processable --- 3188,3198 ---- (@code{gnus-summary-mark-as-processable}). @findex gnus-summary-unmark-as-processable @item M p u ! @itemx M-# @kindex M p u (Summary) @kindex M-# (Summary) ! Remove the process mark, if any, from the current article ! (@code{gnus-summary-unmark-as-processable}). @item M p U @kindex M p U (Summary) @findex gnus-summary-unmark-all-processable *************** *** 3253,3261 **** @item gnus-thread-ignore-subject @vindex gnus-thread-ignore-subject Sometimes somebody changes the subject in the middle of a thread. If ! this variable is non-@code{nil}, the change in subject is ignored. If ! it is @code{nil}, which is the default, a change in the subject will ! result in a new thread. @item gnus-thread-indent-level @vindex gnus-thread-indent-level This is a number that says how much each subthread should be indented. --- 3320,3328 ---- @item gnus-thread-ignore-subject @vindex gnus-thread-ignore-subject Sometimes somebody changes the subject in the middle of a thread. If ! this variable is non-@code{nil}, the subject change is ignored. If it ! is @code{nil}, which is the default, a change in the subject will result ! in a new thread. @item gnus-thread-indent-level @vindex gnus-thread-indent-level This is a number that says how much each subthread should be indented. *************** *** 3268,3274 **** @table @kbd @item T k ! @item M-C-k @kindex T k (Summary) @kindex M-C-k (Summary) @findex gnus-summary-kill-thread --- 3335,3341 ---- @table @kbd @item T k ! @itemx M-C-k @kindex T k (Summary) @kindex M-C-k (Summary) @findex gnus-summary-kill-thread *************** *** 3277,3283 **** remove all marks instead. If the prefix argument is negative, tick articles instead. @item T l ! @item M-C-l @kindex T l (Summary) @kindex M-C-l (Summary) @findex gnus-summary-lower-thread --- 3344,3350 ---- remove all marks instead. If the prefix argument is negative, tick articles instead. @item T l ! @itemx M-C-l @kindex T l (Summary) @kindex M-C-l (Summary) @findex gnus-summary-lower-thread *************** *** 3347,3366 **** @table @kbd @item Z Z ! @item q @kindex q (Summary) @findex gnus-summary-exit Exit the current group and update all information on the group (@code{gnus-summary-exit}). @item Z E ! @item Q @kindex Z E (Summary) @kindex Q (Summary) @findex gnus-summary-exit-no-update Exit the current group without updating any information on the group (@code{gnus-summary-exit-no-update}). @item Z c ! @item c @kindex Z c (Summary) @kindex c (Summary) @findex gnus-summary-catchup-and-exit --- 3414,3434 ---- @table @kbd @item Z Z ! @itemx q ! @kindex Z Z (Summary) @kindex q (Summary) @findex gnus-summary-exit Exit the current group and update all information on the group (@code{gnus-summary-exit}). @item Z E ! @itemx Q @kindex Z E (Summary) @kindex Q (Summary) @findex gnus-summary-exit-no-update Exit the current group without updating any information on the group (@code{gnus-summary-exit-no-update}). @item Z c ! @itemx c @kindex Z c (Summary) @kindex c (Summary) @findex gnus-summary-catchup-and-exit *************** *** 3383,3396 **** group. @vindex gnus-use-cross-reference ! When you exit the summary buffer, the data on the current group will be ! updated (which articles you have read, which articles you have replied ! to, etc.) If the @code{gnus-use-cross-reference} variable is @code{t}, ! articles that are cross-referenced to this group, and are marked as ! read, will also be marked as read in the other subscribed groups they ! were cross-posted to. If this variable is neither @code{nil} nor ! @code{t}, the article will be marked as read in both subscribed and ! unsubscribed groups. Marking cross-posted articles as read ensures that you'll never have to read the same article more than once. Unless, of course, somebody has --- 3451,3464 ---- group. @vindex gnus-use-cross-reference ! The data on the current group will be updated (which articles you have ! read, which articles you have replied to, etc.) when you exit the ! summary buffer. If the @code{gnus-use-cross-reference} variable is ! @code{t}, articles that are cross-referenced to this group and are ! marked as read, will also be marked as read in the other subscribed ! groups they were cross-posted to. If this variable is neither ! @code{nil} nor @code{t}, the article will be marked as read in both ! subscribed and unsubscribed groups. Marking cross-posted articles as read ensures that you'll never have to read the same article more than once. Unless, of course, somebody has *************** *** 3405,3420 **** One thing that may cause Gnus to not do the cross-posting thing correctly is if you use an @sc{nntp} server that supports @sc{xover} (which is very nice, because it speeds things up considerably) which ! does not include the Xref header in its @sc{nov} lines. This is Evil, ! but it's common. Gnus tries to Do The Right Thing even with @sc{xover} ! by registering the Xref lines of all articles you actually read, but if ! you kill the articles, or just mark them as read without reading them, ! Gnus will not get a chance to snoop the Xref lines out of these ! articles, and will be unable to use the cross reference mechanism. @vindex gnus-nov-is-evil ! If you want Gnus to get the Xrefs right all the time, you have to set ! @code{gnus-nov-is-evil} to @code{t}, which slows things down considerably. C'est la vie. --- 3473,3489 ---- One thing that may cause Gnus to not do the cross-posting thing correctly is if you use an @sc{nntp} server that supports @sc{xover} (which is very nice, because it speeds things up considerably) which ! does not include the @code{Xref} header in its @sc{nov} lines. This is ! Evil, but all too common, alas, alack. Gnus tries to Do The Right Thing ! even with @sc{xover} by registering the @code{Xref} lines of all ! articles you actually read, but if you kill the articles, or just mark ! them as read without reading them, Gnus will not get a chance to snoop ! the @code{Xref} lines out of these articles, and will be unable to use ! the cross reference mechanism. @vindex gnus-nov-is-evil ! If you want Gnus to get the @code{Xref}s right all the time, you have to ! set @code{gnus-nov-is-evil} to @code{t}, which slows things down considerably. C'est la vie. *************** *** 3423,3431 **** @section Process/Prefix @cindex process/prefix convention ! Many functions, among them functions for moving articles, decoding ! articles 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. --- 3492,3499 ---- @section Process/Prefix @cindex process/prefix convention ! 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. *************** *** 3463,3469 **** @table @kbd @item V o o ! @item o @kindex V o o (Summary) @kindex o (Summary) @findex gnus-summary-save-article --- 3531,3537 ---- @table @kbd @item V o o ! @itemx o @kindex V o o (Summary) @kindex o (Summary) @findex gnus-summary-save-article *************** *** 3488,3494 **** @kindex V o h (Summary) @findex gnus-summary-save-article-folder Save the current article in mh folder format ! (@code{gnus-summary-save-article-file}). @item V o p @kindex V o p (Summary) @findex gnus-summary-pipe-output --- 3556,3562 ---- @kindex V o h (Summary) @findex gnus-summary-save-article-folder Save the current article in mh folder format ! (@code{gnus-summary-save-article-folder}). @item V o p @kindex V o p (Summary) @findex gnus-summary-pipe-output *************** *** 3501,3508 **** @vindex gnus-default-article-saver You can customize the @code{gnus-default-article-saver} variable to make ! Gnus what you want it to. You can use any of the four ready-made ! functions below, or you can create your own. @table @code @item gnus-summary-save-in-rmail --- 3569,3576 ---- @vindex gnus-default-article-saver You can customize the @code{gnus-default-article-saver} variable to make ! Gnus do what you want it to. You can use any of the four ready-made ! functions below, or you can create your own. @table @code @item gnus-summary-save-in-rmail *************** *** 3580,3586 **** All these functions use the process/prefix convention (@pxref{Process/Prefix}) for finding out what articles to work on, with the extension that a "single article" means "a single series". Gnus can ! find out by itself what articles belong to one series, decode all the articles and unpack/view/save the resulting file(s). Gnus guesses what articles are in the series according to the following --- 3648,3654 ---- All these functions use the process/prefix convention (@pxref{Process/Prefix}) for finding out what articles to work on, with the extension that a "single article" means "a single series". Gnus can ! find out by itself what articles belong to a series, decode all the articles and unpack/view/save the resulting file(s). Gnus guesses what articles are in the series according to the following *************** *** 3612,3619 **** Uudecodes the current series (@code{gnus-uu-decode-uu}). @item X U @kindex X U (Summary) ! @findex gnus-uu-decode-and-save ! Uudecodes and saves the current series (@code{gnus-uu-decode-and-save}). @item X v u @kindex X v u (Summary) @findex gnus-uu-decode-uu-view --- 3680,3688 ---- Uudecodes the current series (@code{gnus-uu-decode-uu}). @item X U @kindex X U (Summary) ! @findex gnus-uu-decode-uu-and-save ! Uudecodes and saves the current series ! (@code{gnus-uu-decode-uu-and-save}). @item X v u @kindex X v u (Summary) @findex gnus-uu-decode-uu-view *************** *** 3628,3643 **** Remember that these all react to the presence of articles marked with the process mark. If, for instance, you'd like to uncode and save an entire newsgroup, you'd typically do @kbd{M p a} ! (@code{gnus-uu-mark-all}) and then @kbd{X U} (@code{gnus-uu-decode-uu}). All this is very much different from how @code{gnus-uu} worked with @sc{gnus 4.1}, where you had explicit keystrokes for everything under ! the sun. This version of @code{gnus-uu} generally assumes that you ! either mark articles in some way (@pxref{Setting Process Marks}) and ! then press @kbd{X u}. Note: When trying to decode articles that have names matching ! @code{gnus-uu-notify-files}, which hard-coded to @samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will automatically post an article on @samp{comp.unix.wizards} saying that you have just viewed the file in question. This feature can't be turned --- 3697,3713 ---- Remember that these all react to the presence of articles marked with the process mark. If, for instance, you'd like to uncode and save an entire newsgroup, you'd typically do @kbd{M p a} ! (@code{gnus-uu-mark-all}) and then @kbd{X U} ! (@code{gnus-uu-decode-uu-and-save}). All this is very much different from how @code{gnus-uu} worked with @sc{gnus 4.1}, where you had explicit keystrokes for everything under ! the sun. This version of @code{gnus-uu} generally assumes that you mark ! articles in some way (@pxref{Setting Process Marks}) and then press ! @kbd{X u}. Note: When trying to decode articles that have names matching ! @code{gnus-uu-notify-files}, which is hard-coded to @samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will automatically post an article on @samp{comp.unix.wizards} saying that you have just viewed the file in question. This feature can't be turned *************** *** 3676,3681 **** --- 3746,3752 ---- @menu * Rule Variables:: Variables that say how a file is to be viewed. * Other Decode Variables:: Other decode variables. + * Uuencoding & Posting:: Variables for customizing uuencoding. @end menu @node Rule Variables *************** *** 3707,3713 **** user and default view rules. @item gnus-uu-user-archive-rules @vindex gnus-uu-user-archive-rules ! This variable can be used to say what comamnds should be used to unpack archives. @end table --- 3778,3784 ---- user and default view rules. @item gnus-uu-user-archive-rules @vindex gnus-uu-user-archive-rules ! This variable can be used to say what commands should be used to unpack archives. @end table *************** *** 3763,3776 **** @item gnus-uu-correct-stripped-uucode @vindex gnus-uu-correct-stripped-uucode Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix ! uuencoded files that have had traling spaces deleted. @item gnus-uu-view-with-metamail @vindex gnus-uu-view-with-metamail Non-@code{nil} means that @code{gnus-uu} will ignore the viewing commands defined by the rule variables and just fudge a @sc{mime} ! content type based on the file name. The result will be fed to metamail ! for viewing. @item gnus-uu-save-in-digest @vindex gnus-uu-save-in-digest --- 3834,3847 ---- @item gnus-uu-correct-stripped-uucode @vindex gnus-uu-correct-stripped-uucode Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix ! uuencoded files that have had trailing spaces deleted. @item gnus-uu-view-with-metamail @vindex gnus-uu-view-with-metamail Non-@code{nil} means that @code{gnus-uu} will ignore the viewing commands defined by the rule variables and just fudge a @sc{mime} ! content type based on the file name. The result will be fed to ! @code{metamail} for viewing. @item gnus-uu-save-in-digest @vindex gnus-uu-save-in-digest *************** *** 3781,3786 **** --- 3852,3864 ---- to specify any meaningful volume and issue numbers were found, so I simply dropped them. + @end table + + @node Uuencoding & Posting + @subsubsection Uuencoding & Posting + + @table @code + @item gnus-uu-post-include-before-composing @vindex gnus-uu-post-include-before-composing Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode *************** *** 3813,3819 **** @node Viewing Files @subsection Viewing Files ! @cindex vieving files @cindex pseudo-articles After decoding, if the file is some sort of archive, Gnus will attempt --- 3891,3897 ---- @node Viewing Files @subsection Viewing Files ! @cindex viewing files @cindex pseudo-articles After decoding, if the file is some sort of archive, Gnus will attempt *************** *** 3826,3832 **** Finally, Gnus will normally insert a @dfn{pseudo-article} for each extracted file into the summary buffer. If you go to these "articles", ! the user will be prompted for a command to run (usually Gnus will make a suggestion), and then the command will be run. @vindex gnus-view-pseudo-asynchronously --- 3904,3910 ---- Finally, Gnus will normally insert a @dfn{pseudo-article} for each extracted file into the summary buffer. If you go to these "articles", ! you will be prompted for a command to run (usually Gnus will make a suggestion), and then the command will be run. @vindex gnus-view-pseudo-asynchronously *************** *** 3847,3856 **** @item A w @kindex A w (Summary) @findex gnus-summary-stop-page-breaking ! Remove page breaking from the current article ! (@code{gnus-summary-stop-page-breaking}). @item A s ! @item A s (Summary) @findex gnus-summary-isearch-article Perform an isearch in the article buffer (@code{gnus-summary-isearch-article}). --- 3925,3934 ---- @item A w @kindex A w (Summary) @findex gnus-summary-stop-page-breaking ! Remove page breaks from the current article ! (@code{gnus-summary-stop-page-breaking}). @item A s ! @kindex A s (Summary) @findex gnus-summary-isearch-article Perform an isearch in the article buffer (@code{gnus-summary-isearch-article}). *************** *** 3906,3920 **** @kindex A h q (Summary) @findex gnus-article-de-quoted-unreadable Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}). @end table - @node Summary Sorting @section Summary Sorting @cindex summary sorting You can have the summary buffer sorted in various ways, even though I ! can't really se why you'd want that. @table @kbd @item V s n --- 3984,4007 ---- @kindex A h q (Summary) @findex gnus-article-de-quoted-unreadable Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}). + @item A h f + @kindex A h f (Summary) + @findex gnus-article-display-x-face + @findex gnus-article-x-face-command + Look for and display any X-Face headers + (@code{gnus-article-display-x-face}). The command executed by this + function is given by the @code{gnus-article-x-face-command} variable. + If this variable is a string, this string will be executed in a + sub-shell. If it is a function, this function will be called with the + face as the argument. @end table @node Summary Sorting @section Summary Sorting @cindex summary sorting You can have the summary buffer sorted in various ways, even though I ! can't really see why you'd want that. @table @kbd @item V s n *************** *** 3936,3943 **** @end table These functions will work both when you use threading and when you don't ! use threading. In the former case, all summary lines will be sorted, ! line by line. In the latter case, sorting will be done on a root-by-root basis, which might not be what you were looking for. To toggle whether to use threading, type @kbd{T T} (@pxref{Thread Commands}). --- 4023,4030 ---- @end table These functions will work both when you use threading and when you don't ! use threading. In the latter case, all summary lines will be sorted, ! line by line. In the former case, sorting will be done on a root-by-root basis, which might not be what you were looking for. To toggle whether to use threading, type @kbd{T T} (@pxref{Thread Commands}). *************** *** 3952,3979 **** If you'd like to read the parent of the current article, and it is not displayed in the article buffer, you might still be able to. That is, if the current group is fetched by @sc{nntp}, the parent hasn't expired ! and the References in the current article are not mangled, you can just ! press @kbd{^} or @kbd{A r} (@code{gnus-summary-refer-parent-article}). ! If everything goes well, you'll get the parent. If the parent is ! already displayed in the summary buffer, point will just move to this ! article. @findex gnus-summary-refer-article @kindex M-^ (Summary) You can also ask the @sc{nntp} server for an arbitrary article, no matter what group it belongs to. @kbd{V r} ! (@code{gnus-summary-refer-article}) will ask you for a message-id, which ! is one of those long thingies that look something like ! @samp{<38o6up$6f2@@hymir.ifi.uio.no>}. You have to get it all exactly ! right. No fuzzy searches, I'm afraid. @vindex gnus-refer-article-method If the group you are reading is located on a backend that does not ! support fetching by Message-ID very well (like @code{nnspool}), you can ! set @code{gnus-refer-article-method} to an @sc{nntp} method. It would, ! perhaps, be best if the @sc{nntp} server you consult is the same as the ! one that keeps the spool you are reading from updated, but that's not ! really necessary. @node Score Files @section Score Files --- 4039,4066 ---- If you'd like to read the parent of the current article, and it is not displayed in the article buffer, you might still be able to. That is, if the current group is fetched by @sc{nntp}, the parent hasn't expired ! and the @code{References} in the current article are not mangled, you ! can just press @kbd{^} or @kbd{A r} ! (@code{gnus-summary-refer-parent-article}). If everything goes well, ! you'll get the parent. If the parent is already displayed in the ! summary buffer, point will just move to this article. @findex gnus-summary-refer-article @kindex M-^ (Summary) You can also ask the @sc{nntp} server for an arbitrary article, no matter what group it belongs to. @kbd{V r} ! (@code{gnus-summary-refer-article}) will ask you for a ! @code{Message-Id}, which is one of those long thingies that look ! something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}. You have to get ! it all exactly right. No fuzzy searches, I'm afraid. @vindex gnus-refer-article-method If the group you are reading is located on a backend that does not ! support fetching by @code{Message-Id} very well (like @code{nnspool}), ! you can set @code{gnus-refer-article-method} to an @sc{nntp} method. It ! would, perhaps, be best if the @sc{nntp} server you consult is the same ! as the one that keeps the spool you are reading from updated, but that's ! not really necessary. @node Score Files @section Score Files *************** *** 3993,4002 **** Gnus will read any @dfn{score files} that apply to the current group before generating the summary buffer. ! There are several commands reachable from the summary buffer that ! inserts commands for scoring articles based on the current article. You ! can, for instance, ask Gnus to lower or increase the score of all ! articles with a certain subject. There are two sorts of scoring entries: Permanent and temporary. Temporary score entries are self-expiring entries. Any entries that are --- 4080,4088 ---- Gnus will read any @dfn{score files} that apply to the current group before generating the summary buffer. ! There are several commands in the summary buffer that inserts score ! entries based on the current article. You can, for instance, ask Gnus ! to lower or increase the score of all articles with a certain subject. There are two sorts of scoring entries: Permanent and temporary. Temporary score entries are self-expiring entries. Any entries that are *************** *** 4018,4033 **** @subsection Summary Score Commands @cindex score commands ! All score commands that alter score entries do not actually work towards ! a real score file. That would be to inefficient. Gnus maintains a ! cache of previously loaded score files, one of which is considered the @dfn{current score file alist}. The score commands simply insert ! entries into this list, and upon group exit, this list is saved. ! The current score file is always 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: --- 4104,4119 ---- @subsection Summary Score Commands @cindex score commands ! The score commands that alter score entries do not actually modify real ! score files. That would be too inefficient. Gnus maintains a cache of ! previously loaded score files, one of which is considered the @dfn{current score file alist}. The score commands simply insert ! entries into this list, and upon group exit, this list is saved. ! 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: *************** *** 4130,4138 **** (@code{gnus-summary-temporarily-raise-by-thread}). @item I t p @kindex I t p (Summary) ! @findex gnus-summary-raise-by-subject Increase the current thread permanently ! (@code{gnus-summary-raise-by-subject}). @item I x t @kindex I x t (Summary) @findex gnus-summary-temporarily-raise-by-xref --- 4216,4224 ---- (@code{gnus-summary-temporarily-raise-by-thread}). @item I t p @kindex I t p (Summary) ! @findex gnus-summary-raise-by-thread Increase the current thread permanently ! (@code{gnus-summary-raise-by-thread}). @item I x t @kindex I x t (Summary) @findex gnus-summary-temporarily-raise-by-xref *************** *** 4187,4193 **** @item L b p @kindex L b p (Summary) @findex gnus-summary-lower-by-body ! Lower bsed on a match on the article body (@code{gnus-summary-lower-by-body}). This is a very slow operation. @item L i t @kindex L i t (Summary) --- 4273,4279 ---- @item L b p @kindex L b p (Summary) @findex gnus-summary-lower-by-body ! Lower based on a match on the article body (@code{gnus-summary-lower-by-body}). This is a very slow operation. @item L i t @kindex L i t (Summary) *************** *** 4206,4214 **** (@code{gnus-summary-temporarily-lower-by-thread}). @item L t p @kindex L t p (Summary) ! @findex gnus-summary-lower-by-subject Lower the current thread permanently ! (@code{gnus-summary-lower-by-subject}). @item L x t @kindex L x t (Summary) @findex gnus-summary-temporarily-lower-by-xref --- 4292,4300 ---- (@code{gnus-summary-temporarily-lower-by-thread}). @item L t p @kindex L t p (Summary) ! @findex gnus-summary-lower-by-thread Lower the current thread permanently ! (@code{gnus-summary-lower-by-thread}). @item L x t @kindex L x t (Summary) @findex gnus-summary-temporarily-lower-by-xref *************** *** 4246,4253 **** variable to @code{t} to do that. @item gnus-kill-files-directory @vindex gnus-kill-files-directory ! All kill files will be stored in this directory, which is initialized ! from the @samp{SAVEDIR} environment variable by default. @item gnus-score-file-suffix @vindex gnus-score-file-suffix Suffix to add to the group name to arrive at the score file name --- 4332,4339 ---- variable to @code{t} to do that. @item gnus-kill-files-directory @vindex gnus-kill-files-directory ! All kill and score files will be stored in this directory, which is ! initialized from the @samp{SAVEDIR} environment variable by default. @item gnus-score-file-suffix @vindex gnus-score-file-suffix Suffix to add to the group name to arrive at the score file name *************** *** 4256,4264 **** @vindex gnus-score-interactive-default-score Score used by all the interactive raise/lower commands to raise/lower score with. Default is 1000, which may seem excessive, but this is to ! ensure that the adaptive scoring scheme gets enough room to play ! with. We don't want the small changes that successive adaptive changes ! to overwrite manually entered data. @item gnus-summary-default-score @vindex gnus-summary-default-score Default score of an article, which is 0 by default. --- 4342,4350 ---- @vindex gnus-score-interactive-default-score Score used by all the interactive raise/lower commands to raise/lower score with. Default is 1000, which may seem excessive, but this is to ! ensure that the adaptive scoring scheme gets enough room to play with. ! We don't want the small changes from the adaptive scoring to overwrite ! manually entered data. @item gnus-summary-default-score @vindex gnus-summary-default-score Default score of an article, which is 0 by default. *************** *** 4283,4309 **** @item gnus-score-find-bnews @findex gnus-score-find-bnews Apply all score files that match, using bnews syntax. For instance, if ! the current group is @samp{gnu.emacs.gnus}, @samp{gnu.all.SCORE}, ! @samp{all.emacs.all.SCORE} and @samp{not.alt.all.SCORE} would all ! apply. In short, the instances of @samp{all} in the score file names are translated into @samp{.*}, and then a regexp match is done. @item gnus-score-find-hierarchical @findex gnus-score-find-hierarchical Apply all score files from all the parent groups. @end table @item gnus-kill-expiry-days @vindex gnus-kill-expiry-days This variable says how many days should pass before an unused score file ! entry should be expired. The default is 7. @end table @node Score File Format @subsection Score File Format @cindex score file format ! A score file is an emacs-lisp file that normally contains just a single ! form. Casual users are not expected to edit these files, everthing can ! be changed from the summary buffer. Anyway, if you'd like to dig into it yourself, here's an example: --- 4369,4402 ---- @item gnus-score-find-bnews @findex gnus-score-find-bnews Apply all score files that match, using bnews syntax. For instance, if ! the current group is @samp{gnu.emacs.gnus}, @samp{all.emacs.all.SCORE}, ! @samp{not.alt.all.SCORE} and @samp{gnu.all.SCORE} would all apply. In ! short, the instances of @samp{all} in the score file names are translated into @samp{.*}, and then a regexp match is done. @item gnus-score-find-hierarchical @findex gnus-score-find-hierarchical Apply all score files from all the parent groups. @end table + This variable can also be a list of functions. In that case, all these + functions will be called, and all the returned lists of score files will + be applied. These functions can also return lists of score alists + directly. In that case, the functions that return these non-file score + alists should probably be placed before the "real" score file functions, + to ensure that the last score file returned is the local score file. + Phu. @item gnus-kill-expiry-days @vindex gnus-kill-expiry-days This variable says how many days should pass before an unused score file ! entry is expired. The default is 7. @end table @node Score File Format @subsection Score File Format @cindex score file format ! A score file is an @code{emacs-lisp} file that normally contains just a ! single form. Casual users are not expected to edit these files; ! everything can be changed from the summary buffer. Anyway, if you'd like to dig into it yourself, here's an example: *************** *** 4348,4355 **** perform the match on the entire article. Note that using any of these last three keys will slow down group entry @emph{considerably}. ! Following this key is a random number of element score entries, where ! each score entry have one to four elements. @enumerate @item The first element is the @dfn{match element}. On most headers this will --- 4441,4448 ---- perform the match on the entire article. Note that using any of these last three keys will slow down group entry @emph{considerably}. ! Following this key is a random number of score entries, where each score ! entry has one to four elements. @enumerate @item The first element is the @dfn{match element}. On most headers this will *************** *** 4358,4377 **** @item If the second element is present, it should be a number - the @dfn{score element}. This number should be an integer in the neginf to posinf ! interval. If this element is not present, the @code{gnus-score-interactive-default-score} number will be used instead. @item If the third element is present, it should be a number - the @dfn{date ! element}. This date says when the last time this score entry provided a ! match, which provides a mechanism for expiring the score entries. It ! this element is not present, the score entry is premanent. The date is ! represented by the number of days since December 31, 1 CE. @item If the fourth element is present, it should be a symbol - the @dfn{type ! element}. This element specifies what function should be performed to ! see whether this score entry matches the article. What match types that ! can be used depends on what header you wish to perform the match on. ! @itemize @bullet @item From, Subject, References, Xref, Message-ID For most header types, there are the @code{r} and @code{R} (regexp) as well as @code{s} and @code{S} (substring) types. If this element is not --- 4451,4471 ---- @item If the second element is present, it should be a number - the @dfn{score element}. This number should be an integer in the neginf to posinf ! interval. This number is added to the score of the article if the match ! is successful. If this element is not present, the @code{gnus-score-interactive-default-score} number will be used instead. @item If the third element is present, it should be a number - the @dfn{date ! element}. This date says when the last time this score entry matched, ! which provides a mechanism for expiring the score entries. It this ! element is not present, the score entry is permanent. The date is ! represented by the number of days since December 31, 1 ce. @item If the fourth element is present, it should be a symbol - the @dfn{type ! element}. This element specifies what function should be used to see ! whether this score entry matches the article. What match types that can ! be used depends on what header you wish to perform the match on. ! @table @dfn @item From, Subject, References, Xref, Message-ID For most header types, there are the @code{r} and @code{R} (regexp) as well as @code{s} and @code{S} (substring) types. If this element is not *************** *** 4390,4398 **** case. You never know. Better safe than sorry. Once burnt, twice shy. Don't judge a book by its cover. Never not have sex on a first date. @item Head, Body, All ! These three match keys use the same match types as the From (etc) header ! uses. ! @end itemize @end enumerate @item mark --- 4484,4492 ---- case. You never know. Better safe than sorry. Once burnt, twice shy. Don't judge a book by its cover. Never not have sex on a first date. @item Head, Body, All ! These three match keys use the same match types as the @code{From} (etc) ! header uses. ! @end table @end enumerate @item mark *************** *** 4406,4414 **** lower than this number will be marked as read and removed from the summary buffer. @item files ! The value of this entry should any number of file names. These files are assumed to be score files as well, and will be loaded the same way this one was. @item eval The value of this entry will be @code{eval}el. This element will be ignored when handling global score files. --- 4500,4512 ---- lower than this number will be marked as read and removed from the summary buffer. @item files ! The value of this entry should be any number of file names. These files are assumed to be score files as well, and will be loaded the same way this one was. + @item exclude-files + The clue of this entry should be any number of files. This files will + not be loaded, even though they would normally be so, for some reason or + other. @item eval The value of this entry will be @code{eval}el. This element will be ignored when handling global score files. *************** *** 4448,4457 **** @subsection Scoring Tips @cindex scoring tips ! @itemize @bullet @item Crossposts If you want to lower the score of crossposts, the line to match on is ! the Xref header. @lisp ("xref" (" talk.politics.misc:" -1000)) @end lisp --- 4546,4555 ---- @subsection Scoring Tips @cindex scoring tips ! @table @dfn @item Crossposts If you want to lower the score of crossposts, the line to match on is ! the @code{Xref} header. @lisp ("xref" (" talk.politics.misc:" -1000)) @end lisp *************** *** 4478,4484 **** ((mark -100)) @end lisp You may also consider doing something similar with @code{expunge}. ! @end itemize @node Reverse Scoring @subsection Reverse Scoring --- 4576,4582 ---- ((mark -100)) @end lisp You may also consider doing something similar with @code{expunge}. ! @end table @node Reverse Scoring @subsection Reverse Scoring *************** *** 4504,4510 **** Sure, other newsreaders have "global kill files". These are usually nothing more than a single kill file that applies to all groups, stored ! under the user's home directory. Bah! Puny, weak newsreaders! What I'm talking about here are Global Score Files. Score files from all over the world, from users everywhere, uniting all nations in one --- 4602,4608 ---- Sure, other newsreaders have "global kill files". These are usually nothing more than a single kill file that applies to all groups, stored ! in the user's home directory. Bah! Puny, weak newsreaders! What I'm talking about here are Global Score Files. Score files from all over the world, from users everywhere, uniting all nations in one *************** *** 4512,4524 **** @vindex gnus-global-score-files All you have to do to use other people's score files is to set the ! @code{gnus-global-score-files}. One entry for each score file, or each ! score file directory. Gnus will decide by itself what score files are ! applicable to which group. ! ! Say you want to use the single score file ! @file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE} and all ! score files in the @file{/ftp@@ftp.some-where:/pub/score} directory. @lisp (setq gnus-global-score-files --- 4610,4622 ---- @vindex gnus-global-score-files All you have to do to use other people's score files is to set the ! @code{gnus-global-score-files} variable. One entry for each score file, ! or each score file directory. Gnus will decide by itself what score ! files are applicable to which group. ! ! Say you want to use all score files in the ! @file{/ftp@@ftp.some-where:/pub/score} directory and the single score ! file @file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE}: @lisp (setq gnus-global-score-files *************** *** 4549,4560 **** @item Articles that are heavily crossposted are probably junk. @item ! To lower a single inappropriate article, lower by message-id. @item Particularly brilliant authors can be raised on a permanent basis. @item Authors that repeatedly post off-charter for the group can safely be ! lowered out of existance. @item Set the @code{mark} and @code{expunge} atoms to obliterate the nastiest articles completely. --- 4647,4658 ---- @item Articles that are heavily crossposted are probably junk. @item ! To lower a single inappropriate article, lower by @code{Message-Id}. @item Particularly brilliant authors can be raised on a permanent basis. @item Authors that repeatedly post off-charter for the group can safely be ! lowered out of existence. @item Set the @code{mark} and @code{expunge} atoms to obliterate the nastiest articles completely. *************** *** 4574,4590 **** @cindex kill files (ding) Gnus still supports those pesky old kill files. In fact, the ! kill file netries can now be expiring, which is something I wrote before ! Per thought of doing score files, so I've left the code there. In short, kill processing is a lot slower (and I do mean @emph{a lot}) than score processing, so it might be a good idea to rewrite your kill files into score files. ! Anyway, a kill file is a normal elisp file. You can put any forms into ! this file, which means that you can use kill files as some sort of ! primitive hook function to be run on group entry, even though that isn't ! really a very good idea. Normal kill files look like this: --- 4672,4688 ---- @cindex kill files (ding) Gnus still supports those pesky old kill files. In fact, the ! kill file entries can now be expiring, which is something I wrote before ! Per thought of doing score files, so I've left the code in there. In short, kill processing is a lot slower (and I do mean @emph{a lot}) than score processing, so it might be a good idea to rewrite your kill files into score files. ! Anyway, a kill file is a normal @code{emacs-lisp} file. You can put any ! forms into this file, which means that you can use kill files as some ! 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: *************** *** 4607,4615 **** @item V K @kindex V K (Summary) @findex gnus-summary-edit-global-kill ! Edit the general kill file (@code{gnus-summary-edit-local-kill}). @end table @node Mail Group Commands @section Mail Group Commands @cindex mail group commands --- 4705,4721 ---- @item V K @kindex V K (Summary) @findex gnus-summary-edit-global-kill ! Edit the general kill file (@code{gnus-summary-edit-global-kill}). @end table + @vindex gnus-kill-file-name + A kill file for the group @samp{soc.motss} is normally called + @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}. + + @node Mail Group Commands @section Mail Group Commands @cindex mail group commands *************** *** 4647,4660 **** @findex gnus-summary-respool-article Respool the mail article (@code{gnus-summary-move-article}). @item V m w ! @item e @kindex V m w (Summary) @kindex e (Summary) @findex gnus-summary-edit-article @kindex C-c C-c (Article) ! Edit the current article (@code{gnus-summary-edit-article}). Type ! @kbd{C-c C-c} (@kbd{gnus-summary-edit-article-done}) to finish editing ! and make the changes permanent. @end table @node Various Summary Stuff --- 4753,4766 ---- @findex gnus-summary-respool-article Respool the mail article (@code{gnus-summary-move-article}). @item V m w ! @itemx e @kindex V m w (Summary) @kindex e (Summary) @findex gnus-summary-edit-article @kindex C-c C-c (Article) ! Edit the current article (@code{gnus-summary-edit-article}). To finish ! editing and make the changes permanent, type @kbd{C-c C-c} ! (@kbd{gnus-summary-edit-article-done}). @end table @node Various Summary Stuff *************** *** 4668,4674 **** @vindex gnus-summary-prepare-hook @code{gnus-summary-prepare-hook} is called after the summary buffer has ! been generated. You might use it to, for instance, hilight lines or modify the look of the buffer in some other ungodly manner. I don't care. --- 4774,4780 ---- @vindex gnus-summary-prepare-hook @code{gnus-summary-prepare-hook} is called after the summary buffer has ! been generated. You might use it to, for instance, highlight lines or modify the look of the buffer in some other ungodly manner. I don't care. *************** *** 4683,4695 **** Try to fetch the FAQ (list of frequently asked questions) for the current group (@code{gnus-summary-fetch-faq}). Gnus will try to get the FAQ from @code{gnus-group-faq-directory}, which is usually a directory ! on a remote machine. ange-ftp will be used for fetching the file. @item V d @kindex V d (Summary) @findex gnus-summary-describe-group Give a brief description of the current group ! (@code{gnus-summary-describe-group}). If given a prefix, force reading ! new description from the server. @item V ? @kindex V ? (Summary) @findex gnus-summary-describe-briefly --- 4789,4801 ---- Try to fetch the FAQ (list of frequently asked questions) for the current group (@code{gnus-summary-fetch-faq}). Gnus will try to get the FAQ from @code{gnus-group-faq-directory}, which is usually a directory ! on a remote machine. @code{ange-ftp} will be used for fetching the file. @item V d @kindex V d (Summary) @findex gnus-summary-describe-group Give a brief description of the current group ! (@code{gnus-summary-describe-group}). If given a prefix, force ! rereading the description from the server. @item V ? @kindex V ? (Summary) @findex gnus-summary-describe-briefly *************** *** 4719,4726 **** @kindex V & (Summary) @findex gnus-summary-execute-command This command will prompt you for a header field, a regular expression to ! be matched this field, and a command to be executed if the match is ! made (@code{gnus-summary-execute-command}). @item V u @kindex V u (Summary) @findex gnus-summary-universal-argument --- 4825,4832 ---- @kindex V & (Summary) @findex gnus-summary-execute-command This command will prompt you for a header field, a regular expression to ! match on this field, and a command to be executed if the match is made ! (@code{gnus-summary-execute-command}). @item V u @kindex V u (Summary) @findex gnus-summary-universal-argument *************** *** 4736,4742 **** @kindex V D (Summary) @findex gnus-summary-enter-digest-group If the current article is a digest, you might use this command to enter ! you into a group based onthe current digest to ease reading (@code{gnus-summary-enter-digest-group}). @xref{nndigest}. @item V T @kindex V T (Summary) --- 4842,4848 ---- @kindex V D (Summary) @findex gnus-summary-enter-digest-group If the current article is a digest, you might use this command to enter ! you into a group based on the current digest to ease reading (@code{gnus-summary-enter-digest-group}). @xref{nndigest}. @item V T @kindex V T (Summary) *************** *** 4753,4764 **** (@code{gnus-summary-reselect-current-group}). If given a prefix, select all articles, both read and unread. @item V g ! @item M-g @kindex V g (Summary) @kindex M-g (Summary) @findex gnus-summary-rescan-group ! Exit group, check for new articles in the group, and select the group ! (@code{gnus-summary-rescan-group}). If given a prefix, select all articles, both read and unread. @end table --- 4859,4870 ---- (@code{gnus-summary-reselect-current-group}). If given a prefix, select all articles, both read and unread. @item V g ! @itemx M-g @kindex V g (Summary) @kindex M-g (Summary) @findex gnus-summary-rescan-group ! Exit the group, check for new articles in the group, and select the ! group (@code{gnus-summary-rescan-group}). If given a prefix, select all articles, both read and unread. @end table *************** *** 4782,4808 **** @cindex hiding headers @cindex deleting headers ! The top section of each article is the @dfn{header}. (The rest is the ! @dfn{body}, but you may have guessed that already.) @vindex gnus-show-all-headers ! There is a lot of useful information in the header: the name of the ! person who wrote the article, the date and the subject of the article. ! That well and nice, but there's also lots of information most people do ! not want to see - what systems the article has passed through before ! reaching you, the message id, the references, etc. ad nauseum - and ! you'll probably want to get rid of some of those lines. If you want to ! keep all those lines in the article buffer, you can set ! @code{gnus-show-all-headers} to @code{t}. ! Gnus provides you with two variables for sifting header lines: @table @code @item gnus-visible-headers @vindex gnus-visible-headers If this variable is non-@code{nil}, it should be a regular expression ! that says what header lines you wish to keep in the article buffer. All ! header lines that does not match this variable will be hidden. For instance, if you only want to see the name of the person who wrote the article and the subject, you'd say: --- 4888,4914 ---- @cindex hiding headers @cindex deleting headers ! The top section of each article is the @dfn{head}. (The rest is the ! @dfn{body}, but you may have guessed that already.) @vindex gnus-show-all-headers ! There is a lot of useful information in the head: the name of the person ! who wrote the article, the date it was written and the subject of the ! article. That's well and nice, but there's also lots of information ! most people do not want to see - what systems the article has passed ! through before reaching you, the @code{Message-Id}, the ! @code{References}, etc. ad nauseum - and you'll probably want to get rid ! of some of those lines. If you want to keep all those lines in the ! article buffer, you can set @code{gnus-show-all-headers} to @code{t}. ! Gnus provides you with two variables for sifting headers: @table @code @item gnus-visible-headers @vindex gnus-visible-headers If this variable is non-@code{nil}, it should be a regular expression ! that says what headers you wish to keep in the article buffer. All ! headers that do not match this variable will be hidden. For instance, if you only want to see the name of the person who wrote the article and the subject, you'd say: *************** *** 4816,4825 **** This variable is the reverse of @code{gnus-visible-headers}. If this variable is set (and @code{gnus-visible-headers} is @code{nil}), it should be a regular expression that matches all lines that you want to ! hide. All lines that does not match this variable will remain visible. ! For instance, if you just want to get rid of the references line and the ! xref line, you might say: @lisp (setq gnus-ignored-headers "^References:\\|^Xref:") --- 4922,4931 ---- This variable is the reverse of @code{gnus-visible-headers}. If this variable is set (and @code{gnus-visible-headers} is @code{nil}), it should be a regular expression that matches all lines that you want to ! hide. All lines that do not match this variable will remain visible. ! For instance, if you just want to get rid of the @code{References} line ! and the @code{Xref} line, you might say: @lisp (setq gnus-ignored-headers "^References:\\|^Xref:") *************** *** 4833,4839 **** Gnus can also sort the headers for you. (It does this by default.) You can control the sorting by setting the @code{gnus-sorted-header-list} variable. It is a list of regular expressions that says in what order ! the header lines are to be displayed. For instance, if you want the name of the author of the article first, and then the subject, you might say something like: --- 4939,4945 ---- Gnus can also sort the headers for you. (It does this by default.) You can control the sorting by setting the @code{gnus-sorted-header-list} variable. It is a list of regular expressions that says in what order ! the headers are to be displayed. For instance, if you want the name of the author of the article first, and then the subject, you might say something like: *************** *** 4865,4880 **** Gnus handles @sc{mime} by shoving the articles through @code{gnus-show-mime-method}, which is @code{metamail-buffer} by default. Set @code{gnus-show-mime} to @code{t} if you want to use ! @sc{mime} all the time; it might be best just use the toggling functions ! from the summary buffer to avoid getting nasty surprises (for instance, ! you enter the group @samp{alt.sing-a-long} and, before you know it, ! @sc{mime} has decoded the sounds file in the article and some horrible ! sing-a-long song comes streaming out out your speakers, and you can't ! find the volume button, because there isn't one, and people are starting ! to look at you, and you try to stop the program, but you can't, and you ! can't find the program to control the volume, and everybody else in the ! room suddenly decides to look at you disdainfully, and you'll feel ! rather stupid.) Any similarity to real events and people is purely coincidental. Ahem. --- 4971,4986 ---- Gnus handles @sc{mime} by shoving the articles through @code{gnus-show-mime-method}, which is @code{metamail-buffer} by default. Set @code{gnus-show-mime} to @code{t} if you want to use ! @sc{mime} all the time; it might be best to just use the toggling ! functions from the summary buffer to avoid getting nasty surprises. (For ! instance, you enter the group @samp{alt.sing-a-long} and, before you ! know it, @sc{mime} has decoded the sound file in the article and some ! horrible sing-a-long song comes streaming out out your speakers, and you ! can't find the volume button, because there isn't one, and people are ! starting to look at you, and you try to stop the program, but you can't, ! and you can't find the program to control the volume, and everybody else ! in the room suddenly decides to look at you disdainfully, and you'll ! feel rather stupid.) Any similarity to real events and people is purely coincidental. Ahem. *************** *** 4895,4908 **** @code{gnus-article-hide-citation} (which hides all cited text); @code{gnus-article-hide-signature} (which, umn, hides the signature); @code{gnus-article-subcite} (which tries to clean up the mess supercite ! makes in The Hands Of The Mad; @code{gnus-article-treat-overstrike} ! (which treats @samp{^H_} in a reasonable manner); and ! @code{gnus-article-remove-cr} (which removes trailing carriage returns). You can, of course, write your own functions. The functions are called ! in the article buffer, and you can do anything you like, pretty much. There is no information that you have to keep in the buffer - you can ! change everything. @node Article Keymap @section Article Keymap --- 5001,5018 ---- @code{gnus-article-hide-citation} (which hides all cited text); @code{gnus-article-hide-signature} (which, umn, hides the signature); @code{gnus-article-subcite} (which tries to clean up the mess supercite ! makes in The Hands Of The Mad); @code{gnus-article-treat-overstrike} ! (which treats @samp{^H_} in a reasonable manner); ! @code{gnus-article-remove-cr} (which removes trailing carriage returns); ! @code{gnus-article-de-quoted-unreadble} (which does a naive decoding of ! articles encoded with Quoted-Printable); and ! @code{gnus-article-display-x-face} (which displays any X-Face headers). You can, of course, write your own functions. The functions are called ! from the article buffer, and you can do anything you like, pretty much. There is no information that you have to keep in the buffer - you can ! change everything. However, you shouldn't delete anu headers. Instead ! make them invisible if you want to make them go away. @node Article Keymap @section Article Keymap *************** *** 4910,4917 **** Most of the keystrokes in the summary buffer can also be used in the article buffer. They should behave as if you typed them in the summary buffer, which means that you don't actually have to have a summary ! buffer displayed when you're reading. You can do it all from the ! article buffer. A few additional keystrokes are available: --- 5020,5027 ---- Most of the keystrokes in the summary buffer can also be used in the article buffer. They should behave as if you typed them in the summary buffer, which means that you don't actually have to have a summary ! buffer displayed while reading. You can do it all from the article ! buffer. A few additional keystrokes are available: *************** *** 4927,4935 **** @item C-c ^ @kindex C-c ^ (Article) @findex gnus-article-refer-article ! If point is in the neighborhood of a message-id and you press @kbd{r}, ! Gnus will try to get that article from the server. (Only available with ! nntp). (@code{gnus-article-refer-article}). @item C-c C-m @kindex C-c C-m (Article) @findex gnus-article-mail --- 5037,5045 ---- @item C-c ^ @kindex C-c ^ (Article) @findex gnus-article-refer-article ! If point is in the neighborhood of a @code{Message-Id} and you press ! @kbd{r}, Gnus will try to get that article from the server ! (@code{gnus-article-refer-article}). @item C-c C-m @kindex C-c C-m (Article) @findex gnus-article-mail *************** *** 4964,4971 **** @vindex gnus-article-display-hook @item gnus-article-display-hook This hook is called as the last thing when displaying an article, and is ! intended for modifying the contents of the buffer, highlight, hiding ! headers, and the like. @vindex gnus-article-mode-line-format @item gnus-article-mode-line-format This variable is a format string along the same lines as --- 5074,5081 ---- @vindex gnus-article-display-hook @item gnus-article-display-hook This hook is called as the last thing when displaying an article, and is ! intended for modifying the contents of the buffer, doing highlights, ! hiding headers, and the like. @vindex gnus-article-mode-line-format @item gnus-article-mode-line-format This variable is a format string along the same lines as *************** *** 4983,4988 **** --- 5093,5227 ---- (form linefeed). @end table + @node The Server Buffer + @chapter The Server Buffer + + Traditionally, a @dfn{server} is a machine or a piece of software that + one connects to, and then requests information from. Gnus does not + connect directly to any real servers, but does all transactions through + one backend or other. But that's just putting one layer more between + the actual media and Gnus, so we might just as well say that each + backend represents a virtual server. + + For instance, the @code{nntp} backend may be used to connect to several + different actual nntp servers, or, perhaps, to many different ports on + the same actual nntp server. You tell Gnus which backend to use, and + what parameters to set by specifying a @dfn{select method}. + + These select methods specifications can sometimes become quite + complicated - say, for instance, that you want to read from the nntp + server @samp{news.funet.fi} on port number @samp{13}, which hangs if + queried for @sc{nov} headers and has a buggy select. Ahem. Anyways, if + you had to specify that for each group that used this server, that would + be too much work, so Gnus offers a way of putting names to methods, + which is what you do in the server buffer. + + @menu + * Server Buffer Format:: You can customize the look of this buffer. + * Server Commands:: Commands to manipulate servers. + * Example Methods:: Examples server specifications. + * Servers & Methods:: You can use server names as select methods. + @end menu + + @node Server Buffer Format + @section Server Buffer Format + @cindex server buffer format + + @vindex gnus-server-line-format + You can change the look of the server buffer lines by changing the + @code{gnus-server-line-format} variable. This is a @code{format}-like + variable, with some simple extensions: + + @table @samp + @item h + How the news is fetched - the backend name. + @item n + The name of this server. + @item w + Where the news is to be fetched from - the address. + @end table + + @node Server Commands + @section Server Commands + @cindex server commands + + @table @kbd + @item SPC + Browse the current server (@code{gnus-server-read-server}). + @item q + Return to the group buffer (@code{gnus-server-exit}). + @item l + List all servers (@code{gnus-server-list-servers}). + @item k + Kill the current server (@code{gnus-server-kill-server}). + @item y + Yank the previously killed server (@code{gnus-server-yank-server}). + @item c + Copy the current server (@code{gnus-server-copy-server}). + @item a + Add a new server (@code{gnus-server-add-server}). + @item e + Edit a server (@code{gnus-server-edit-server}). + @end table + + @node Example Methods + @section Example Methods + + Most select methods are pretty simple and self-explanatory: + + @lisp + (nntp "news.funet.fi") + @end lisp + + Reading directly from the spool is even simpler: + + @lisp + (nnspool "") + @end lisp + + As you can see, the first element in a select method is the name of the + backend, and the second is the @dfn{address}, or @dfn{name}, if you + will. + + After these two elements, there may be a random number of @var{(variable + form)} pairs. + + To go back to the first example - imagine that you want to read from + port @code{15} from that machine. This is what the select method should + look like then: + + @lisp + (nntp "news.funet.fi" (nntp-port-number 15)) + @end lisp + + You should read the documention to each backend to find out what + variables are relevant, but here's an @code{nnmh} example. + + @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/")) + @end lisp + + (This server is then called @samp{private}, but you may have guessed + that. + + Here's the method for the public spool: + + @lisp + (nnmh "public" + (nnmh-directory "/usr/information/spool/") + (nnmh-get-new-mail nil)) + @end lisp + + @node Servers & Methods + @section Servers & Methods + + + @node Various @chapter Various *************** *** 5000,5006 **** @item gnus-novice-user @vindex gnus-novice-user If this variable is non-@code{nil}, you are either a newcomer to the ! usenet world, or you are very cautious, which is a nice thing to be, really. You will be given questions of the type "Are you sure you want to do this?" before doing anything dangerous. @item gnus-expert-user --- 5239,5245 ---- @item gnus-novice-user @vindex gnus-novice-user If this variable is non-@code{nil}, you are either a newcomer to the ! World of Usenet, or you are very cautious, which is a nice thing to be, really. You will be given questions of the type "Are you sure you want to do this?" before doing anything dangerous. @item gnus-expert-user *************** *** 5080,5092 **** @item gnus-mode-non-string-length @vindex gnus-mode-non-string-length ! By default, Gnus displays information of 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. This variable says how ! long the other info on the line is (ie. 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 Keinonen Kari . @lisp (add-hook 'display-time-hook --- 5319,5331 ---- @item gnus-mode-non-string-length @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. This ! variable says how long the other elements on the line is (ie. 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 Keinonen Kari . @lisp (add-hook 'display-time-hook *************** *** 5134,5141 **** entire active file from the server. This file is often v. large. You also have to set @code{gnus-check-new-news} and @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus ! doesn't suddenly decide to fetch the active file anyway. Note that this ! will make it difficult for you to get hold of new groups. @item gnus-nov-is-evil This one has to be @code{nil}. If not, grabbing article headers from the @sc{nntp} server will not be very fast. Not all @sc{nntp} servers --- 5373,5379 ---- entire active file from the server. This file is often v. large. You also have to set @code{gnus-check-new-news} and @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus ! doesn't suddenly decide to fetch the active file anyway. @item gnus-nov-is-evil This one has to be @code{nil}. If not, grabbing article headers from the @sc{nntp} server will not be very fast. Not all @sc{nntp} servers *************** *** 5181,5188 **** @node Little Disk Space @section Little Disk Space ! The startup files can get rather large, so you may want to keep their ! sizes down a bit if you are running out of space. @table @code @item gnus-save-newsrc-file --- 5419,5426 ---- @node Little Disk Space @section Little Disk Space ! The startup files can get rather large, so you may want to cut their ! sizes a bit if you are running out of space. @table @code @item gnus-save-newsrc-file *************** *** 5190,5223 **** only save @file{.newsrc.eld}. This means that you will not be able to use any other newsreaders than Gnus. @item gnus-save-killed-list ! If this is @code{nil}, Gnus will not save the list of dead groups. That ! means that Gnus will not know whether groups are new or old, which makes ! automatic handling of new groups impossible. You should also set ! @code{gnus-check-new-newsgroups} to @code{ask-server} and ! @code{gnus-check-bogus-newsgroups} to @code{nil} if you set this variable to @code{nil}. @end table - @vindex gnus-kill-file-name - A kill file for the group @samp{soc.motss} is normally called - @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}. - - In short: avoid killing. Scoring is more fun. - @node Slow Machine @section Slow Machine 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-read-active-file}, @code{gnus-check-new-newsgroups}, @code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster. Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and ! @code{nntp-xover-is-evil} to @code{nil} to make entering and exiting the summary buffer faster. Set @code{gnus-article-display-hook} to @code{nil} to make article --- 5428,5450 ---- only save @file{.newsrc.eld}. This means that you will not be able to use any other newsreaders than Gnus. @item gnus-save-killed-list ! If this is @code{nil}, Gnus will not save the list of dead groups. You ! should also set @code{gnus-check-new-newsgroups} to @code{ask-server} ! and @code{gnus-check-bogus-newsgroups} to @code{nil} if you set this variable to @code{nil}. @end table @node Slow Machine @section Slow Machine 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 ! @code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the summary buffer faster. Set @code{gnus-article-display-hook} to @code{nil} to make article *************** *** 5227,5257 **** @chapter Troubleshooting @cindex troubleshooting ! (ding) Gnus work so well straight out of the box, so I can't imagine any ! problems, really. Ahem. Make sure your computer is switched on. ! Make sure that you really load the current Gnus version. If you have been running @sc{gnus}, you need to exit Emacs and start it up again before Gnus will work. ! Try doing an @kbd{M-x gnus-version}. If you get something that looks like @samp{(ding) Gnus v0.46; nntp 4.0} you have the right files loaded. If, on the other hand, you get something like @samp{NNTP 3.x} or ! @samp{nntp flee}, you have some old .el files lying around. Delete ! these. ! Read the help group (@kbd{M h} in the group buffer) for a FAQ and a how-to. ! If all else fails, report the problem as a bug (@pxref{Reporting ! Bugs}). - @node Reporting Bugs - @chapter Reporting Bugs @cindex bugs @cindex reporting bugs --- 5454,5484 ---- @chapter Troubleshooting @cindex troubleshooting ! (ding) Gnus works @emph{so} well straight out of the box - I can't ! imagine any problems, really. Ahem. + @enumerate + @item Make sure your computer is switched on. ! @item Make sure that you really load the current Gnus version. If you have been running @sc{gnus}, you need to exit Emacs and start it up again before Gnus will work. ! @item Try doing an @kbd{M-x gnus-version}. If you get something that looks like @samp{(ding) Gnus v0.46; nntp 4.0} you have the right files loaded. If, on the other hand, you get something like @samp{NNTP 3.x} or ! @samp{nntp flee}, you have some old @file{.el} files lying around. ! Delete these. ! @item Read the help group (@kbd{M h} in the group buffer) for a FAQ and a how-to. + @end enumerate ! If all else fails, report the problem as a bug, @cindex bugs @cindex reporting bugs *************** *** 5264,5269 **** --- 5491,5523 ---- @c If you just need help, you are better off asking on @c @samp{gnu.emacs.gnus}. + + @node The End + @chapter The End + + Well, that's the manual - you can get on with your life now. Keep in + touch. Say hello to your cats from me. + + My @strong{ghod} - I just can't stand goodbyes. Sniffle. + + Ol' Chuck Reznikoff said it pretty well, so I leave the floor to him: + + @quotation + @strong{Te Deum} + @sp 1 + Not because of victories @* + I sing,@* + having none,@* + but for the common sunshine,@* + the breeze,@* + the largess of the spring. + @sp 1 + Not for victory@* + but for the day's work done@* + as well as I was able;@* + not for a seat upon the dais@* + but at the common table.@* + @end quotation @node Index @chapter Index