Gnus Basics

Gnus can be difficult to use, especially if you can't remember the keybindings (you could say that about all of emacs). This page is here to remind me of the most widely used keybindings and to have a central place for useful links.


Manuals page:

Big Monolithic Manual:

A very good introduction:

The Very Basics

Gnus uses a somewhat specialized vocabulary. It's important that one knows it (somewhat) before trying to configure Gnus. Everything is an uphill battle otherwise.

The main thing to remember is that is Gnus was designed primarily as a newsreader. All the terms Gnus uses tend to revolve around that idea. Yes, you can use Gnus to read your email effectively, but because Gnus is primarily a newsreader, the email concepts tend to get expressed in "newsreader" terms.

So where Gnus uses the term "server", it usually means "news server". News servers have lists of news groups that you can subscribe to. Each group has a list of messages that you can view and can, potentially, be posted to. Gnus uses the term "select method" interchangably with this concept of "server". It's important to understand this message model when it comes time to configure email.

So, servers, have groups, and groups have messages. In email, groups of messages are called "folders" but not in Gnus. Since Gnus treats everything like news, folders of messages are called "groups", just like Usenet. The root of all your email groups is the "server" or "select method". So, if you have a bunch of maildir folders, the root directory of that bunch of maildir folders is what Gnus would call the "server" or "select method", since this is the corresponding email concept - it's the entity which logically contains all the groups (folders) you want to read.

Finally, servers have backends. This tells Gnus how to actually read the email/news.

The initial newsrc file

Reading news involves managing a newsrc file. This file contains all the groups you are subscribed/unsubscribed to.

Gnus doesn't create a big newsrc file. It will create a really small one with just a group or two.

It can be confusing when all you see are just a few groups. I don't know where they all go. The docs say they're all killed, but a A k won't bring them up. I'm stumped.

The group buffer

Anyway, to see all the groups from your servers active file, you can type A A. In theory this could take a while, but I haven't been on dial-up in a long time so...

Typing L will list all the groups in your newsrc file. Typing l will list the subscribed groups in your newsrc that have unread articles. These commands really are all about your newsrc.

Select a group by pressing Enter. It will by default show the unread articles unless you have a display config item set. If there are no unread articles, it will offer to display them all.

G DEL to delete a group

F to fetch all new newsgroups. This is useful if you've just configured a maildir select method.


Pressing u will toggle subscription

Group parameters

Use G c to configure topic/group paramters. You can configure anything topic/group specific by adding the variable local to the group (see local variables at the end of the configure buffer)

Which articles to display?

You can set a group parameter (G c, when over a group in the group buffer) to display certain articles upon entering a group. Look for the display config item.

Once in the group, you can limit the articles by using /.

/ u will only show unread articles. / o will show all, read and unread

Getting new articles

In the group buffer, type g In the summary buffer type M-g

Catching up

Pressing c will catchup (mark as read). You can do it in the summary buffer, the group buffer (if you've selected all the groups you want), or if the topic you want is selected.


Just type S p in the summary buffer To reply, S f, or f To reply with original, S F, or F


These let you group your groups into a hierarchy.

T n for a new topic

T m to move a group to a topic

T r to rename a topic

T DEL to delete an empty topic

ESC TAB will "unindent" a top, i.e. move it one level up in the hierarchy. TAB will move it one level down.


W v (gnus-summary-verbose-headers) will toggle whether all the headers are on display

Deleting and Expiring

Deleting only really makes sense in mail groups. B DEL will do a real delete.

Expiring is something subtly different. Marking a message as expirable (i.e. with the E mark) means that the message is a candidate for deletion. It doesn't mean it will get deleted right away, it just means that it will be deleted in due course. Gnus provides two features to help with this: auto-expire and total-expire.

auto-expire preserves the meaning of all the marks. Expirable articles are the ones marked with E, and read one are the ones marked with R, O, etc. But auto-expire will arrange to press E for you when you select an article. The marks preserve their semantics (E means expirable, R means read, etc., but the hitting of the E key is automated.

total-expire, on the other hand, overloads, or changes, the meaning of the read flags (r, R, O, K, Y) to also mean expirable, in addition to E.


For marks in the summary buffer, see Section 3.7.2 in Gnus manual

u will mark ticked

M-u or d will unmark ticked

Shift-3 will set the process mark on an article

M P R will set process marks according to a regular expression.

gnus-summary-execute-command can run a random command on articles whose headers match regular expressions. If you use the Shift-3 command, you can mark articles with the "#" based on regular expressions in any header (or the whole body if you want)


T T will toggle threading

T H collapses threads. T S expands them. Looking at an article will expand the tree at that point.

T h and T s will expand thread except with the current subthread.

Moving mail

B m will do it

RSS feeds

G R in the group buffer

use nnrss-use-local and nnrss-generate-download-script to speed things up

Group Levels

Main information:

Conventional newsreaders have a notion of "subscribed" and "unsubscribed" groups. The newsreader will typically query the server about subscribed groups and ignore the unsubscribed groups. This is all done client side; the server has no notion of subscribed versus unsubscribed.

Gnus, on the other hand, has a rather convoluted idea of "subscribed" and "unsubscribed", which is all tied up to it's notion of "group levels". In a nutshell, here we go.

Each group has a group level. You are subscribed to groups with levels between 1 and gnus-level-subscribed. You are unsubscribed to groups between gnus-level-subscribed + 1 and gnus-level-unsubscribed. A group is a zombie if its level is gnus-level-zombie and killed if its level is gnus-level-killed. These variables all have default values which you can change. So here's a handy cheat sheet:

Or, to make it all concrete, the default setup is :

Now, why do we do all this? Well, we can control various group operations by level. For example:

Change the level of a group by hitting S l in the group buffer.

Two more variables deserve mention, from the manual:

Two closely related variables are gnus-level-default-subscribed (default 3) and gnus-level-default-unsubscribed (default 6), which are the levels that new groups will be put on if they are (un)subscribed. These two variables should, of course, be inside the relevant valid ranges. 

Note that there is very little difference between subscribed and unsubscribed groups. Gnus can still track article information for a group even it's unsubscribed. The difference only comes into play when figuring which groups to display by default. This brings us to the next point:

The default value of gnus-activate-level is 6. Note that 6, in the default setup, is one level of "unsubscribed". So we have the following point:

You can make gnus act in a bit more conventional manner by setting gnus-activate-level to 5, so that unsubscribed groups don't get queried. Alternatively you can make sure your unsubscribed groups are always at level 7. You can set gnus-level-default-unsubscribed to 7 to help with this.

(As an aside, to speed things up on my own system, I have opted to put all my big archive mail groups on level 7 and to leave the rest of default variables values alone. Hence they do not get activated. This seemed like the least riskiest thing I could do)

One more thing: gnus-group-list-inactive-groups (default t) controls whether inactive groups are listed or not. In my experiments, however, if you have this set to nil, and if you run gnus-group-list-all-groups, the unsubscribed groups win over and will be displayed.

Archiving and Drafts

First - gnus-directory defaults to ~/News

Drafts - See section 5.7.




FACES: to list all faces use : M x list-faces-display

CategoryEmacs CategoryGnus CategoryEmail

GnusBasics (last edited 2011-01-04 15:11:06 by DesmondRivet)