
                     SKIM version 0.6

                            by

		     Rene W.J. Pijlman
		    <rpijlman@xs4all.nl>

		      August 18, 1995




	   +---------------------------------------+
	   | This README contains the installation |
	   | instructions and a user's guide.      |
	   +---------------------------------------+



INTRODUCTION

Skim is a graphical off-line newsreader for Linux. Skim is designed to minimize
the on-line time when it's used over a slow modem link (for example 14K4
Slip/PPP). I wrote skim when I received my first phone bill since I started
reading news. My connect time for reading comp.os.linux.* has dropped from about
60 minutes per 2 days when using TIN, xrn or Netscape to 6 minutes with skim.

To use skim, you need access to a news server which supports both the standard
NNTP protocol (RFC 977) and the XHDR extension. See also the CONFIGURATION
section.

Skim has both a command line interface (skim) and a graphical interface
(xskim).

How does skim reduce the connect time?

  1) Initially you use skim to fetch only the 'Subject:' lines of the new
     articles. Skim does not automatically fetch complete articles, complete
     headers or a list of all newsgroups like many other newsreaders do.

  2) When fetching subjects or selected articles, skim starts multiple parallel
     sessions with the news server to saturate the communication channel.

  3) Skim does not need a connection with the newsserver while you are
     skimming and selecting subject lines.

How to get started:

  1) Read the INSTALLATION section, and do what it says.

  2) Read the CONFIGURATION section, and do what is says.

  3) Read the GETTING STARTED section, and do what it says.

  4) Read the USER'S GUIDE, and do what it says.

If you have questions about skim, or suggestions for improvement, or when you
have problems installing it please post to comp.os.linux.misc. When the word
"skim" is in the subject I will almost certainly read it, since this word is
in my AutoSelect patterns :-)

"... And remember: if you don't like the news, go out and make some of
your own."
        	-- "Scoop" Nisker, KFOG radio reporter
		   Preposterous Words


SYSTEM REQUIREMENTS

Skim is distributed as a set of C sources, shell scripts and TclX/Tk scripts.
In order to build and run skim you need the following software:

  Package:            Version used when developing skim:
  ------------------------------------------------------
  Linux               1.2.8
  gcc                 2.5.8
  libc                4.7.2
  bash                GNU bash, version 1.14.2(1)
  sed                 GNU sed version 2.05
  grep                GNU grep version 2.0
  cat                 GNU textutils 1.9
  head                GNU textutils 1.9
  find                GNU find version 3.8
  mknod               GNU fileutils 3.9
  touch               GNU fileutils 3.9
  m4                  GNU m4 1.3
  hostname            1.5
  Tcl (*)             7.3l1
  TclX (*)            7.3bl2
  Tk (*)              3.6p1l2

(*) You need Tcl, TclX and Tk only when you want to use the graphical
    interface (xskim).  

