René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

slrn

I've chosen slrn as my newsreader because it comes with fully customizable keyboard short cuts. As I am a vim addict, I have chosen the shortcuts to be compatible with VI, if possible.

Download

slrn also needs the S-Lang library which can be downloaded from here.

Compiling (with cygwin)

I don't want to send mails with slrn, so I configure it like so:
$ ./configure --with-mta=null

Using slrn together with slrnpull

When I am on the way in a train and don't have anything better to do, I want to read and answer the news. slrnpull can be used for exactly this purpose. In the following, I describe the setup I have on my laptop (windows).
The following files are involved:

slrn.bat

slrn.bat starts slrn. It needs to be accessible in the %PATH% environment variable.
c:\tools\slrn\slrn.exe --spool -i c:\tools\slrn\slrn.rc -f c:\tools\slrn\jnews.rc
The -i option indicates the init file (in my case: slrn.rc)
The -f option indicates the news rc file (in my case: jnews.rc)

slrn.rc

This is the slrn init file; it configures slrn's behaviour. The various keyboard shortcuts are defined within it.
If slrn is used without slrnpull and it is desired to automatically log on, a nnrpaccess should be added to the .slrnrc file:
nnrpaccess news.individual.de username password
However, slrnpull authenticates itself, so the following slrnrc file does not have an nnrpaccess.
set username "rene.nyffenegger"
set hostname "gmx.ch"
set realname "Rene Nyffenegger"

set organization "ADP Analyse, Design & Programmierung GmbH"

set signature "c:\\tools\\slrn\\.signature"

set server_object "spool"

set post_object "slrnpull"

set spool_inn_root "c:\\tools\\slrn"
set spool_root     "c:\\tools\\slrn\\news"
set spool_nov_root "c:\\tools\\slrn\\over.view"

set editor_command "gvim %s +%d"

set Xbrowser "explorer %s"

set scorefile "score.file"

set mime_charset "iso-8859-1"

set sorting_method 11            % 11=> Thread, then sorted by date, most recent last

color unread_subject     "white"          "black"
color article            "lightgray"      "black"
color author             "magenta"        "black"
color boldtext           "brightblue"     "black"
color box                "black"          "white"
color cursor             "brightgreen"    "black"
color date               "lightgray"      "black"
color description        "lightgray"      "black"
color error              "white"          "brightred"
color frame              "yellow"         "blue"
color from_myself        "brightmagenta"  "black"
color group              "lightgray"      "black"
color grouplens_display  "lightgray"      "black"
color header_name        "green"          "black"
color header_number      "green"          "black"
color headers            "brightcyan"     "black"
color neg_score          "green"          "black"
color pos_score          "blue"           "black"
color high_score         "red"            "black"
color italicstext        "magenta"        "black"
color menu               "yellow"         "blue"
color menu_press         "lightgray"      "yellow"
color message            "lightgray"      "black"
color normal             "lightgray"      "black"
color pgpsignature       "lightgray"      "black"
color quotes             "yellow"         "black"
color quotes1            "magenta"        "black"
color quotes2            "brown"          "black"
color quotes3            "brown"          "black"
color quotes4            "brown"          "black"
color quotes5            "brown"          "black"
color quotes6            "brown"          "black"
color quotes7            "brown"          "black"
color response_char      "green"          "black"
color signature          "lightgray"      "black"
color selection          "yellow"         "blue"
color status             "yellow"         "blue"
color subject            "lightgray"      "black"
color thread_number      "lightgray"      "black"
color tilde              "green"          "black"
color tree               "red"            "black"
color underlinetext      "cyan"           "black"
color url                "white"          "black"
color verbatim           "green"          "black"

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

spool_inn_root

Names the directory that contains the active, active.times and newsgroups files.
The active file lists all active newsgroups.

slrnpull.bat

This batch file retrieves the news from the server and puts the written article back to the server.
c:\tools\slrn\slrnpull.exe -h news.individual.de -d c:\tools\slrn
    
-h: the nntp server
-d: the spool directory, also points to the directory containing slrnpull.conf

slrnpull.conf

#ch.test                                            500 14

comp.dsp                                            500 20

comp.lang.perl.announce                             500 20
comp.lang.perl.misc                                 500 20
comp.lang.perl.moderated                            500 20
comp.lang.perl.modules                              500 20
comp.lang.perl.tk                                   500 20

comp.lang.javascript                                500 20

comp.os.ms-windows.programmer.win32                 500 20

comp.text.xml                                       500 20

de.comp.lang.javascript                             500 14
de.comp.lang.perl.cgi                               500 14
de.comp.lang.perl.misc                              500 14

de.comp.text.xml                                    500 14

de.etc.beruf.selbstaendig                           500 14

microsoft.public.inetsdk.programming.html_objmodel  500 14
microsoft.public.office.developer.web.components    500 14

misc.business.marketing.moderated                   500 14

jnews.rc

jnews.rc lists the newsgroups that by default are displayed when slrn is started.
If there is an exlamation mark (!) after the newsgroup's name, the group is still not displayed, however.
It looks like so:
ch.test! 1-23893
comp.dsp: 1-166900
comp.lang.perl.announce: 1-2337
comp.lang.perl.misc: 1-530803
comp.lang.perl.moderated: 1-12592
comp.lang.perl.modules: 1-65080
comp.lang.perl.tk: 1-38756
comp.lang.javascript: 1-447670
comp.os.ms-windows.programmer.win32: 1-261023
comp.text.xml: 1-62887
de.comp.lang.javascript: 1-165317
de.comp.lang.perl.cgi: 1-52076
de.comp.lang.perl.misc: 1-56821
de.etc.beruf.selbstaendig: 1-168506
microsoft.public.inetsdk.programming.html_objmodel: 1-3158
microsoft.public.office.developer.web.components: 1-8519
misc.business.marketing.moderated: 1-17945
  
jnews.rc keeps also track of which articles are already read.

slrnpull

slrn needs an out.going directory for the posts that are made and delivered by slrnpull. Otherwise, an posting directory c:\tools\slrn\out.going does not exist error is issued. In order to prevent that, this directory is created:
mkdir c:\tools\slrn\out.going

Directories needed for slrnpull

  • SLRNPULL_ROOT/
  • SLRNPULL_ROOT/data
  • SLRNPULL_ROOT/news/
  • SLRNPULL_ROOT/out.going/
  • SLRNPULL_ROOT/out.going/rejects/

slrnpull.conf

This file contains the newsgroup to download along with the number of articles. Additionally, it specifies when an article expires.

authinfo

This file is used if authentification is needed on the news server and consists of two lines only! The first line is the user name, the second the password.

Delete old articles

slrnpull deletes expired articles if invoked with the --expire command option.