[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10. Appendices

10.1 XEmacs  Requirements for installing under XEmacs.
10.2 History  How Gnus got where it is today.
10.3 On Writing Manuals  Why this is not a beginner's guide.
10.4 Terminology  We use really difficult, like, words here.
10.5 Customization  Tailoring Gnus to your needs.
10.6 Troubleshooting  What you might try if things do not work.
10.7 Gnus Reference Guide  Rilly, rilly technical stuff.
10.8 Emacs for Heathens  A short introduction to Emacsian terms.
10.9 Frequently Asked Questions  The Gnus FAQ


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.1 XEmacs

XEmacs is distributed as a collection of packages. You should install whatever packages the Gnus XEmacs package requires. The current requirements are `gnus', `mail-lib', `xemacs-base', `eterm', `sh-script', `net-utils', `os-utils', `dired', `mh-e', `sieve', `ps-print', `W3', `pgg', `mailcrypt', `ecrypto', and `sasl'.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2 History

GNUS was written by Masanobu UMEDA. When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and decided to rewrite Gnus.

If you want to investigate the person responsible for this outrage, you can point your (feh!) web browser to http://quimby.gnus.org/. This is also the primary distribution point for the new and spiffy versions of Gnus, and is known as The Site That Destroys Newsrcs And Drives People Mad.

During the first extended alpha period of development, the new Gnus was called "(ding) Gnus". (ding) is, of course, short for ding is not Gnus, which is a total and utter lie, but who cares? (Besides, the "Gnus" in this abbreviation should probably be pronounced "news" as UMEDA intended, which makes it a more appropriate name, don't you think?)

In any case, after spending all that energy on coming up with a new and spunky name, we decided that the name was too spunky, so we renamed it back again to "Gnus". But in mixed case. "Gnus" vs. "GNUS". New vs. old.

10.2.1 Gnus Versions  What Gnus versions have been released.
10.2.2 Other Gnus Versions  Other Gnus versions that also have been released.
10.2.3 Why?  What's the point of Gnus?
10.2.4 Compatibility  Just how compatible is Gnus with GNUS?
10.2.5 Conformity  Gnus tries to conform to all standards.
10.2.6 Emacsen  Gnus can be run on a few modern Emacsen.
10.2.7 Gnus Development  How Gnus is developed.
10.2.8 Contributors  Oodles of people.
10.2.9 New Features  Pointers to some of the new stuff in Gnus.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.1 Gnus Versions

The first "proper" release of Gnus 5 was done in November 1995 when it was included in the Emacs 19.30 distribution (132 (ding) Gnus releases plus 15 Gnus 5.0 releases).

In May 1996 the next Gnus generation (aka. "September Gnus" (after 99 releases)) was released under the name "Gnus 5.2" (40 releases).

On July 28th 1996 work on Red Gnus was begun, and it was released on January 25th 1997 (after 84 releases) as "Gnus 5.4" (67 releases).

On September 13th 1997, Quassia Gnus was started and lasted 37 releases. It was released as "Gnus 5.6" on March 8th 1998 (46 releases).

Gnus 5.6 begat Pterodactyl Gnus on August 29th 1998 and was released as "Gnus 5.8" (after 99 releases and a CVS repository) on December 3rd 1999.

On the 26th of October 2000, Oort Gnus was begun and was released as Gnus 5.10 on May 1st 2003 (24 releases).

On the January 4th 2004, No Gnus was begun.

If you happen upon a version of Gnus that has a prefixed name -- "(ding) Gnus", "September Gnus", "Red Gnus", "Quassia Gnus", "Pterodactyl Gnus", "Oort Gnus", "No Gnus" -- don't panic. Don't let it know that you're frightened. Back away. Slowly. Whatever you do, don't run. Walk away, calmly, until you're out of its reach. Find a proper released version of Gnus and snuggle up to that instead.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.2 Other Gnus Versions

In addition to the versions of Gnus which have had their releases coordinated by Lars, one major development has been Semi-gnus from Japan. It's based on a library called SEMI, which provides MIME capabilities.

These Gnusae are based mainly on Gnus 5.6 and Pterodactyl Gnus. Collectively, they are called "Semi-gnus", and different strains are called T-gnus, ET-gnus, Nana-gnus and Chaos. These provide powerful MIME and multilingualization things, especially important for Japanese users.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.3 Why?

What's the point of Gnus?

I want to provide a "rad", "happening", "way cool" and "hep" newsreader, that lets you do anything you can think of. That was my original motivation, but while working on Gnus, it has become clear to me that this generation of newsreaders really belong in the stone age. Newsreaders haven't developed much since the infancy of the net. If the volume continues to rise with the current rate of increase, all current newsreaders will be pretty much useless. How do you deal with newsgroups that have thousands of new articles each day? How do you keep track of millions of people who post?

Gnus offers no real solutions to these questions, but I would very much like to see Gnus being used as a testing ground for new methods of reading and fetching news. Expanding on UMEDA-san's wise decision to separate the newsreader from the back ends, Gnus now offers a simple interface for anybody who wants to write new back ends for fetching mail and news from different sources. I have added hooks for customizations everywhere I could imagine it being useful. By doing so, I'm inviting every one of you to explore and invent.

May Gnus never be complete. C-u 100 M-x all-hail-emacs and C-u 100 M-x all-hail-xemacs.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.4 Compatibility

Gnus was designed to be fully compatible with GNUS. Almost all key bindings have been kept. More key bindings have been added, of course, but only in one or two obscure cases have old bindings been changed.

Our motto is:

In a cloud bones of steel.

All commands have kept their names. Some internal functions have changed their names.

The gnus-uu package has changed drastically. See section 3.16 Decoding Articles.

One major compatibility question is the presence of several summary buffers. All variables relevant while reading a group are buffer-local to the summary buffer they belong in. Although many important variables have their values copied into their global counterparts whenever a command is executed in the summary buffer, this change might lead to incorrect values being used unless you are careful.

All code that relies on knowledge of GNUS internals will probably fail. To take two examples: Sorting gnus-newsrc-alist (or changing it in any way, as a matter of fact) is strictly verboten. Gnus maintains a hash table that points to the entries in this alist (which speeds up many functions), and changing the alist directly will lead to peculiar results.

Old hilit19 code does not work at all. In fact, you should probably remove all hilit code from all Gnus hooks (gnus-group-prepare-hook and gnus-summary-prepare-hook). Gnus provides various integrated functions for highlighting. These are faster and more accurate. To make life easier for everybody, Gnus will by default remove all hilit calls from all hilit hooks. Uncleanliness! Away!

Packages like expire-kill will no longer work. As a matter of fact, you should probably remove all old GNUS packages (and other code) when you start using Gnus. More likely than not, Gnus already does what you have written code to make GNUS do. (Snicker.)

Even though old methods of doing things are still supported, only the new methods are documented in this manual. If you detect a new method of doing something while reading this manual, that does not mean you have to stop doing it the old way.

Gnus understands all GNUS startup files.

Overall, a casual user who hasn't written much code that depends on GNUS internals should suffer no problems. If problems occur, please let me know by issuing that magic command M-x gnus-bug.

If you are in the habit of sending bug reports very often, you may find the helpful help buffer annoying after a while. If so, set gnus-bug-create-help-buffer to nil to avoid having it pop up at you.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.5 Conformity

No rebels without a clue here, ma'am. We conform to all standards known to (wo)man. Except for those standards and/or conventions we disagree with, of course.

RFC (2)822
There are no known breaches of this standard.

RFC 1036
There are no known breaches of this standard, either.

Son-of-RFC 1036
We do have some breaches to this one.

X-Newsreader
User-Agent
These are considered to be "vanity headers", while I consider them to be consumer information. After seeing so many badly formatted articles coming from tin and Netscape I know not to use either of those for posting articles. I would not have known that if it wasn't for the X-Newsreader header.

USEFOR
USEFOR is an IETF working group writing a successor to RFC 1036, based on Son-of-RFC 1036. They have produced a number of drafts proposing various changes to the format of news articles. The Gnus towers will look into implementing the changes when the draft is accepted as an RFC.

MIME - RFC 2045-2049 etc
All the various MIME RFCs are supported.

Disposition Notifications - RFC 2298
Message Mode is able to request notifications from the receiver.

PGP - RFC 1991 and RFC 2440
RFC 1991 is the original PGP message specification, published as an informational RFC. RFC 2440 was the follow-up, now called Open PGP, and put on the Standards Track. Both document a non-MIME aware PGP format. Gnus supports both encoding (signing and encryption) and decoding (verification and decryption).

PGP/MIME - RFC 2015/3156
RFC 2015 (superseded by 3156 which references RFC 2440 instead of RFC 1991) describes the MIME-wrapping around the RF 1991/2440 format. Gnus supports both encoding and decoding.

S/MIME - RFC 2633
RFC 2633 describes the S/MIME format.

IMAP - RFC 1730/2060, RFC 2195, RFC 2086, RFC 2359, RFC 2595, RFC 1731
RFC 1730 is IMAP version 4, updated somewhat by RFC 2060 (IMAP 4 revision 1). RFC 2195 describes CRAM-MD5 authentication for IMAP. RFC 2086 describes access control lists (ACLs) for IMAP. RFC 2359 describes a IMAP protocol enhancement. RFC 2595 describes the proper TLS integration (STARTTLS) with IMAP. RFC 1731 describes the GSSAPI/Kerberos4 mechanisms for IMAP.

If you ever notice Gnus acting non-compliant with regards to the texts mentioned above, don't hesitate to drop a note to Gnus Towers and let us know.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.6 Emacsen

Gnus should work on:

This Gnus version will absolutely not work on any Emacsen older than that. Not reliably, at least. Older versions of Gnus may work on older Emacs versions.

There are some vague differences between Gnus on the various platforms--XEmacs features more graphics (a logo and a toolbar)---but other than that, things should look pretty much the same under all Emacsen.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.7 Gnus Development

Gnus is developed in a two-phased cycle. The first phase involves much discussion on the `ding@gnus.org' mailing list, where people propose changes and new features, post patches and new back ends. This phase is called the alpha phase, since the Gnusae released in this phase are alpha releases, or (perhaps more commonly in other circles) snapshots. During this phase, Gnus is assumed to be unstable and should not be used by casual users. Gnus alpha releases have names like "Red Gnus" and "Quassia Gnus".

After futzing around for 50-100 alpha releases, Gnus is declared frozen, and only bug fixes are applied. Gnus loses the prefix, and is called things like "Gnus 5.6.32" instead. Normal people are supposed to be able to use these, and these are mostly discussed on the `gnu.emacs.gnus' newsgroup.

Some variable defaults differ between alpha Gnusae and released Gnusae. In particular, mail-source-delete-incoming defaults to nil in alpha Gnusae and t in released Gnusae. This is to prevent lossage of mail if an alpha release hiccups while handling the mail.

The division of discussion between the ding mailing list and the Gnus newsgroup is not purely based on publicity concerns. It's true that having people write about the horrible things that an alpha Gnus release can do (sometimes) in a public forum may scare people off, but more importantly, talking about new experimental features that have been introduced may confuse casual users. New features are frequently introduced, fiddled with, and judged to be found wanting, and then either discarded or totally rewritten. People reading the mailing list usually keep up with these rapid changes, while people on the newsgroup can't be assumed to do so.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.8 Contributors

The new Gnus version couldn't have been done without the help of all the people on the (ding) mailing list. Every day for over a year I have gotten billions 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 <type type>, yup, I'll release it right away <ship off> no wait, that doesn't work at all <type type>, yup, I'll ship that one off right away <ship off> no, wait, that absolutely does not work" policy for releases. Micro$oft--bah. Amateurs. I'm much worse. (Or is that "worser"? "much worser"? "worsest"?)

I would like to take this opportunity to thank the Academy for... oops, wrong show.

This manual was proof-read by Adrian Aichner, with Ricardo Nassif, Mark Borges, and Jost Krieger proof-reading parts of the manual.

The following people have contributed many patches and suggestions:

Christopher Davis, Andrew Eskilsson, Kai Grossjohann, Kevin Greiner, Jesper Harder, Paul Jarc, Simon Josefsson, David Kċgedal, Richard Pieri, Fabrice Popineau, Daniel Quinlan, Michael Shields, Reiner Steib, Jason L. Tibbitts, III, Jack Vinson, Katsumi Yamaoka, and Teodor Zlatanov.

Also thanks to the following for patches and stuff:

Jari Aalto, Adrian Aichner, Vladimir Alexiev, Russ Allbery, Peter Arius, Matt Armstrong, Marc Auslander, Miles Bader, Alexei V. Barantsev, Frank Bennett, Robert Bihlmeyer, Chris Bone, Mark Borges, Mark Boyns, Lance A. Brown, Rob Browning, Kees de Bruin, Martin Buchholz, Joe Buehler, Kevin Buhr, Alastair Burt, Joao Cachopo, Zlatko Calusic, Massimo Campostrini, Castor, David Charlap, Dan Christensen, Kevin Christian, Jae-you Chung, James H. Cloos, Jr., Laura Conrad, Michael R. Cook, Glenn Coombs, Andrew J. Cosgriff, Neil Crellin, Frank D. Cringle, Geoffrey T. Dairiki, Andre Deparade, Ulrik Dickow, Dave Disser, Rui-Tao Dong, Joev Dubach, Michael Welsh Duggan, Dave Edmondson, Paul Eggert, Mark W. Eichin, Karl Eichwalder, Enami Tsugutomo, Michael Ernst, Luc Van Eycken, Sam Falkner, Nelson Jose dos Santos Ferreira, Sigbjorn Finne, Sven Fischer, Paul Fisher, Decklin Foster, Gary D. Foster, Paul Franklin, Guy Geens, Arne Georg Gleditsch, David S. Goldberg, Michelangelo Grigni, Dale Hagglund, D. Hall, Magnus Hammerin, Kenichi Handa, Raja R. Harinath, Yoshiki Hayashi, P. E. Jareth Hein, Hisashige Kenji, Scott Hofmann, Marc Horowitz, Gunnar Horrigmo, Richard Hoskins, Brad Howes, Miguel de Icaza, François Felix Ingrand, Tatsuya Ichikawa, Ishikawa Ichiro, Lee Iverson, Iwamuro Motonori, Rajappa Iyer, Andreas Jaeger, Adam P. Jenkins, Randell Jesup, Fred Johansen, Gareth Jones, Greg Klanderman, Karl Kleinpaste, Michael Klingbeil, Peter Skov Knudsen, Shuhei Kobayashi, Petr Konecny, Koseki Yoshinori, Thor Kristoffersen, Jens Lautenbacher, Martin Larose, Seokchan Lee, Joerg Lenneis, Carsten Leonhardt, James LewisMoss, Christian Limpach, Markus Linnala, Dave Love, Mike McEwan, Tonny Madsen, Shlomo Mahlab, Nat Makarevitch, Istvan Marko, David Martin, Jason R. Mastaler, Gordon Matzigkeit, Timo Metzemakers, Richard Mlynarik, Lantz Moore, Morioka Tomohiko, Erik Toubro Nielsen, Hrvoje Niksic, Andy Norman, Fred Oberhauser, C. R. Oldham, Alexandre Oliva, Ken Olstad, Masaharu Onishi, Hideki Ono, Ettore Perazzoli, William Perry, Stephen Peters, Jens-Ulrik Holger Petersen, Ulrich Pfeifer, Matt Pharr, Andy Piper, John McClary Prevost, Bill Pringlemeir, Mike Pullen, Jim Radford, Colin Rafferty, Lasse Rasinen, Lars Balker Rasmussen, Joe Reiss, Renaud Rioboo, Roland B. Roberts, Bart Robinson, Christian von Roques, Markus Rost, Jason Rumney, Wolfgang Rupprecht, Jay Sachs, Dewey M. Sasser, Conrad Sauerwald, Loren Schall, Dan Schmidt, Ralph Schleicher, Philippe Schnoebelen, Andreas Schwab, Randal L. Schwartz, Danny Siu, Matt Simmons, Paul D. Smith, Jeff Sparkes, Toby Speight, Michael Sperber, Darren Stalder, Richard Stallman, Greg Stark, Sam Steingold, Paul Stevenson, Jonas Steverud, Paul Stodghill, Kiyokazu Suto, Kurt Swanson, Samuel Tardieu, Teddy, Chuck Thompson, Tozawa Akihiko, Philippe Troin, James Troup, Trung Tran-Duc, Jack Twilley, Aaron M. Ucko, Aki Vehtari, Didier Verna, Vladimir Volovich, Jan Vroonhof, Stefan Waldherr, Pete Ware, Barry A. Warsaw, Christoph Wedler, Joe Wells, Lee Willis, and Lloyd Zusman.

For a full overview of what each person has done, the ChangeLogs included in the Gnus alpha distributions should give ample reading (550kB and counting).

Apologies to everybody that I've forgotten, of which there are many, I'm sure.

Gee, that's quite a list of people. I guess that must mean that there actually are people who are using Gnus. Who'd'a thunk it!


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.9 New Features

10.2.9.1 (ding) Gnus  New things in Gnus 5.0/5.1, the first new Gnus.
10.2.9.2 September Gnus  The Thing Formally Known As Gnus 5.2/5.3.
10.2.9.3 Red Gnus  Third time best--Gnus 5.4/5.5.
10.2.9.4 Quassia Gnus  Two times two is four, or Gnus 5.6/5.7.
10.2.9.5 Pterodactyl Gnus  Pentad also starts with P, AKA Gnus 5.8/5.9.
10.2.9.6 Oort Gnus  It's big. It's far out. Gnus 5.10/5.11.

These lists are, of course, just short overviews of the most important new features. No, really. There are tons more. Yes, we have feeping creaturism in full effect.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.9.1 (ding) Gnus

New features in Gnus 5.0/5.1:


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.9.2 September Gnus

New features in Gnus 5.2/5.3:


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.9.3 Red Gnus

New features in Gnus 5.4/5.5:


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.9.4 Quassia Gnus

New features in Gnus 5.6:


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.9.5 Pterodactyl Gnus

New features in Gnus 5.8:


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2.9.6 Oort Gnus

New features in Gnus 5.10:


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.3 On Writing Manuals

I guess most manuals are written after-the-fact; documenting a program that's already there. This is not how this manual is written. When implementing something, I write the manual entry for that something straight away. I then see that it's difficult to explain the functionality, so I write how it's supposed to be, and then I change the implementation. Writing the documentation and writing the code goes hand in hand.

This, of course, means that this manual has no, or little, flow. It documents absolutely everything in Gnus, but often not where you're looking for it. It is a reference manual, and not a guide to how to get started with Gnus.

That would be a totally different book, that should be written using the reference manual as source material. It would look quite differently.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.4 Terminology

news
This is what you are supposed to use this thing for--reading news. News is generally fetched from a nearby NNTP server, and is generally publicly available to everybody. If you post news, the entire world is likely to read just what you have written, and they'll all snigger mischievously. Behind your back.

mail
Everything that's delivered to you personally is mail. Some news/mail readers (like Gnus) blur the distinction between mail and news, but there is a difference. Mail is private. News is public. Mailing is not posting, and replying is not following up.

reply
Send a mail to the person who has written what you are reading.

follow up
Post an article to the current newsgroup responding to the article you are reading.

back end
Gnus considers mail and news to be mostly the same, really. The only difference is how to access the actual articles. News articles are commonly fetched via the protocol NNTP, whereas mail messages could be read from a file on the local disk. The internal architecture of Gnus thus comprises a "front end" and a number of "back ends". Internally, when you enter a group (by hitting RET, say), you thereby invoke a function in the front end in Gnus. The front end then "talks" to a back end and says things like "Give me the list of articles in the foo group" or "Show me article number 4711".

So a back end mainly defines either a protocol (the nntp back end accesses news via NNTP, the nnimap back end accesses mail via IMAP) or a file format and directory layout (the nnspool back end accesses news via the common "spool directory" format, the nnml back end access mail via a file format and directory layout that's quite similar).

Gnus does not handle the underlying media, so to speak--this is all done by the back ends. A back end is a collection of functions to access the articles.

However, sometimes the term "back end" is also used where "server" would have been more appropriate. And then there is the term "select method" which can mean either. The Gnus terminology can be quite confusing.

native
Gnus will always use one method (and back end) as the native, or default, way of getting news.

foreign
You can also have any number of foreign groups active at the same time. These are groups that use non-native non-secondary back ends for getting news.

secondary
Secondary back ends are somewhere half-way between being native and being foreign, but they mostly act like they are native.

article
A message that has been posted as news.

mail message
A message that has been mailed.

message
A mail message or news article

head
The top part of a message, where administrative information (etc.) is put.

body
The rest of an article. Everything not in the head is in the body.

header
A line from the head of an article.

headers
A collection of such lines, or a collection of heads. Or even a collection of NOV lines.

NOV
When Gnus enters a group, it asks the back end for the headers of all unread articles in the group. Most servers support the News OverView format, which is more compact and much faster to read and parse than the normal HEAD format.

level
Each group is subscribed at some 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 working level.

killed groups
No information on killed groups is stored or updated, which makes killed groups much easier to handle than subscribed groups.

zombie groups
Just like killed groups, only slightly less dead.

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.

bogus groups
A group that exists in the `.newsrc' file, but isn't known to the server (i.e., it isn't in the active file), is a bogus group. This means that the group probably doesn't exist (any more).

activating
The act of asking the server for info on a group and computing the number of unread articles is called activating the group. Un-activated groups are listed with `*' in the group buffer.

spool
News servers store their articles locally in one fashion or other. One old-fashioned storage method is to have just one file per article. That's called a "traditional spool".

server
A machine one can connect to and get news (or mail) from.

select method
A structure that specifies the back end, the server and the virtual server settings.

virtual server
A named select method. Since a select method defines all there is to know about connecting to a (physical) server, taking the thing as a whole is a virtual server.

washing
Taking a buffer and running it through a filter of some sort. The result will (more often than not) be cleaner and more pleasing than the original.

ephemeral groups
Most groups store data on what articles you have read. Ephemeral groups are groups that will have no data stored--when you exit the group, it'll disappear into the aether.

solid groups
This is the opposite of ephemeral groups. All groups listed in the group buffer are solid groups.

sparse articles
These are article placeholders shown in the summary buffer when gnus-build-sparse-threads has been switched on.

threading
To put responses to articles directly after the articles they respond to--in a hierarchical fashion.

root
The first article in a thread is the root. It is the ancestor of all articles in the thread.

parent
An article that has responses.

child
An article that responds to a different article--its parent.

digest
A collection of messages in one file. The most common digest format is specified by RFC 1153.

splitting
The action of sorting your emails according to certain rules. Sometimes incorrectly called mail filtering.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.5 Customization

All variables are properly documented elsewhere in this manual. This section is designed to give general pointers on how to customize Gnus for some quite common situations.

10.5.1 Slow/Expensive NNTP Connection  You run a local Emacs and get the news elsewhere.
10.5.2 Slow Terminal Connection  You run a remote Emacs.
10.5.3 Little Disk Space  You feel that having large setup files is icky.
10.5.4 Slow Machine  You feel like buying a faster machine.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.5.1 Slow/Expensive NNTP Connection

If you run Emacs on a machine locally, and get your news from a machine over some very thin strings, you want to cut down on the amount of data Gnus has to get from the NNTP server.

gnus-read-active-file
Set this to nil, which will inhibit Gnus from requesting the entire active file from the server. This file is often very large. You also have to set gnus-check-new-newsgroups and gnus-check-bogus-newsgroups to nil to make sure that Gnus doesn't suddenly decide to fetch the active file anyway.

gnus-nov-is-evil
This one has to be nil. If not, grabbing article headers from the NNTP server will not be very fast. Not all NNTP servers support XOVER; Gnus will detect this by itself.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.5.2 Slow Terminal Connection

Let's say you use your home computer for dialing up the system that runs Emacs and Gnus. If your modem is slow, you want to reduce (as much as possible) the amount of data sent over the wires.

gnus-auto-center-summary
Set this to nil to inhibit Gnus from re-centering the summary buffer all the time. If it is vertical, do only vertical re-centering. If it is neither nil nor vertical, do both horizontal and vertical recentering.

gnus-visible-headers
Cut down on the headers included in the articles to the minimum. You can, in fact, make do without them altogether--most of the useful data is in the summary buffer, anyway. Set this variable to `^NEVVVVER' or `From:', or whatever you feel you need.

Use the following to enable all the available hiding features:

 
(setq gnus-treat-hide-headers 'head
      gnus-treat-hide-signature t
      gnus-treat-hide-citation t)

gnus-use-full-window
By setting this to nil, you can make all the windows smaller. While this doesn't really cut down much generally, it means that you have to see smaller portions of articles before deciding that you didn't want to read them anyway.

gnus-thread-hide-subtree
If this is non-nil, all threads in the summary buffer will be hidden initially.

gnus-updated-mode-lines
If this is nil, Gnus will not put information in the buffer mode lines, which might save some time.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.5.3 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.

gnus-save-newsrc-file
If this is nil, Gnus will never save `.newsrc'---it will only save `.newsrc.eld'. This means that you will not be able to use any other newsreaders than Gnus. This variable is t by default.

gnus-read-newsrc-file
If this is nil, Gnus will never read `.newsrc'---it will only read `.newsrc.eld'. This means that you will not be able to use any other newsreaders than Gnus. This variable is t by default.

gnus-save-killed-list
If this is nil, Gnus will not save the list of dead groups. You should also set gnus-check-new-newsgroups to ask-server and gnus-check-bogus-newsgroups to nil if you set this variable to nil. This variable is t by default.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.5.4 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 gnus-check-new-newsgroups and gnus-check-bogus-newsgroups to nil to make startup faster.

Set gnus-show-threads, gnus-use-cross-reference and gnus-nov-is-evil to nil to make entering and exiting the summary buffer faster.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.6 Troubleshooting

Gnus works so well straight out of the box--I can't imagine any problems, really.

Ahem.

  1. Make sure your computer is switched on.

  2. Make sure that you really load the current Gnus version. If you have been running GNUS, you need to exit Emacs and start it up again before Gnus will work.

  3. Try doing an M-x gnus-version. If you get something that looks like `Gnus v5.10.6' you have the right files loaded. Otherwise you have some old `.el' files lying around. Delete these.

  4. Read the help group (G h in the group buffer) for a FAQ and a how-to.

  5. Gnus works on many recursive structures, and in some extreme (and very rare) cases Gnus may recurse down "too deeply" and Emacs will beep at you. If this happens to you, set max-lisp-eval-depth to 500 or something like that.

If all else fails, report the problem as a bug.

If you find a bug in Gnus, you can report it with the M-x gnus-bug command. M-x set-variable RET debug-on-error RET t RET, and send me the backtrace. I will fix bugs, but I can only fix them if you send me a precise description as to how to reproduce the bug.

You really can never be too detailed in a bug report. Always use the M-x gnus-bug command when you make bug reports, even if it creates a 10Kb mail each time you use it, and even if you have sent me your environment 500 times before. I don't care. I want the full info each time.

It is also important to remember that I have no memory whatsoever. If you send a bug report, and I send you a reply, and then you just send back "No, it's not! Moron!", I will have no idea what you are insulting me about. Always over-explain everything. It's much easier for all of us--if I don't have all the information I need, I will just mail you and ask for more info, and everything takes more time.

If the problem you're seeing is very visual, and you can't quite explain it, copy the Emacs window to a file (with xwd, for instance), put it somewhere it can be reached, and include the URL of the picture in the bug report.

If you would like to contribute a patch to fix bugs or make improvements, please produce the patch using `diff -u'.

If you want to debug your problem further before reporting, possibly in order to solve the problem yourself and send a patch, you can use edebug. Debugging Lisp code is documented in the Elisp manual (see section `Debugging Lisp Programs' in The GNU Emacs Lisp Reference Manual). To get you started with edebug, consider if you discover some weird behavior when pressing c, the first step is to do C-h k c and click on the hyperlink (Emacs only) in the documentation buffer that leads you to the function definition, then press M-x edebug-defun RET with point inside that function, return to Gnus and press c to invoke the code. You will be placed in the lisp buffer and can single step using SPC and evaluate expressions using M-: or inspect variables using C-h v, abort execution with q, and resume execution with c or g.

Sometimes, a problem do not directly generate an elisp error but manifests itself by causing Gnus to be very slow. In these cases, you can use M-x toggle-debug-on-quit and press C-g when things are slow, and then try to analyze the backtrace (repeating the procedure helps isolating the real problem areas).

A fancier approach is to use the elisp profiler, ELP. The profiler is (or should be) fully documented elsewhere, but to get you started there are a few steps that need to be followed. First, instrument the part of Gnus you are interested in for profiling, e.g. M-x elp-instrument-package RET gnus or M-x elp-instrument-package RET message. Then perform the operation that is slow and press M-x elp-results. You will then see which operations that takes time, and can debug them further. If the entire operation takes much longer than the time spent in the slowest function in the profiler output, you probably profiled the wrong part of Gnus. To reset profiling statistics, use M-x elp-reset-all. M-x elp-restore-all is supposed to remove profiling, but given the complexities and dynamic code generation in Gnus, it might not always work perfectly.

If you just need help, you are better off asking on `gnu.emacs.gnus'. I'm not very helpful. You can also ask on the ding mailing list. Write to ding-request@gnus.org to subscribe.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.7 Gnus Reference Guide

It is my hope that other people will figure out smart stuff that Gnus can do, and that other people will write those smart things as well. To facilitate that I thought it would be a good idea to describe the inner workings of Gnus. And some of the not-so-inner workings, while I'm at it.

You can never expect the internals of a program not to change, but I will be defining (in some details) the interface between Gnus and its back ends (this is written in stone), the format of the score files (ditto), data structures (some are less likely to change than others) and general methods of operation.

10.7.1 Gnus Utility Functions  Common functions and variable to use.
10.7.2 Back End Interface  How Gnus communicates with the servers.
10.7.3 Score File Syntax  A BNF definition of the score file standard.
10.7.4 Headers  How Gnus stores headers internally.
10.7.5 Ranges  A handy format for storing mucho numbers.
10.7.6 Group Info  The group info format.
10.7.7 Extended Interactive  Symbolic prefixes and stuff.
10.7.8 Emacs/XEmacs Code  Gnus can be run under all modern Emacsen.
10.7.9 Various File Formats  Formats of files that Gnus use.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.7.1 Gnus Utility Functions

When writing small functions to be run from hooks (and stuff), it's vital to have access to the Gnus internal functions and variables. Below is a list of the most common ones.

gnus-newsgroup-name
This variable holds the name of the current newsgroup.

gnus-find-method-for-group
A function that returns the select method for group.

gnus-group-real-name
Takes a full (prefixed) Gnus group name, and returns the unprefixed name.

gnus-group-prefixed-name
Takes an unprefixed group name and a select method, and returns the full (prefixed) Gnus group name.

gnus-get-info
Returns the group info list for group.

gnus-group-unread
The number of unread articles in group, or t if that is unknown.

gnus-active
The active entry for group.

gnus-set-active
Set the active entry for group.

gnus-add-current-to-buffer-list
Adds the current buffer to the list of buffers to be killed on Gnus exit.

gnus-continuum-version
Takes a Gnus version string as a parameter and returns a floating point number. Earlier versions will always get a lower number than later versions.

gnus-group-read-only-p
Says whether group is read-only or not.

gnus-news-group-p
Says whether group came from a news back end.

gnus-ephemeral-group-p
Says whether group is ephemeral or not.

gnus-server-to-method
Returns the select method corresponding to server.

gnus-server-equal
Says whether two virtual servers are equal.

gnus-group-native-p
Says whether group is native or not.

gnus-group-secondary-p
Says whether group is secondary or not.

gnus-group-foreign-p
Says whether group is foreign or not.

gnus-group-find-parameter
Returns the parameter list of group. If given a second parameter, returns the value of that parameter for group.

gnus-group-set-parameter
Takes three parameters; group, parameter and value.