CHANGES

  0.4 -> 0.6

    - Skim supports regular expressions to automatically select and kill
      subjects. When you define your regular expressions carefully, you will
      spend less time skimming subjects.

      When you use this new functionality, you must have the GNU m4 
      preprocessor.

    - When the environment variable SKIMEDITOR is set, xskim will use the
      user-defined editor instead of the builtin editor to edit new articles
      and replies.

    - Skimming articles in xskim can now be done with one mouse click per
      article, instead of three. In this way you will spend less time skimming
      articles. The following changes were made to make this possible:

      * The command 'skim delete' and the 'Delete Article' button in xskim no
        longer physically remove the article file, but move it to
        $SKIMDIR/Deleted. Xskim no longer asks for confirmation when you press
        'Delete Article'.

      * Introduced the command 'skim keep' and the button 'Keep Article' in
        xskim to move article files to $SKIMDIR/Kept.

      * Xskim automatically advances to the next article when you press 
        'Delete article' or 'Keep article'.

      * The files in $SKIMDIR/Deleted are physically removed by the command 
        'skim cleanup', which does ask for confirmation.

    - Performance improvements:

      * Skim builds it's index files much faster when performing 'skim articles'
        and 'skim indexes'.

      * When skim performs 'skim articles' (when you press the button 'Get 
        Selected Articles') skim no longer creates a session with the news 
        server when no articles are selected in a group.

    - Some minor improvements in xskim:

      * more descriptive labels on the buttons.

      * The current article is highlighted when skimming articles.
      
      * The current newsgroup is shown in the window title.

    - Resolved an installation problem with xskim. The wishx interpreter no
      longer needs to be in /usr/local/bin. It may be anywhere in your PATH.

    - Xskim now recognizes selected subjects as skim does (1 or more spaces or
      TABs starting at the first position).

    - Skim no longer uses fixed size buffers which may have caused it to crash 
      when encountering very long lines.

    - Some minor changes in the installation procedure.

  0.1 -> 0.4

    - Integrated a graphical interface for skim contributed by Christoph
      Neerfeld. This was originally released as a separate package called
      skim_tcl. The graphical interface has been renamed to xskim and it is
      now integrated in the skim package. Both the command line interface
      (skim) and the graphical interface (xskim) will be supported in future
      releases (if any :-) ).

    - The README now describes both the command line interface (skim) and the
      graphical interface (xskim).

    - The number of parallel connections to the NNTP server is now
      configurable by means of the environment variable SKIMPROCESSES. The
      default is 4. Set this to a higher number if you think this will improve
      the utilization of your dialup line. Set this to a lower number (e.g. 1)
      when either your machine or the news server is overloaded, or when your
      news server limits the maximum number of concurrent connections per
      client IP address.

      This change is a considerable performance improvement when you are
      subscribed to many newsgroups. Older versions of skim overloaded the
      client and the news server with one concurrent process per newsgroup.

    - The Makefile and the installation procedure now assume that skim is
      unpacked in /usr/src and the executables are installed in /usr/bin.
      You must now be root to install skim, therefore. Also, you must
      remove the executables which the Makefile of skim 0.1 installed in
      $HOME/bin.

    - Implemented 'skim newsgroups', which delivers a list of all valid
      newgroups in $SKIMDIR/Admin/AllNewsGroups. This command is not yet
      supported by the graphical interface (xskim).

    - Added the command 'skim delete ArticleFile' to delete an article and
      also update skim's index files. You should no longer use the 'rm'
      command to remove an article.

    - Added the command 'skim indexes' to completely regenerate all of skim's
      index files. You don't normally need to use this command. Should skim's
      index files ever get out of date (for example, when you use the file
      manager or the 'rm' command to remove an article file, instead of using
      'skim delete'), you can use the command 'skim indexes' to regenerate the
      index files.

    - Implemented 'skim version' to print the version of skim on standard
      output.

    - Fixed bug with TAB representation which caused skim not to fetch articles
      which were selected by inserting a TAB (inserting spaces did work).

    - Allow comment lines in SubscribedNewsGroups: lines with '#' on the
      first position are ignored.

    - The command 'skim replyto' now expects to find the articles in
      $SKIMDIR/Articles. It used to rely on the current working directory.

    - skim now preceeds your ~/.signature with a line with two dashes and a
      space ("-- "). This is a standard which is recognized by many
      newsreaders. I'm not sure if this is an 'official' standard.

    - Fixed bug in 'skim newarticle'. The shell reported an error
      'Ambiguous redirect'.

    - Fixed bug in NewArticle and ReplyTo. When these scripts were called
      from the command line, the shell reported a syntax error. Now the
      scripts report an error, since you're not supposed to call them from
      the command line :-).

    - xskim now also supports the default value ~/Skim for the environment
      variable SKIMDIR. It used to raise an error when SKIMDIR was not
      defined.

    - xskim now also uses the optional environment variable SKIMORGANIZATION
      when constructing a new article.

    - xskim no longer requires the environment variable SKIMREPLYTO when
      constructing a new article. This variable is optional.

    - xskim now updates the "Groups" list after "Get New Subjects" is performed.

    - xskim no longer raises an error when you double click the left mouse
      button or click "Okay" in an empty "Post file" window.

    - xskim no longer raises an error when you click the left mouse button
      in an empty "Groups" list in the "Subjects" windows.

    - xskim no longer raises an error when you click the left mouse button in
      an empty Subjects list in the Articles window.

    - xskim now asks for confirmation when you click the "Cleanup" button.

    - xskim no longer asks for confirmation when you click the "Get Selected
      Articles" button.

    - xskim now asks if you want to save the changes when you leave the Subject
      selection window.

    - xskim is no longer confused by articles which contain the string
      "Subject:".

    - When you click the "Articles" button, xskim shows only the groups in
      which there actually are articles present. It used to show all groups
      the user is subscribed to. Also, xskim constructs the group list much
      faster by using index files.

    - skim moved to sunsite.unc.edu:/pub/Linux/system/News/readers.

    - My e-mail address has changed.


