NEWSFISH(1)

NAME
newsfish - batch USENET news reader with filter capabilities

SYNOPSIS
newsfish [-CFVhlv] [-f config] [-c group] [-m limit] [-n maxRequests] [NNTP server]

DESCRIPTION
newsfish reads all unread articles in one or more newsgroups. Articles are then subjected to a set of user-defined filters, and those that pass are saved to a file in mailbox format. For speed, only article headers are tested.

The options are as follows:

-C  Mark all articles in all newsgroups as read.

-F  Force newsfish to connect, even if the precommand terminates abnormally.

-V  Display version information and quit.

-h  Display command line summary and quit.

-v  Turns on the verbose flag.

-f config
    Specify an alternate server configuration file. The default is $HOME/.newsfish-servers.

-c group
    Mark all articles in group as read. You may specify multiple -c group options.

-m limit
    Limits all output files to limit bytes each. If limit ends with a ``b'', ``k'' or ``m'', then the actual byte limitation is limit times 512, 1024, or 1048576 respectively.

-l  Display all available newsgroups on the server and quit.

-n maxRequests
    Set the maximum number of outstanding NNTP requests. For values greater than 1, newsfish will pipeline requests, allowing fuller utilization of your link. The recommended value is 10, though you may want to tune it up or down depending on the speed of your link. The default value is 1, meaning no pipelining is performed.

NNTP server
    The NNTP server to connect to. If this is specified, it will override the environment variable NNTPSERVER described below.

The file $HOME/.newsfishrc defines what newsgroups to read and what filters to apply to their articles. The format of this file is fairly simple. The file is divided into "blocks". Each "block" defines a set of filters for a particular newsgroup and what file to save matching articles to. Each "block" consists of:

1.  The name of the newsgroup followed by a colon. (':') The newsgroup name may contain asterisks, in which case the conditions for the block are applied to all blocks that match the newsgroup pattern. The wildcard matcher is fairly simple. It only supports wildcard prefixes (comp.sys.*), suffixes (*.hardware.misc), or both (*.hardware.*). You may also define a global match pattern ('*'), which will apply the conditions of the block to each and every other block.

2.  Zero or more lines beginning with an asterisk ('*'), a space (' '), followed by an egrep(1) style regular expression. The regular expression is case-insensitive. Leading and trailing whitespace are ignored. If more than one of these lines are defined, then an article's header must match all regular expressions in order for the article to be saved. Having no regular expression lines matches each and every article in the newsgroup. The sense of a regular expression line can be inverted if it is prefixed with a '!'.

3.  A filename relative to the directory from which newsfish is run. Use of absolute filenames is OK and is encouraged to eliminate ambiguity. Alternatively, if the first non-blank character is a pipe ('|') then the rest of the line names a program (and its arguments) that will receive the article on its standard input. The program is executed by ``/bin/sh -c''.

Blank lines and lines beginning with a pound-sign ('#') are ignored. All leading and trailing whitespace on any line are also ignored. Multiple blocks can be defined for the same newsgroup, each with a differing set of regular expression lines (the output files need not be different). In any case, newsfish is smart enough to only process newsgroups once.

For example, to save all articles from a group called "foo.bar" on the subject of "garply", you would define the block:

    foo.bar:
    * ^Subject:.*garply
    some/file

As a more complex example, to save all articles from a group called "foo.baz" on the subject of "stuff", ignoring posts from anyone with the e-mail address of <someone@spam.net>, define the block:

    foo.baz:
    * !^From:.*someone@spam\.net
    * ^Subject:.*stuff
    another/file

ADVANCED CONFIGURATION
If a server configuration file ($HOME/.newsfish-servers by default) exists, newsfish will attempt to read it. This file specifies per-server configuration details, allowing newsfish to easily switch between different servers. Like $HOME/.newsfishrc, this file is also divided into "blocks". Each "block" defines a set of entries for one particular server. Each consists of:

