XPN - X Python Newsreader

What is it?

XPN is a newsreader written in python using the Gtk+ toolkit for the GUI. It is a multiplatform newsreader, it should work wherever GTK+ and Python work.

XPN has a good support for MIME standards, but hasn't any support for binary articles, so please use it on text-only newsgroups. XPN is fully Unicode compliant.

Installing XPN

Simply extract the tarball. A directory named "xpn-x.y.z" will be created. In this directory you will find the executable file "xpn.py" that launchs the newsreader.
Type
./xpn.py --help
to get informations on command-line options.

Using XPN

Launch "xpn.py". The first time you have to configure the program. Follow the instructions and fill all the fields.

Now you can download the newsgroups list from the server (this operation is very slow, so please be patient). Open the newsgroups window with the first button on the toolbar (or the voice in the file menu).

Download the list and subscribe the newsgroups. In the main window, when you click on the newsgroup name, XPN shows the unread articles in a thread view. Clicking on the article you will read it.
You can also use the keyboad. With key "n" you will read the next article ("b" for the previous and "u" for the parent) and with "g" the next group. The spacebar will scroll the article until reaching the bottom, and then will move to the next article.

Pressing "p" you can post a new article to the selected group, while pressing "f" you can post a followup to the article selected. When you compose an article XPN automatically chooses the best encoding.

Scoring System

XPN has a scoring/actions system. It is very simple, every article has a "score", initially it is equal to 0.
The score is calculated when you download new headers, with the rules you define. The syntax is very similar to the Hamster's one, however it is simplified.

Rules are saved in scores.txt (it's better if you don't edit it with an external editor, use the internal rule editor), it is divided in ScoreBlocks. Every ScoreBlock starts with a Scope Definition, it defines the groups in wich rules are applied.
[*] Means: apply the rule in the whole groups
[group1 group2 group3] Means: apply the rule in the listed groups

With a rule you test an header (like From, Subject ...) searching for strings and things like that, if the match is successful the score is modified.
Every rule is composed by three parts:

  1. The score modifier. You can increase (+value), decrease (-value) or assign (=+ or =-). the actual score of the article. The processing of the article is stopped if its score is assigned with a successful rule.
  2. The header used. You can chose from :Subject, From, Date, Message-ID, References, Bytes, Lines, Xref, Xpost, Age (in days)
  3. The match definition. The way XPN decides if the rule is successful, it can search for a substring (defined like that "Substring" or like that c"Substring" if you need case sensivity), use a regular expression (defined with {regex} or with c{regex}), or confront numeric values (%>value, %<value, %=value, %[value_inf,value_sup])
You can also invert a match definition prepending a "~". So the rule will be successful only if it doesn't match. The "~" has to prepend the whole match rule, also the "c" modifier. Examples:
    # use this for comments
    [*]
    +100 From c"Nemesis"     #increase the score for the author 'Nemesis'
    =+1000 Subject "xpn"     #assign the score for the articles with the 'xpn' word in the subject
    =-9999 Subject ~c{[a-z]} #assign the score for the articles with a subject that doesn't contain small letters
    
    [it.comp.software.newsreader it.comp.lang.python]
    -500 Age %>10            #decrease the score for articles ten days old
    =-100 Xpost %>2          #assign the score for article posted on more than 2 groups

Actions Rules are very similar to Scoring Rules. When an action rule is successful XPN apply the action specified on the article. You can choose one of these actions :!kill, !markread, !markunread, !mark, !unmark, !retrieve, !keep,!unkeep, !watch, !ignore, !unsetwatchignore, !setcolor(foreground;background). The headers are the same of the Scoring Rules plus the field Score. Actions Rules are always applied after Scoring Rules (even if they are placed before scoring rules in the scores.txt file), so you can modify the score of an article and then apply an action according the score value.

Examples:

    [*]
    !watch Score %>5000                      #Watch articles with Score greater than 5000
    !markread Score %[-1000,4000]            #Mark as read articles with Score in range
    !kill From "Pinco@pallino.com"           #Kill articles from 'Pinco@pallino.com'
    !setcolor(black;yellow) Lines ~%[10,20]  #Set the background color to yellow for articles whith more than
                                             #20 lines and less than 10 lines 
    

Requirements