KNOWN BUGS
    - The builtin editor in xskim should ask if you want to save the changes 
      when you leave an edited article.
    - Skim should include the 'Date:' line when constructing an article header.
    - Skim should include the 'Lines:' line when constructing an article
      header. Most (but not all) news servers add this line when skim posts the
      article.


WISH LIST
    - Optionally fetch additional header lines (especially the From: and 
      Lines:) and support AutoSelect and Kill patterns on these lines.
    - Support (un)subscribing to newsgroups in the graphical interface.
    - Support the command 'skim newsgroups' in the graphical interface.
    - Support maintenance of Kill patterns and AutoSelect patterns in the
      graphical interface.
    - Support Undelete article in the graphical interface.
    - Show more clearly when xskim is busy and when it is finished.
    - Support "Reply by e-mail" and "CC to poster by email".
    - Script to make newsbatch for rnews.
    - Implement hook somewhere to support automatic dialup and hangup in
      order to minimize the connect time.
    - Sort subject lines (ignoring "[Rr][Ee]: ?") so related subjects are
      together (pseudo threading).


COPYRIGHT

    skim - Off-line news reading package optimized for slow lines.
    Copyright (C) 1995  Rene W.J. Pijlman

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


CREDITS

    The graphical interface (now called xskim) was contributed by Christoph
    Neerfeld <chris@apouni.meb.uni-bonn.de>. I've made many changes to it 
    since the first release.


VERSION

    Skim version 0.6.
    /home/rene/sys/CVS_MasterSourceRepository/skim/README,v 1.56 1995/08/18 11:15:49 rpijlman Exp


INSTALLATION

     1) When skim version 0.1 is installed, first remove the executables of
        this version. The default installation directory in the Makefile of
        skim version 0.1 is $HOME/bin. Since the default installation
        directory has changed to /usr/bin the old exexcutables are not
        automatically overwritten when installing skim version 0.6. 
        Login as the user who installed skim version 0.1 and remove the old 
        executables:

            cd $HOME/bin
            rm GetSubjectsOfNewArticlesInGroup GetSelectedArticlesInGroup \
	       SplitArticle PostArticle ReplyTo NewArticle skim

     2) Login as root.

     3) Put skim-0.6.tgz in /usr/src.

     4) Unpack:

            cd /usr/src
            tar xfz skim-0.6.tgz

     5) Build:

            cd skim-0.6
            make clean
            make depend
            make

     6) Install:

            make install


