3.10 Group Parameters

The group parameters store information local to a particular group.

Use the G p or the G c command to edit group parameters of a group. (G p presents you with a Lisp-based interface, G c presents you with a Customize-like interface. The latter helps avoid silly Lisp errors.) You might also be interested in reading about topic parameters (see Topic Parameters). Additionally, you can set group parameters via the gnus-parameters variable, see below.

Here’s an example group parameter list:

((to-address . "ding@gnus.org")
 (auto-expire . t))

We see that each element consists of a “dotted pair”—the thing before the dot is the key, while the thing after the dot is the value. All the parameters have this form except local variable specs, which are not dotted pairs, but proper lists.

Some parameters have correspondent customizable variables, each of which is an alist of regexps and values.

The following group parameters can be used:

to-address

Address used by when doing followups and new posts.

(to-address . "some@where.com")

This is primarily useful in mail groups that represent closed mailing lists—mailing lists where it’s expected that everybody that writes to the mailing list is subscribed to it. Since using this parameter ensures that the mail only goes to the mailing list itself, it means that members won’t receive two copies of your followups.

Using to-address will actually work whether the group is foreign or not. Let’s say there’s a group on the server that is called ‘fa.4ad-l’. This is a real newsgroup, but the server has gotten the articles from a mail-to-news gateway. Posting directly to this group is therefore impossible—you have to send mail to the mailing list address instead.

See also gnus-parameter-to-address-alist.

to-list

Address used when doing a in that group.

(to-list . "some@where.com")

It is totally ignored when doing a followup—except that if it is present in a news group, you’ll get mail group semantics when doing f.

If you do an a command in a mail group and you have neither a to-list group parameter nor a to-address group parameter, then a to-list group parameter will be added automatically upon sending the message if gnus-add-to-list is set to t.

If this variable is set, gnus-mailing-list-mode is turned on when entering summary buffer.

subscribed

If this parameter is set to t, Gnus will consider the to-address and to-list parameters for this group as addresses of mailing lists you are subscribed to. Giving Gnus this information is (only) a first step in getting it to generate correct Mail-Followup-To headers for your posts to these lists. The second step is to put the following in your .gnus.el

