Last modified: 21 Oct 1995
See reader questions & answers on this topic! - Help others by sharing your knowledge
Copyright 1995, Leanne Phillips. Permission is granted to distribute this document for personal use, as long as this copyright notice maintains. Publication of this material in printed form is forbidden without express permission of the author. Summary of changes: Oct 21: Added a caution and correct to question 15 about from line killing. Send comments, suggestions, corrections to firstname.lastname@example.org. Questions answered in this post: 1. What is a KILL file? What does it do? 2. What's the difference between a 'local' KILL file and a 'global' KILL file? 3. How can I change/edit my KILL files? 4. What's this 'THRU' line in my KILL file? 5. What is the general syntax of a KILL file entry? 6. What are the available modifiers and commands? 7. How do I kill a specific subject? 8. How do I kill postings from a specific person? 9. How do I kill articles from a specific site? 10. How do I kill followups? 11. How do I kill crossposts from a specific group? 12. How do I kill all crossposts? 13. I know how to kill posts from a specific person. How do I make it so I read _only_ the posts from a specific person? 14. How do I kill something if it appears in the article body? 15. What's different about trn? 16. There's a way in rn to select only the articles I want to read; the /pattern/:=:M method. Is there a way to do that in trn? 17. Can I select on a given thread? 18. How do I kill a given thread? 19. How do I kill the followups to a posting without killing the entire thread? 20. How do I kill something in the header that isn't in the subject line? 21. Can I kill articles without using a killfile? If so, how? 22. Where can I get more information about killfiles, regular expressions, and trn? 23. Comments from the maintainer, and credits The KILL file FAQ General information =================== 1. What is a KILL file? What does it do? A KILL file is a way of recording what articles you want to kill (skip over). Rn, trn, and strn all support killfiles. Xrn has some support for killfiles, but the support is limited; nothing in here is guaranteed to work for xrn. See the xrn man page. To kill articles, you specify criteria to use to kill them: a subject line, a part of a subject line, articles from one poster or one site, cross- posted articles, or follow-ups to other articles. You can also kill articles with a particular string in the article. 2. What's the difference between a 'local' KILL file and a 'global' KILL file? The 'global' KILL file - there is only one for each user - is applied to each newsgroup. A 'local' KILL file is applied to only one newsgroup, the one for which it is named. The global KILL file is typically in your News directory, under the name 'KILL'. Local KILL files are typically in the News directory, with more involved names. The killfile for group foo.bar would be, in the News directory, in the subdirectory foo/bar. It would still be named KILL. (Note: The capitals are important; remember that Unix is case-sensitive.) It is possible to change the locations of your KILL files, by setting the environment variables KILLGLOBAL and KILLLOCAL. The most popular method is to put all the files in one directory using the group name as the file name: KILLLOCAL="%p/Kill/%C" KILLGLOBAL="%p/Kill/Global" Where %p is the news dir (~/News) and %C is the name of the group. The global kill file is in the same directory with the name "Global". See your rn(1) or trn(1) man pages, or local support staff, for help with this if you want to use something else. A word of warning about global kill files: they slow down killfile processing, so you have to wait longer to start reading - for each newsgroup. If you don't need to put something in a global file, you shouldn't. 3. How can I change/edit my KILL files? The easiest way to add a given subject to your KILL file is to start reading the first article with that subject, and then to type 'K' (the capital is important). It will be added automatically. The subject that is added will be some of what shows up in the Subject: line, so there isn't much flexibility in it. (What is actually added is the first twenty or so characters of the Subject: line, not the whole line.) Assuming you know how to use an editor and have made that editor your default (again, see local support staff if you don't know how to do that), you can edit the KILL file directly, using the appropriate name as described above. From within rn and trn, you can add something to a killfile when typing in the kill command interactively (see below, the question about killing without using a killfile). Use the K modifier in any command (see below for explanations of modifiers). You can also start editing your KILL files from within rn and trn. When being asked to pick a newsgroup, type control-k; this will start your default editor, using your global killfile. When you're reading a particular newsgroup, typing control-k will start the editor with the local killfile for that group. If it doesn't exist, it will create it; if necessary, it will also create the directories in the path to it. 4. What's this 'THRU' line in my KILL file? The THRU line, at the top of every local KILL file, indicates how many articles have been processed by the KILL file. It's the number of the article it last processed. No articles before that number will be looked at by the KILL file again, even if you add an entry to the KILL file. You need to change the THRU line as well. Rn and trn ========== 5. What is the general syntax of a KILL file entry? The general style for building a kill line is: /pattern/modifiers:command The <pattern> is the pattern to use to pick articles. This is a regular expression, like those used in grep. You can use any case in the pattern; t won't matter, unless you use a modifier to make rn case-sensitive. The <modifiers> tell rn where to look for the pattern - the subject (default), one of the other header lines, or the entire article, as examples of the usual modifiers used. The command tells what to do with the article once it's been selected. This is usually either to kill it or to mark it unread. 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. (See below for the explanation of j and =.) 6. What are the available modifiers and commands? The modifiers and commands are all explained in the rn man page, but here are some of them: 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) c: Make the pattern case sensitive 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 Using the 'a' modifier slows down kill file processing a lot; use it sparingly. 7. How do I kill a specific subject? 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. 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. 8. How do I kill postings from a specific person? 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@example.com. /^From:.*noone@anywhere\.all/h:j This searches the entire header for any line starting with 'From:', anything at all, and then 'firstname.lastname@example.org' in it. This is faster than if the beginning-of-line character (^) had been left out: /From:.*noone@anywhere\.all/h:j If this were used, something like 'Subject: Re: Articles from: email@example.com' would also get killed. 9. How do I kill articles from a specific site? For articles from a particular site, just remove the 'noone' from the previous lines, and articles from the machine 'anywhere.all' will be killed. So, the line would be: /^From:.*@anywhere\.all/h:j 10. How do I kill followups? To kill anything that is a followup to any article, use this pattern: /Re:/:j This kills anything with 'Re:' in it. (This includes articles of the form 'Subject: X (Was Re: Y)'.) If you just want to kill the direct followups, without the changes in subject, you have to make it clear where the Re: is in the line: /^Subject: Re:/:j 11. How do I kill crossposts from a specific group? 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.) This will also match a newsgroup of foo.bar.misc; to fix it, you'd need to use some of the other techniques, described below, for unmarking things you wanted to see that were killed by other commands. 12. How do I kill all crossposts? Since a cross-posted article always has a , in the Newsgroups: line, you can use: /^Newsgroups:.*,/h:j to kill all crossposts. 13. I know how to kill posts from a specific person. How do I make it so I read _only_ the posts from a specific person? Now, after your normal kills, 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 So, if you suddenly decided you wanted to read firstname.lastname@example.org's postings, after having deleted them above, you would add this line: /^From:.*noone@anywhere\.all/h:m The 'm' becomes useful suddenly. You can substitute m for j any time you need to, in any of the commands already discussed. 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, see the example in the 'Comments and credits' section.) 14. How do I kill something if it appears in the article body? Use the a modifier to pick the pattern and kill it: /<pattern>/a:j Trn === 15. What's different about trn? Trn, being a threaded version of rn, has a few extra enhancements to deal with those. Because rn is no longer being improved, there are also extensions that have been made that could, but are not, be integrated into the base rn killfiles. One of the additions to trn is the f modifier, meaning the From: line. This line gets used so much it seemed appropriate to add a modifier in specifically for it. So, now, killing or marking articles can be done on the basis of the From: line quite easily, now: /noone@anywhere\.all/f:j /noone@anywhere\.all/f:m It looks just like the Subject: line, except with the addition of the 'f' in the modifier position. However, the `f' modifier *may* not work exactly in the same manner as the subject-based criteria if trn is configured to use thread files. Specifically, if thread files are used only the 'Real Name' portion of the from line can be guaranteed to be matched. To ensure that your match will work on an address, you need to change the above lines to: /noone@anywhere\.all/Hfrom:j /noone@anywhere\.all/Hfrom:m 16. There's a way in rn to select only the articles I want to read; the /pattern/:=:M method. Is there a way to do that in trn? Yup. You do it in essentially the same way, but you replace the :=:M with :+, like this: /noone@anywhere\.all/f:+ 17. Can I select on a given thread? Just type 'T+' while reading any thread or while selecting a thread in the selector (it's similar to using 'K' on an article, except it selects). This will tell trn to select the entire thread by putting thread-oriented selection commands in the kill file that look like this: <email@example.com> T+ You can also use 'T+' on a search command, if for instance you wish to select a thread that starts with a particular subject and keep on seleting it even if the subject changes: /test/:T+ 18. How do I kill a given thread? Just type Tj while reading the thread or when the thread is the current item in the thread selector. Use this instead of 'K' to kill only this thread and not other threads that have a similar subject. It also puts thread-oriented kill commands in kill file that have 'Tj' instead of 'T+' on the end. You can also use 'Tj' on a search command, if you wish to kill a particular subject and all associated subjects in the thread: /test/:Tj 19. How do I kill the followups to a posting without killing the entire thread? Use the ',' command, intead of the 'j' command of rn. 20. How do I kill something in the header that isn't in the subject line? 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. An example is crossposts from a particular newsgroup: /foo\.bar/Hnewsgroups:j or from all newsgroups: /,/Hnewsgroups:j Using this syntax will be faster than the method used in rn to find a particular header, as well as simplifying the necessary pattern. 'Catchall' ========== 21. Can I kill articles without using a killfile? If so, how? Sure can. Just type in the appropriate command while reading the newsgroup. You can also do it from the thread selector. For instance, if you're selecting threads and decide that someone's posted too much, you can just type: /noone@anywhere\.all/f:j Any of the other commands will also work. 22. Where can I get more information about killfiles, regular expressions, and trn? Regular expressions are used in ed, a line editor seldom used on Unix by most people. The man page for ed(1) explains the various regular expression syntax rules. Killfiles and trn are both described in the trn(1) man page. Some sites may not have this installed; if not, please see your local support staff to see if it is possible to get it installed. A post has been written about trn; occasionally the author posts pointers to the ftp location in news.software.readers. This is recommended for people new to using trn. For any of the trn extensions, it is highly recommended that you check the man page on your system. They weren't added until version 3.0, most of them; some weren't added until later. If you have an earlier version, you should see if an upgrade is possible. 23. Comments from the maintainer, and credits 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! Wayne Davison (writer of trn) helped in the rewrite in substantial ways; some of that included writing a couple sections that I was particularly unsure about. ==== 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, you don't need that; if 'm' is the first command, the 'r' is assumed. ==== Example of killing all articles, and then unkilling those for a specific topic or person (this example was provided by David W. Tamkin): Let's say that your kill file has processed through article 1000 and there are nine new articles now. You have a kill file that looks like this: THRU 1000 /bear/:=:M /^/j Note the use of :=:M instead of m. Now, articles 1002, 1003, and 1006 have "bear" in their subjects. The = operator in /bear/:=:M will allow rn to use that line only on unread articles. Thus, 1002, 1003, and 1006 get marked for return. Next, /^/j junks all articles from 1001-1009. Then you type Y (yank articles Marked for return). Alternatively, if you do leave the newsgroup and come back to it, your kill file now looks like this: THRU 1009 /bear/:=:M /^/j Because the kill file has already operated on articles 1-1009, it will not run = (and thus it won't get to the M) nor j on 1002, 1003, and 1006. You can hit <space> or y and start reading them. Without the :=: trick, M or m will operate on all articles, read or unread. ==== Additions to the example, for trn 3.x: The rn example uses: THRU 1009 /bear/:=:M /^/j While this works in later versions of trn 3.x, the best way to do this in trn 3.x is to put the following into your kill file: /bear/:+ *X The '*X' command kills all non-selected articles in the group. In rn, M and m both work on both read and unread articles. This is not true in trn 3.x, for M: it only works on unread articles. What this _means_ is that, when using the :=:M trick, you can actually remove the :=:, and just use the M. ==== Leanne Phillips -- Leanne We have tasted fear./We have breathed in grief. We have swum in hate./We have witnessed strength. - Last verse of my poem in memoriam of the September 11 tragedy.