CONFIGURATION

    1)  Check if your NNTP news server supports the XHDR extension to the
        NNTP protocol in RFC-977. You can talk to the news server directly
        using a telnet client:

           $ telnet news.NL.net 119
               200 news.nluug.nl NNTP server version 1.5.12.1 (1 Jan 1995) ready at Sun
               May  7 15:05:59 1995 (posting ok).
           help
               ...
               Additionally, the following extensions are supported:

               XHDR        Retrieve a single header line from a range of
                           articles.
           xhdr
               501 Usage: XHDR headerfield [artrange|<message-id>]

        If your server doesn't support the XHDR extension, skim is of no use
        to you. Sorry.

    2)  Set the environment variable NNTPSERVER in your .profile. It must
        contain the host name of your NNTP news server.

    3)  Optionally set the environment variable SKIMDIR in your .profile. It
        must contain the location of the directory structure which skim will
        create. When SKIMDIR is not defined, skim will create the directory
        structure in ~/Skim.

    4)  Set the environment variable SKIMFROM in your .profile. It must
        contain your name and E-mail address, in one of the formats allowed
        by RFC-1036. Examples of all valid formats are:

             rpijlman@xs4all.nl
             rpijlman@xs4all.nl (Rene Pijlman)
             Rene Pijlman <rpijlman@xs4all.nl>

        Don't forget to put double quotes around these strings, since they
        contain spaces.

    5)  Optionally set the environment variable SKIMREPLYTO in your .profile.
        If you do, it must contain your name and E-mail address in the same
        format as described above for SKIMFROM. The SKIMREPLYTO variable will
        cause a 'Reply-To:' line to be included in the articles which skim
        creates for you. See RFC-822 for the semantics of this line.

    6)  Optionally set the environment variable SKIMORGANIZATION in your
        .profile. This will cause an 'Organization:' line to be included in the
        articles which skim creates for you. See RFC-1036 for the semantics of
        this line.

    7)  Optionally set the environment variable TMPDIR in your .profile. Skim
        will use this directory for temporary files. It defaults to /tmp.

    8)  Optionally set the environment variable SKIMPROCESSES in your .profile.
        This variable determines the maximum number of concurrent processes that
        talk to the NNTP server. The default is 4. Set it to a higher number if
        you think this will improve the utilization of your dialup line. Set it
        to a lower number (e.g. 1) when either your machine or the news server
        is overloaded, or when your news server limits the maximum number of
        concurrent connections per client IP address.

    9)  Optionally set the environment variable SKIMEDITOR in your .profile.
        xskim will use this user-defined editor instead of the builtin editor 
        to edit new articles and replies. You can popup a graphical editor or
        a window with a traditional character mode editor.

    10) Note: skip this step when this is the first time you use skim.

	Optionally set the environment variable SKIMAUTOSUBJECT to
	"CaseSensitive" or "CaseInsensitive" in you .profile. When this
	variable is set, skim will automatically select and kill subjects
	based on regular expressions which you must define. See the USER'S
	GUIDE section for details.

    11) Optionally create a .signature file in your home directory. Skim will
        append it to all articles it constructs.

    12) Make sure that the following directories are in your PATH:

          - /bin
          - /usr/bin
          - The directory containing the `wishx' interpreter of TclX/Tk. This
            is typically /usr/bin or /usr/local/bin.


For example, my .profile contains:

       export NNTPSERVER=news.xs4all.nl
       export SKIMDIR=~/News
       export SKIMFROM="Rene Pijlman <rpijlman@xs4all.nl>"
       export SKIMREPLYTO="rpijlman@xs4all.nl"
       export SKIMAUTOSUBJECT="CaseInsensitive"
       export SKIMEDITOR="rxvt -e vi"
       export PATH=/bin:/usr/bin:/usr/local/bin:$PATH

Logout and login again to initialize your window manager and shell with the
changes in .profile.


GETTING STARTED USING THE COMMAND LINE INTERFACE

Fire up your dial-up link, and try the command:

    skim subjects

This may take a while, since skim creates it's directory structure, subscribes
you to a couple of default news groups, and fetches all 'Subject:' lines in
those news groups. Don't worry: once you're up-to-date in your newsgroups
skim will be much faster.

You may now disconnect your dial-up link.

The directory $SKIMDIR/Subjects should now contain one file per newsgroup
with the article numbers and subject lines. For example:

       51225 Newbie question: how do I remove LILO from my hard disk?
       51226 Re: how to pronounce Linux?
       51227 Help! My CD-ROM doesn't work!!!
       51228 Re: Help! My CD-ROM doesn't work!!!

In the subject files, select articles by shifting lines to the right (insert
one or more spaces or TABs at the first position of the line). I use the '>>'
command in vi to select articles.

When you're done selecting articles, fire up your serial line and try the
command:

    skim articles

You may now disconnect your dial-up link again.

The directory $SKIMDIR/Articles should now contain the articles you selected.

There is only one step left: edit the file $SKIMDIR/Admin/SubscribedNewsGroups.
Replace the default set of newsgroups with your own preferences. If you don't
know the names of all the newsgroups, use skim to retrieve a list from the news
server. See also the description of the command 'skim newsgroups' in the
USER'S GUIDE section.

The first time you run 'skim subjects' again, skim will fetch all 'Subject:'
lines in your groups. Skim will remember the current article number and will
fetch only the 'Subject:' lines of new articles in all subsequent 'skim
subjects' commands. This will make skim much faster.


GETTING STARTED USING THE GRAPHICAL INTERFACE

Fire up your dial-up link and start xskim. Press the button 'Subjects' in the
upper left corner.

Press the button 'Get New Subjects' in the lower right corner. This may take a
while, since skim creates it's directory structure, subsribes you to a couple
of default news groups, and fetches all 'Subject:' lines in those news groups.
Don't worry: once you're up-to-date in your newsgroups skim will be much
faster.

You may now disconnect your dial-up link.

Now you can select a newsgroup using the left mouse button, and select subjects
using the 'Select' button. Don't forget to press the 'Save changes' button
before leaving the newsgroup.

When you're done selecting articles, fire up your serial line and start xskim.
Press the button 'Get Selected Articles' in the lower right corner.

When xskim has fetched the Articles you may disconnect your dial-up link again.
Now you can select a newsgroup and an article using the left mouse button.

There is only one step left: edit the file $SKIMDIR/Admin/SubscribedNewsGroups.
This is currently not supported by the graphical interface, so you'll have
to use a text editor. Replace the default set of newsgroups with your own
preferences. If you don't know the names of all the newsgroups, use skim to
retrieve a list from the news server. See also the description of the
command 'skim newsgroups' in the USER'S GUIDE section.

The first time you fetch subjects again, xskim will fetch all 'Subject:'
lines in your groups. xskim will remember the current article number and will
fetch only the 'Subject:' lines of new articles in all subsequent 'skim
subjects' commands. This will make xskim much faster.


USER'S GUIDE

Retrieving the list of valid newsgroups from the server
-------------------------------------------------------
To retrieve the list of valid newsgroups, use the command:

   skim newsgroups

The list will be placed in $SKIMDIR/Admin/AllNewsGroups. If there was an old
version of the list, it will be kept in AllNewsGroups.previous in the same
directory and a `diff' will be placed in AllNewsGroups.diff.

