Subject: rn KILL file FAQ
From: [email-masked] (Leanne Phillips)
Date: 19 Apr 1994 14:00:39 GMT
Newsgroups: news.newusers.questions,news.software.readers,news.answers

Archive-name: killfile-faq
Last modified: 16 Sep 1993

Summary of changes: Corrected one misleading statement about the f: modifier.
	Added a paragraph about the H: modifier of trn 3.1.

Send comments, suggestions, corrections to [email-masked].

  Rn and trn, and other varieties of rn, have a very useful feature called
the KILL file, which allows you to kill (skip over) articles that you don't
want to see.  There is some support for killfiles in xrn, but the support is
limited; nothing in here is guaranteed to work for xrn.  See the xrn
man page.

  KILL files come in two forms:
	Global: In your News directory, you will have the file KILL.
	Local: In your News directory, the killfile for group foo.bar
		will be foo/bar/KILL.
The difference between the two is that there can be one killfile for
each group (the local killfile), and that killfile affects only the
particular newsgroup (foo/bar/KILL affects only foo.bar; baz/quex/KILL
affects only baz.quex, etc).  The global killfile affects all newsgroups.
(There's a way to change the default names of the killfiles, but it's
more complicated than I want to get into here.  See the rn(1) man page.)

  Killfiles allow you to kill articles based on a number of criteria:
a subject line, a general subject, articles from one poster, articles
from one site, articles cross-posted from any other group, or from one
other group in particular, and articles that are follow-ups to anything at
all (that is, anything with the Re: in the subject line).  You can also
kill articles with a particular string anywhere in the article.

  This article assumes you know how to use an editor and that you have
created the directories for any local killfiles you may need.  Remember
that the name of the file is KILL, not kill or Kill; caps are important.

  The general style for building a kill line is:

		/pattern/modifiers:command

Now, that is obviously not useful to know without understanding it.  The
modifiers and commands are all explained in the rn man page, but here are 
some useful ones:
	Modifiers:
	   a: all, look through the entire article for the pattern
	   h: look through the header of the article for the pattern
	   f: look at only the 'From:' header (trn 3.0)
	   H: added in trn 3.1, this expands the f: above to any header
	Commands:
	   m   mark as unread
	   j   mark as read
	   =   show subject line
If no modifier appears before the colon, only the subject line of the
article is searched.  More than one command can be performed by using
the style:

		/pattern/modifier:command:command 
Thus, for instance, you can use j and = together to see the exact subject
lines being killed.
  It doesn't matter if you use uppercase or lowercase in the pattern; the
program will assume they're the same thing.  That is, "Test" and "test"
used in the pattern mean exactly the same thing; only one is necessary.
If you want case to matter, see the rn(1) man page, the 'c' modifier.

  The easiest way to kill a subject line is to kill it from within the
newsgroup.  When the subject line comes up that you want to kill, instead
of using 'n' to skip that article or 'k' to kill the subject for that 
session, type 'K'.  The subject line will then be entered into your KILL
file for that group.  If you want to put that line into your global KILL
file, you'll have to do that yourself.  (If you don't need it in your global
file, it's best not to put it there - global kill files slow down your news
reading a lot.  So does using the 'a' modifier; use it sparingly.)
  (I should mention here the easiest way to start editing your kill files.
Typing control-k when you're being asked to pick a newsgroup to read will
start you editing the global killfile; typing the same thing when you're
reading a newsgroup will start up the editing with the kill file for that
group.  If it doesn't exist, it will create it - including the directories
necessary.  This method is particularly recommended for people creating their
first kill file.)

  To kill a general subject, ie any 'test' messages, put in the pattern:
			/test/:j
This will kill anything with the word 'test' in the subject line.

  To kill anything that is a followup to any article, use this pattern:
			/.*Re:/:j
This kills anything beginning with Re:.

  To kill cross-posts from one particular group, say foo.bar, try this:

		/Newsgroups:.*[ ,]foo\.bar/h:j

This searches the header (the 'h' modifier) for any line containing the
string 'Newsgroups:' (which all articles do), as well as the string
'foo.bar'.  The other elements of this line are part of the regular
expression meta-language; see the ed(1) man page for more details.
(Note that all of them are necessary, particularly the '\' before the
'.' in foo\.bar.)

  To kill all cross-posts, from any group at all:

		/Newsgroups:.*,/h:j

