- Title:
- the secrets of slrn
- Authors:
- Paolo Vincenzo Olivo
- Date:
- Topics:
- Lowtech
- Id:
- y2dsat
This post is aimed at those users who wish to have a more in-depth understanding of slrn and the configuration options it offers.
Since practically nobody is developing new nntp clients nowadays, it is hard to find a good one capable of keeping up with modern expectations. Even terminal and line-mode applications have evolved over the years to become simpler (from the user perspective), more intuitive, versatile and better integrated with the rest of the userspace.
My opinion is that no such 'modern' application exists to date for the the nntp protocol. Again, slrn simply happens to be the one which seemingly 'sucks less'.
■ introduction to slrn
| slrn ('S-Lang read news') is a newsreader, i.e. a program that accesses | a newsserver to read messages from the Internet News service (also known | as 'Usenet'). It runs in console mode on various Unix-like systems | (including Linux), 32-bit Windows, OS/2, BeOS and VMS. Beside the usual | features of a newsreader slrn supports scoring rules to highlight, sort | or kill articles based on information from their header. It is highly | customizable, allows free key-bindings and can easily be extended using | he sophisticated S-Lang macro language. Offline reading is possible by | using either slrnpull (shipped with slrn) or a local newsserver (like | leafnode or INN).
source: <https://slrn.info>
■ getting thigs ready
1. environment Export the NNTPSERVER environmental variable:
NNTPSERVER=news://retrobsd.ddns.net
2. ~/news will be used to store local files.
$ for d in drafts macros misc > do mdkir -p ~/news/${d} > done
$ for f in posts replies score > do touch ~/news/${f} > done
3. Add search.sl to the local macros directory This macro allows one to search throgh the bodies of the articles in the current newsgroup. It binds the function 'search_newsgroup' to the '$' key in article mode.
cp /usr/pkg/share/slrn/slang/search.sl ~/news/macros
4. Create a ~/.signature file. It shall be appended to every new post. Remember that whatever follows '--' is intepreted as signature.
Mine is:
----------------------------+---------------------------- vms[-at-]retrobsd.ddns.net | https://retrobsd.ddns.net
■ ~/.slrnrc
% Lines beginning with a percent sign are ignored.
% %% 1. Tell slrn about your identity (name, email address and such) %
% The "From:" header will be generated from the following three variables. % With the example settings, it would read "John Doe <john@doe.com>" set username "vms" set hostname "retrobsd.ddns.net" set realname "Paolo Vincenzo Olivo"
% Set this if you want replies to your articles to go to a address different % from the one in "From:". set replyto "Paolo Vincenzo Olivo <vms@retrobsd.ddns.net>"
% What to put into the "Organization:" header line. set organization "RetroBSD Net"
% The name of your signature file. If "", no signature is added. set signature ".signature"
% %% 2. Server specific settings %
% Tell slrn which newsrc file it should use for which server. % Note: This does *not* set the default server; you need to set the % NNTPSERVER environment variable for this. server "news://retrobsd.ddns.net" ".jnewsrc"
% If a server requires authentication, add a nnrpaccess line for it. % If you leave username and/or password empty, slrn will prompt for it. %nnrpaccess "news://server" "user" "passwd"
% Some servers require authentication, but don't ask for it. % To offer your authentication data "voluntarily", set this variable to 1. set force_authentication 0
% This can either be set to "nntp" (read online) or "spool" (use local spool) set server_object "nntp"
% only make as read if told explicitly set auto_mark_article_as_read 0
% This can be "nntp" (post directly to the server), "inews" (use external % program for posting) or "slrnpull" (spool message for slrnpull to send). set post_object "nntp"
% Set this to zero if you want to leave Message-ID generation to your server % or your system does not have a proper unique hostname. set generate_message_id 1
% If non-zero, slrn reads the active file on each startup. You might want to % use this if your network connection is fast or the server has few groups. set read_active 1
% The following variables are only meaningful when using spool mode: % Basic directory settings % set spool_inn_root "news/spool" % set spool_root "news/spool/news" % set spool_nov_root "news/spool/news" set use_slrnpull 0
% This value is relative to the directories under spool_nov_root: set spool_nov_file ".overview"
% Whether to check for each article when reading an overview file (slower, % but may save you from lots of "article not available" errors). %set spool_check_up_on_nov 1
% If non-zero, abort posting or email operation if the file was not modified % by the editor. set abort_unmodified_edits 1
% advise if the message doesn't respect some netiquette rule set netiquette_warnings 1
% max number of articles before slrn ask you to download headers % default is 100 set query_read_group_cutoff 500
% if unlike 0, add a space between the quote_string and the test not % quoted, for better readability set smart_quote 1
% %% 3. Which external programs do you want to use? %
% Set your favourite editor. Use %s for the file name and %d for the line % where the cursor should be placed (usually at the beginning of the body). set editor_command "vim -c 'set spell spelllang=en,it' -c 'startinsert' -c 'set tw=72 et' -c 'set wrap' '+/^$'"
% You can have separate commands for editing posts, mail, and score files. set mail_editor_command "neomutt -H '%s'"
% If non-zero, abort posting or email operation if the file was not modified % by the editor. set abort_unmodified_edits 1
% In case we need metamail to display an article: set metamail_command "metamail"
% WWW browser to use. Xbrowser is used when the DISPLAY environment variable % is set; non_Xbrowser otherwise. set non_Xbrowser "lynx '%s'" set Xbrowser "seamonkey '%s' &"
% Command to use for printing % Note: On Win32, this variable defines the name of the printer queue to use. set printer_name "lpr -Plp"
% In case you want to use another mailer than sendmail. Be sure that it % implements the same interface, though! set sendmail_command "/usr/pkg/bin/msmtp -t"
% Set this to one if you want the "From:" header in e-mails to be generated % from the hostname / username / realname variable. % Note: Not all MTAs are configured to allow this. set generate_email_from 0
% %% 4. Directory / file names %
% Note: All filenames in this section are relative to HOME unless they start % with a '/'.
% Filename where articles / email you sent are archived. % Note: If these are unset, slrn does not keep a copy of outgoing messages. set save_posts "news/posts" set save_replies "news/replies"
% File where failed posts are appended. Use "" to disable saving. set failed_posts_file "news/dead.letter"
% Name of score file. set scorefile "news/score"
% Name of directory where decoded files are placed. set decode_directory "news" % Directory where all other files are saved. set save_directory "news/misc"
% Directory where postponed articles are placed. Please make sure it exists. set postpone_directory "news/drafts"
% Whether to put temporary files for postings, followups and replies in the % directory specified by the TMPDIR environment variable or /tmp. set use_tmpdir 1
% %% 5. Attribution lines / custom headers %
% This sets the attribution lines for follow-ups and replies. The following % format specifiers are recognized: % %d:date, %D:date (formatted), %r:real name, %R:first name, % %f:email address, %s:subject, %m:msgid, %n:newsgroups, %%: percent set followup_date_format "%d/%m/%y at %H:%M" %set followup_string "Sul meriggio di %D,\n%r <%f> enarrava tali parole:" %set reply_string "Su %n, nell'articolo %s, scrivevi:"
% Custom headers to add to *new* posts set custom_headers "X-Editor: ed - the standard editor"
% This is inserted when sending email CCs of your postings. set cc_post_string "[This message has also been posted to %n.]"
% %% 6. Character mapping / MIME support %
% Character set used for the display or terminal charset display "utf-8"
% the character set used for outgoing articles charset outgoing "utf-8"
% If non-zero, call metamail for MIME formats slrn cannot handle. % requires news/metamail set use_metamail 1
% %% 7. Some preferences for the header window (see the manual for more) %
% If non-zero, interprete _this_ as underlined text and *that* as % bold text using underlinetext and boldtext colors, resp. % If set to 1, do not write _ and * characters. % If set to 2, write _ and * with spaces. % Otherwise, if non-zero, write _ and * characters. set emphasized_text_mode 1 set emphasized_text_mask 1
% These sorting methods are available: % If 0, do not sort. If 1, perform threading. If 2, sort by subject. % If 3, thread then sort result by subject. % If 4, sort by score. If 5, thread then sort by score. % If 6, sort by score and subject. % If 7, thread, then sort by score and subject. % If 8, sort by date with most recent first. % If 9, thread, then sort by date with most recent first. % If 10, sort by date with most recent last. % If 11, thread then sort by date with most recent last. % If 12, use the value of the custom_sort_order variable. set sorting_method 9
% score filtering set min_high_score 1 set max_low_score 0 set kill_score -666
% automatically move to next article set query_next_article 1 set query_next_group 1
% If non-zero, a header with a new subject will start a new thread. set new_subject_breaks_threads 1
% optional: load macros (see above) interpret "news/macros/search.sl" %interpret "news/macros/lock.sl"
% %% 8. Some preferences for the article pager (see the manual for more) %
% Which headers do you want to see by default? % You can also match all headers starting with a given string and exclude % specific headers by preceding them with "!" (e.g. use "X-,!X-Trace:" to % display all the "X-"headers except "X-Trace:"). visible_headers "From,Subject:,newsgroups:,Date:,Followup-To:,Mail-Copies-To:,Reply-To:,X-Operating-System:,X-Disclaimer:,Organization:,X-Organization:,User-Agent:,X-Mailer,X-newsreader:,X-Posting-Agent:,X-Http-User-Agent:"
% number articles set use_header_numbers 1
% regex to determine quoted lines in the body of an article ignore_quotes "^ ? ?[><:=|\-]"
% string to prepend to quoted text set quote_string "> "
% do not wrap headers or quotes, just bodies set wrap_flags 4
% visual bell set beep 3
% character to identify spoilers set spoiler_char '*'
% If non-zero, #v+ and #v- will be interpreted as markers of verbatim lines. %set process_verbatim_marks 1
% If non-zero, hide #v+/#v- verbatim marks. set hide_verbatim_marks 1 % If non-zero, hide signature in articles. set hide_signature 0
% If non-zero, hide PGP signature in articles. set hide_pgpsignature 0
% %% 9. Display / color settings %
% If non-zero, slrn will draw the thread tree using simple ascii characters set simulate_graphic_chars 1
% Enable xterm/win32 mouse support: 1 to enable, 0 to disable set mouse 0
% Draw cursor bar instead of standard lrn "->" cursor? set display_cursor_bar 1
% Set to 1 to have slrn scroll by full page instead of by line. set scroll_by_page 0
% Should color be used to indicate the score of an article? % (0) scores do not influence colors (1) scores are colored by their value % (2) subjects are colored by score (3) both are colored by score set color_by_score 3
% If non-zero, the subjects of unread articles are highlighted set highlight_unread_subjects 1
% If non-zero, URLs are highlighted. set highlight_urls 1
% Enables blinking in monochrome mode and allows bright backgrounds in some % color terminals: set use_blink 1
% visualize a '~' at the end of an article set use_tilde 1
% This color object is only used when highlight_unread_subjects is set to 2 % (see the reference manual for details): color unread_subject "default" "default" mono unread_subject "none"
% These settings are used for color terminals: color article "default" "default" color author "default" "default" color boldtext "white" "default" color box "black" "white" color cursor "default" "default" "reverse" color date "default" "default" color description "default" "default" color error "brightred" "default" color frame "gray" "black" color from_myself "brightmagenta" "default" color group "default" "default" color grouplens_display "gray" "default" color header_number "gray" "default" color header_name "gray" "default" color headers "gray" "default" color neg_score "red" "default" color pos_score "brightblue" "default" color high_score "yellow" "default" color italicstext "white" "default" color menu "white" "black" color menu_press "white" "gray" color message "default" "default" color normal "lightgray" "default" color pgpsignature "cyan" "default" color quotes "gray" "default" color quotes1 "gray" "default" color quotes2 "gray" "default" color quotes3 "gray" "default" color quotes4 "gray" "default" color quotes5 "gray" "default" color quotes6 "gray" "default" color quotes7 "gray" "default" color response_char "blue" "default" color signature "gray" "default" color selection "white" "gray" color status "white" "black" color subject "default" "default" color thread_number "gray" "default" color tilde "gray" "default" color tree "gray" "default" color underlinetext "white" "default" "underline" color url "brightblue" "default" color verbatim "white" "default"
% These attributes are for terminals that cannot display color: mono article "none" mono author "none" mono boldtext "bold" mono cursor "bold" "reverse" mono date "none" mono description "none" mono error "blink" mono frame "reverse" mono from_myself "bold" mono group "bold" mono grouplens_display "none" mono header_name "bold" mono header_number "none" mono headers "none" mono high_score "bold" mono italicstext "bold" mono menu "reverse" mono menu_press "none" mono neg_score "none" mono normal "none" mono pgpsignature "none" mono pos_score "reverse" mono quotes "none" mono quotes1 "none" mono quotes2 "none" mono quotes3 "none" mono quotes4 "none" mono quotes5 "none" mono quotes6 "none" mono quotes7 "none" mono response_char "bold" mono selection "bold" mono signature "none" mono status "reverse" mono subject "none" mono thread_number "bold" mono tilde "bold" mono tree "none" mono underlinetext "underline" mono url "bold" mono verbatim "none"
% %% 10. Group mode key bindings %
setkey group line_down "j" setkey group line_down "^N" setkey group line_up "k" setkey group page_down "^V" % Scroll to the next page setkey group page_down "\e[6~" setkey group page_down "\e[G" % (FreeBSD keycode) setkey group page_down "^D" setkey group page_up "\eV" % Scroll to the previous page setkey group page_up "\e[5~" setkey group page_up "\e[I" % (FreeBSD keycode) setkey group page_up "^U"
setkey group eob "$G"
setkey group bob "1G"
setkey group group_search_backward "?" % Group keyword search backward setkey group group_search_forward "/" % Group keyword search forward
setkey group select_group "\r"
setkey group post "P" % Post an article setkey group post_postponed "\eP" % Post or edit a postponed article setkey group toggle_scoring "K" % Select scoring mode setkey group repeat_last_key "." % Repeat last key sequence setkey group evaluate_cmd "^X\e" % Read line and interpret it as S-Lang setkey group suspend "^Z" % Suspend slrn setkey group quit "Q" % Quit slrn
setkey group catchup "C" % Mark all articles as read setkey group uncatchup "\eu" % Mark all articles as unread setkey group add_group "a" % Add a new newsgroup setkey group subscribe "S" % Subscribe to the current newsgroup setkey group unsubscribe "U" % Unsubscribe from the current newsgroup setkey group move_group "m" % Move newsgroup to a different location setkey group transpose_groups "^X^T" % Transpose position of groups setkey group save_newsrc "X" % Force a save of the newsrc file
setkey group toggle_group_formats "\033A" % Toggle group display formats setkey group toggle_hidden "l" % Toggle display of hidden groups setkey group toggle_list_all "L" % Toggle listing of unsubscribed groups setkey group redraw "^L" % Redraw the screen setkey group redraw "^R"
setkey article next "n" % next unread article setkey article previous "p" % previous unread article
setkey article skip_to_next_group "N" % go to the next group setkey article skip_to_next_group "\e\e[C" setkey article skip_to_next_group "\e\eOC" setkey article skip_to_previous_group "\e\e[D" % go to the previous group setkey article skip_to_previous_group "\e\eOD" setkey article next_high_score "!" % next article with high score setkey article next_same_subject "=" % next article with same subject setkey article goto_last_read "L" % go to the last read article
setkey article post "P" % Post a new article setkey article post_postponed "\eP" % Post/edit a postponed article setkey article followup "f" % Post a followup setkey article reply "r" % Reply to poster setkey article forward "F" % Forward posting via mail setkey article supersede "\e^S" % Supersede article setkey article cancel "\e^C" % Cancel article setkey article save "O" % Save article setkey article pipe "|" % Pipe article setkey article print "y" % Print article setkey article decode ":" % Decode article setkey article suspend "^Z" % Suspend slrn setkey article quit "q" % Quit slrn setkey article fast_quit "Q" % Quit slrn immediately
setkey article article_line_down "\r"
setkey article article_line_up "^k"
setkey article article_page_down " " % Scroll article down one page setkey article article_page_up "^?" % Scroll article up one page setkey article article_page_up "b" % Scroll article up one page
setkey article article_eob ">" % Move to the end of the article setkey article article_bob "<" % Move to the beginning
setkey article article_left "\eOD" % Pan article to the left setkey article article_left "\e[D" setkey article article_right "\eOC" % Pan article to the right setkey article article_right "\e[C" setkey article article_search "/" % Search forward in the article setkey article skip_quotes "\t" % Skip beyond quoted text setkey article forward_digest "g" % Skip to next digest
setkey article header_line_down "j"
setkey article header_line_up "k"
setkey article header_page_down "^V" % Scroll down one page setkey article header_page_down "\e[6~" setkey article header_page_down "\e[G" % (FreeBSD keycode) setkey article header_page_down "^D" setkey article header_page_up "\eV" % Scroll up one page setkey article header_page_up "\e[5~" setkey article header_page_up "\e[I" % (FreeBSD keycode) setkey article header_page_up "^U"
setkey article header_eob "$G" % Go to last article in group setkey article header_bob "1G" % Go to first article in group
setkey article author_search_forward "a" % Author search forward setkey article author_search_backward "A" % Author search backward setkey article subject_search_forward "s" % Subject search forward setkey article subject_search_backward "S" % Subject search backward
setkey article delete "d" % Mark article as read setkey article undelete "u" % Mark article as unread setkey article delete_thread "\ed" % Mark (Sub-)Thread as read setkey article catchup_all "c" % Mark all articles as read setkey article catchup_all "\ec" setkey article catchup "\eC" % Catchup (up to this article) setkey article uncatchup_all "\eu" % Mark all articles as unread setkey article uncatchup "\eU" % Uncatchup (up to this article) setkey article expunge "x" % Remove all read articles
setkey article toggle_headers "t" % Full headers (on/off) setkey article toggle_rot13 "\eR" % Toggle ROT-13 decryption setkey article toggle_quotes "T" % Display quoted lines (on/off) setkey article toggle_signature "\\" % Show signature (on/off) setkey article wrap_article "W" % Wrap long lines (on/off) setkey article show_spoilers "\e?" % Reveal spoilers (on/off) setkey article toggle_pgpsignature "]" % Show PGP signature (on/off) setkey article toggle_verbatim_marks "[" % Show verbatim marks (on/off) setkey article enlarge_article_window "^" % Enlarge the article window setkey article shrink_article_window "^^" % Shrink the article window setkey article zoom_article_window "z" % Maximize/Unmaximize article setkey article hide_article "h" % Hide/Show the article window setkey article browse_url "U" % Search for URL and follow it setkey article toggle_sort "\eS" % Select threading method setkey article toggle_collapse_threads "\et" % Collapse/Uncollapse thread setkey article toggle_header_formats "\ea" % Toggle header display formats setkey article redraw "^L" % Redraw screen setkey article redraw "^R" % Redraw screen setkey article help "?" % Display help screen
setkey article create_score "K" % Create a scorefile entry setkey article view_scores "v" % Show which rules matched setkey article locate_article "\el" % Locate article by Message-ID setkey article get_children_headers "\e^P" % Find all children setkey article get_parent_header "\ep" % Reconstruct thread setkey article mark_spot ";" % Mark current article position setkey article exchange_mark "," % Return to marked article setkey article tag_header "#" % Numerically tag article setkey article untag_headers "\e#" % Remove all numerical tags setkey article toggle_header_tag "*" % Set/remove header tag setkey article repeat_last_key "." % Repeat last key sequence setkey article grouplens_rate_article "0" % Rate article with grouplens setkey article evaluate_cmd "^X\e" % Interpret line as S-Lang
setkey readline bol "^A" % Beginning of line setkey readline eol "^E" % End of line setkey readline right "\e[C" % Move right setkey readline left "\e[D" % Move left setkey readline bdel "^H" % Delete backward setkey readline bdel "^?" % Delete Backward setkey readline del "^D" % Delete Foreword setkey readline delbol "^U" % Delete to Beginning of line setkey readline delbow "^W" % Delete to Beginning of word setkey readline deleol "^K" % Delete to End of line setkey readline trim "\e/" % Trim whitespace setkey readline quoted_insert "^Q" % Quoted insert setkey readline complete "\t" % Complete filename setkey readline cycle " " % Cycle among filenames
% vim:set ft=slrnrc:
■ connecting for the first time
Start slrn and retrieve a list of all active newsgroups from the server.
$ slrn --create
Retrieve newsgroups descriptions:
$ slrn -d
Once connected, press 's' to subscribe to newsgroups. Subscribed newsgroups are represented in .newsrc files (slrn by default uses ~/.jnewsrc) as 'newsgroup: n1-n2 n3-nN', where the numerical intervals are the ranges of article ids which have been marked as read. Groups you haven't subscribed to are simply appended a '!' and ignored by the client. newsrc files can be edited directly.
■ optional: use slrnpull to mirror articles to a local spool
You can instruct slrn to read a local news spool upon startup,instead of fetching new headers and articles from the server. INN and Leafnode can be used to pull news from any newsserver, but the `slrnpull` program shipped by default with slrn, represents by far the simplest solution for a single-user spool.
Advantages of using a local spool:
- eliminate any latency when opening groups and threads.
- offline reading (i.e. server down and/or no network connection available).
- keep a local copy of articles even after they've been purged from the server.
In order to use slrnpull, few adjustments are needed to the the above configuration.
1. Edit ~/.slrnrc to match the following settings:
set spool_inn_root "news/spool" set spool_root "news/spool/news" set spool_nov_root "news/spool/news" set use_slrnpull 1 set server_object "spool"
% use slrnpull to also feed your posts to server (they won't be % posted automatically by the client). %set post_object "slrnpull"
2. Set the SLRNPULL_ROOT environmental variable: SLRNPULL_ROOT=$HOME/news/spool; export SLRNPULL_ROOT
3. Create subdirectories for news spool and slrnpull logs:
$ mkdir p ~/news/spool/news $ mkdir ~/news/logs
4. If the server requires authentication you'll also need an 'authinfo' file, unless you want to be prompted for credentials each time you execute slrnpull. ATTENTION: stored in plain text.
$ cat > ~/news/spool/authinfo << EOF > $USERID > $PASSWD > EOF $ chmod 0600 !$ 5. Create a 'slrnpull.conf' file inside ~/news/spool. This is tells slrnpull how many news to pull and from which groups. The default slrnpull.conf syntax is as easy as follows:
<NEWSGROUP_NAME> <MAX_ARTICLES_TO_RETRIEVE> <NUMBER_OF_DAYS_BEFORE_EXPIRE>
For example, a slrnpull.conf file containing just the followingf line:
alt.unitedbsd 256 365
Shall make slrnpull fetch up to 256 news from the alt.unitedbsd newsgroup and have them expire after 1 year. Expired news will be expunged once slrnpull is executed with the additional `--expire` option.
A third boolean (0/1) value can be added after the expiration schedule; if turned on, it will make slrnpull fetch headers only. Default off.
alt.unitedbsd 256 365 1
6. Create a `slrnfetch` wrapper to pull articles: #!/bin/sh umask 022 DIR="${HOME}/news/spool" SERVER="news://retrobsd.ddns.net" SLRNPULL="/usr/pkg/bin/slrnpull" LOG="${HOME}/news/logs/log" DEBUG="${HOME}/news/logs/pull.trace" $SLRNPULL --new-groups --no-post -h $SERVER -d $DIR --logfile $LOG --debug $DEBUG
Now make it executable and put it in your PATH. Each time you execute `slrnfetch`, it will pull new articles to the local spool. You'll most likely want to create a cron job to execute it periodically.
7. If using a slrnpull as post_object, here's a wrapper to feed the server with new posts and replies. I named it `slrnpost`. #!/bin/sh umask 022 DIR="${HOME}/news/spool" SERVER="news://retrobsd.ddns.net" SLRNPULL="/usr/pkg/bin/slrnpull" LOG="${HOME}/news/logs/log" DEBUG="${HOME}/news/logs/post.trace" $SLRNPULL -h $SERVER -d $DIR --logfile $LOG --debug $DEBUG --post-only
Each time you execute `slrnpost` your freshly baked replies will be pushed to the server.
■ alternative light theme
If you use a very dark, low-contrast, and tendentially monochromatic colorscheme in your terminal, the theme included in the configuration above could make some elements hard to distinguish. Under those circumstances the light theme below should represent a better alternative.
%--------------------------------------------------------------------------- % Colors %--------------------------------------------------------------------------- set highlight_unread_subjects 1 set color_by_score 3
color article "white" "black" color author "yellow" "black" color boldtext "brightblue" "black" color box "black" "white" color cursor "brightcyan" "blue" color date "lightgray" "black" color description "brightred" "black" color error "brightred" "black" color frame "yellow" "blue" color from_myself "brightmagenta" "black" color group "brightgreen" "black" color grouplens_display "lightgray" "black" color header_name "brightgreen" "black" color header_number "brightgreen" "black" color headers "yellow" "black" color high_score "brightred" "black" color italicstext "magenta" "black" color menu_press "blue" "yellow" color menu "yellow" "blue" color neg_score "green" "black" color normal "white" "black" color pgpsignature "lightgray" "black" color pos_score "blue" "black" color quotes1 "yellow" "black" color quotes2 "magenta" "black" color quotes3 "red" "black" color quotes4 "blue" "black" color quotes5 "green" "black" color quotes6 "white" "black" color quotes7 "cyan" "black" color quotes "cyan" "black" color response_char "cyan" "black" color selection "yellow" "blue" color signature "red" "black" color status "yellow" "blue" color subject "brightgreen" "black" color thread_number "brightblue" "black" color tilde "brightgreen" "black" color tree "brightred" "black" color underlinetext "cyan" "black" color verbatim "green" "black