This is currently not supported by the graphical interface, so you'll have
to use the 'skim newsgroup' command.

Warning: the command 'skim newsgroups' typically requires a couple of minutes
to complete over a 14K4 line.


Subscribing to newsgroups
-------------------------
Edit $SKIMDIR/Admin/SubscribedNewsGroups. It must contain one newsgroup per
line. Lines with '#' on the first position are ignored. For example:

    comp.os.linux.announce
    comp.os.linux.answers
    comp.os.linux.development.apps
    comp.os.linux.development.system
    comp.os.linux.hardware
    comp.os.linux.misc
    comp.os.linux.networking
    comp.os.linux.setup
    comp.os.linux.x
    # comp.os.msdos.advocacy doesn't exist. Better not bring up the idea :-)
    comp.unix.programmer
    gnu.announce
    news.announce.important


Fetching subjects
-----------------
Use the command:

    skim subjects

Skim will contact the news server, and fetch the 'Subject:' lines of all new
articles in the groups in $SKIMDIR/Admin/SubscribedNewsGroups. The subject
lines are appended to a per-newsgroup file in $SKIMDIR/Subjects.

Alternatively, you can use the graphical interface (xskim). Press the button
'Subjects' in the top line of xskim. Press the button 'Get New Subjects' in the
lower right corner. After xskim has finished fetching the subject lines you 
will see a list of all newsgroups with new articles in the listbox just above 
the button 'Get New Subjects'.


