tknewsbiff(1)
TKNEWSBIFF(1) USER COMMANDS TKNEWSBIFF(1)
NAME
tknewsbiff - pop up a window when news appears
SYNOPSIS
tknewsbiff [ server or config-file ]
INTRODUCTION
tknewsbiff pops up a window when there is unread news in
your favorite newsgroups and removes the window after you've
read the news. tknewsbiff can optionally play a sound,
start your newsreader, etc.
SELECTING NEWSGROUPS
By default, the configuration file ~/.tknewsbiff describes
how tknewsbiff behaves. The syntax observes the usual Tcl
rules - however, even if you don't know Tcl, all but the
most esoteric configurations will be obvious.
Each newsgroup (or set of newsgroups) to be watched is
described by using the "watch" command. For example:
watch dc.dining
watch nist.*
watch comp.unix.wizard -threshold 3
watch *.sources.* -threshold 20
For each newsgroup pattern, any newsgroup that matches it
and which you are subscribed to (according to your newsrc
file) is eligible for reporting. By default, tknewsbiff
reports on the newsgroup if there is at least one unread
article. The "-threshold" flag changes the threshold to the
following number. For example, "-threshold 3" means there
must be at least three articles unread before tknewsbiff
will report the newsgroup.
If no watch commands are given (or no configuration file
exists), all groups which are subscribed to are watched.
To suppress newsgroups that would otherwise be reported, use
the "ignore" command. For example, the following matches
all comp.* and nist.* newgroups except for nist.posix or .d
(discussion) groups:
watch comp.*
watch nist.*
ignore nist.posix.*
ignore *.d
Last change: 1 January 1994 1
TKNEWSBIFF(1) USER COMMANDS TKNEWSBIFF(1)
The flag "-new" describes a command to be executed when the
newsgroup is first reported as having unread news. For
example, the following lines invoke the UNIX command "play"
to play a sound.
watch dc.dining -new "exec play /usr/local/sounds/yumyum.au"
watch rec.auto* -new "exec play /usr/local/sounds/vroom.au"
You can cut down on the verbosity of actions by defining
procedures. For example, if you have many -new flags that
all play sound files, you could define a sound procedure.
This would allow the -new specification to be much shorter.
proc play {sound} {
exec play /usr/local/sounds/$sound.au
}
watch dc.dining -new "play yumyum"
watch rec.auto* -new "play vroom"
As an aside, you can put an "&" at the end of an "exec" com-
mand to get commands to execute asynchronously. However,
it's probably not a good idea to do this when playing sound
files anyway.
"newsgroup" is a read-only variable which contains the name
of the newsgroup that is being reported. This is useful
when the action is triggered by a pattern. For example, the
following line could run the newsgroup name through a speech
synthesizer:
watch * -new {
exec play herald.au
exec speak "New news has arrived in $newsgroup."
}
The flag "-display" describes a command to be executed every
time the newsgroup is reported as having unread news. The
special command "display" is the default command. It
schedules $newsgroup to be written to tknewsbiff's display
when it is rewritten. For example, by explicitly providing
a -display flag that omits the display command, you can dis-
able the display of newsgroups that are already reported via
-new.
Last change: 1 January 1994 2
TKNEWSBIFF(1) USER COMMANDS TKNEWSBIFF(1)
watch dc.dining -new {exec play yumyum.au} -display {}
If you want to execute an action repeatedly and still
display the newsgroup in the default manner, explicitly
invoke the display command via the -display flag. For exam-
ple:
watch *security* -display {
exec play red-alert.au
display
}
Actions associated with the -new and -display flags are exe-
cuted only once for each matching newsgroup. The command
executed is the one associated with the first pattern in the
configuration file that matches and observes the given
threshold.
Any command that is simply listed in the configuration file
is executed each time before the update loop in tknewsbiff.
The reserved (but user-defined) procedure "user" is run
immediately after the newsgroups are scheduled to be written
to the display and before they are actually written.
For example, suppose unread articles appear in several
rec.auto groups and you play the same sound for each one.
To prevent playing the sound several times in a row, make
the -new command simply set a flag. In the user procedure,
play the sound if the flag is set (and then reset the flag).
The user procedure could also be used to start a newsreader.
This would avoid the possibility of starting multiple news-
readers just because multiple newsgroups contained unread
articles. (A check should, of course, be made to make sure
that a newsreader is not already running.)
MORE VARIABLES
The following example lines show variables that can affect
the behavior of tknewsbiff
set delay 120
set server news.nist.gov
set server_timeout 60
set newsrc ~/.newsrc
set width 40
set height 20
set active_file /usr/news/lib/active
Last change: 1 January 1994 3
TKNEWSBIFF(1) USER COMMANDS TKNEWSBIFF(1)
tknewsbiff alternates between checking for unread news and
sleeping (kind of like many undergraduates). The "delay"
variable describes how many seconds to sleep.
The "server" variable names an NNTP news-server. The
default is "news". The "server" variable is only used if
the "active_file" variable is not set.
The "server_timeout" variable describes how how many seconds
to wait for a response from the server before giving up. -1
means wait forever or until the server itself times out.
The default is 60 seconds.
The "newsrc" variable describes the name of your .newsrc
file. By default, tknewsbiff looks in your home directory
for a newsrc file. A server-specific newsrc is used if
found. For example, if you have set server to
"cubit.nist.gov", then tknewsbiff looks for ~/.newsrc-
cubit.nist.gov. (This is the Emacs gnus convention - which
is very convenient when you read news from multiple
servers.) If there is no server-specific newsrc, tknewsbiff
uses ~/.newsrc.
The "width" variable describes the width that tknewsbiff
will use to display information. If any newsgroup names are
long enough, they will be truncated so that the article
counts can still be shown. You can manually resize the win-
dow to see what was truncated. However, if your configura-
tion file sets the width variable, the window will be
restored to that size the next time that tknewsbiff checks
for unread news and updates its display.
The "height" variable describes the maximum height that
tknewsbiff will use to display information. If fewer news-
groups are reported, tknewsbiff will shrink the window
appropriately. You can manually resize the window but if
your configuration file sets the height variable, the window
will be restored to that size the next time that tknewsbiff
checks for unread news and updates its display.
The "active_file" variable describes the name of the news
active file. If set, the active file is read directly in
preference to using NNTP (even if the "server" variable is
set). This is particularly useful for testing out new con-
figuration files since you can edit a fake active file and
then click button 2 to immediately see how tknewsbiff
responds (see BUTTONS below).
If the environment variable DOTDIR is set, then its value is
used as a directory in which to find all dotfiles instead of
from the home directory. In particular, this affects the
tknewsbiff configuration file and the .newsrc file (assuming
Last change: 1 January 1994 4
TKNEWSBIFF(1) USER COMMANDS TKNEWSBIFF(1)
the newsrc variable is not set explicitly).
WATCHING DIFFERENT NEWS SERVERS
To watch multiple servers, run tknewsbiff multiple times.
(Since you need different .newsrc files and the servers have
different newsgroups and article numbers anyway, there is no
point in trying to do this in a single process.)
You can point tknewsbiff at a different server with an
appropriate argument. The argument is tried both as a con-
figuration file name and as a suffix to the string
"~/.tknewsbiff-". So if you want to watch the server "kid-
ney", store the tknewsbiff configuration information in
~/.tknewsbiff-kidney". The following two commands will both
use that configuration file.
tknewsbiff kidney
tknewsbiff ~/.tknewsbiff-kidney
In both cases, the actual server to contact is set by the
value of the server variable in the configuration file.
If no configuration file is found, the argument is used as
the server to contact. This allows tknewsbiff to be run
with no preparation whatsoever.
If the argument is the special keyword "active" (or ends in
"/active"), it is used as the name of an active file. This
is in turn used to initialize the variable "active_file" so
that tknewsbiff reads from the active file directly rather
than using NNTP.
Creating your own active file is a convenient way of testing
your configuration file. For example, after running the
following command, you can repeatedly edit your active file
and trigger the update-now command (either by pressing but-
ton 2 or setting the delay variable very low) to see how
tknewsbiff responds.
The active file must follow the format of a real active
file. The format is one newsgroup per line. After the
newsgroup name is the number of the highest article, the
lowest article. Lastly is the letter y or m. m means the
newsgroup is moderated. y means posting is allowed.
WINDOW
When unread news is found, a window is popped up. The win-
dow lists the names of the newsgroups and the number of
Last change: 1 January 1994 5
TKNEWSBIFF(1) USER COMMANDS TKNEWSBIFF(1)
unread articles in each (unless suppressed by the -display
flag). When there is no longer any unread news, the window
disappears (although the process continues to run).
BUTTONS
Button or key bindings may be assigned by bind commands.
Feel free to change them. The default bind commands are:
bind .list <1> help
bind .list <2> update-now
bind .list <3> unmapwindow
By default button 1 (left) is bound to "help". The help
command causes tknewsbiff to pop up a help window.
By default, button 2 (middle) is bound to "update-now". The
update-now command causes tknewsbiff to immediately check
for unread news. If your news server is slow or maintains a
very large number of newsgroups, or you have a large number
of patterns in your configuration file, tknewsbiff can take
considerable time before actually updating the window.
By default, button 3 (right) is bound to "unmapwindow". The
unmapwindow command causes tknewsbiff to remove the window
from the display until the next time it finds unread news.
(The mapwindow command causes tknewsbiff to restore the win-
dow.)
As an example, here is a binding to pop up an xterm and run
rn when you hold down the shift key and press button 1 in
the listing window.
bind .list <Shift-1> {
exec xterm -e rn &
}
Here is a similar binding. However it tells rn to look only
at the newsgroup that is under the mouse when you pressed
it. (The "display_list" variable is described later in this
man page.)
bind .list <Shift-1> {
exec xterm -e rn [lindex $display_list [.list nearest %y]] &
}
Last change: 1 January 1994 6
TKNEWSBIFF(1) USER COMMANDS TKNEWSBIFF(1)
OTHER COMMANDS AND VARIABLES
Built-in commands already mentioned are: watch, ignore,
display, help, update-now, unmapwindow, and mapwindow.
Any Tcl and Tk command can also be given. In particular,
the list of newsgroups is stored in the list widget ".list",
and the scroll bar is stored in the scrollbar widget
".scroll". So for example, if you want to change the fore-
ground and background colors of the newsgroup list, you can
say:
.list config -bg honeydew1 -fg orchid2
These can also be controlled by the X resource database as
well. However, the configuration file allows arbitrarily
complex commands to be evaluated rather than simple assign-
ments.
Certain Tcl/Tk commands can disrupt proper function of
tknewsbiff. These will probably be obvious to anyone who
knows enough to give these commands in the first place. As
a simple example, the program assumes the font in the list
box is of fixed width. The newsgroups will likely not align
if you use a variable-width font.
The following variables are accessible and can be used for
esoteric uses. All other variables are private. Private
variables and commands begin with "_" so you don't need to
worry about accidental collisions.
The array "db" is a database which maintains information
about read and unread news. db($newsgroup,hi) is the
highest article that exists. db($newsgroup,seen) is the
highest article that you have read.
A number of lists maintain interesting information.
"active_list" is a list of known newsgroups. "seen_list" is
a list of newsgroups that have been seen so far as the -new
and -display flags are being processed.
"previous_seen_list" is "seen_list" from the previous cycle.
"ignore_list" is the list of newsgroup patterns to ignore.
"watch_list" is the list of newsgroup patterns to watch.
"display_list" is the list of newsgroup will be displayed at
the next opportunity.
UPDATING YOUR FILES
tknewsbiff automatically rereads your configuration file
each time it wakes up to check for unread news. To force
tknewsbiff to reread the file immediately (such as if you
Last change: 1 January 1994 7
TKNEWSBIFF(1) USER COMMANDS TKNEWSBIFF(1)
are testing a new configuration or have just modified your
newsrc file), press button 2 in the display (see BUTTONS
above).
CAVEATS
tknewsbiff defines the number of unread articles as the
highest existing article minus the highest article that
you've read. So if you've read the last article in the
newsgroup but no others, tknewsbiff thinks there are no
unread articles. (It's impossible to do any better by read-
ing the active file and it would be very time consuming to
do this more accurately via NNTP since servers provide no
efficient way of reporting their own holes in the news-
groups.) Fortunately, this definition is considered a
feature by most people. It allows you to read articles and
then mark them "unread" but not have tknewsbiff continue
telling you that they are unread.
UNWARRANTED CONCERNS
Your news administrator may wonder if many people using
tknewsbiff severely impact an NNTP server. In fact, the
impact is negligible even when the delay is very low. To
gather all the information it needs, tknewsbiff uses a sin-
gle NNTP query - it just asks for the active file. The NNTP
server does no computation, formatting, etc, it just sends
the file. All the interesting processing happens locally in
the tknewsbiff program itself.
BUGS
The man page is longer than the program.
SEE ALSO
"Exploring Expect: A Tcl-Based Toolkit for Automating
Interactive Programs" by Don Libes, O'Reilly and Associates,
January 1995.
AUTHOR
Don Libes, National Institute of Standards and Technology
Last change: 1 January 1994 8
Man(1) output converted with
man2html