Go to the first, previous, next, last section, table of contents.

# The Article Buffer

The articles are displayed in the article buffer, of which there is only one. All the summary buffers share the same article buffer unless you tell Gnus otherwise.

- Hiding Headers: Deciding what headers should be displayed.
- Using MIME: Pushing articles through MIME before reading them.
- Customizing Articles: Tailoring the look of the articles.
- Article Keymap: Keystrokes available in the article buffer
- Misc Article: Other stuff.

## Hiding Headers

The top section of each article is the head. (The rest is the body, but you may have guessed that already.)

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 `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 `gnus-show-all-headers` to `t`.

Gnus provides you with two variables for sifting headers:

`gnus-visible-headers`
  If this variable is non-`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:

      (setq gnus-visible-headers "^From:\\|^Subject:")

  This variable can also be a list of regexps to match headers that are to remain visible.
`gnus-ignored-headers`
  This variable is the reverse of `gnus-visible-headers`. If this variable is set (and `gnus-visible-headers` is `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 `References` line and the `Xref` line, you might say:

      (setq gnus-ignored-headers "^References:\\|^Xref:")

  This variable can also be a list of regexps to match headers that are to be removed. Note that if `gnus-visible-headers` is non-`nil`, this variable will have no effect.

Gnus can also sort the headers for you. (It does this by default.) You can control the sorting by setting the `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:

    (setq gnus-sorted-header-list '("^From:" "^Subject:"))

Any headers that are to remain visible, but are not listed in this variable, will be displayed in random order after all the headers that are listed in this variable.

You can hide further boring headers by entering `gnus-article-hide-boring-headers` into `gnus-article-display-hook`. What this function does depends on the `gnus-boring-article-headers` variable. It's a list, but this list doesn't actually contain header names. Instead is lists various boring conditions that Gnus can check and remove from sight.

These conditions are:

`empty`
  Remove all empty headers.
`newsgroups`
  Remove the `Newsgroups` header if it only contains the current group name.
`followup-to`
  Remove the `Followup-To` header if it is identical to the `Newsgroups` header.
`reply-to`
  Remove the `Reply-To` header if it lists the same address as the `From` header.
`date`
  Remove the `Date` header if the article is less than three days old.

To include the four first elements, you could say something like;

    (setq gnus-boring-article-headers
          '(empty newsgroups followup-to reply-to))

This is also the default value for this variable.

## Using MIME

Mime is a standard for waving your hands through the air, aimlessly, while people stand around yawning.

MIME, however, is a standard for encoding your articles, aimlessly, while all newsreaders die of fear.

MIME may specify what character set the article uses, the encoding of the characters, and it also makes it possible to embed pictures and other naughty stuff in innocent-looking articles.

Gnus handles MIME by shoving the articles through `gnus-show-mime-method`, which is `metamail-buffer` by default. Set `gnus-show-mime` to `t` if you want to use MIME all the time. However, if `gnus-strict-mime` is non-`nil`, the MIME method will only be used if there are MIME headers in the article.

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 ``alt.sing-a-long'` and, before you know it, 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.

## Customizing Articles

The `gnus-article-display-hook` is called after the article has been inserted into the article buffer. It is meant to handle all treatment of the article before it is displayed.

By default it contains `gnus-article-hide-headers`, `gnus-article-treat-overstrike`, and `gnus-article-maybe-highlight`, but there are thousands, nay millions, of functions you can put in this hook. For an overview of functions see section Article Highlighting, see section Article Hiding, see section Article Washing, see section Article Buttons and see section Article Date.

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 any headers. Instead make them invisible if you want to make them go away.

## Article Keymap

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:

`SPACE`
  Scroll forwards one page (`gnus-article-next-page`).
`DEL`
  Scroll backwards one page (`gnus-article-prev-page`).
`C-c ^`
  If point is in the neighborhood of a `Message-ID` and you press `r`, Gnus will try to get that article from the server (`gnus-article-refer-article`).
`C-c C-m`
  Send a reply to the address near point (`gnus-article-mail`). If given a prefix, include the mail.
`s`
  Reconfigure the buffers so that the summary buffer becomes visible (`gnus-article-show-summary`).
`?`
  Give a very brief description of the available keystrokes (`gnus-article-describe-briefly`).
`TAB`
  Go to the next button, if any (`gnus-article-next-button`. This only makes sense if you have buttonizing turned on.
`M-TAB`
  Go to the previous button, if any (`gnus-article-prev-button`.

## Misc Article

`gnus-single-article-buffer`
  If non-`nil`, use the same article buffer for all the groups. (This is the default.) If `nil`, each group will have its own article buffer.
`gnus-article-prepare-hook`
  This hook is called right after the article has been inserted into the article buffer. It is mainly intended for functions that do something depending on the contents; it should probably not be used for changing the contents of the article buffer.
`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.
`gnus-article-mode-hook`
  Hook called in article mode buffers.
`gnus-article-mode-line-format`
  This variable is a format string along the same lines as `gnus-summary-mode-line-format`. It accepts exactly the same format specifications as that variable.
`gnus-break-pages`
  Controls whether page breaking is to take place. If this variable is non-`nil`, the articles will be divided into pages whenever a page delimiter appears in the article. If this variable is `nil`, paging will not be done.
`gnus-page-delimiter`
  This is the delimiter mentioned above. By default, it is ``^L'` (form linefeed).

Go to the first, previous, next, last section, table of contents.