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: http://www.gnus.org/manual.html
Big Monolithic Manual: http://www.gnus.org/manual/big-gnus.html
A very good introduction: http://www.xemacs.org/Links/tutorials_3.html
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
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
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.
B m will do it
G R in the group buffer
use nnrss-use-local and nnrss-generate-download-script to speed things up
Main information: http://www.gnus.org/manual/big-gnus.html#SEC24
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:
- default gnus-level-subscribed is 5
- default gnus-level-unsubscribed is 7
- default gnus-level-zombie is 8
- default gnus-level-killed is 9
- subscribed levels: (1 to gnus-level-subscribed)
- unsubscribed levels: (gnus-level-subscribed + 1 to gnus-level-unsubscribed)
Or, to make it all concrete, the default setup is :
- subscribed levels: 1,2,3,4,5
- unsubscribed levels: 6,7
- zombie: 8
- killed: 9
Now, why do we do all this? Well, we can control various group operations by level. For example:
- Hitting l (gnus-group-list-groups) in the group buffer will, by default, list all groups with unread messages that have levels below gnus-level-subscribed, i.e. all subscribed groups with unread messages. The function can actually do more than that and in its most general form, can take a level below which to display and a boolean telling it whether groups with unread messages should be displayed.
- Hitting L (gnus-group-list-all-groups) in the group buffer will, by default, list all groups with levels below gnus-level-unsubscribed.
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:
Activation is the Gnus concept which encompasses the act of querying a group for article information. gnus-activate-level is the variable which controls how Gnus queries groups; all groups with levels under gnus-activate-level get activated (queried).
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:
- By default, Gnus tracks article information for (activates) subscribed groups and unsubscribed groups with a level of 6 (i.e. all groups levels under 6, the default value of gnus-activate-level). Unsubscribed groups with a level of 7 don't get queried. So level 7 is, in a sense, "more unsubscribed" than 6 since it doesn't get activated by default.
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.
- Special group nndraft will hold your drafts. One file per message.
- can't appear to change the backend for this.
- nndrafts-directory controls where this directory is located. Defaults to gnus-directory/drafts (i.e. ~/News/drafts)
- Enter draft group and type D e to continue editing message.
- Most Gnus storage file and directory variables will be initialized from this variable, which defaults to the SAVEDIR environment variable, or `~/News/' if that variable isn't set. Note that Gnus is mostly loaded when the `~/.gnus.el' file is read. This means that other directory variables that are initialized from this variable won't be set properly if you set
this variable in ~/.gnus.el'. Set this variable in .emacs' instead.
- - defaults to ~/Mail
- - defaults to ~/Mail/drafts/
FACES: to list all faces use : M x list-faces-display