1.  The name of the NNTP server enclosed in square brackets ('[', ']'). This does not necessarily have to be the DNS name of the NNTP server. If it isn't the DNS name of the server, you must specify a valid "host" attribute, as explained below. When newsfish is run, either the environment variable NNTPSERVER or the command-line argument NNTP server must match the name of an NNTP server block. If not, the server is assumed to have the default configuration.

2.  Zero or more "attributes". Each "attribute" consists of a keyword and an argument, separated by one or more whitespace. See below.

As usual, all leading and trailing whitespace are ignored. Any line that begins with a pound-sign ('#') is also ignored.

A simple example that defines a news server called "mynewsserver":

    [mynewsserver]
    host news.mynewsserver.com
    config .newsfishrc-mynewsserver
    newsrc .newsfishrc-newsrc-mynewsserver

A complex example that defines a news server called "myisp". The news server requires authentication. Rather than sending our password through the network in the clear, we set up an ssh(1) tunnel to a host local to the news server.

    [myisp]
    host localhost
    port 1234
    config .newsfishrc-myisp
    newsrc .newsfishrc-newsrc-myisp
    user myusername
    password mypassword
    preconnect ssh -f -x -L 1234:news:119 shell1.myisp.com sleep 30

SERVER ATTRIBUTES
The following server attributes are currently understood by newsfish:

host NNTP-host
    The host to connect to. If unspecified, the default is the name of the NNTP server (the name within the square brackets).

port NNTP-port
    The port to connect to. If unspecified, the default is 119.

config config-file
    The filter definitions file to use. If unspecified, the default is $HOME/.newsfishrc. See the special note below regarding where newsfish finds its configuration files.

newsrc newsrc-file
    The newsrc file to use. Defaults to $HOME/.newsfish-newsrc if left unspecified. Since article numbers typically differ by NNTP server, you must specify a unique newsrc file for each server.

password passwd
    If the server requires authentication, this specifies the password to use. If this is defined, newsfish will attempt authentication with the server. Otherwise, no authentication will be performed. Currently, newsfish only supports the "original AUTHINFO" authentication scheme.

user username
    If the server requires authentication, this specifies the username to use. Note that for some NNTP servers, the username is optional. In this case this should be left unspecified.

preconnect command
    Before connecting to the server, newsfish will attempt to execute command. command is passed verbatim to ``/bin/sh -c''. newsfish will wait for the command to complete before continuing. If the command exits with a non-zero result code (usually indicating error), newsfish will immediately exit. This behavior can be controlled with the -F option described above. Finally note that although newsfish strips leading and trailing whitespace, whitespace within command are preserved.

postconnect command
    Similar to "preconnect", but command is executed after newsfish disconnects from the server.

NOTES

•   Unless a configuration filename is absolute (i.e. it begins with "/" or is relative to the current directory (i.e. it begins with "./" or "../"), newsfish expects its configuration files to be relative to your home directory. For example:

    Filename
        Expected Location
    .newsfishrc
        $HOME/.newsfishrc
    ./myconfig
        ./myconfig (in the current directory)
    /tmp/someconfig
        /tmp/someconfig
    foo/bar
        $HOME/foo/bar

    This mapping applies to the server configuration file, all filter definition files, and all newsrc files. Note that this mapping does not apply to files which newsfish saves articles to. Finally note that this mapping applies to the -f config option!

•   If the -C or -c group options are specified, newsfish will not scan newsgroups as usual. Instead, it will catch up all matching newsgroups and simply quit.

ENVIRONMENT
NNTPSERVER
    The NNTP server to connect to. This must be defined if NNTP server is not given on the command line.

FILES
$HOME/.newsfish-servers
    Contains per-server configuration details. For an example, see dot.newsfish-servers.sample.

$HOME/.newsfishrc
    The file containing the filter definitions. See the file dot.newsfishrc.sample for an example.

$HOME/.newsfish-newsrc
    Contains the highest article number for each newsgroup already scanned by newsfish.

SEE ALSO
egrep(1), sh(1)

HISTORY
See the file ChangeLog.

AUTHOR
This manual page was written by Allan Saddi <asaddi@philosophysw.com>.

BUGS
See the file TODO.