If the Newsgroups: line has a ',' in it, it's a cross-post, and therefore
this will find it.
  Note that the above line searches the entire header, included the
Subject: line, for that pattern.  So a Subject line like:
		Subject: I hate the Newsgroups: line, don't you?
would get killed by that pattern, because it has a 'Newsgroups:' part, and
a ','.  To make it work properly, use the 'start of line' character, ^.
The ^ isn't actually there when you look at the header yourself; it just
means to look for the beginning of the line.  So, to kill cross-posts:

		/^Newsgroups:.*,/h:j

should be used instead.  (Use of the ^ is recommended if you know the
pattern you want to catch will be at the beginning of the line; it makes
searching a lot faster.)

  To kill articles from a single poster, you need to know the userid and
nodename of the poster; for this example we'll use [email-masked].

		/From: *noone@anywhere\.all/h:j

  If you're using trn 3.0 (or the appropriate version of rn, which I'm
not sure of; anyone?), it's even easier to kill articles from a particular
someone:

		/noone@anywhere\.all/f:j

  The 'f' modifier searches only the From: header, so you don't need to
say the 'From:' yourself; you also don't need to use the 'h' modifier.
(This is recommended if you have it; it should be faster to get only the
From: line and search it, rather than looking over the entire header.
Can anyone verify this, please?)

  For articles from a particular site, just remove the 'noone' from the
previous lines, and articles from the machine 'anywhere.all' will be killed.
(Note again that the \ is important.)

  You can, in trn 3.1, kill anything from a specific header line, rather than
using the h: modifier to search the entire header.  It looks like the subject
line one, with a simple change:

	   /string to junk/Hheader:j

That is, the modifier becomes 'HReferences' or 'HPath' or whatever header
it is you want to search.  (Could someone verify that I have precisely
the right syntax?)

  Now, after all that, you might suddenly find out that you killed articles
from someone whose posts you want to read even if they write about subjects
you don't want to read.  For that, you need to 'unkill' the articles by
them:
	   /From: *name of person you want to read/h:m
	   /name of person you want to read/f:m
So, if you suddenly decided you wanted to read [email-masked]'s 
postings, after having deleted them above, you would add this line:

		/From: *noone@anywhere\.all/h:m

or this, again depending on your version:
		/noone@anywhere\.all/f:m

The 'm' becomes useful suddenly.  You can substitute m for j any time
you need to, up above.  In fact, you can kill everything in a newsgroup and
only read what you want to read by using the 'm' feature, and putting this
line at the top of your KILL file:

				/^/:j

  This method has a problem, though.  Specifically, it marks even those
you've already read (really read, not just marked as read) as unread.  So,
there's another way to do it:
			/pattern/:=:M
(check the rn(1) man page for the M command).  This lists all the subjects
of the new articles, and then gives those articles to the M command.  (You
then have to type 'Y' after the M command has finished.)  (For more complete
information, please write me, and I'll forward on to you an example that was
posted by David Tamkin.)

  Finally, you can kill (or mark, of course) a particular pattern appearing
anywhere in the article, as opposed to just the Subject: line or the header:

			/pattern/a:j
			   and
			/pattern/a:m

This is useful for, for instance, killing all articles by a certain user,
followups to said user's articles, and even mention of the user by userid
and node, or, conversely, by marking all of those conversations as unread
so you can read them if they've been killed accidentally by your other
entries.

  Further information is available in the rn man page, particularly on
other available commands and modifiers.  Regular expression syntax is
in the ed(1) man page; the xrn man page gives information about the quirks
of xrn in relation to killfiles.

  I'd like to thank Jonathan Kamens and Rich Salz in particular for their
help, and everyone else who's sent in comments, criticisms, and suggestions;
keep them coming, folks!

Minor administrative note to the suggestors: Several people have suggested
that, in junking all of the articles and then marking only the desirable
ones to read, you need to use the 'r' modifier (search read articles as
well as unread).  According to the man page I read, you don't need that;
if 'm' is the first command, the 'r' is assumed.  If anyone wants to test
this and tell me it's wrong, please do.  But please only tell me if it's
wrong; I'll assume it's right until someone tells me otherwise. :-)

Leanne Phillips
"Go not unto the Elves for counsel, for they will say both yea and nay."
"Now is _not_ a good time, Keiko!" - Worf, "Disaster"
"Variety is the spice of life, and I don't want to die." - Scott Borst