KNEWS(1) | General Commands Manual | KNEWS(1) |
knews - Karl's threaded newsreader for X
knews [ options ]
Knews is a threaded newsreader with an X Window interface that uses NNTP to get news. This manual is intended to explain things that are not apparent from the interface, so if you just want to get started, you probably don't need to read this.
In addition to the standard X Toolkit options knews accepts the following options, which set various X resources. For an explanation of what the resources do, see the sections on resources and the config file.
You don't have to type out the entire name of the option, as long as it is unique.
-nntpServer hostname
+/-bell
+/-separate
+/-active
+/-descriptions
+/-fill
+/-keep
-install
-visual class -depth bits
+/-icase
+/-images
-ncols number
-version
The articles in a thread are displayed as nodes in a tree. A border inside a node indicates that the article is unread, a border outside a node indicates that the article is 'tagged', and a dashed branch in the tree indicates a change of subject. By default, you can scroll around in the tree with the middle mouse button. An empty box in the tree indicates a 'fake' article, i.e. one that has expired on the server, has not yet arrived or was posted in a different newsgroup.
Articles in the thread tree can be tagged with the third mouse button. Clicking on a subject with the third mouse button causes the unread articles in that thread to be tagged in preorder (depth first). Once you have tagged the articles, you can mark then read/unread, save or pipe them in order, and so on.
Knews supports a simple form of clicking on URLs. It works by selecting a piece of text in the article text window and clicking on it with the middle mouse button. If there is no selection, knews will make a crude guess as to what the URL might be. The resource Knews.urlCommand must be set for this to work, see the section on X resources for details.
The all groups list and the kill list can be reordered by drag'n'drop. The default translation is the second mouse button.
You may abort the interaction with the NNTP server at any time. This causes the connection to be closed, and a new one to be opened. Note that this puts a certain load on the server.
Knews is capable of threading groups in the background while you are e.g. reading another group. To do this you click on one or more groups in the group list with the right mouse button. Knews then opens a second connection to the server and uses it to thread the selected groups. The status of the thread ahead is shown in the group list as a character:
- The group is scheduled for thread ahead. * The group is being threaded. + The group has been threaded.
The regular expressions used by knews are POSIX.2 extended regular expressions, similar to those used by egrep(1), by default case insensitive. Note that these are not anchored by default, so that e.g. the expression 'alt' will match any string containing the three character sequence 'alt'. See Henry Spencer's excellent man-page for details, regex(7).
Article heads and bodies may be searched for regular expressions. Searching applies to read or unread articles as specified with the 'only unread' toggle, and starts with the 'next' article. The newsgroup list may also be searched.
Note: the 'Stop' button stops the search as soon as the current article has been retrieved from the server. This is different from 'Abort' which requires closing and reopening the connection to the server.
It is also possible to use XPAT searching, if the nntp server supports it. To do this, you fill in the 'Header' field on the search popup with the header you're interested in (e.g. 'Content-Type') and the wildcard field with a wildcard expression. Pressing 'Submit' then sends this to the server, and after a while it responds with a list of matching articles. You can then move between those articles with the 'Next' and 'First' buttons on the search popup.
In most places where knews uses file names, such as the save/pipe popup, the save/pipe action procedures, and the newsrcFile options etc, ~ is expanded to $HOME, and the following %'s are expanded:
%% % %n The name of the current group. %N The name of the current group, capitalized. %g The name of the current group, slashed. %G The name of the current group, capitalized and slashed. %s The name of the nntp server. %p The number of the port the server listens to. %a The number of the currently selected article.
Slashed means that the dots are replaced with slashes. Note that if you save an entire thread to a file continaing %a, the number will not change with the article.
The kill file may be used to 'kill' (mark read) or 'hot' (mark interesting) articles, subjects and threads based on different criteria.
Each line in the kill file specifies an entry according to the following syntax:
(F)(S)(A)[Col] || Group regexp || Field expression
(F)
´M' The 'Message-ID:' header, by far the most efficient. ´S' The 'Subject:' header. ´F' The 'From:' header. ´X' The 'Xref:' header.
Note that 'X' only works if the 'Xref:' header is included in the overview files from the server. Also note that the 'Re: ' prefix is not considered part of the subject.
Entries applying to a message-id automatically expire when the relevant article has expired.
(S)
´A' This article. ´S' All articles with the same subject. ´T' The entire thread. ´t' The subthread starting with this article.
(A)
´K' Kill, which means mark read. ´H' Hot, which means mark interesting.
[col]
||
Group regexp
Field expression
To see what articles were killed: when you have read all unread articles, or marked them read, use the 'mark unread, killed' feature on the misc menu.
When a kill rule is applied, hot articles are not killed. Since the entries in the kill file are processed in order, it is possible to put kills at the beginning, so that the articles are killed before they have a chance to become hot.
There is one global kill file (~/.knews/.kill-%s by default) and one kill file per group (~/.knews/%s/%g/KILL by default). The rules in the global kill file are applied before the per-group kill file.
Knews has internal support for content-types text/plain, message/rfc822, message/partial, multipart/mixed and multipart/digest. For other types, knews will look for a mailcap entry for that type (see mailcap(5)). If one is found, a clickable line will be inserted in the article text window that is used to start the viewer. If there is no viewer, then if the type is a subtype of text, knews will display it, if it is a subtype of multipart, knews will treat it as multipart/mixed, and otherwise knews will give the user opportunity to 'Save or Pipe'.
Mailcap files are found via the environment variable MAILCAPS, which is a colon separated list of path names. If this variable is not set, a default list of
$HOME/.mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap
will be used. Note that all files found will be merged to produce the mailcap database.
As a hack around miss/over designed mailcap files, knews will ignore entries for text/plain and multipart/mixed.
The following resources determine how knews will display an article of type text/plain with a particular charset:
Knews.charset.headerFont Knews.charset.bodyFont Knews.charset.quoteFont Knews.charset.listFont Knews.charset.treeFont Knews.charset.encoding Knews.charset.headEncHack
The header, body and quote fonts are used for displaying headers, ordinary text and quoted text in the article window. Knews also has some support for encoded 16-bit charsets, this is specified with the encoding resource. Legal values for this are:
utf-7 The encoding specified for unicode in rfc 1642. 16-bit Straight 16-bit network byte order. hz-gb-2312 The encoding for chinese described in rfc 1842. ksc-5601 Also called iso-2022-kr, described in rfc 1557. big5 Another encoding for chinese.
Note that due to the authors non-existent understanding of asian languages these encodings have not been extensively tested. Lots of guess work here.
For every newsgroup it is possible to specify a default charset (see the section on THE CONFIG FILE). The fonts for this charset will be used to display articles without proper MIME-headers. Also, the listFont and treeFont (which may not be encoded) will be used in the thread list and article tree, respectively.
When specifying an encoded charset as defaultCharset, it may be desirable to still assume that headers are ascii. This may be accomplished by setting the 'headEncHack' resource listed above, and setting the headerFont to an ascii (superset) font.
Unless the config option assemblePartials is False (see the section on THE CONFIG FILE), when knews encounters an article of type message/partial, it will be rememberered. When all the parts have been seen, a notice will be popped up offering to assemble the parts.
There is also an entry on the misc menu that allows a number of articles to be tagged and processed to look for message/partial articles.
When you post an article containing 8 bit characters that doesn't have a Content-Type header, knews will add such a header with charset equal to the value of the defaultCharset config option. Also, when quoting articles with Content-Type: text/plain and charset equal to the defaultCharset, knews will decode the article before quoting. In both these contexts, the charset iso-8859-1 will be used if defaultCharset is not set.
Knews supports a rather obscure mechanism for communicating with an arbitrary program instead of an nntp server. Using knewsd(1), this can be used for reading news (in)directly from the spool dir, or even mail folders if they are in the correct format. This is how it works: If the nntp server is given as #str, where str is an arbitrary string not containing white space or the characters '/', '.' or '*', knews finds the value of the resource Knews.#str and tries to execute that program. The program has its standard input and output connected to knews. If you use this resource setting:
Knews.#spool: knewsd -spool /var/spool/news \
-active /usr/local/news/active
with the appropriate paths for your system, you can read the spool directory by specifying the nntp server as '#spool' in e.g. the connect dialogue. This could easily be used to read mh(1) style mail folders too.
There are a number of X resources that affect the behaviour and appearance of knews. Most widgets in the widget hierarchy has resources named background , foreground , shadowWidth , and so on. For more information see the application defaults file Knews.ad included in the distribution. To get a feeling for resources, try editres(1).
Knews contains a small xpm-file to pixmap converter, so it is possible to use settings like e.g.
Knews*backgroundPixmap: ~/pixmaps/texture.xpm
Knews.nntpServer
Knews.editCommand
Knews.editCommand: xemacs +%i %s Knews.editCommand: emacs +%i %s Knews.editCommand: xterm -e vi +%i %s
%s stands for the name of a temporary file, and %i for the line where editing should begin. The default value of this resource is a compile time option.
Knews.urlCommand
Knews.printCommand
Knews.needsTerminal Knews.copiousOutput
Knews.needsTerminal: exec xterm -e /bin/sh -c '%C' Knews.copiousOuptut: exec xterm -e /bin/sh '(%C) | less'
Knews.mimeTypes
image/jpeg jpg jpeg image/gif gif application/postscript ps
This is used to guess the Content-Type of attachments.
Knews.bell
Knews.sortGroups
Knews.separateWindows
Knews.stderrTimeout
Knews.showCache
Knews.mailName
Knews.mailName: FirstName.LastName
Note that your userid will still be used for the 'Sender' header if necessary.
Knews.useIcon
Knews.confirmQuit
Knews.confirmCatchup
Knews.confirmQuitGroup
Knews.visualClass class Knews.visualDepth bits
Knews.installCmap
Knews.inlineImages
Knews.nCols
Knews.colorHack
The following resources can be used to change various color, font and geometry settings:
Knews*grouplist.preferredLines Knews*grouplist.preferredColumns
Knews*text.preferredLines Knews*text.preferredColumns
Knews*ArtTree.nodeColumns
Knews*rubberColor
Knews.headerColor Knews.bodyColor Knews.quoteColor
Knews*innerColor Knews*innerDashed
Knews*outerColor Knews*outerDashed
Knews*ScrList.font
Knews.defaultHotColor
Some miscellaneous resources:
Knews.icaseRegexps
Knews.readActiveFile Knews.retrieveDescriptions Knews.fillNewsrcFile Knews.showNumberLines Knews.keepThreadInfo Knews.checkForNewGroups
Knews.newsrcTemplate Knews.oldNewsrcTemplate
Knews.killFileTemplate
Knews.groupKillFileTemplate
Knews.configFile
Knews.configNntpServer Knews.configPostingAgent
If the configPostingAgent is set this will be used for the postingAgent config option for the configNntpServer.
Knews.generatePath
Knews.autoSubscribe
news.answers:\nnews.newusers.questions:\n
Knews.bogusFileSystem
When knews connects to an NNTP server it reads a configuration file that will affect its behavior. This file is by default called ~/.knews/config-%s where %s expands to the name of the server, but this may be changed with the Knews.configFile resource.
The syntax of the config file is the same as for X resource files. When knews can't find the configure file, a new one will be created containing some default settings and a few examples settings that should be sufficient to clue you in as to how it works.
It is possible to used #include statements in the config file to include other files. Relative pathnames are considered relative to the current working directory, which for knews is always $HOME. ~ pathnames are not handled in #includes (if you want that you have to hack Xlib).
The following global (i.e. per server) options exist.
newsrcFile oldNewsrcFile
The default values for these are the values of the resources Knews.newsrcTemplate and Knews.oldNewsrcTemplate, whose default values are ~/.newsrc-%s and ~/.oldnewsrc-%s, respectively.
For a way of automatically using the standard file ~/.newsrc for a specific server, see the resource Knews.configNntpServer above.
killFile
cacheDir
readActiveFile
retrieveDescriptions
descriptionsFile
fillNewsrcFile
tryListActive
checkForNewGroups
threadAheadGroups
saveThreadInfo
rescanTimeout
groupNameColumns
askHowMany
postingAgent
Also see the resource Knews.configPostingAgent above.
authInfoPass authInfoUser
Here is an example of some settings that will improve things over a slow network connection:
readActiveFile: False retrieveDescriptions: False descriptionsFile: ~/.knews/cache-%s/descriptions fillNewsrcFile: True
but note that you will probably want to read the active file and group descriptions at least the first time you connect to a server.
The following resources may be set on a per group basis; they should be prefixed with the name of the group they apply to.
keepThreadInfo
*keepThreadInfo: Subscribed
to keep thread info for all subscribed groups. The default value for this option is 'Subscribed' if the resource Knews.keepThreadInfo is set to True and 'False' otherwise.
cacheAheadSize cacheTrailSize
sortThreads
subject Alphabetically by the first subject in the thread. size Number of unread articles in the thread. full-size Number of articles in the thread. hot Number of hot articles in the thread. date The date of the first unread article. average-date The average date of unread articles in the thread. author Alphabetically by the first From: line in the thread. none No sorting.
All these values may be prefixed with a minus sign to indicate a reversal of the order, or a plus sign which is a no-op. The default value is none.
expireKills
attribution
In article %m,\n %f writes:
where \n is a newline. The following %'s are expanded:
%% % %d The date of the quoted article in the form 01 Jan. %f The From: line of the article replied to. %i The initials of the previous poster. %I The initials of the previous poster, capitalized. %m The message-id of the article replied to. %n The current newsgroup. %r The real name of the previous poster. %s The subject of the quoted article. %t The time of the quoted article in the form 18:24:02. %w The week day of the quoted article. %y The year of the quoted article.
Thus '%w, %d %y %t GMT' will give the date in standard rfc822 format.
fullName
headerFormat
Subject:Newsgroups:Followup-To:Reply-To:\ Content-Description:Date:Organization:From:
If the name of the header starts with a captial letter (From: as opposed to from:), knews will decode rfc1522 encoded words encountered in this header. (Those are the weird things that look like =?iso-8859-1?q?stuff_here?=.) Encoded 16-bit charsets are not decoded in headers yet.
assemblePartials
quoteRegexp
^[ \t]*[:>|]
which matches lines beginning with an arbitrary amount of white space (the \t denotes a tab, note that \t won't actually work) followed by a >, : or | character.
You will probably want to have this expression anchored...
defaultCharset
Also, rfc1522 encodings of this charset in the From and Subject header will be decoded when displayed in the article tree and the thread list. In this case, iso-8859-1 is the default.
showNumberLines
signatureFile
subjectColumns
quoteString quoteQuoteString
postedAndMailed
distribution
fullHeader
replyTo
organization
processXrefs
Note that this only applies to subscribed groups, and will only work if the server's overview file contains the Xref: headers.
extraHeaders
*extraHeaders: Content-Type: text/plain; charset=iso-8859-1
followupHeaders
*followupHeaders: X-Comment-To: %r
uuDir
uuProgram
Here is an example of how to set different signatures for different newsgroups:
swnet*signatureFile: ~/.signature-svensk de*signatureFile: ~/.signature-deutsch *linux*signatureFile: ~/.signature-linux
The first sets the file ~/.signature-svensk for all groups in the swnet hierarchy, the second one sets the file ~/.signature-deutsch for the de hierarchy, and the last one sets the file ~/.signature-linux for any group containing linux as a component (not merely a substring). The file ~/.signature will be used for all other groups.
Knews defines a number of actions that can be tied to keys and buttons via translations. For the default translations, see the application defaults file.
do-the-right-thing()
kill-append(field, scope [, color]) kill-prepend(field, scope [, color])
Valid values for the 'field' parameter are "From", "Subject" and "Message-Id", and valid values for 'scope' are "Thread", "Subthread" and "Subject". If the color parameter is present, the entry added is a hot-entry with that color, otherwise it is a kill-entry.
It is probably a good idea to use these with field = "message-id", since message-id kills are very efficient and expire with the corresponding article.
popup-kill([group])
mime-hack(content-type, content-transfer-encoding)
The default key-bindings have the following:
ctrl-J mime-hack(image/jpeg, uue) ctrl-G mime-hack(image/gif, uue) ctrl-P mime-hack(image/png, uue)
tree-up(arg) tree-down(arg) tree-left(arg) tree-right(arg) tree-down-right(arg)
list-up(arg) list-down(arg)
enter-mode() exit-mode()
tree-or-list-up(arg) tree-or-list-down(arg) tree-left-or-exit-mode(arg) tree-right-or-enter-mode(arg)
read-article(arg)
view-thread(arg)
followup(arg) reply(arg) followup-and-reply(arg) post-new()
uudecode() clear-tagged() mark-read-article() mark-read-subject() mark-read-thread() mark-read-subthread() mark-read-to-current() mark-read-all() mark-read-tagged() mark-read-non-tagged() mark-read-cold() mark-unread-article() mark-unread-subject() mark-unread-thread() mark-unread-subthread() mark-unread-all() mark-unread-tagged() mark-unread-killed()
pipe(command, parts [, scope]) save(filename, parts [, scope])
tag-thread([all]) tag-subject([all])
untag-thread() untag-subject()
tag-hot()
catchup() unsubscribe() subscribe()
change-size(pixels)
schedule-thread-ahead()
popup-find-group()
The X interface of knews is built with its own widget set plus the Layout Widget. You are welcome to use it if you like. Unfortunately there is no documentation.
This software is Copyright 1995, 1996 by Karl-Johan Johnsson.
The threading algorithm was inspired from trn. Thanks to Wayne Davison.
Knews uses Keith Packard's Layout Widget.
The distribution includes Henry Spencer's regex package for environments that do not have the POSIX.2 regular expression functions.
Thanks to Mattias Jonsson for ardent testing.
From the gif89a spec: "The Graphics Interchange Format(c) is the Copyright property of
CompuServe Incorporated. GIF(sm) is a Service Mark property of
CompuServe Incorporated."
Any problems are of course entirely due to me.
egrep(1), knewsd(1), trn(1), uudecode(1), mailcap(5), newsrc(5), regex(7).
If the server doesn't support XOVER, threading will be very slow.
The uudecode function may not recognize or correctly handle all cases.
The dithering algorithm used for grayscale images and color gifs (essentially 'closest match') is very poor.
AUTHINFO SIMPLE doesn't work for the second connection.
When the last article in a group has been cancelled, the number of unread articles may be incorrect.
Send bug reports to kjj@matematik.su.se
1996 |