Selecting articles
------------------
Edit the files in $SKIMDIR/Subjects. Shift all subject lines you're interested
in to the right. The lines of selected articles should begin with one or more
spaces or TABs. I use the '>>' command in vi to select articles.

Alternatively, you can use the graphical interface (xskim). In the Subjects
window select articles with the 'Select' button. When you are finished with
the subjects in a newsgroup, press 'Save changes' to write your selection to
the subject file in $SKIMDIR/Subjects. Then you can select another newsgroup.

You may think that just the Subject field isn't enough information to select
an article. This is what RFC-1036 has to say about it:

    The "Subject" line (formerly "Title") tells what the message is
    about.  It should be suggestive enough of the contents of the
    message to enable a reader to make a decision whether to read the
    message based on the subject alone.


Automatically select and kill subjects
--------------------------------------
Note: skip this section when this is the first time you use skim. 

You can define regular expressions (patterns) to automatically select and kill 
subjects. This is best explained by an example. An AutoSelect file for 
comp.os.linux.misc could contain the following patterns:

    skim
    ^ann(oun)?ce:

When skim fetches a subject which contains the string "skim", or "ANNCE:" or 
"Announce:" at the beginning of the line, it is automatically selected for 
retrieval. You can still unselect the subject when you wish. When you use the 
graphical interface, the automatically selected subjects appear in the 
"Selected subjects" window.

A Kill file for comp.os.linux.misc could contain the following patterns:

    dosemu
    wine
    remove lilo from (hard)? ?disk

When skim fetches a subject which matches any of these patterns, the subject
is ignored. It will not appear in the subjects file and it will not be visible
in the graphical interface.

To have skim automatically select and kill subjects you must set the environment
variable SKIMAUTOSUBJECT to either "CaseSensitive" or "CaseInsensitive". When 
you set it to CaseInsensitive, skim ignores case distinctions in both patterns
and subjects. The first time you start skim with this variable set, skim will 
create the following directories:

    $SKIMDIR/Patterns/Subject/AutoSelect
    $SKIMDIR/Patterns/Subject/Kill
    $SKIMDIR/Killed

These directories contain one file per newsgroup you are subscribed to. Edit
the files in $SKIMDIR/Patterns/Subject/AutoSelect and
$SKIMDIR/Patterns/Subject/Kill and add your expressions.

AutoSelect patterns take precedence over Kill patterns: when a subject matches
both an AutoSelect pattern and a Kill pattern, the subject is selected.

The subjects which are automatically killed by skim are appended to the files 
in $SKIMDIR/Killed, so you can review the effect of your kill patterns. 

Note that skim never cleans up the files in $SKIMDIR/Killed automatically. See
also the section 'Cleaning up'.

The regular expressions recognized by skim are the extended regular expressions
of the GNU grep command. See the grep(1) manual page for details.

To allow you to define expressions for multiple newsgroups, skim preprocesses
your pattern files with the m4 macro preprocessor. The default pattern files
created by Skim contains:

    include(AllGroups)

Note: there must be no blanks between 'include' and '('.

