Most customizations in
slrn are done using an initialization file. If
your administrator wanted to provide reasonable defaults for your system, he
might have created a global configuration file. When reading such a file,
slrn tells you its filename at startup (use ``
slrn -w'' if
you want to read the startup messages easily).
The right place for your own settings is your personal configuration file,
which by default is
slrn.rc on VMS, OS/2 and
Windows) in your home directory. It is possible to override settings from the
global file here.
slrn configuration file consists of
configuration commands, each one on a line of its own. Most commands
require arguments that can be either strings or integer values. If a string
contains whitespace, you have to enclose it in double quotes (").
The percent sign (%) is used as the comment character. From this character on, everything else on the same line will be ignored. Example:
% Name of signature file to use set signature ".signature"
If you set the same variable more than once in your configuration file, the last setting will take effect.
The easiest way to build a personal configuration file is to make a copy of
the annotated sample
slrn.rc that is included in the
distribution and to tailor it to your needs.
This manual contains a list of all configuration commands and variables.
slrn uses routines from libslang to parse its configuration files. Among
other things, a simple preprocessing facility similar to
provided that makes it possible to use a number of conditions in your
Apart from minor syntactic differences, this is how they are used:
#if... % Configuration commands to use if the condition is true. #elif... % ``else if'' % Commands to use if the first condition is false but % the above condition is true. #else % Execute these commands if none of the above conditions % were true. This is the fallback case. #endifAs usual, you can only use one ``
#if'' condition, any number of ``
#elif'' conditions (including none) and up to one ``
#else'' statement. If the ``
#endif'' statement is missing, everything up to the end of the file is included.
Conditions may be nested, but you may not use whitespace in front of the ``#'' characters. However, whitespace may be used freely after the leading ``#'' which is useful for indenting.
The equivalent of ``
#if 0'' in
cpp(1) which always returns false.
This can be used to deactivate a part of your configuration without having to
set a comment character (``%'') in front of each line.
#iffalse This code will never be included in your configuration file. #endif
The inverse of iffalse. This condition is always true which means that configuration commands in this block will always be executed.
This condition is true if the environment variable $ENV is set.
#if$DISPLAY % The environment variable DISPLAY is set, so we assume % that X is running and use an editor with GUI. set editor_command "gvim +%d %s" #else % DISPLAY is unset, so we fall back to a textmode editor set editor_command "vi +%d %s" #endif
This condition is true if the environment variable ENV is not set.
The condition is true if the contents of the environment variable ENV are equal to at least one of its argument strings. The arguments have to be separated using whitespace. There is no quoting mechanism for space or tabulator characters.
#if$TERM rxvt % In my rxvt, ``default'' is a light background; % ``color15'' is re-defined as a dark shade of blue. color normal "black" "default" color headers "color15" "default" color thread_number "blue" "default" % [...] More color settings follow #elif$TERM linux wsvt* % On the Linux or NetBSD console, I prefer a black background % to reduce flickering: color normal "lightgray" "black" color headers "brightblue" "black" color thread_number "brown" "black" % [...] More color settings follow #endifThe strings may contain wildcard characters. The ``
?'' character matches an arbitrary single character and ``
*'' matches any number of characters (including none). To use them literally, you have to escape them with a backslash (``
\*'' and ``
\?''). The backslash itself also has to be escaped when used literally (``
The condition is true if the contents of the environment variable ENV are equal to none of its argument strings. The arguments have to be separated using whitespace. There is no quoting mechanism for space or tabulator characters.
As with #if$ENV, wildcards can be used.
This condition is true if any of its arguments is a defined preprocessor symbol. You can define symbol using the -D command line switch.
Depending on the operating system, one of the following symbols is defined: ``UNIX'', ``WIN32'', ``NT'', ``VMS'', ``OS2''.
#ifdef UNIX % On Unix, printer_name is the command to use for printing set printer_name "lpr -Pmy_printer" #elifdef WIN32 % On Win32, printer_name is set to the print queue set printer_name "MyPrinter" #endif
This condition is true if none of its arguments is a defined preprocessor symbol.
autobaud command may be used to synchronize the output rate
slrn uses to the terminal baud rate.
Usage: charset option charset
option can be one of these:
slrn will use this character set when displaying articles.
Default: detected from locale settings if supported by OS. (autodetection not supported in (cyg)win)
This setting will be used for the charset encoding of outgoing
articles and emails. Setting a value like
slrn will try the settings from left to right and use
the first for which encoding succeeds.
Set this value if your
.slrnrc contains non-ascii characters.
Set this value if the encoding your editor uses is different from the locale setting.
Default: value from
Usage: color display_element foreground background [attributes]
If your terminal supports ANSI color sequences, you can use the
command to define your own color scheme. You can assign a different color to
almost every element on your screen.
display_element can be one of these:
Regular text in the article body.
The author's name / email address in header overview.
Text in the article body that is interpreted as *bold*.
Text inside of selection boxes (like the one you see when choosing a sorting mode).
The cursor you see in the group window and in header overview.
The article date in the header overview.
The group descriptions (taglines) in group window.
Error messages in the bottom line.
The frame around selection boxes (see also: ``box'').
The ``From:'' header line or realname in header overview, in case it contains your name.
The group names in group window.
The name of header lines in the pager (e.g. ``From:'').
The header number in header overview.
The content of header lines in the pager.
The exclamation mark (``!'') used to denote high scoring articles in header overview.
Text in the article body that is interpreted as /italic/.
The first line of your display. If mouse reporting is turned on, it contains a menu.
A menu item while you click on it.
The messages and prompts in the bottom line of the screen.
The subject / score of articles with a negative score value, depending on the setting of color_by_score.
Everything that does not have its own color object.
The subject / score of articles with a positive score value, depending on the setting of color_by_score.
PGP signatures appended to the article body.
Quoted text in the article body.
It is now possible to distinguish up to 8 levels of quoted material by using
color objects ``
quotes0'' to ``
The highlighted character you need to press if you
want to make a selection (e.g. in ``
[Y]es or [N]o?'').
The ``cursor'' used in selection boxes (see also: ``box'').
Signatures appended to the article body.
The status lines
The subject in header overview (see also: ``unread_subject'').
The number of articles in the thread (displayed in header overview next to collapsed threads).
The tilde displayed at the end of the article body.
The thread tree drawn in the header overview.
Text in the article body that is interpreted as _underlined_.
Color for unread subjects. Please see the entry on highlight_unread_subjects for details.
Used to highlight URLs in the article body.
Text in the article body enclosed by verbatim marks.
The foreground and background colors have to be set to one of the following strings:
black gray red brightred green brightgreen brown yellow blue brightblue magenta brightmagenta cyan brightcyan lightgray white
Additionally, you can use the default foreground / background colors of your
terminal via the keyword ``
Please note that the colors in the right column are all ``bright'' (or
``bold''). On many terminals, they can only be used for the foreground. If you
think your terminal has more than 8 background colors, but
to use them, you might need to chose a different terminfo entry. On modern
xterms and rxvt, setting $TERM to
xterm-16color should work.
Some terminals support more than 16 colors, and
slrn can then use 256
colors when compiled against slang-2. The additional values for
foreground and background colors are specified as
N is a decimal number from 0 to 256. In this case, $TERM may need to be
After the color settings, you can optionally use attributes (like underline
and bold) the same way you would specify them using the
mono command (see there for details).
A sample color scheme (which simply sets the colors to their compile time
default) can be found in the
slrn.rc file that should have come with
This command is obsolete, use charset instead.
Usage: group_display_format number format-string
This command allows you to change the way the groups are presented to you in the group window. You can save up to 10 different formats and switch among them using toggle_group_formats (default binding: ESC a).
The default settings are:
group_display_format 0 " %F%-5u %n%45g%d" group_display_format 1 " %F%-5u %n%50g%-8l-%h" group_display_format 2 " %F%-5u [%-6t] %n"
number is the number of the format (0-9).
The following % escapes can be used:
F Group flag (`U' for unsubscribed, `N' for new) d Group description (needs to be downloaded once with slrn -d) h ``High water mark'' (highest article number in the group) l ``Low water mark'' (lowest article number in the group) n Group name t Total number of articles in the group (estimate) u Number of unread articles in the group
The special descriptors ``%g'' and ``%?'' work like in
Usage: grouplens_add newsgroup
Add newsgroup to the list of groups for which you want to download GroupLens scores.
Usage: header_display_format number format-string
This command can be used to customize the way article headers are presented in the header overview in article mode. You can specify up to 10 different formats and switch among them using toggle_header_formats (default binding: ESC a). This command may also be used with a prefix argument to select a particular format, e.g., ESC 0 ESC a will select the 0th format.
slrn's default settings:
header_display_format 0 "%F%B%-5S%G%-5l:[%12r]%t%s" header_display_format 1 "%F%B%G%-5l:[%12r]%t%s" header_display_format 2 "%F%B%-5l:%t%s" header_display_format 3 "%F%B%-5S%-5l:%t%50s %r" header_display_format 4 "%F%B%-5S [%10r]:%t%49s %-19g[%17d]"
number is the number of the format (0-9).
format-string is a string containing
printf(3) style %
escapes. This is the generic format:
The brackets indicate optional items: w may consist of one or more digits and specifies the width of the field. In fields with a fixed width, the minus sign (-) can be used to right justify an item, the asterisk (*) to center justify it. Please note that these modifiers have no effect if the text does not fit into the field.
The item specifier (x) is required and, depending on its value, has the following meaning:
% percent character B body status for true offline reading: 'H' means no body (header only), 'M' means body is marked for download C prints `C' if current thread is collapsed D date (as defined by overview_date_format) F flags (read/unread, `*' and `#' tags, header number) G GroupLens score P prints `P' if current article has a parent (inside threads) S score T thread tree b article size (usually in kilobyte) c number of messages in current subthread d date f from header l article length (number of lines) n server number r author's real name s subject t number of messages in thread plus tree
Additionally, the special format descriptor %Xg can be used. It is not substituted by text, but specifies that the next write on the screen should take place in column X (numbered from 0). If X is negative, the cursor is placed X columns from the right edge of the window.
indicates that the header window will contain (in that order): the flags, the
number of lines the article contains (right justified in a 5 character field),
a `:', the tree, the subject, and, beginning 20 columns from the right edge of
the window and separated by a blank, the author's real name.
A %? construct can be used to print a string only if one of the above descriptors expands to a non-zero string (i.e. one that is not empty and does not contain only a single whitespace or the number `0'). It has the following syntax:
%?<descriptor>?<optional string>? %?<descriptor>?<string if true>&<string if false>?
You can use escape sequences in optional strings; however, it is not possible to nest them, nor to have literal `?' or `&' characters in them.
Example: If you want to display the number of messages for collapsed threads and the number of lines in the message otherwise, you can use the following:
Note: The descriptor %b automatically choses a ``unit'' (bytes
/ kilobytes / megabytes) and works best when given four characters of space,
%-4b. The descriptors %t and %T write
directly to the screen, so they cannot be ``tested'' with the %?
operator and ignore the requested field width (i.e. ``
is the same as ``
%t''; the ``10'' is ignored). The descriptor
%t is included for backwards compatibility and equivalent to
%?C?%-3c& ? %T''.
Usage: ignore_quotes pattern [pattern] ...
The regular expressions given here are used to determine quoted lines in the
body of an article. You can define up to 5 different patterns (this is meant
to make up for the lack of an OR operator in S-Lang regexps). Please try to
keep them as exact as possible, so that
slrn is able to distinguish
different quoting levels - e.g. use ``
^>'' rather than
By default, only one pattern is set: ``
^ ? ?[><:=|]''
Usage: include filename
You can use this command to load an additional file that contains configuration commands. With this feature, you can easily keep startup files for different key bindings, colors etc. filename is relative to your home directory (see $SLRNHOME). This can safely be done multiple times and recursively.
Usage: interpret filename
This command loads and executes an S-Lang macro file. filename may be an
absolute or relative path. Relative paths are resolved by checking first your
macro_directory if set, then
$SLRNHOME if set, then $HOME, and finally the default
directory set at compile-time for the macros included with
This command has no effect if the S-Lang interpreter has been deactivated at compile time.
Usage: mono display_element attributes
You can use this command to customize
slrn's appearence on
monochrome displays. See section
color for a
description of display_element. attributes can be one of
or ``none'' to turn off video attributes. The attributes can also be
combined (simply separate them with blanks). You can find sample settings in
slrn.rc file that should have come with your
If you don't like blinking, you can turn it off altogether via
use_blink. If you run
colors, these settings will not have any effect.
Usage: nnrpaccess host[:port] username password
This command can be used to set the necessary data for servers that request NNRP authentification. host is the full hostname of the server.
If you do not feel comfortable with leaving your password written on disk,
you might want to set the password (and optionally the username as
well) to an empty string (
slrn will then
prompt for it on startup. If your server requires a username, but no
password, set it to a blank (
" ") and you won't be
Usage: posting_host hostname
The hostname specified in this command will be used to generate Message-IDs.
Please note that it is usually not necessary to set this manually,
slrn uses the fully-qualified domain name of the machine it is
running on for this task, which is the correct solution in most cases.
However, if your system is part of a local network, it might not have an official hostname. As the current MESSFOR draft permits the use of hostnames without a DNS record for Message-ID generation, some providers started to give each user a unique hostname that may be used here.
Note: Do not use this command unless you fully understand the
implications. Specifically, do not enter an arbitrary string here!
Instead, please turn off
generate_message_id if the hostname found by
slrn is not unique.
Usage: server nntp-server[:port] newsrc-file
.jnewsrc in your home directory
jnews.rc on VMS, OS/2 and Windows) as its newsrc file. If you want
to define a different filename for it or if you want to access more than one
server, you can use this command. It tells
slrn to use
newsrc-file when connecting to nntp-server (which has to be the full
hostname of the server and an optional port number or, if you are reading from
spool, the path of the spool directory).
If your server requires a password, you will also need to use the
Usage: set varname value
set command is used to assign values to the
configuration variables described
below. varname has to be a valid variable name. value is either a
string (best enclosed in double quotes ``
"'') or an integer value
(number), depending on the variable.
set realname "Matthias Friedrich" set kill_score -9999
Note: If you set a variable which controls a feature that has not been
slrn will not give you an error message. The setting
will simply remain without an effect.
Usage: setkey keymap function key-sequence
This command allows you to map
slrn's functions to keys. There are
three different keymaps: The ``
group'' keymap contains all
functions in group mode, ``
article'' contains the functions in
article mode (note that header overview and pager do not have separate
keymaps); finally, the ``
readline'' keymap can be used to customize
the line editor.
function specifies the function that is executed when key-sequence
is pressed. In key-sequence, special keys can be addressed in different
ways. First of all, the control key plus a character C is written as
The special function keys found on most keyboards have the following (case insensitive) names:
<PageUp> <PageDown> <Up> <Down> <Right> <Left> <Delete> <BackSpace> <Insert> <Home> <End> <Enter> <Return> <Tab> <BackTab> <Space> <Esc>
Additionally, the keys
the function keys. When you use these symbolic names,
slrn uses the
terminfo database (if available) to look up the key sequences generated
be those keys, so if these names do not seem to work, make sure you selected
the correct terminal (e.g. via the $TERM environment variable).
Alternatively, you can specify special keys by entering the key sequence they generate directly. To do this, the following shortcuts may be useful:
\e escape \r return \\ backslash \NNN the key sending keycode (octal) NNN
A full list of available functions can be found in sections group functions and article functions.
Usage: strip_re_regexp pattern [pattern] ...
Here, you can define up to 5 different regular expressions to detect non-standard back references created by broken user agents. They will be stripped on followups.
slrn only checks for the standard ``
test is performed before
strip_re_regexp is even tried
and it cannot be turned off.
Note: This variable does not affect the way
subjects. For example, ``subject'' and ``Re: subject'' are equivalent when
sorting; ``subject'' and ``AW: subject'' are not, even if you defined
strip_re_regexp. The reason for
this is that it would be too expensive to do a full regexp search whenever
Usage: strip_sig_regexp pattern [pattern] ...
slrn itself makes sure that you use the signature delimiter that
current drafts prescribe (``
-- '' - mind the trailing space!).
If you want it to recognize different delimiters as well (e.g. ones created by
broken software), you can use this command to define (up to five) regular
expressions that match them.
Usage: strip_was_regexp pattern [pattern] ...
When changing the ``Subject:'' header line, some people follow a convention
and include the old subject in brackets (e.g. ``new subject (was: old
subject)''). You can use this command to strip the old subject automatically
on followups and when creating scorefile entries based on the subject (so it
will still match when the old subject is stripped). To do this, I recommend
the setting ``
Note: This variable does not affect sorting. See
strip_re_regexp for an
Usage: unsetkey keymap key-sequence
unsetkey command undoes a key binding. Please see
setkey for more information.
unsetkey group "\e"
Usage: visible_headers header_lines
With this command, you can specify a comma-separated list of header_lines that should still be visible in the article pager when the display of all headers is turned off (this is toggled via toggle_headers, by default bound to `t').
Note that the strings are not regular expressions. However, substrings can
be used; e.g. ``
X-'' matches all headers beginning with
``X-''. It's also possible to exclude certain headers by preceding them with
a bang (`!'). If multiple entries match, the last one decides whether or not
the header is displayed, so ``
X-,!X-Trace:'' shows all
X-headers except ``X-Trace:''.
Headers mentioned in
visible_headers that don't occur
in the article are silently ignored.