(setq message-subscribed-address-functions
      '(gnus-find-subscribed-addresses))

See Mailing Lists in The Message Manual, for a complete treatment of available MFT support.

visible

If the group parameter list has the element (visible . t), that group will always be visible in the Group buffer, regardless of whether it has any unread articles.

This parameter cannot be set via gnus-parameters. See gnus-permanently-visible-groups as an alternative.

broken-reply-to

Elements like (broken-reply-to . t) signals that Reply-To headers in this group are to be ignored, and for the header to be hidden if reply-to is part of gnus-boring-article-headers. This can be useful if you’re reading a mailing list group where the listserv has inserted Reply-To headers that point back to the listserv itself. That is broken behavior. So there!

to-group

Elements like (to-group . "some.group.name") means that all posts in that group will be sent to some.group.name.

newsgroup

If you have (newsgroup . t) in the group parameter list, Gnus will treat all responses as if they were responses to news articles. This can be useful if you have a mail group that’s really a mirror of a news group.

gcc-self

If (gcc-self . t) is present in the group parameter list, newly composed messages will be gccd to the current group. If (gcc-self . none) is present, no Gcc: header will be generated, if (gcc-self . "group") is present, this string will be inserted literally as a Gcc: header. It should be a group name. The gcc-self value may also be a list of strings and t, e.g., (gcc-self "group1" "group2" t) means to gcc the newly composed message into the groups "group1" and "group2", and into the current group. The gcc-self parameter takes precedence over any default Gcc rules as described later (see Archived Messages), with the exception for messages to resend.

Caveat: Adding (gcc-self . t) to the parameter list of nntp groups (or the like) isn’t valid. An nntp server doesn’t accept articles.

auto-expire

If the group parameter has an element that looks like (auto-expire . t), all articles read will be marked as expirable. For an alternative approach, see Expiring Mail.

See also gnus-auto-expirable-newsgroups.

total-expire

If the group parameter has an element that looks like (total-expire . t), all read articles will be put through the expiry process, even if they are not marked as expirable. Use with caution. Unread, ticked and dormant articles are not eligible for expiry.

See also gnus-total-expirable-newsgroups.

expiry-wait

If the group parameter has an element that looks like (expiry-wait . 10), this value will override any nnmail-expiry-wait and nnmail-expiry-wait-function settings (see Expiring Mail) when expiring expirable messages. The value can be either a number of days (not necessarily an integer), or one of the symbols never or immediate.

expiry-target

Where expired messages end up. This parameter overrides nnmail-expiry-target.

score-file

Elements that look like (score-file . "file") will make file into the current score file for the group in question. All interactive score entries will be put into this file.

adapt-file

Elements that look like (adapt-file . "file") will make file into the current adaptive file for the group in question. All adaptive score entries will be put into this file.

admin-address

When unsubscribing from a mailing list you should never send the unsubscription notice to the mailing list itself. Instead, you’d send messages to the administrative address. This parameter allows you to put the admin address somewhere convenient.

display

Elements that look like (display . MODE) say which articles to display on entering the group. Valid values are:

all

Display all articles, both read and unread.

an integer

Display the last integer articles in the group. This is the same as entering the group with C-u integer.

default

Display the default visible articles, which normally includes unread and ticked articles.

an array

Display articles that satisfy a predicate.

Here are some examples:

[unread]

Display only unread articles.

[not expire]

Display everything except expirable articles.

[and (not reply) (not expire)]

Display everything except expirable and articles you’ve already responded to.

The available operators are not, and and or. Predicates include tick, unsend, undownload, unread, dormant, expire, reply, killed, bookmark, score, save, cache, forward, and unseen.

The display parameter works by limiting the summary buffer to the subset specified. You can pop the limit by using the / w command (see Limiting).

comment

Elements that look like (comment . "This is a comment") are arbitrary comments on the group. You can display comments in the group line (see Group Line Specification).

charset

Elements that look like (charset . iso-8859-1) will make iso-8859-1 the default charset; that is, the charset that will be used for all articles that do not specify a charset.

See also gnus-group-charset-alist.

ignored-charsets

Elements that look like (ignored-charsets x-unknown iso-8859-1) will make iso-8859-1 and x-unknown ignored; that is, the default charset will be used for decoding articles.

See also gnus-group-ignored-charsets-alist.

posting-style

You can store additional posting style information for this group here (see Posting Styles). The format is that of an entry in the gnus-posting-styles alist, except that there’s no regexp matching the group name (of course). Style elements in this group parameter will take precedence over the ones found in gnus-posting-styles.

For instance, if you want a funky name and signature in this group only, instead of hacking gnus-posting-styles, you could put something like this in the group parameters:

(posting-style
  (name "Funky Name")
  ("X-Message-SMTP-Method" "smtp smtp.example.org 587")
  ("X-My-Header" "Funky Value")
  (signature "Funky Signature"))

If you’re using topics to organize your group buffer (see Group Topics), note that posting styles can also be set in the topics parameters. Posting styles in topic parameters apply to all groups in this topic. More precisely, the posting-style settings for a group result from the hierarchical merging of all posting-style entries in the parameters of this group and all the topics it belongs to.

post-method

If it is set, the value is used as the method for posting message instead of gnus-post-method.

mail-source

If it is set, and the setting of mail-sources includes a group mail source (see Mail Sources), the value is a mail source for this group.

banner

An item like (banner . regexp) causes any part of an article that matches the regular expression regexp to be stripped. Instead of regexp, you can also use the symbol signature which strips the last signature or any of the elements of the alist gnus-article-banner-alist.

sieve

This parameter contains a Sieve test that should match incoming mail that should be placed in this group. From this group parameter, a Sieve ‘IF’ control structure is generated, having the test as the condition and ‘fileinto "group.name";’ as the body.

For example, if the ‘INBOX.list.sieve’ group has the (sieve address "sender" "sieve-admin@extundo.com") group parameter, when translating the group parameter into a Sieve script (see Sieve Commands) the following Sieve code is generated:

if address "sender" "sieve-admin@extundo.com" {
        fileinto "INBOX.list.sieve";
}

To generate tests for multiple email-addresses use a group parameter like (sieve address "sender" ("name@one.org" "else@two.org")). When generating a sieve script (see Sieve Commands) Sieve code like the following is generated:

if address "sender" ["name@one.org", "else@two.org"] {
        fileinto "INBOX.list.sieve";
}

You can also use regexp expansions in the rules:

(sieve header :regex "list-id" "<c++std-\\1.accu.org>")

See Sieve Commands, for commands and variables that might be of interest in relation to the sieve parameter.

The Sieve language is described in RFC 3028. See Top in Emacs Sieve.

match-list

If this parameter is set to t and nnmail-split-method is set to gnus-group-split, Gnus will match to-address, to-list, extra-aliases and split-regexp against the list split abbreviation. The split regexp is modified to match either a @ or a dot . in mail addresses to conform to RFC2919 List-ID.

See nnmail-split-abbrev-alist for the regular expression matching mailing-list headers.

See Group Mail Splitting, for details on how to automatically split on group parameters.

(agent parameters)

If the agent has been enabled, you can set any of its parameters to control the behavior of the agent in individual groups. See Agent Parameters in Category Syntax. Most users will choose to set agent parameters in either an agent category or group topic to minimize the configuration effort.

(variable form)

You can use the group parameters to set variables local to the group you are entering. If you want to turn threading off in ‘news.answers’, you could put (gnus-show-threads nil) in the group parameters of that group. gnus-show-threads will be made into a local variable in the summary buffer you enter, and the form nil will be evaled there.

Note that this feature sets the variable locally to the summary buffer if and only if variable has been bound as a variable. Otherwise, only evaluating the form will take place. So, you may want to bind the variable in advance using defvar or other if the result of the form needs to be set to it.

But some variables are evaluated in the article buffer, or in the message buffer (of a reply or followup or otherwise newly created message). As a workaround, it might help to add the variable in question to gnus-newsgroup-variables. See Various Summary Stuff. So if you want to set message-from-style via the group parameters, then you may need the following statement elsewhere in your ~/.gnus.el file:

(add-to-list 'gnus-newsgroup-variables 'message-from-style)

A use for this feature is to remove a mailing list identifier tag in the subject fields of articles. E.g., if the news group

nntp+news.gnus.org:gmane.text.docbook.apps

has the tag ‘DOC-BOOK-APPS:’ in the subject of all articles, this tag can be removed from the article subjects in the summary buffer for the group by putting (gnus-list-identifiers "DOCBOOK-APPS:") into the group parameters for the group.

This can also be used as a group-specific hook function. If you want to hear a beep when you enter a group, you could put something like (dummy-variable (ding)) in the parameters of that group. If dummy-variable has been bound (see above), it will be set to the (meaningless) result of the (ding) form.

Alternatively, since the VARIABLE becomes local to the group, this pattern can be used to temporarily change a hook. For example, if the following is added to a group parameter

(gnus-summary-prepared-hook
  (lambda nil (local-set-key "d" (local-key-binding "n"))))

when the group is entered, the ’d’ key will not mark the article as expired.

Group parameters can be set via the gnus-parameters variable too. But some variables, such as visible, have no effect (For this case see gnus-permanently-visible-groups as an alternative.). For example:

(setq gnus-parameters
      '(("mail\\..*"
         (gnus-show-threads nil)
         (gnus-use-scoring nil)
         (gnus-summary-line-format
          "%U%R%z%I%(%[%d:%ub%-23,23f%]%) %s\n")
         (gcc-self . t)
         (display . all))

        ("^nnimap:\\(foo.bar\\)$"
         (to-group . "\\1"))

        ("mail\\.me"
         (gnus-use-scoring t))

        ("list\\..*"
         (total-expire . t)
         (broken-reply-to . t))))