By default, skim creates an empty 'AllGroups' file in the pattern directories.
Any pattern you enter in this file applies to all newsgroups. You can define
other include files for groups of newsgroups if you wish. For example, I have
created a pattern file called 'Linux' which is included in every Linux-related
newsgroup. Skim runs the m4 preprocessor with the -I option to specify the
location of include files:

    m4 -I $SKIMDIR/Patterns/Subject/AutoSelect \
        $SKIMDIR/Patterns/Subject/AutoSelect/newsgroup
    m4 -I $SKIMDIR/Patterns/Subject/Kill \
        $SKIMDIR/Patterns/Subject/Kill/newsgroup

You can also use other features of the m4 preprocessor which you find useful.
Refer to the GNU info files for details.

Skim ignores empty lines and comment lines in the preprocessed pattern files.
Comments must start with '#' on the first position of the line.

Skim constructs one regular expression from all lines in a pattern file. For 
example, a pattern file with the following regular expressions:

    abc
    # Comments here.
    def

    ghi

is equivalent one of the following GNU grep commands:

    SKIMAUTOSUBJECT=CaseSensitive:    SKIMAUTOSUBJECT=CaseInsensitive:

    grep -E 'abc|def|ghi'             grep -E -i 'abc|def|ghi'


Automatically retrieving all new articles in a newsgroup
--------------------------------------------------------
When you want to use skim to automatically retrieve all new articles in a
newsgroup, you should subscribe to that newsgroup (by inserting the newsgroup
in $SKIMDIR/Admin/SubscribedNewsGroups) and enter the following pattern in the
AutoSelect file ($SKIMDIR/Patterns/Subject/AutoSelect/<newsgroup>):

    .*

All new articles in the newsgroup will be retrieve when you execute the
commands:

    skim subjects
    skim articles

The articles will be stored in $SKIMDIR/Articles.

These commands will also retrieve the subjects and the selected articles in all
other newsgroups you are subscribed to. When you want to avoid that, you should
create multiple skim directory structures by running skim with a different
value in the environment variable SKIMDIR. In every skim directory structure
you can subscribe to a different set of newsgroups.


Fetching articles
-----------------
Use the command:

    skim articles

Skim will contact the news server, and fetch the complete articles which you
have selected in $SKIMDIR/Subjects.

The articles will be stored in per-article files in $SKIMDIR/Articles.

When you've read an article, you should use one of the following commands:

    skim delete ArticleFile
    skim keep ArticleFile

These commands move the article to $SKIMDIR/Deleted and $SKIMDIR/Kept
respectively and update skim's index files.

The subject lines which you did not select, are appended to the per-newsgroup
files in $SKIMDIR/Skipped. The subject files in $SKIMDIR/Subjects are removed.

Alternatively, you can use the graphical interface (xskim). Press the button
'Articles' on the top line. Press the button 'Get Selected Articles' in the 
lower right corner to execute 'skim articles'. When xskim has finished fetching
the selected articles, you can select a newsgroup in the listbox. Xskim will
present a list of the subject lines of all available articles in the newsgroup.
Select a subject line to view the article. When you've read an article, you 
should press the 'Delete Article' button or the 'Keep Article' button.

Note that skim never cleans up the files in $SKIMDIR/Skipped and 
$SKIMDIR/Deleted automatically. See also the section 'Cleaning up'.

Skim never removes files from $SKIMDIR/Kept. This is a historical archive of
the articles which you've decided to keep.


Replying to articles
--------------------
When you want to reply to an article in $SKIMDIR/Articles, use the command:

   skim replyto ArticleFile

I reply to articles by typing "vi *" in $SKIMDIR/Articles, and within vi
give the command ":! skim replyto %".

On the commandline you should provide only the filename. Skim will prepend
$SKIMDIR/Articles to the filename. The reply will be placed in $SKIMDIR/Post
for editing. Be carefull with the syntax of the header.

Alternatively, you can use the graphical interface (xskim). When you have
selected an article, press the button 'Reply' on the bottom line. This will
execute 'skim replyto ArticleFile' and present the reply using either the
builtin editor of xskim or the editor that you've specified in the environment
variable SKIMEDITOR.

IMPORTANT: In the builtin editor of xskim you must press 'Save' before you
           select another article.

If you have written a reply to a specific article and select this article
later on, you'll see a label 'Reply exists' in the bottom line. If you now
press 'Reply', xskim won't create a new reply file, but opens the old one so
you can edit the file once again before posting it. You can also delete it, if
you don't want to reply anymore.

Skim uses the following information to construct the reply:

    - Various header lines of the original article.
    - The environment variable SKIMFROM.
    - The environment variable SKIMFREPLYTO (optional).
    - The output of hostname(1).
    - The body of the original article.
    - Your ~/.signature, if it exists.

Skim will take care of the 'Subject:' and 'References:' requirements in
RFC-1036.


Creating a new article
----------------------
To create a new article, use the command:

   skim newarticle

Skim will prompt you for a filename, the subject, and a list of newsgroups
this article is to be posted to. Skim also uses the following information:

    - The environment variable SKIMFROM.
    - The environment variable SKIMREPLYTO (optional).
    - The output of hostname(1).
    - Your ~/.signature, if it exists.

The article will be placed in $SKIMDIR/Post for editing. Be carefull with the
syntax of the header.

You may also provide the required information on the command line. In that case
skim will not prompt you interactively. The syntax is:

   skim Filename NewsGroups Subject

For example:

   skim newarticle RemoveLilo comp.os.linux.setup,comp.os.linux.misc \
                   "How to remove LILO from hard disk?"

Alternatively, you can use the graphical interface (xskim). Press the button
'New' on the top line. A new window will be displayed and you're asked to type
the name of the local file to create, the list of newsgroups to post to and the
subject line of your article. When you specify all of this information, xskim
will present your new article using the builtin text editor of xskim or in the
editor that you've specified in the environment variable SKIMEDITOR. When you 
don't specify all of the information required by xskim, xskim will not create 
a new article.

IMPORTANT: In the builtin editor of xskim you must press 'Save' before you
           create another article.


Posting articles
----------------
There are two commands for posting articles:

   skim post ArticleFile
   skim postall

The first command will post a specific article in $SKIMDIR/Post. The second
command will post all articles in $SKIMDIR/Post. Use these commands with
caution. If there is garbage in $SKIMDIR/Post you may violate the Internet
standards RFC-977 or RFC-1036.

The articles which were posted successfully are moved to $SKIMDIR/Posted.
Skim will never remove articles from $SKIMDIR/Posted. This is a historical
archive of your articles.

Alternatively, you can use the graphical interface (xskim). To post all
articles in $SKIMDIR/Post, press the button 'Postall' on the top line. To
post a specific article, press 'Post' on the top line, and select the
article you want to post.

If you want to edit your article before posting, press 'Open Article' and select
the file you want to edit. If you want to delete one of your articles, press
'Delete Outgoing Article' in the top line and select the article file.

Cleaning up
-----------
Skim accumulates information in the following directories:

    - $SKIMDIR/Skipped
    - $SKIMDIR/Killed
    - $SKIMDIR/Deleted

You should regularly remove the files in these directories by executing the
command:

    skim cleanup

Alternatively, you can use the graphical interface (xskim). Press the button
'Cleanup' in the top line to execute 'skim cleanup'.

Skim also accumulates information in the directory $SKIMDIR/Kept. This is a
historical archive in the articles that you have decided to keep. Skim never
removes articles from this directory.

The text editor in xskim
------------------------
The text editor in xskim is used for viewing articles, creating new articles,
and replying to articles. The editing aktions which are supported are
documented in the BINDINGS section of the text(3) manual page that comes with
Tk.

The most important editing aktions are:

   - Pressing mouse button 1 positions the insertion cursor.
   - Dragging mouse button 1 selects characters.
   - The view in the text can be adjusted with mouse button 2 (horizontal
     and vertical scrolling).
   - Control+v inserts the current selection just before the insertion
     cursor.
   - Control+d deletes the selected characters.