All clauses that match the group name will be used, but the last setting “wins”. So if you have two clauses that both match the group name, and both set, say display, the last setting will override the first.

Parameters that are strings will be subjected to regexp substitution, as the to-group example shows.

By default, whether comparing the group name and one of those regexps specified in gnus-parameters is done in a case-sensitive manner or a case-insensitive manner depends on the value of case-fold-search at the time when the comparison is done. The value of case-fold-search is typically t; it means, for example, the element ("INBOX\\.FOO" (total-expire . t)) might be applied to both the ‘INBOX.FOO’ group and the ‘INBOX.foo’ group. If you want to make those regexps always case-sensitive, set the value of the gnus-parameters-case-fold-search variable to nil. Otherwise, set it to t if you want to compare them always in a case-insensitive manner.

You can define different sorting to different groups via gnus-parameters. Here is an example to sort an NNTP group by reverse date to see the latest news at the top and an RSS group by subject. In this example, the first group is the Debian daily news group gmane.linux.debian.user.news from news.gmane.io. The RSS group corresponds to the Debian weekly news RSS feed https://packages.debian.org/unstable/newpkg_main.en.rdf, See RSS.

(setq
 gnus-parameters
 '(("nntp.*gmane\\.debian\\.user\\.news"
    (gnus-show-threads nil)
    (gnus-article-sort-functions '((not gnus-article-sort-by-date)))
    (gnus-use-adaptive-scoring nil)
    (gnus-use-scoring nil))
   ("nnrss.*debian"
    (gnus-show-threads nil)
    (gnus-article-sort-functions 'gnus-article-sort-by-subject)
    (gnus-use-adaptive-scoring nil)
    (gnus-use-scoring t)
    (gnus-score-find-score-files-function 'gnus-score-find-single)
    (gnus-summary-line-format "%U%R%z%d %I%(%[ %s %]%)\n"))))