\input texinfo  @c -*-texinfo-*-

@settitle Using IRC-mode
@setfilename irc
@synindex vr fn

@ifinfo
This file documents the use of IRC-mode, a GNU Emacs client for the
Internet Relay Chat.

Copyright (C) 1990 David C Lawrence

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

@ignore
Permission is granted to process this file through TeX and print the
results, provided the printed document carries copying permission
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).

@end ignore
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by David C Lawrence or the Free Software Foundation.
@end ifinfo

@setchapternewpage odd

@titlepage
@center @titlefont{Using IRC-mode}
@sp 2
@center David C Lawrence
@sp 3
@center last updated 7 February 1990
@sp 1
@center for IRC-mode version 2.1
@page


@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1990 David C Lawrence
@sp 2

This is Edition 1.0 Beta of @cite{Using IRC-mode}, for IRC-mode version 2.1.
@*

@sp 2
Published by David C Lawrence @*
76 1/2 13th ST @*
Troy NY 12180-4205 USA @*

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by David C Lawrence or the Free Software Foundation.
@end titlepage

@node Top, Preface, (dir), (dir)

@ifinfo
This file documents IRC-mode, a client for the Internet Relay Chat.
IRC-mode runs in GNU Emacs.
@end ifinfo

@menu
* Preface::           An overview of the client and acknowledgements.
* Copying::           Your right to copy and distribute IRC-mode.
* Getting Started::   A basic introduction to starting IRC-mode.
* Sending Messages::  How to talk to other people.
* Commands::          The /COMMANDs.
* Display::           Scrolling and popping up of IRC-mode buffers.
* Problems::          Common problems and how to report bugs.
* Glossary::          A summary of some possibly unfamiliar terms.
* Index::             Cross-references to the text.
@end menu

@node Preface, Acknowledgements, Top, Top
@unnumbered Preface
@cindex overview

This is IRC-mode Version 2.1, a GNU Emacs interface to the Internet
Relay Chat.  The IRC-mode client offers an alternative to the C client.
It is not meant to be compatible with the C client in appearance, though
with a few exceptions the command set is the same.

IRC-mode has many features, include the following:

@itemize @bullet
@item
easily directed messages to people or channels
@item
audible signals for various messages and events
@item
all interaction in a single buffer
@item
scroll back capability
@item
command and message history
@item
recognition of abbreviated nicknames
@item
command aliasing
@item
automatic restart
@item
time stamps
@item
and more @dots{}
@end itemize

@menu
* Using the Manual::  Conventions used in this manual.
* Acknowledgements::  Contributors to IRC-mode.
@end menu

@node Using the Manual, Acknowledgements, Preface, Preface
@unnumberedsec Using the Manual
@c this section needs some work

This manual presumes at least a beginner's knowledge of GNU Emacs.
Knowing basic concepts such as switching buffers and manipulating
windows certainly helps enjoyment of the client; a simple understanding
of variables and interactive functions also is a big asset.

When describing key bindings, the Emacs convention of @samp{C-} to
represent a control character and @samp{M-} to show a meta character is
used.  @kbd{@key{SPC}}, @kbd{@key{TAB}}, @kbd{@key{DEL}},
@kbd{@key{RET}} and @kbd{@key{LFD}} are also used to indicate space,
tab, delete, return and linefeed characters, respectively.  Occasionally
this latter form is abandoned when the mnemonic of the binding is more
evident if shown as a control character.@refill

When showing the format of a command, alternatives are seperated by a
vertical bar, @samp{|}; optional items are enclosed in brackets,
@samp{[} and @samp{]}; and mandatory items that need grouping to be able
to show alternatives are surrounded by braces, @samp{@{} and @samp{@}}.
@samp{[...]} means that the preceding group can optionally be repeated
any number of times.@refill

@node Acknowledgements, Copying, Preface, Preface
@unnumberedsec Acknowledgements

@cindex acknowledgements
The first version of IRC-mode was written by David C Lawrence in late
Spring, 1989, in response to dissatisfaction with the standard C client
that came with the IRC daemon.  At that time two other Emacs IRC clients
came out, neither of which were really satisfactory with their
multi-buffer approach.  IRC-mode addressed that problem by keeping both
input and output in the same buffer.  It also added a slew of features.

Though nearly all of the code has been written by Lawrence, input from
the following people has been very valuable in the development of the
client:@:
@iftex
@br
@end iftex

@center Christopher K Davis <ckd@@bass.bu.edu>
@center Nathan Glasser <nathan@@brokaw.lcs.mit.edu>
@center Geoff Goodfellow <geoff@@fernwood.mpk.ca.us>

And of course, thanks to Jarkko Oikarinen <jto@@tolsun.oulu.fi> for
starting the IRC network, the various IRC co-ordinators for keeping it
going, and Scanner Luce <scanner@@rpi.edu> for maintaining the server
at Rensselaer Polytechnic Institute, where most of the development of
IRC-mode was done.

The message interface of IRC-mode is strongly based on the user
interface to CONNECT, the primary application of The ACM Network Server
developed by five student members of the RPI-ACM.  The CONNECT project
was begun in 1986 and currently enjoys a very large user base on the
Rensselaer IBM 3090, where it is hopelessly mired in unportable Pascal
code laden with MTSisms.  The original Server Development Team included
Jon Finke, Ron Frederick, Mark T Hollinger, Rudy Keiser and Sandro
Wallach.

@node Copying, Getting Started, Preface, Top
@unnumbered GNU General Public License
@center Version 1, February 1989

@display
Copyright @copyright{} 1989 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@end display

@c fakenode - this is for prepinfo.
@unnumberedsec Preamble

  The license agreements of most software companies try to keep users
at the mercy of those companies.  By contrast, our General Public
License is intended to guarantee your freedom to share and change free
software -- to make sure the software is free for all its users.  The
General Public License applies to the Free Software Foundation's
software and to any other program whose authors commit to using it.
You can use it for your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Specifically, the General Public License is designed to make
sure that you have the freedom to give away or sell copies of free
software, that you receive source code or can get it if you want it,
that you can change the software or use pieces of it in new free
programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of a such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must tell them their rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  The precise terms and conditions for copying, distribution and
modification follow.

@iftex
@c fakenode -- this is for prepinfo.
@unnumberedsec TERMS AND CONDITIONS
@end iftex
@ifinfo
@center TERMS AND CONDITIONS
@end ifinfo

@enumerate
@item
This License Agreement applies to any program or other work which
contains a notice placed by the copyright holder saying it may be
distributed under the terms of this General Public License.  The
``Program'', below, refers to any such program or work, and a ``work based
on the Program'' means either the Program or any work containing the
Program or a portion of it, either verbatim or with modifications.  Each
licensee is addressed as ``you''.

@item
You may copy and distribute verbatim copies of the Program's source
code as you receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice and
disclaimer of warranty; keep intact all the notices that refer to this
General Public License and to the absence of any warranty; and give any
other recipients of the Program a copy of this General Public License
along with the Program.  You may charge a fee for the physical act of
transferring a copy.

@item
You may modify your copy or copies of the Program or any portion of
it, and copy and distribute such modifications under the terms of Paragraph
1 above, provided that you also do the following:

@itemize @bullet
@item
cause the modified files to carry prominent notices stating that
you changed the files and the date of any change; and

@item
cause the whole of any work that you distribute or publish, that
in whole or in part contains the Program or any part thereof, either
with or without modifications, to be licensed at no charge to all
third parties under the terms of this General Public License (except
that you may choose to grant warranty protection to some or all
third parties, at your option).

@item
If the modified program normally reads commands interactively when
run, you must cause it, when started running for such interactive use
in the simplest and most usual way, to print or display an
announcement including an appropriate copyright notice and a notice
that there is no warranty (or else, saying that you provide a
warranty) and that users may redistribute the program under these
conditions, and telling the user how to view a copy of this General
Public License.

@item
You may charge a fee for the physical act of transferring a
copy, and you may at your option offer warranty protection in
exchange for a fee.
@end itemize

Mere aggregation of another independent work with the Program (or its
derivative) on a volume of a storage or distribution medium does not bring
the other work under the scope of these terms.

@item
You may copy and distribute the Program (or a portion or derivative of
it, under Paragraph 2) in object code or executable form under the terms of
Paragraphs 1 and 2 above provided that you also do one of the following:

@itemize @bullet
@item
accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of
Paragraphs 1 and 2 above; or,

@item
accompany it with a written offer, valid for at least three
years, to give any third party free (except for a nominal charge
for the cost of distribution) a complete machine-readable copy of the
corresponding source code, to be distributed under the terms of
Paragraphs 1 and 2 above; or,

@item
accompany it with the information you received as to where the
corresponding source code may be obtained.  (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form alone.)
@end itemize

Source code for a work means the preferred form of the work for making
modifications to it.  For an executable file, complete source code means
all the source code for all modules it contains; but, as a special
exception, it need not include source code for modules which are standard
libraries that accompany the operating system on which the executable
file runs, or for standard header files or definitions files that
accompany that operating system.

@item
You may not copy, modify, sublicense, distribute or transfer the
Program except as expressly provided under this General Public License.
Any attempt otherwise to copy, modify, sublicense, distribute or transfer
the Program is void, and will automatically terminate your rights to use
the Program under this License.  However, parties who have received
copies, or rights to use copies, from you under this General Public
License will not have their licenses terminated so long as such parties
remain in full compliance.

@item
By copying, distributing or modifying the Program (or any work based
on the Program) you indicate your acceptance of this license to do so,
and all its terms and conditions.

@item
Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the original
licensor to copy, distribute or modify the Program subject to these
terms and conditions.  You may not impose any further restrictions on the
recipients' exercise of the rights granted herein.

@item
The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of the license which applies to it and ``any
later version'', you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
the license, you may choose any version ever published by the Free Software
Foundation.

@item
If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

@iftex
@c fakenode -- this is for prepinfo.
@heading NO WARRANTY
@end iftex
@ifinfo
@center NO WARRANTY
@end ifinfo

@item
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

@item
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
@end enumerate

@iftex
@c fakenode -- this is for prepinfo.
@heading END OF TERMS AND CONDITIONS
@end iftex
@ifinfo
@center END OF TERMS AND CONDITIONS
@end ifinfo

@page
@c fakenode -- this is for prepinfo.
@unnumberedsec Appendix: Using These Terms in New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to humanity, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.

  To do so, attach the following notices to the program.  It is safest to
attach them to the start of each source file to most effectively convey
the exclusion of warranty; and each file should have at least the
``copyright'' line and a pointer to where the full notice is found.

@smallexample
@var{one line to give the program's name and a brief idea of what it does.}
Copyright (C) 19@var{yy}  @var{name of author}

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 1, 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.
@end smallexample

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

@smallexample
Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
@end smallexample

The hypothetical commands `show w' and `show c' should show the
appropriate parts of the General Public License.  Of course, the
commands you use may be called something other than `show w' and `show
c'; they could even be mouse-clicks or menu items---whatever suits your
program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a ``copyright disclaimer'' for the program, if
necessary.  Here a sample; alter the names:

@example
Yoyodyne, Inc., hereby disclaims all copyright interest in the
program `Gnomovision' (a program to direct compilers to make passes
at assemblers) written by James Hacker.

@var{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
@end example

That's all there is to it!

@node Getting Started, Sending Messages, Copying, Top
@chapter Getting Started
@cindex getting started
@vindex irc-server
@vindex irc-port

IRC-mode is mostly useless without a server to use.  It will act as a
client attached to an IRC server.  The server to which it attempts to
connect is determined by the variable @code{irc-server}; additionally,
the port which it tries to use is determined by the variable
@code{irc-port}.  For nearly all cases the value of @code{irc-port} will
be 6667 but you will almost certainly have to find a local server to
use.  Most sites do not allow distant connexions to their IRC servers.

@menu
* Getting a server::    What to do if you don't have a server.
* Installation::        Installing the client.
* Sessions::            How to start an IRC session.
@end menu

@node Getting a server, Installation,, Getting Started
@section Getting a server
@cindex server, getting a

The standard IRC distribution can be retrieved via anonymos ftp to:

@ifinfo
128.214.5.6	tolsun.oulu.fi:irc/irc2.2.tar.Z
128.189.102.10	salmon.ee.ubc.ca:pub/irc/irc2.2.tar.Z
@end ifinfo
@iftex
@table @asis
@item 128.214.5.6
tolsun.oulu.fi:irc/irc2.2.tar.Z
@item 128.189.102.10
salmon.ee.ubc.ca:pub/irc/irc2.2.tar.Z
@end table
@end iftex

European ftp'ers should use tolsun while North Americans should use
salmon.  I don't know what the Japanese and Australians should use.

The documentation in the standard distribution will tell you both how
to get the server running and who to contact about connecting it to the
rest of the IRCnet.

@node Installation, Sessions, Getting a server, Getting Started
@section Installing IRC-mode
@vindex irc-server
@vindex irc-port

A GNU Emacs with the function @code{open-network-stream} is required.
This was added in version 18.38 in Spring 1987, so if you've not
upgraded by now, do it.  The client might actually depend on newer 
features of Emacs, but it was never tested on anything less than 18.48.

Edit the first two @code{defvar}s in irc.el which provided default values
for @code{irc-server} and @code{irc-port}.

Put the Emacs LISP file (herein known as @file{irc.el}) in a directory
where Emacs can find it easily.  This is controlled by the variable
@code{load-path} in Emacs.  As distributed, the @code{tar} file
automatically sets up an @file{irc/} subdirectory with a symbolic link
from @file{irc.el} to @file{irc/irc.el}; this arrangement can be put
as-is in one of the @var{load-path} directories.@refill

Now @code{byte-compile-file @file{irc.el}}.  The @file{irc.elc} file
produced should be in one of the @var{load-path} directories.  If the
above mentioned arrangement is used, this means you should name the
symlink for byte-compile rather than the real @file{irc.el} in
@file{irc/}.@refill

You can autoload @file{irc.el} from @file{$(EMACS)/lisp/site-load.el} or
@file{~/.emacs} with the following line:@refill

@example
(autoload 'irc "irc" "An interface to the Internet Relay Chat" t)
@end example

@node Sessions,, Installation, Getting Started
@section IRC Sessions

A session is started with the @code{irc} function.  This can be run with
@kbd{@key{M-x}} (@code{execute-extended-command}) by typing
@kbd{@key{M-x} irc @key{RET}}.  You might also want to bind @code{irc}
to a key so the session can be easily accessed.  The following example
makes @kbd{@key{M-*}}, a key otherwise unbound in Emacs as distributed,
run @code{irc}.@refill

@example
(define-key esc-map "*" 'irc)
@end example

When @code{irc} is invoked it first checks to see whether any IRC
sessions are currently active.  If there are one or more active sessions
then the buffer is switched to the most recently started session.  If
there are no open connexions to IRC servers then a new one is formed,
using the server and port specified by the @code{irc-server} and
@code{irc-port} LISP variables.@refill
@vindex irc-server
@vindex irc-port

@findex irc-mode
@findex irc-mode-hook
Before a connexion is made, @code{irc-mode} is run in the session buffer
to initialise some variables and do one or two other items of
housekeeping.  The @code{irc-mode-hook}, if set to a function, is run at
the end of @code{irc-mode}; this can be used to set up your own aliases,
@xref{Aliasing}, turn off automatic restarting, or do just about
anything else you would want to do when starting a session.@refill

If the connexion could not be made then a message is inserted into the
IRC session buffer which says so; it includes the values of
@code{irc-server} and @code{irc-port} which it tried to use.  There is a
rather elusive Emacs bug, @xref{Emacs Bugs}, that occasionally causes
the connexion not to be made even when there shouldn't have been any
problems.  If this should happen, just try again.@refill

When a connexion is first made to a server, IRC-mode registers you with
it.  Your login name, system name and full name are given.  The full
name is first checked for in the environment variable @code{IRCNAME},
then in @code{NAME}, and finally in the password file if neither of
those environment variables were set.@refill

@vindex irc-nick
@cindex nicknames
Next IRC-mode tells the server what your nickname will be.  @dfn{Nicknames}
are very much like the handles used on CB radio.  Your nickname is your
primary source of identity on IRC.  The variable @code{irc-nick} holds
your nickname; by default it is initialised from the environment
variable @code{IRCNICK}, or your login name if @code{IRCNICK} is not
set.  If you set @code{irc-nick} before @file{irc.el} is loaded then
that will be the default value for new IRC sessions.  Your nickname can
also be changed during the course of a session, @pxref{NICKNAME}.@refill

@vindex irc-no-motd
The last thing that IRC-mode sends the server at start-up is a request
for the message of the day.  If the LISP variable @code{irc-no-motd} is
set then this request will not be sent.

@subsection Limiting Session Size
@vindex irc-maximum-size

Sessions are normally limited in how much space they can consume; this
helps memory consumption and speed.  The variable
@code{irc-maximum-size} controls how long, in characters, an IRC session
should be limited to.  When the size is reached it is maintained by
removing older lines from the beginning of the buffer.  The default
value is 20k; this is an average of roughly 512 lines, or about 22
screens on a typical twenty-four line monitor.  Setting
@code{irc-maximum-size} to nil will make the session effecively
unbounded.  There is a real ceiling of 8Meg - 1k characters but this is
extremely difficult to reach in a normal IRC session.@refill

@subsection Multiple Sessions
@cindex multiple sessions

Multiple sessions can be created in a single Emacs.  This is done by
providing a prefix argument to @code{irc}.  For example, with the above
binding of @kbd{M-*} then typing @kbd{@key{C-u} @key{M-*}} will start a
new IRC session in another buffer while keeping the other sessions
open.@refill 

@subsection Automatic Restart
@cindex restart, automatic
@cindex automatic restart
@vindex irc-no-auto-restart

If your session vanishes for any reason that is non-obvious to IRC-mode
then it will try to reconnect you automatically to the same server that
you were on, with nickname, channel and history all intact.  This
behaviour can be disabled by setting @code{irc-no-auto-restart} to a
non-nil value.@refill

@node Sending Messages, Commands, Getting Started, Top
@chapter Sending Messages
@cindex messages, sending
@cindex sending messages
@cindex sendlists

There are two general methods for talking to people on IRC.  You can
either use explicit targeting of the message's recipient(s) or you can
let IRC-mode send implicitly to people that you have previously
specified.

When you press @kbd{@key{RET}} in IRC-mode, it first looks at the input
region to see if it is a command, @xref{Commands}, and not a message.
If it is a message then it is checked for an explicit sendlist so that
the message can be sent there.  If there is no explicit sendlist, then
it attempts to send the message to the implicit sendlist.  A colon or
semicolon seperates an explicit sendlist from the message body.  The
general form of a message to be sent is:@refill

@display
[[SENDLIST]@{:@:|;@}] TEXT-OF-MESSAGE
@end display

The sendlist is optional, but if it is present then it must be
terminated by a colon or semicolon.  When you type a semicolon at the
beginning of the input region in IRC-mode then the target of the last
explicit sendlist is inserted.  If you type a colon at the beginning of
the input region then the name of the person who last sent you a private
message is made into the sendlist.  This is especially handy when making
replies.  Note that if the sendlist is absent but the input region is
led by a colon or semicolon then the message will be sent using the last
explicit sendlist.  Additionally, the @kbd{:@:} or @kbd{;} character is
removed so that if you want to send a smiley, @xref{Glossary}, at the
beginning of a message then a second @kbd{:@:} is necessary.

Both of the following samples would send the message ``Hi there!'' to
the user with the nickname @samp{foo} on IRC.  This is because IRC-mode
will strip the first space following an explicit sendlist, in addition
to removing the sendlist and the sendlist terminator.

@example
foo:@: Hi there!
foo;Hi there!
@end example

Normally IRC-mode confirms where it directed the message; this can be
changed with the @code{/CONFIRM} command, @xref{CONFIRM}.  For the above
examples the confirmation would look like @samp{(message sent to foo)}.
This happens even for implicit sendlists.  If you were on channel 5 and
sent the above message using the default implicit sendlist, which is the
current channel, then your session buffer would look like this:

@example
Hi there!
(message sent to 5)
@end example

You can send to channels which you are not on, though in general this
behaviour is discouraged as it is somewhat confusing to the users who
are on that channel.  You can not send to a hidden channel that you are
not on.

@menu
* Channels::            The basic conversation clusters on IRC.
* Sendlists::           How to specify a sendlist.
* Globbing::            Automatic recognition of abbreviated nicknames.
* Message Types::       The four types of messages.
* Message History::     Pulling up previously sent messages.
@end menu

@node Channels, Sendlists,, Top
@section Channels
@cindex channels

Channels are the basic conversational meeting places on IRC.  They can
have well-focused discussion, idle banter, or even no talk at all.
Channels are derived, like nicknames, from CB radio and are very useful
for talking to more than one person at a time.  IRC currently only
allows a user to be on one channel at a time, but this might change
in the future.

There are five basic types of channels.  The first type is @dfn{public}
channels, numbered 1 through 999.  Users on these channels can readily
be seen by anyone on IRC, as can the channel which they are on and the
topic of the channel.  The second type of channel is properly a subset
of public channels; channels 1 through 9 have no limit on the number of
users that may be on the channel, but the rest of the channels have a
limit of ten people at a time.

The third type is @dfn{secret} channels.  A user on a secret channel can be
seen by the other people on IRC but the channel he is on is not known.
The topic of the channel can be listed, but the channel number with
which it is associated is not.  Secret channels are numbered from 1000
to @w{2 147 483 647}.

The fourth type of channel is @dfn{hidden}.  These are the negatively
numbered channels from -1 to @w{-2 147 483 648}.  People using these
channels do not show up in any of the user lists to people not on the
same channel.

The fifth type of channel is really a pseudo-channel.  Being on channel
0 is like being on no channel at all.  You cannot send messages to
channel 0 but you are still visible to the other users of IRC.

Channel 0, the secret channels and the hidden channels are sometimes all
lumped together and called @dfn{private} channels.  To someone looking
at a user list, for example, the users on secret channels and on no
channel at all appear to be on a private channel.

Access to channels is controlled by the @code{/JOIN} and @code{/LEAVE}
commands.  Currently active channels (that is, channels which have users
on them) can be seen with the @code{/LIST} command.  @pxref{Commands}.

@node Sendlists, Globbing, Channels, Sending Messages
@section Sendlists
@cindex sendlists

The simplest form of sendlist is a nickname or channel.  The default
implicit sendlist is normally @dfn{*}, which is short for ``the channel I
am now on.''  This can be changed with the @code{/SEND} command,
@xref{SEND}.@refill

More complex sendlists can be specified by making a comma-seperated list
of names and channels.  When giving such a sendlist to @code{/SEND} it
is ok to have whitespace around elements in the list, but when specified
as an explicit sendlist for a message, or as an argument to other
commands which accept sendlists like @code{/OOPS} or @code{/REDIRECT},
then no whitespace can appear.  For example, the following line would
send the message to the users named foo, bar and baz and to the current
channel:@refill

@example
foo,bar,*,baz:Good night, everyone.
@end example

Note that one problem of this feature is that IRC has no way of telling
the message recipients that the message you sent actually went to
several people.  This should be kept in mind when you send messages to
more than one person at a time, as a message like

@example
foo,bar:Hey, do you guys want to get some supper now?
@end example

@noindent
will probably leave both foo and bar wondering who all of ``you guys'' is.

@node Globbing, Message Types, Sendlists, Sending Messages
@section Globbing
@cindex nicknames, expansion of
@cindex globbing

IRC-mode tries to maintain a list of the users who are on IRC at any
given time; this list is mostly accurate but sometimes has problems with
its view of reality, @xref{IRC-mode Bugs}.  For most uses though the
comforting advantages of automatic nickname expansion (called
@dfn{globbing}) outweigh the occasional screw-up which might be
experienced.  Globbing can be turned on and off with
@code{irc-toggle-glob}, @kbd{@key{C-c} t}, which sets the variable
@code{irc-noglob}.  If that variable is non-nil then no globbing is
done.@refill

When a nickname is provided as a member of a sendlist or as an argument
to a command then it is checked against the list to find a match.  The
matching is done by first looking for an exact match; if that can't be
found then a match starting at the beginning of a nickname is searched
for; if that comes up empty then finally a match anywhere in a nickname
is tried.  If at any point this algorithm yields more than one nickname
then the ambiguity is noted.  If none of these searches returns a
nickname from the list then the name that was provided is used as-is,
with IRC-mode going on the assumption that it just wasn't told about
this person existing on IRC.

For example, say that the following five users were the only users on
IRC: foo, bar, baz, gladys, and the_big_man.  Sending to any of the
names in full will work as expected.  Sending to @samp{ba} will result
in IRC-mode pointing out the ambiguity between bar and baz.  Sending to
@samp{gla} would direct the message to gladys, while @samp{man} would
send to the_big_man.

Finally, @samp{moby} used as a nickname when IRC-mode thinks that only
the above five people are on would use @samp{moby}.  The name would be
added to the list for future matching, such that @samp{mo} would work as
an abbreviation for moby the next time it was used unless the server
responded that it doesn't know of user moby.  This is one of the two
primary ways that names get removed from the list, the other being
IRC-mode getting notified explicitly that someone has left.@refill

@node Message Types, Message History, Globbing, Sending Messages
@section Message Types
@cindex message types

There are four basic types of messages: wall, public, semi-private and
private.  Each has a different way of presenting itself in IRC-mode.

Wall messages are named for the command which IRC operators use to send
them, @xref{WALL}.  These messages get sent to all of the users who are
on IRC.  They are theoretically rare and of importance to all users.

Public messages are messages sent to channels by people on that channel.
Semi-private messages are really public messages, but they are a little
peculiar.  This peculiarity is what dictates the special classification.
The primary form of semi-private message is encountered when someone
sends a message to a channel when they are not on that channel.  They
can also occur when someone uses @code{/msg} in the C client to send to
a channel, even if they are on it.  Semi-private messages are treated as
public messages by IRC-mode for the purposes of signalling and time
stamping.

Private messages are sent by another user but targetted for you
specifically.  They might also be simultaneously sent to other users,
but unfortunately the client has no way of knowing that.

@vindex irc-conserve-space
The following table shows how the different message types appear
prefixed by IRC-mode.  The first line in each example is the default;
the second line shows how it appears with @code{irc-conserve-space} set
to a non-nil value.

@group
@table @asis
@item Wall:

 ## Message from Operator at 10:41 to everyone:

#Operator# (10:41)

@item Public:

 -> From Wilbur to 5:

<Wilbur>

@item Semi-private:

 -> Semi-private from Charlotte to 64:

(Charlotte)

@item Private:

 >> (14:20) Private message from pinky:

*pinky* (14:20)
@end table
@end group

@node Message History,, Message Types, Sending Messages
@section Message History
@cindex history, message
@vindex irc-max-history
@findex irc-message-prev
@findex irc-message-next
@findex irc-kill-input
@findex irc-history-menu

Messages that have been attempted to be sent, whether successful or not,
are remembered by IRC-mode.  The maximum number of messages which it can
remember is determined by the value of the variable
@code{irc-max-history}.  A similar list is kept for commands,
@xref{Command History}.  These lists are mutually exclusive; both can
hold up to @var{irc-max-history} items.@refill

@kbd{@key{C-c} @key{C-p}} is normally bound to @code{irc-message-prev}.
This function will move through the message history starting from the
current location in the list, moving toward older messages.
@kbd{@key{C-c} @key{C-n}}, @code{irc-message-next}, moves toward more
recently sent messages in the list.  Both commands accept a prefix
argument to fetch a particular entry from the list directly.  The index
for the message history is zero based, with 0 being the most recently
sent message, so typing @kbd{@key{C-u} 1 @key{C-c} @key{C-n}} will put
the next to the last message sent into the input region.@refill

The location in the message history is reset each time you press
@kbd{@key{RET}}.  It is also reset by typing @kbd{@key{C-c} @key{C-u}},
@code{irc-kill-input}, which is the preferred method of emptying the
input region.@refill

All of the messages which are remembered can be displayed in another
buffer by typing @kbd{@key{C-c} @key{C-m}}, @code{irc-history-menu}.
Each message is preceded by the number that it is in the message history
so that it can be used as a prefix-argument with the history commands
described above.@refill

@node Commands, Display, Sending Messages, Top
@chapter Commands
@cindex commands, summary

Commands in IRC-mode are prefixed with a leading @kbd{/} character when
typed into the input region.  Any arguments to the command can be
provided after it on the same line.  Commands are also callable
interactively, either with @kbd{M-x} or through keys to which they are
bound.  The function name is usually @code{irc-do-COMMAND} for each
@var{COMMAND} but for some cases, usually aliases, this is not true.  If
a command requires arguments but was not given any on the command line
then it will switch to interactive mode and prompt in the minibuffer for
the arguments which it needs.@refill

A brief summary of command names can be seen by invoking @code{/HELP};
with a command name as an argument then some brief documentation will be
provided for the command, usually the same documentation as is found in
this manual.@refill

Recognition of command name abbreviations is done in much the same way
as is used for nickname globbing.  A command is considered found when it
matches a full command name either exactly or unambiguously beginning
with the first character.  For example, @code{/J} would match @code{/JOIN}
but @code{/OIN} would not.@refill

@menu
* Aliasing::        How to provide your own names for commands.
* Command History:: Bringing back old commands.

The standard command set:
@c The distinction could possibly made here that is made in the source
@c code, namely that there is a difference between server commands and
@c purely local client commands.  This would be nice to make the list
@c here seem shorter by breaking it into two seperate lists, but in
@c general it is probably more information than a user wants.

* ADMIN::       Get information about IRC administrators and their servers.
* ALIAS::       Add or list command aliases.
* AWAY::        Give some indication of your absence.
* CONFIRM::     Set message sending confirmation on or off.
* FINGER::      Display ``finger'' information about a user.
* HELP::        Get help for IRC-mode commands.
* HERE::        Give some indication of your presence.
* IGNORE::      Block messages from a user to you.
* INFO::        See some information about the original author of IRC.
* INVITE::      Ask another user to join a channel.
* JOIN::        Move to a new channel.
* LEAVE::       Leave a channel.
* LINKS::       Show the servers that make up the IRCnet.
* LIST::        List active channels and their topics.
* LUSERS::      Get a count of users, servers and operators on IRC.
* MOTD::        Read the message of the day at a server.
* MSG::         Obsolete command for sending messages.
* NAMES::       Display the names of users on a per channel basis.
* NICKNAME::    Change your nickname.
* NOTIFY::      Set the events for which you want to receive notification.
* OOPS::        Resend a misdirected message.
* OPER::        Login as an IRC operator.
* OPERWHO::     List the operators on IRC.
* QUIT::        Exit the IRC session.
* QUOTE::       Send a message to the server with no client interpretation.
* REDIRECT::    Resend the last message to someone else.
* SEND::        Specify the implicit sendlist for messages.
* SIGNAL::      Set the events for which you want special signalling.
* STAMP::       Set time stamping for messages or on an interval.
* SUMMON::      Ask a user not on IRC to join it.
* TIME::        Get the time at a server.
* TOPIC::       Change the topic of the current channel.
* UNALIAS::     Remove a command alias.
* UNIGNORE::    Stop blocking messages from a user.
* USERS::       Show the users signed on at a server.
* WHO::         Get a list of the users on IRC.
* WHOIS::       See more full information about a particular user.
* VERSION::     Get the version of the current IRC-mode and IRC server.

The following commands are usable only by IRC operators:

* CONNECT::     Manually start a connexion to another server.
* KILL::        Remove a user from IRC.
* REHASH::      Reread the local configuration information.
* TRACE::       Show the links between servers.
* WALL::        Send a message to everyone on IRC.
@end menu

@node Aliasing, Command History,, Top
@section Aliasing
@cindex aliases
@cindex command aliases
@findex irc-change-alias
@findex irc-mode-hook

IRC-mode provides a rudimentary form of command aliasing which allows a
word given as a command name to be recognised as another command, with
or without arguments.  It is not an especially robust system but is
suitable for simple renaming of commands to suit personal taste.

There is a restriction that an alias can only point to a regular command
name so that infinite loops are avoided, but other surprises can be
still be found if an alias is made for a regular command.  As an
example, aliasing @code{/WHO} to some other command will cause that
command to be run even if invoked indirectly through @code{/W}, which is
a default alias for @code{/WHO}.  It is arguable whether this is proper
behaviour.  Invoking the @code{irc-do-who} function interactively,
however, would ignore any aliases so the normal @code{/WHO} could still
be run that way.@refill

An alias can have the arguments for the command that it calls or they can
be provided as arguments to the alias when it is called.  Any arguments
that exist in the alias itself are always passed to the real command;
additional arguments given when it is used are appended to the end of
the command line that is aliased.

During a session aliases can be viewed or changed with the @code{/ALIAS}
and @code{/UNALIAS} commands.  To automatically initialise aliases with
new IRC sessions the preferred method is to use the function
@code{irc-change-alias} in @code{irc-mode-hook}.  It takes three
arguments: @var{alias}, @var{cmd} and @var{add}.  @var{alias} is a
string which is the name of that the alias will have; it should not have
whitespace in it and is conventionally in capital letters.  @var{cmd} is
string that is the command that should be run when the alias is invoked.
It can contain whitespace; everything after the first space will be
interpreted as arguments to the command.  @var{add}, when not nil or the
symbol @samp{remove}, means to add the alias or change its definition if
it already exists.  If @var{add} is nil or the symbol @samp{remove} then
the alias will be taken off of the alias list; in this case @var{CMD} is
ignored.@refill

As an example of using @code{irc-change-alias}, here is an
@code{irc-mode-hook} that removes the default alias of @code{/QUERY},
changes the alias of @code{/TF} to query the server lut.fi, and adds an
alias @code{/JP} that will look to see which servers on the IRCnet are
in Japan.@refill

@example
(setq irc-mode-hook
      (function (lambda ()
                  (irc-change-alias "QUERY" nil 'remove)
                  (irc-change-alias "TF" "time lut.fi" 'change)
                  (irc-change-alias "JP" "links *.jp" 'add))))
@end example

@subsection Default Aliases
@cindex aliases, default

The following aliases are provided by default in IRC-mode.

@subsubsection /QUERY and /M
@findex /QUERY
@findex /M

These are provided for people who are familiar with the C client.
@code{/QUERY} does what @code{/SEND} does in IRC-mode.  @code{/M}
invokes the obsolete @code{/MSG} function, which is the way to
explicitly target messages in the C client.@refill

@subsubsection /N, /W and /L
@findex /N
@findex /W
@findex /L

These aliases are for easier access to frequently used commands; the
commands which they call (@code{/NAMES}, @code{/WHO} and @code{/LIST},
respectively) are otherwise ambiguous as only one character.  These also
somewhat fall under the C-client-compatibility category since it will
recognise these commands by one character.@refill

@subsubsection /?
@findex /?

@code{/?} runs @code{/HELP}.  Many people seem to be familiar with the
@kbd{?} idiom from other systems and it is also nicely shorter than
@kbd{/HEL} which must be typed in order to avoid conflict with
@code{/HERE}.@refill

@subsubsection /TF
@findex /TF

The question ``What time is it now in Finland?'' came up so frequently
during the initial growth stages of IRC that the @code{/TF} alias to get
the current time of day from the server at the Tampere University of
Technology in Finland proved itself to be very handy.  It doesn't work
well when the tut.fi server isn't on the IRCnet.

Now that IRC has further spread to many sites around the world, with
servers in North America, Europe, Asia and Australia, more aliases to
get the time at various geographic locations could be useful.  These are
not provided by default.

@subsubsection /EXIT, /BYE and /STOP
@findex /EXIT
@findex /STOP
@findex /BYE

These aliases are provided for people like me who have trouble
remembering how to leave any given application.  They all run
@code{/QUIT} to end the IRC session.

@subsubsection /WHAT
@findex /WHAT

Some habits are hard to break.  This alias is provided for the users of
CONNECT, @xref{Acknowledgements}, who sometimes have difficulty
remembering that the active channels on IRC are displayed with
@code{/LIST}, not @code{/WHAT}, which is the command that shows the
discussion list on CONNECT.@refill

@node Command History, ADMIN, Aliasing, Commands
@section Command History
@cindex history, command
@findex irc-command-prev
@findex irc-command-next
@findex irc-history-menu

IRC-mode remembers the commands you use the same way it remembers the
messages you send, @xref{Message History}.  The command history is
accessed like the message history, but the backward and forward
commands, @code{irc-command-prev} and @code{irc-command-next}, are bound
by default to @kbd{@key{C-c} p} and @kbd{@key{C-c} n} respectively.
Prefix arguments work as with the message history commands.@refill

A list of the commands which IRC-mode remembers can be seen by giving a
prefix argument to the @code{irc-history-menu} function, which normally
lists the message history, as @kbd{@key{C-u} @key{C-c} @key{C-m}}.@refill

@node ADMIN, ALIAS, Command History, Commands
@section ADMIN
@findex /ADMIN
@findex irc-do-admin

@example
/ADMIN [ server ]
@end example

The @code{/ADMIN} command will get administrative information about
@var{server}; if @var{server} is not supplied then it will query the
server to which you are connected.  This information normally contains
the name of the server, where it is located (both the organization and
geographic location), the administrative contact for the server and a
short message that could be just about anything.@refill

@code{/ADMIN} is handled by @code{irc-do-admin}, normally bound
to @kbd{@key{C-c} a}.@refill

Two examples:

@example
/admin
### Administrative info about netserv2.its.rpi.edu
### Rensselaer Polytechnic Institute, Troy NY USA
### Administrative contact is scanner@@rpi.edu
### ftp to rpi.edu and get pub/irc-mode.tar.Z for a GNU Emacs interface

/admin sirius.ctr.columbia.edu
### Administrative info about sirius.ctr.columbia.edu
### Columbia University CTR - New York, NY, USA
### Seth Robertson <seth@@ctr.columbia.edu>
### Orange Road Rules!!! <Running 2.2PL1>
@end example

@node ALIAS, AWAY, ADMIN, Commands
@section ALIAS
@findex /ALIAS
@findex irc-do-alias

@example
/ALIAS [ alias [ command [ arguments for command ]]]
@end example

@code{/ALIAS} will allow @var{alias} to be equivalent to @var{command},
with optional command arguments.  Aliases can only be made to existing
commands and not to other aliases.  They are also only recognized when
in the command name position of a line; they are only command name
replacements and not general substitution strings.@refill

If given with no arguments then all aliases are displayed; if given with
just @var{alias} then the alias with that name will be shown.  Aliases
can be removed with @code{/UNALIAS}.

@code{irc-do-alias} is the function that handles @code{/ALIAS}.  It is
bound to @kbd{@key{C-c} @key{C-a}} by default.@refill

Examples of @code{/ALIAS}:

@example
/alias
"/N" is aliased to "/names".
"/W" is aliased to "/who".
"/TF" is aliased to "/time tut.fi".
"/WHAT" is aliased to "/list".
"/L" is aliased to "/list".
"/EXIT" is aliased to "/quit".
"/BYE" is aliased to "/quit".
"/STOP" is aliased to "/quit".

/alias jp
"/JP" is not aliased.

/alias jp links *.jp
"/JP" has been aliased to "/links *.jp".
@end example

@node AWAY, CONFIRM, ALIAS, Commands
@section AWAY
@cindex away
@findex /AWAY
@findex irc-do-away

@example
/AWAY [ message ]
@end example

This command will mark you as being away from your terminal; it is used
so other users will know why you are seemingly so inattentive.  With no
arguments your current here/away status is displayed.  When @var{message}
is given then you are marked as away; the message will be put after your
name in the modeline as a reminder of your status.  @code{/HERE} is used
when you want to indicate that you are present again.

When you are away the people who send you private messages or ask for
more full information about you with @code{/WHOIS} will see the message
you have given.  Note that servers do not propagate away status between
each other; your status is only readily apparent to people who are also
using the same IRC server as you.  People on remote servers will still
see your away message if they send you private messages, but they will
not see your away status with @code{/WHO} or @code{/WHOIS}.@refill

Examples of @code{/AWAY}:

@example
/away
You are not currently marked as being away.
/away playing pool -- back at 9
You have marked as being away
@end example

At this point the mode line would include `` [playing pool -- back at 9]''.
Another user might then see this in his session:

@example
tale: hi!  will you help me test a new package?
(message sent to tale)
tale is away, "playing pool -- back at 9".
@end example

@node CONFIRM, FINGER, AWAY, Commands
@section CONFIRM
@cindex messages, confirmation
@cindex confirmation
@findex /CONFIRM
@findex irc-do-confirm

@example
/CONFIRM [ + | - ]
@end example

This command turns on message confirmation with an argument of @samp{+} or
off with one of @samp{-}.  Any other arguments or no arguments at all just
gives a message about the current setting.@refill

Message confirmation is a line indicating to whom a message was sent.
Occasionally this will say that a message has been sent to someone who
was not present but another message soon after will set the record
straight.  Such an occasion might look like this:

@example
Nate,ckd:@: Good evening.
(message sent to ckd and Nate)
'ckd' is not on IRC.
@end example

The @code{irc-do-confirm} function is not bound to any keys by default.

@unnumberedsubsec Initialisation
@vindex irc-confirm

Message confirmation is on by default in IRC-mode.  This can be disabled
when sessions are started by setting the LISP variable
@code{irc-confirm} to nil.@refill

@node FINGER, HELP, CONFIRM, Commands
@section FINGER
@findex /FINGER
@findex irc-do-finger

@example
/FINGER @{ nickname | user@@host @}
@end example

@kbd{@key{C-c} @key{C-f}}, @code{irc-do-finger}, will get data about a
person by using the same method as the UNIX @code{finger(1)} utility.
If @samp{@@} is in the argument then the named host will be asked for
information about @var{user}.  Globbing is done on @var{nickname}
otherwise, @xref{Globbing}.@refill

When used with a @var{nickname} argument then a @code{/WHOIS} is done of
the user.  The login name and host that are then returned are used to do
the finger query.  An example:

@example
/finger pres
President is <bush@@wh.wash.dc.us> on channel -34021.
On server fbi.wash.dc.us (*It's a secret server*, Washington DC USA)

Login name: bush                        In real life: George H W Bush
Directory: /home/bush                   Shell: /usr/local/gnu/bin/bash
On since Jan 28 11:54:51 on ttyp2 from wh.wash.dc.us
13 minutes Idle Time
No unread mail
No plan.
No comment.
@end example

@node HELP, HERE, FINGER, Commands
@section HELP
@findex /HELP
@findex irc-do-help

@example
/HELP [ command ]
@end example

This will get the documentation for @var{command}.  If @var{command} is
not given then a list of the available commands is shown.  Note that
commands for IRC operators will not appear in this list if you are not
an IRC operator.@refill

The @code{irc-do-help} function is normally bound to @kbd{@key{C-c}
@key{C-h}} in IRC-mode.@refill

@node HERE, IGNORE, HELP, Commands
@section HERE
@findex /HERE
@findex irc-do-here

@code{irc-do-here} is used to remove your away status; arguments to the
command are ignored.

@node IGNORE, INFO, HERE, Commands
@section IGNORE
@findex /IGNORE
@findex irc-do-ignore

@example
/IGNORE [ user ]
@end example

@code{irc-do-ignore} will let you ignore another user on IRC.  Any
events by this person, except for WALL messages, are not displayed.
With no arguments a list of all currently ignored people is given.
Nickname globbing is done on the user name as is done with sendlists,
@xref{Globbing}.@refill

IRC-mode will track the ignored user across nickname changes if it
notices the change.  This usually requires that you are on the same
channel as the user.  If a person who is being ignored sends a private
message or an invitation to you then a message will be sent to that
person saying, ``You are being ignored.''

To stop ignoring someone, use the @code{/UNIGNORE} command.

@node INFO, INVITE, IGNORE, Commands
@section INFO
@findex /INFO
@findex irc-do-info

@example
/INFO
@end example

@code{irc-do-info} will return some information about the programmer of
IRC.  Arguments to the @code{/INFO} command are ignored.  The current
message, which rarely ever changes, is:

@example
Programmed by Jarkko Oikarinen
(c)  1988,1989   University of Oulu,   Computing Center
INTERNET:@: jto@@tolsun.oulu.fi    BITNET:@: toljto at finou
@end example

@node INVITE, JOIN, INFO, Commands
@section INVITE
@findex /INVITE
@findex irc-do-invite

@example
/INVITE user [ channel ]
@end example

This lets you ask @var{user} to join @var{channel}.  If @var{channel} is
0, * or not provided then the invitation defaults to your current
channel.  You cannot invite someone to channel 0.  Nickname globbing is
done on @var{user}, @xref{Globbing}.@refill

When @code{irc-do-invite}, which is normally bound to @kbd{@key{C-c}
@key{C-i}}, is called interactively then channel is set to the prefix
argument; with no argument or @samp{-} the current channel is assumed.@refill

Using this command is quite different from sending the person a message
which says, ``Hey, want to join me on channel 1024?''  A different format
is used for passing the invitation.  IRC-mode recognises invitations as
special events and can signal you for them, @xref{SIGNAL}.

@node JOIN, LEAVE, INVITE, Commands
@section JOIN
@findex /JOIN
@findex irc-do-join

@example
/JOIN @{ channel | . @}
@end example

You move to @var{channel} on IRC by using @code{irc-do-join}.  A prefix
argument to the command when it is invoked interactively (default
binding is @kbd{@key{C-c} @key{C-j}}) will use that as @var{channel},
otherwise it is prompted for in the minibuffer.@refill

The special argument @kbd{.} represents the last channel for which you
received an invitation to join.  This is especially handy when you have
been invited to a channel which has a number of large magnitude.

@node LEAVE, LINKS, JOIN, Commands
@section LEAVE
@findex /LEAVE
@findex irc-do-leave

@example
/LEAVE
@end example

This will cause you to leave your current channel and join no other.  It
is the same as @samp{/JOIN 0}.  A seperate command is provided for two
reasons: one is anticipation of IRC allowing you to be on more than one
channel at a time; the other is that when you don't want to be on a
channel anymore it is generally more natural to think of it as leaving
that channel rather than joining the pseudo-channel 0.

Arguments to this command are ignored.  @kbd{@key{C-c} q} is the default
binding for @code{irc-do-leave}.@refill

@node LINKS, LIST, LEAVE, Commands
@section LINKS
@findex /LINKS
@findex irc-do-links

@example
/LINKS [ pattern ]
@end example

The @code{irc-do-links} function will show the names of servers which
can communicate with your server.  If @var{pattern} is provided then all
servers matching it will be displayed.  This command is useful for
seeing what servers are on the IRCnet, especially when it has become
fragmented and only a small number of servers is known in your section
of the network.

@samp{?} and @samp{*} act as wild-cards in the pattern.  @samp{?} will
match exactly one character and @samp{*} will match any sequence of
characters, including none (though there is a small bug here,
@xref{Server Bugs}.).  @code{/LINKS} has the default key-binding of
@kbd{@key{C-c} l}; @var{pattern} is requested in the minibuffer.@refill

This example shows how the commercial sites connected to the IRCnet can
be found:

@example
/links *.com
Server: slopoke.semi.harris-atd.com (Harris Semiconductor, Melbourne FL, USA)
Server: sun.com (*)
Server: hercules.csl.sri.com (SRI Computer Science Lab, Menlo Park, CA  USA)
Server: hydra.convex.com (Convex [Super]Computer, Richardson, TX U.S.A.)
Server: anise.acc.com (Advanced Computer Communications, Santa Barbara, C)
@end example

@node LIST, LUSERS, LINKS, Commands
@section LIST
@findex /LIST
@findex irc-do-list

@example
/LIST [ channel ]
@end example

This will get a list of the currently active channels on IRC.  The
optional @var{channel} argument is supposed to show just that channel
but this feature is not correctly supported by most servers.  The list
includes the number of the channel, or @samp{Priv} if the channel is a
secret channel, the number of users on the channel, and the topic of
the channel if one is set.

@code{irc-do-list} is bound to @kbd{@key{C-c} @key{C-l}} by default.

@node LUSERS, MOTD, LIST, Commands
@section LUSERS
@findex /LUSERS
@findex irc-do-lusers

@example
/LUSERS
@end example

This command will get the number of users, servers and operators which
make up IRC.  Operators are listed as users who ``have connection to the
twilight zone'' and they are counted in the total number of users.
People on hidden channels are not counted.  Sometimes it returns that
there are a number of ``yet unknown connections''; these are people who
have connected to an IRC server but have not told the server who they are.

Any arguments provided are ignored.  The normal binding of
@code{irc-do-lusers} is @kbd{@key{C-c} #}.@refill

@node MOTD, MSG, LUSERS, Commands
@section MOTD
@findex /MOTD
@findex ird-do-motd

@example
/MOTD [ server ]
@end example

The @code{irc-do-motd} command will get the message of the day at
@var{server}; if no server is named then your host server is asked for
its message of the day.@refill

There is currently a bug in IRC servers that is seen when you ask a
remote server for its message of the day.  It will return the correct
number of lines for the message but will unfortunately not put any text
on those lines.  When this happens IRC-mode will tell you:

@example
(Sorry; a server bug prevents you from seeing this message of the day.)
@end example

@node MSG, NAMES, MOTD, Commands
@section MSG
@findex /MSG
@findex irc-do-privmsg

@example
/MSG sendlist message
@end example

This function is provided solely for compatability with the C client.
There preferred method for sending messages in IRC-mode is by using
prepended sendlists, @xref{Sending Messages}.  In fact, all this command
does is mutate its arguments into @samp{@var{sendlist}:@var{message}}
and call the normal message handling routines.  It really only gains you
the experience of typing a couple of extra characters and the addition
of the message to not only the message history but the command history
too.@refill

@node NAMES, NICKNAME, MSG, Commands
@section NAMES
@findex /NAMES
@findex irc-do-names

@example
/NAMES [ channel ]
@end example

You can see all of the visible users on IRC and the channels which they
are on in a succint list with @code{irc-do-names}.  The optional
argument, which can be given as a prefix argument if called
interactively, limits the list to just @var{channel}.  @samp{*} or an
interactive prefix argument of @samp{-}, means to just show the users on
your current channel; if you are not on any channel then the whole list
gets displayed.  This command is normally bound to @kbd{@key{C-c}
@key{C-c}}.@refill

Each line returned starts with the channel number and is followed by the
nicknames of the people on that channel.  Users who are on secret
channels or not on any channel are all lumped together as
@samp{Private}.  Users on secret channels are not displayed at
all.@refill

@node NICKNAME, NOTIFY, NAMES, Commands
@section NICKNAME
@findex /NICKNAME
@findex irc-do-nick

@example
/NICKNAME name
@end example

You can change your nickname during a session with @code{irc-do-nick}.
A nickname can contain alphanumeric characters, underscores (@samp{_}),
hyphens (@samp{-}) or the special characters vertical bar (@samp{|}) and 
left brace (@samp{@{}), which are alphabetic characters in Finnish.  The
name cannot start with a hyphen or number and only the first nine
characters are used.  If @var{name} has more than nine characters then
IRC-mode will alert you to that, let you know how your nickname would
be truncated, ask whether it is okay to do the change.

Unfortunately, due to the way confirmation from the servers work, it
might be falsely reported that your nickname was successfully changed
when it was not.  The server will notify you if this happens and finally
IRC-mode will wise-up and note that your nickname was not changed.

@node NOTIFY, OOPS, NICKNAME, Commands
@section NOTIFY
@findex /NOTIFY
@findex irc-do-notify

@example
/NOTIFY [ + | - | [+]event | -event ] [...]
@end example

The @code{irc-do-notify} command sets the list of events to notify you
about when they occur.  The notification is a one-line message inserted
when someone causes a change of state in the IRC environment.

Events are added to your list of desired notifications with +@var{event}
or simply @var{event}; they are removed with -@var{event}.  @samp{+}
adds all supported events and @samp{-} removes all supported events.
More than one event can be specified in the arguments.  In case of
conflict, the argument which appears later overrides any arguments with
which it conflicts.  Events are also recognised by their shortest
unambiguous prefix; for this command that happens to be as short as one
character for each.@refill

Currently supported by @code{/NOTIFY} are the @samp{join}, @samp{nick}
and @samp{topic} events.  @samp{Join} happens whenever someone enters or
leaves a channel which you are on.  @samp{Nick} occurs when someone
changes nicknames; recognition of this event is limited to when the
person making the change is on the same channel as you.  @samp{Topic} is
the result of someone changing the topic of the channel you are on.@refill

This example would turn on notification for only the @samp{nick} and
@samp{topic} events no matter what the current state of your
notification list:@refill

@example
/join + -j
Notification is currently enabled for nick and topic.
@end example

@unnumberedsubsec Initialisation
@vindex irc-notifies

The notification list is @code{irc-notifies}.  It contains those events
which should get notification.  By default, all events are enabled.  If
you would like a different default, you can set the variable in your
@file{.emacs} or @code{irc-mode-hook}.  Setting it to nil disables all
notification.  To enable only nickname and topic change notification you
would use something like this:@refill

@example
(setq irc-notifies '(nick topic))
@end example

@node OOPS, OPER, NOTIFY, Commands
@section OOPS
@findex /OOPS
@findex irc-do-oops
@vindex irc-oops

@example
/OOPS sendlist
@end example

@kbd{@key{C-c} @key{C-o}}, @code{irc-do-oops}, will send the contents of
the @code{irc-oops} variable to the recipient(s) of the last message and
then resend the message to @var{sendlist}.  The default value of
@code{irc-oops} is ``Oops ... please ignore that.''@refill

This command is handy when you've just sent a message to the wrong place
and you want those people who saw it to know that they should just
disregard it.  An example of using @code{/OOPS}, when your default
sendlist is for user @samp{Dondi}:

@example
I know!  I'll bet we could get the right results if we just switched the
polarity on the transmorgifier!
(message sent to Dondi)
/oops calv
(message sent to Dondi)
(message sent to calvin)
@end example

The first confirmation after the command is for the oops message; the
second is for the resent original.

@node OPER, OPERWHO, OOPS, Commands
@section OPER
@findex /OPER
@findex irc-do-oper

@example
/OPER name password
@end example

Operators use @code{irc-do-oper} to enable privileges.  If @var{password}
is not provided on the command line then it is hidden when read from the
minibuffer.  There is also an Emacs bug which keeps the cursor out of
the minibuffer when a password is being read and Emacs is an X client,
but this is only an aesthetic annoyance, @xref{Emacs Bugs}.@refill

If you succeed in registering as an operator then a message will be
inserted saying so and your status will be reflected in the modeline
with the word @dfn{Operator} appearing beside the mode name.

@node OPERWHO, QUIT, OPER, Commands
@section OPERWHO
@findex /OPERWHO
@findex irc-do-operwho

@example
/OPERWHO
@end example

@code{irc-do-operwho} is just like @code{/WHO} except that only people
who have operator privileges enabled get displayed.  The default
keybinding is @kbd{@key{C-c} o}.  Arguments to this command are ignored.@refill

@node QUIT, QUOTE, OPERWHO, Commands
@section QUIT
@findex /QUIT
@findex irc-do-quit

@example
/QUIT
@end example

Use this command when you want to exit your IRC session.  The connexion
is closed but the buffer is left behind.  @kbd{@key{C-c} k} is the
default binding of @code{irc-do-quit}.@refill

Unlike other commands which don't take any parameters, spurious arguments
to this command are not ignored.  If any are present then the session is
not exited as a safety precaution against seemingly unintentional use of
the command.

@node QUOTE, REDIRECT, QUIT, Commands
@section QUOTE
@findex /QUOTE
@findex irc-do-quote

@example
/QUOTE server-command
@end example

This command is used to send @var{server-command} directly to the IRC
server without any local processing by IRC-mode.  @code{irc-do-quote} is
normally found on @kbd{@key{C-c} @key{C-q}}.@refill

@emph{CAVEAT}: this has the potential to screw up some things in IRC-mode,
particularly if it is used to change your nickname or to switch
channels.  It shouldn't be much trouble for you to restore sanity if
this happens, but don't be surprised when it does.

@node REDIRECT, SEND, QUOTE, Commands
@section REDIRECT
@findex /REDIRECT
@findex irc-do-redirect

@example
/REDIRECT sendlist
@end example

The @code{irc-do-redirect} function, bound to @kbd{@key{C-c} @key{C-r}}
by default, will resend your last message to @var{sendlist}.  The
effects of this are pretty easily duplicated by using the message
history mechanism, @xref{Message History}, but the command is provided
to make it even easier.@refill

@node SEND, SIGNAL, REDIRECT, Commands
@section SEND
@findex /SEND
@findex irc-do-send

@example
/SEND [ sendlist | - ]
@end example

This command is used to set your implicit sendlist for messages,
@xref{Sending Messages}.  Giving just @samp{-} as an argument means to
disable the implicit sendlist; every message sent must then be prefixed
by the destination you intend for it.  If no parameters are given then
your current default sendlist is displayed without being changed.  This
command is typically bound to @kbd{@key{C-x} @key{C-s}}.@refill

Each item specified in @var{sendlist} is checked by @code{irc-do-send}
to see whether you can send there.  It will not let you set your default
sendlist to a channel which you are not on. Nickname globbing,
@xref{Globbing}, is also done and ambiguous expansions are not allowed.
Finally, @samp{*} is always accepted to mean ``send to whatever channel I
happen to be on.''@refill

If no portion of you sendlist can be set as requested then it is left
unchanged, otherwise it is set to the arguments that were okay.

@node SIGNAL, STAMP, SEND, Commands
@section SIGNAL
@findex /SIGNAL
@findex irc-do-signal

@example
/SIGNAL [ + | - | [+]event | -event ] [...]
@end example

This is used to set the events which will get special signalling when
they occur.  Events supported this way are:

@table @asis
@item private
Private messages from other users.
@item public
Public and semi-private messages to channels.
@item wall
Messages from operators to everyone.
@item invite
Invitations to join a channel.
@item join
Channel changes by other users.
@item topic
Change of channel topic.
@item nick
Nickname changes by other users.
@end table

@vindex irc-silent-bell
Special signalling causes two things to happen in IRC-mode.  One is to
ring your terminal's bell (or flash the screen if @code{visible-bell} is
non-nil).  The bell will not be rung if @code{irc-silent-bell} is
non-nil.  The other action is special handling of your display if
@code{irc-pop-ratio} is set properly, @xref{Display}.@refill

Without any arguments @code{irc-do-signal} prints a message about which
signals are currently enabled.  @var{event} or +@var{event} enables
signalling.  Signalling for an event can be stopped with -@var{event}.
Options of @samp{+} or @samp{-} add or remove all signals respectively.
Multiple arguments are accepted; later ones take precedence over the
ones which came before them.  Unambiguous prefixes for events are
accepted.@refill

This example enables signalling for only private and wall messages:

@example
/sig - +pr +w
Signalling is enabled for private and wall.
@end example

@unnumberedsubsec Initialisation
@vindex irc-signals

The default signals enabled in IRC-mode are private and wall messages
and invitations.  If you would like different defaults then you can set
@code{irc-signals} in your @file{.emacs} or @code{irc-mode-hook}.  It is
a list of all signal types; elements which have a non-nil cdr have
signalling on.  For example, the default value looks like this:

@example
((private t) (invite t) (wall t) (public) (join) (nick) (topic) (user))
@end example

If you wanted to enable signalling only for operator messages, you could
use an expression like the following.  Note that order is not important,
but for @code{/SIGNAL} to work correctly all event types must be present.

@example
(setq irc-signals
      '((wall t) (private) (invite) (public) (join) (nick) (topic) (user)))
@end example

@node STAMP, SUMMON, SIGNAL, Commands
@section STAMP
@findex /STAMP
@findex irc-do-stamp

@example
/STAMP [ + | - | [+]message-type | -message-type | interval ] [...]
@end example

Time-stamping is manipulated with the @code{irc-do-stamp} function.
Stamps display the current time in hours and minutes.  An argument of
@samp{+} means to turn it on for all messages received.  @samp{-}
disables all message stamping.  @var{message-type}, optionally led by a
@samp{+}, enables stamping for the specified type; -@var{message-type}
will disable it again.  An integer @var{interval} will give a
stand-alone time message every @var{interval} minutes.  If no arguments
are given then the enabled stamp types are displayed.@refill

There is a bug in the Emacs byte-compiler that can you stamp to be set
other than as expected if you are using a byte-compiled
@code{irc-do-stamp}, @xref{Emacs Bugs}.  It is important to note the
confirmation given after the command has processed its arguments.@refill

The message types supported by IRC-mode are @samp{private} and
@samp{public}.  They are recognised by two or more leading characters
when specified in the command parameters.  The default time-stamp action
in is to stamp private and wall messages.  The interval timer is not
enabled by default.  Messages from operators to all users always get
time stamps.@refill

Time-stamping is useful to people who spend some time away from IRC;
they help narrow down the time when an event occurred.  For example, if
you went to a meeting at 11:00 and came back at noon and saw a message
from someone that was stamped at 11:58 you could answer it pretty
directly.  If the stamp was for 11:05 the other user might need a little
more context in order to understand your reply.

The accuracy of the interval timer can be off by up to two minutes past
the time when a message should be inserted.  This can be greatly
improved by running @code{display-time}, which will give Emacs some sort
of predictable activity at least once a minute.  The timer can be
disabled by setting it to 0; any other time it is set it tries to make
the stamps come at intervals which cleanly subdivide the hour.  For
example, if you set it to thirty minutes then the stamps will be
scheduled to at the hour and half hour, no matter what time you set the
stamp.@refill

@unnumberedsubsec Initialisation
@vindex irc-time-stamp
@vindex irc-message-stamp

The time-stamping features can be preset in .emacs or
@code{irc-mode-hook} by setting @code{irc-time-stamp} and
@code{irc-message-stamp}.@refill

@code{irc-time-stamp} is an integer that controls the interval timer.
0 is the default in IRC-mode.  @code{irc-message-stamp} controls time
stamps for the different message types.  If it is the symbol
@samp{public} then only public messages will get time stamps; if it is
@samp{private} then only private messages get them.  Semi-private
message, @xref{Message Types}, are considered public.  If
@code{irc-message-stamp} is some other non-nil value, typically
@samp{t}, then all messages get time stamps.  If it is nil then none do.@refill

By default the time stamping applies to all IRC sessions; you will have
to make the variables buffer-local if you want it to be unique for each.

@node SUMMON, TIME, STAMP, Commands
@section SUMMON
@findex /SUMMON
@findex irc-do-summon

@example
/SUMMON user[@@server]
@end example

You can ask someone who is not on IRC to join with the
@code{irc-do-summon} command, bound to @kbd{@key{C-c} s}.  @var{user}
is the login name of the person you want to summon; if the optional
@var{@@server} parameter does not suffix it then the machine the user is
on is taken to be the server to which you are connected.  If the user is
logged in then he will get a message that looks like this:@: @refill

@group
@example
ircd: You are being summoned to Internet Relay Chat by
ircd: Channel -341: quayled@@wh.wash.dc.us (Danny) Daniel Quayle
ircd: Respond with irc
@end example
@end group

This functionality is currently limited to only machines which have
servers connected to the IRCnet.  Plans are in the works for a summon
daemon which could run on machines which do not run an IRC server.  Note
that the message which you see if you name a non-existent server might
be a little misleading as to the real problem:

@example
/summon rick@@uunet.uu.net
 No such host found
@end example

@noindent
This could likely garner the response from you, ``What do you mean you
can't find it?!  It's one of the most well known machines on the
Internet!''  Since UUNET does not run an IRC server, though, it is
effectively non-existent as far as IRC is concerned.  Additionally, 
the presence of a hostname in some IRC-generated message, as in
@code{/WHO} output or an ircd summon message like the above, does not
mean that host can be otherwise accessed by IRC.

@node TIME, TOPIC, SUMMON, Commands
@section TIME
@findex /TIME
@findex irc-do-time

@example
/TIME [ server ]
@end example

The @code{irc-do-time} command will request the current time at the
server to which you are connected.  If the optional @var{server}
argument is present then the named IRC server will be asked for its
time.  If called interactively then a prefix argument means to prompt
for the server to query.@refill

This command is very useful due to the wide-spread distribution of the
IRCnet.  The sun might just be coming up where you are, but a greeting
of ``Good morning!'' to someone on in Denmark would be a little out of
place.

There is a server bug related to the @code{/TIME} command.  If this bug
is encountered than IRC-mode will give you what it has to work with,
though it might be gibberish as far as providing the information you
wanted.  @pxref{Server Bugs}.

@node TOPIC, UNALIAS, TIME, Commands
@section TOPIC
@findex /TOPIC
@findex irc-do-topic

@example
/TOPIC [ topic ]
@end example

You can set or check the topic of the channel you are on with the
@code{irc-do-topic} command.  With a @var{topic} argument then the
channel topic will be set; with no arguments it will be displayed.
Bound to @kbd{@key{C-c} @key{C-t}}, a prefix argument means to prompt
for the new topic, otherwise it is just displayed.  Hidden channels and
the pseudo-channel 0 can not have topics associated with them.@refill

Other users on the channel will see the topic change if they have such
notification enabled.  The topic is also used in the @code{/LIST}
output.

There is a server bug that can cause some confusion with channel topics,
@xref{Server Bugs}.

@node UNALIAS, UNIGNORE, TOPIC, Commands
@section UNALIAS
@findex /UNALIAS
@findex irc-do-unalias

@example
/UNALIAS alias
@end example

You can remove aliases during an IRC session with the
@code{irc-do-unalias} function.  The @var{alias} argument can be any
unambiguous prefix of the alias that you want to remove.

@node UNIGNORE, USERS, UNALIAS, Commands
@section UNIGNORE
@findex /UNIGNORE
@findex irc-do-unignore

@example
/UNIGNORE @{ user | + | - @}
@end example

The @code{irc-do-unignore} command lets you stop ignoring someone you
have ignored with @code{/IGNORE}.  The @var{user} argument is checked
against the list of people you are ignoring.  If it is @samp{+} or
@samp{-} then everyone you are ignoring will no longer be ignored.

@node USERS, WHO, UNIGNORE, Commands
@section USERS
@findex /USERS
@findex irc-do-users

@example
/USERS [ server ]
@end example

@kbd{@key{C-c} u}, @code{irc-do-users}, will list the users signed on to
@var{server}; if @var{server} is not provided then the server to which
you are connected is used.  When called interactively, a prefix argument
means to prompt for the server to query.@refill

This list is not of users on IRC; it is the people logged into the
machine which is hosting the named server.

@node WHO, WHOIS, USERS, Commands
@section WHO
@findex /WHO
@findex irc-do-who

@example
/WHO [ channel | user ]
@end example

@kbd{@key{C-c} @key{C-w}}, @code{irc-do-who}, will give information
about people on IRC.  In its normal incarnation more information is
provided than @code{/NAMES} but less than @code{/WHOIS}.  A
@var{channel} argument requests information about only the users on
that channel; @samp{*} as a channel represents your current channel.
As a special case, @var{USER} gets passed to @code{/WHOIS}.  This makes
using the @code{/W} alias convenient for both types of requests.@refill

In the list returned, each user is indicated on a seperate line with his
nickname, channel, real name, login name and host.  The first column of
the line indicates the status of the user; @samp{-} for away, @samp{*}
for operator, @samp{=} for away operator and @samp{#} for someone you
are ignoring.  The last flag has priority over the others.  Your server
might not know that someone is away, @xref{Server Bugs}.

Users who are on secret channels or no channel are listed with nothing
in the @samp{Chan} column.  Users on hidden channels are not displayed.

When this function is called interactively then the prefix argument is
used as @var{channel}.  A prefix argument of @samp{-} will cause the
current channel to be used.

@node WHOIS, VERSION, WHO, Commands
@section WHOIS
@findex /WHOIS
@findex irc-do-whois

@example
/WHOIS user
@end example

The @code{irc-do-whois} command will get a two line description of
@var{user}.  Nickname globbing, @xref{Globbing}, is done on the
argument.  The information returned includes that found in the
@code{/WHO} list and also the server that the person is on.
Additionally, if your server knows that @var{user} is away then the away
message will be given.

@node VERSION, CONNECT, WHOIS, Commands
@section VERSION
@findex /VERSION
@findex irc-do-version

@example
/VERSION [ server ]
@end example

This command will show the version of @var{server}.  Without this
argument then your server is queried for its version and the version of
IRC-mode is also shown.  When invoked interactively
(@code{irc-do-version} is bound to @kbd{@key{C-c} @key{C-v}}) then a
prefix argument will cause @var{server} to be read using the
minibuffer.@refill

There is a bug which currently prevents a remote server from returing
its version, @xref{Server Bugs}.

@node CONNECT, KILL, VERSION, Commands
@section CONNECT
@findex /CONNECT
@findex irc-do-connect

@example
/CONNECT server [ port ]
@end example

The @code{irc-do-connect} operator command, bound to @kbd{@key{C-c} c}
by default, will attempt to force a connexion between your server and
@var{server} at @var{port}.  It @var{port} is not given then it defaults
to 6667.@refill

The server you name must be listed in your ircd configuration file,
@file{irc.conf}.  If it does not appear there then your server will
abort the attempt with an appropriate error message.@refill

@node KILL, REHASH, CONNECT, Commands
@section KILL
@findex /KILL
@findex irc-do-kill

@example
/KILL user
@end example

This operator command will forcibly remove @var{user} from IRC.  No
nickname globbing is done on the argument; it must be specified exactly,
as proof-positive against the occasional fickleness of globbing.  The
name, however, is case-insensitive.

@c @lecture
An acronym exists on the IRCnet for someone who is inclined to remove a
user merely because he does not like the way he spells, for example.
Being a @dfn{FOFH}, or Fascist Operator From Hell, is fun to joke about
but it is not really a moniker that most people respect for someone that
it accurately describes.  As with other high-visibility privileged commands,
@code{irc-do-kill} should be used sparingly and judiciously.@refill
@c @end lecture

@node REHASH, TRACE, KILL, Commands
@section REHASH
@findex /REHASH
@findex irc-do-rehash

@example
/REHASH
@end example

The @code{irc-do-rehash} command will re-read the configuration
information for your server from @file{irc.conf}.  Arguments to this
command are ignored.@refill

This command is typically used to change the access permissions of a
running server.  It is reserved to IRC operators.

@node TRACE, WALL, REHASH, Commands
@section TRACE
@findex /TRACE
@findex irc-do-trace

@example
/TRACE [ server ]
@end example

This operator command is used to examine routing on the IRCnet.  With
@var{server}, a token is passed from your server until it reaches the
named server.  Each server encountered along the path is displayed.
If no argument is provided then @code{irc-do-trace} will display the
servers to which your server is directly connected.

The output from @code{/TRACE} might be a little confusing depending on
how you visualize @samp{==>}.  For each line returned, @dfn{Connection}
indicates a direct connection between servers.  @dfn{Link} is a status
line indicating the progress of the token; the first server named is the
machine that it has reached and the second is the one for which it is
looking.@refill

@example
/trace
*** Connection netserv2.its.rpi.edu ==> wpi.edu
*** Connection netserv2.its.rpi.edu ==> ius2.cs.cmu.edu

/trace tavi.rice.edu
*** Link netserv2.its.rpi.edu ==> tavi.rice.edu
*** Link ius2.cs.cmu.edu ==> tavi.rice.edu
*** Link obie.cis.pitt.edu ==> tavi.rice.edu
*** Link eris.Berkeley.EDU ==> tavi.rice.edu
*** Link zephyr.cair.du.edu ==> tavi.rice.edu
*** Connection tavi.rice.edu ==> zephyr.cair.du.edu
@end example

@node WALL,, TRACE, Commands
@section WALL
@findex /WALL
@findex irc-do-wall

@example
/WALL message
@end example

The @code{irc-do-wall} function is used by operators to send
@var{message} to everyone on IRC.  It should be used only for messages
that are of importance to all of the users, such as to notify of a major
server node going down.

@c @soapbox 2
Many users to do not appreciate the flaunting of privilege.  What might
seem like a nice idea to you could very well be interpreted as not quite
as nice by the people who read your message.  @code{/WALL} is not for
saying good night or for announcing the current score of the Super Bowl.
Regular users also do not get to see things like connexions being
established or users being removed, so messages of ``Hey, who just killed
Arnie?'' also tend to be bad candidates for IRCnet-wide messages.
Please respect other people's sessions and give an extra moment of
thought to whether your message is really appropriate for the majority
of people on IRC.
@c @end soapbox 2

@node Display, Problems, Commands, Top
@chapter The Display
@cindex display

One interesting aspect of IRC is that running an IRC session is very
much unlike most of the typical applications of GNU Emacs.  The session
is asynchronous and the timing of events is unpredictable.  There are
also many different forms of usage of IRC.  Some users like to use it as
a tool for work and rarely spend much time at their session, though they
leave it active in the background so collegues can contact them easily.
Others like to participate in lively channel conversation and don't
often leave the *IRC* buffer.

IRC-mode tries to make its interaction with you pretty easy, no matter
the type of usage you prefer.  Unfortunately there are a myriad number
of ways to do this and it is sometimes the case that you even you
wouldn't know what you wanted it to do until you saw what it did.  That
is, you might not want to see an operator message which reported the
score of some sporting event but you would probably want to see one that
said your server was going down.  To IRC-mode, both of these are the
same type of event and it will act the same for each.

@menu
* Space::               Utilisation of display space by IRC-mode.
* Scrolling::           Pseudo-terminal scrolling of the session buffer.
* Paging::              Moving through the output region.
* Window Manipulation:: Special display of new output.
@end menu

@node Space, Scrolling,, Display
@section Space
@cindex space
@vindex irc-conserve-space

Two forms of message presentation are supported.  If the variable
@code{irc-conserve-space} is nil, the default value, then extra blank
lines are inserted and messages are prefixed with the sender and message
type, @xref{Message Types} on a line by itself.  This is to improve
readability and to aid in quickly identifying the target of a message.
If @code{irc-conserve-space} is non-nil then a more compact form of
presentation is used.  Gratuitous blank lines are not inserted and
messages have their originator and type prefixed in short form on their
first lines.@refill

@node Scrolling, Paging, Space, Display
@section Scrolling
@cindex scrolling

An attempt is made to simulate scrolling as is normally seen during
normal line interaction with terminals.  This is a new feature in
IRC-mode version 2.1; the old behaviour was to use Emacs' normal jump
scrolling, which repositions point at the center of the window when it
goes beyond the visible boundaries of the window.  The new method is a
little, though not much, slower and might look peculiar on some
terminals due to Emacs' screen manipulation routines.  It has been
observed on several different terminal types at speeds of 2400 baud and
up and is found to be generally acceptable.

You might occasionally see the jump scroll behaviour.  This has in all
cases so far been attributed to the fact that Emacs saves the window
configuration before reading something in the minibuffer; if you are in
the minibuffer when something is inserted at the end of an IRC session
window then it will jump to center when you exit the minibuffer.
@kbd{@key{C-u} - @key{C-l}} will put point at the bottom of the window
again.@refill

Currently there is no way to disable the attempt at scrolling.  If you
have a serious problem with it, please @xref{Problems} and send in a
message with your terminal type, emulation software, connexion speed and
the observed behaviour.

@node Paging, Window Manipulation, Scrolling, Display
@section Paging
@cindex paging

To work in one buffer, IRC-mode needs a way to distinguish between your
input and the output you receive.  It does this by keeping track of a
special marker in the session buffer; everything from the beginning of
the buffer to this position is called the @dfn{output region}.  The area
from the marker to the end of the buffer is the @dfn{input region}.@refill

Normally self-inserting characters will only insert themselves in the
input region.  If you are in the output region and type a self-inserting
character then the cursor will jump to the end of the input region and
the character will be inserted.

@vindex irc-spacebar-pages
The exception to the above is with the @kbd{@key{SPC}} character.  If
@code{irc-spacebar-pages} is non-nil, which it is by default, then when
you are output region four keys can be used to control forward and
backward motion in the buffer.  @kbd{@key{SPC}} scrolls the window
forward by one window.  @kbd{@key{RET}} will move the window forward by
one line.  @kbd{@key{DEL}} scrolls the window backward by one window and
@kbd{@key{TAB}} moves back one line.@refill

@node Window Manipulation,, Paging, Display
@section Window Manipulation
@cindex windows

If you have only one window, it is your IRC session, and you are in the
input region, then your environment is very straight-forward.  Your
display should scroll as described above.  Things get a little more
involved, though, if you have more than one window visible or are not in
the input region of your *IRC* buffer.

@vindex irc-pop-ratio
If the variable @code{irc-pop-ratio} is an integer greater than one then
pop-up windows are enabled for IRC-mode.  Pop-ups can be created number
of ways, depending on your current window configuration.  If a window is
split to accomodate display of your session then the reciprocal of the
value of @code{irc-pop-ratio} will be used as the height of the new
window relative to the window that was split.  That is, if
@code{irc-pop-ratio} is 3, the default value, then the IRC session
window will take up one-third of the window that is split to display
it.  If @code{irc-pop-ratio} is zero then windows will never be split or
pre-empted to show your session.@refill

The following descriptions of buffer displaying assume that you have
@code{irc-pop-ratio} set to allow it.  It is very useful to be
proficient with the following Emacs commands when using IRC-mode:@refill

@table @asis
@item @kbd{@key{C-x} 0}: @code{delete-window}
Remove the current window and distribute the screen space which it used
evenly among the remaining windows.

@item @kbd{@key{C-x} 1}: @code{delete-other-windows}
Remove all of the other windows and make the current window full-screen.

@item @kbd{@key{C-x} b}: @code{switch-to-buffer}
Replace the buffer of the current window with another named buffer.

@item @kbd{@key{C-x} 4 b}: @code{switch-to-buffer-other-window}
Select another buffer in the next window.

@item @kbd{@key{C-x} o}: @code{other-window}
Switch to another window.
@end table

If you have only one window and it is displaying your IRC session but
you are in the output region then the display will be split and the
bottom window will show the new output.  If you have only one IRC window
but multiple Emacs windows showing then the IRC window will be scrolled
as output arrives if you are in the input region.  If you are in the
output region then point will not be moved.

If you have multiple windows showing for the session then IRC-mode will
pick one that has point in the input region and scroll that window.  If
none of the visible session windows have point in the input region then
one will be commandeered; if you are in a session window it will not be
that one.  Point will be moved to the beginning of the input region in
the chosen window.

If you have no windows showing the session then IRC-mode will only show
it to you if you you get a signal in that session, @xref{SIGNAL}.  If
point is in the output region of the buffer then it will be moved to the
beginning of the input region.  If you have only one window then it will
be split to show the new output.   If you have more than one window but
there is one that is larger than half of the screen height, then the
largest window will be split.  This is useful when interacting with
various other packages like GNUS and mh-e.  If you have multiple windows
but none larger than half of the screen then the session will be
displayed in another window, not your currently selected one.

@node Problems, Glossary, Commands, Top
@chapter Problems

There are some problems with IRC-mode that come from several different
sources.  Some are bugs in the LISP that implements the client, some are
bugs in the servers that give it information and some are bugs in GNU
Emacs.  Some are deliberate design decisions that some people don't like
and some are simply cases that were never considered but could have a
different default behaviour.

If you are having a problem with IRC-mode first check this manual to see
if anything related to what you are experiencing is already documented,
either as a feature or as one of the mentioned problems in this chapter.
If IRC-mode told you that it is detected a bug and that you should mail
in a bug report, please do so.  It is important to include the line that
set off the message; this is the line that preceded it, usually starting
with a @samp{:}.  It is extremely helpful to also include a recipe that
can be used for consistently reproducing the problem.  Comments,
questions and bug reports should be sent to David C Lawrence,
<tale@@turing.cs.rpi.edu>.@refill

@findex irc-raw-mode
If the bug is seemingly related to interaction between the client and
the server then @code{irc-raw-mode} can be helpful in determining the
problem.  This command is normally bound to @kbd{@key{C-c} r},
which toggles display of all messages sent between the server and the
client.   When raw mode is enabled then none of the ``This is a bug''
notices are inserted, lines from the server are not passed through the
filters and the word @samp{Raw} appears in the modeline.  If
@code{irc-raw-mode} is given a prefix argument of 0 then @dfn{full} mode
is enabled; it is just like raw mode but server messages are passed
through their appropriate filters.@refill

In addition to raw mode, the Emacs-Lisp debugger can be useful in
tracking down faults.  This is really only feasible for dedicated
Emacs-Lisp hackers, though, and is not documented here.

In the following sections, all of the problems are called @dfn{bugs} as
a sweeping generality.  Some of them are in fact not bugs but just
problems that people encounter, either because a design decision was
made to have things act the way they do, as with using colon-terminated
sendlist prefixes, or because that's just the way things are, as with
garbage-collection.

@menu
* IRC-mode Bugs::       Problems attributable to IRC-mode.
* Server Bugs::         Problems caused by the IRCnet servers.
* Emacs Bugs::          Problems found in GNU Emacs.
@end menu

@node IRC-mode Bugs, Server Bugs,, Problems
@section IRC-mode Bugs

These problems and misunderstood features are aspects of IRC-mode that
can be attributed to the Emacs-Lisp code which makes it work.

@subsection Name Recognition

IRC-mode wants very much to be able to recognise partial representations
of nicknames, @xref{Globbing}.  Unfortunately the client never really
knows exactly what people are on IRC; this can cause bogus matches to
occur.  Most of the times they are harmless, though still annoying.
Sometimes it is very annoying because it can become quite difficult to
send to a user that you know exists but he is hidden and his nickname is
a prefix of someone that is visible.  IRC-mode does not get notified of
which people come and go, though, nor of people changing their nicknames
if you are not on the same channel as the person changing.  The list of
user nicknames gets emptied every time you do a @code{/NAMES} or
@code{/WHO} of all visible users on IRC because otherwise there is more
overhead in speed and memory usage and other false matches occur due to
many unused nicknames cluttering the list.@refill

There are two ways to deal with this problem.  One is to simply disable
globbing with @code{irc-toggle-glob}.  The other is to prod IRC-mode
into recognising that the person on the hidden channel is really on.
This will happen anytime it gets a line from the server that has the
other user's name in a predictable location.  Unfortunately you might
not be able to wait for him to do something to trigger this, so you can
use the @code{/QUOTE} command to do it yourself:@: @refill

@example
/quo whois user
@end example

This is actually a slightly more generic problem with IRC itself in that
clients can't notify their users of changes around them that they can
otherwise discover through more difficult methods.  It is listed as one
of the IRC-mode problems because of the extra demands that IRC-mode puts
on the system with the attempted name recoginition.

@subsection @samp{:}-terminated Sendlist Prefixes

Perhaps the most frequently heard complaint about IRC-mode has been that
``sandy: arf!'' sends a private message to Sandy of ``arf!'' rather than
a public message to the current channel of ``sandy: arf!''.  There is a
convention used by some people on IRC where they reply to other messages
on the channel by prepending the name of the person who sent the message
about which they are commenting.  During the design of IRC-mode this was
very much known and the method was implemented in spite of (indeed, ``to
spite'') that practise.

@subsection Garbage Collection

Garbage collection is a process which Lisp calls to reclaim memory that
is no longer being used.  When using a package like IRC-mode the
frequency of garbage collection is much shorter than during a simple
editing session.  For IRC-mode in particular, garbage collection can be
done very often if a lot of user data from the server is being
processed -- @code{/WHO} and @code{/NAMES} tend to be the biggest users
of memory in IRC-mode.

The interval between garbage collection can be stretched out by raising
the value of @code{gc-cons-threshold}.  It defaults to @w{100 000} and
represents the number of bytes of new storage that may be used before
the garbage collector is called again.  Raising this value is helpful
for those bothered by frequent collection.  The author finds the default
to be fine, but a value of @w{500 000} is good as a next step up.@refill

@subsection Speed

The Emacs client is admittedly slower than the stand-alone C client.
This is certainly due to the fact that it is just one application of a
large Emacs process.  On the machines on which it was developed,
IRC-mode was never found to be slowed enough to even be a little
irritating.  The speed criticism that has come up in the past is perhaps
really one of Emacs more than IRC-mode.  Unfortunately without a
Lisp-profiler it is difficult to optimise the code any further than it
has been already.

@subsection Space Used By Messages

People that are especially used to compact UNIX interaction, the C
client or who work mainly in twenty-four line screens often do not like
the default method of message presentation.  This is configurable with
the @code{irc-conserve-space} variable, @xref{Space}.

@subsection Bells

There are two items related to bells in Emacs.  The first issue is the
audible ringing of the bell for events; some people like the pop-up
window behaviour but don't want a beep or screen flash for those events.
This can be controlled with the @code{irc-silent-bell} variable,
@xref{SIGNAL}.

The other issue is the presence of @ctrl{G} characters in messages.  The
IRC protocol allows for them to be transferred through messages;
typically this would tell the terminal to beep when it encounters the
character.  IRC-mode does nothing at all special with these characters,
including remove them.  It is not for other users to decide when you
want a beep; @code{/SIGNAL} is provided for that.  It is also amusing to
see what users are trying to send beeps.  Some think that they are
getting away with something quite tricky when they do it on a public
channel, but IRC-mode users know exactly who it was that was trying to
sneak the beeps in.

@subsection Password Reading

The routine used by @code{/OPER} to read passwords could be a little
more robust in dealing with key-strokes.  It currently will just grab
anything that isn't @kbd{@key{RET}}, @kbd{@key{LFD}} or @kbd{@key{C-g}}.
@kbd{@key{C-h}} and @kbd{@key{DEL}} are both usable as destructive
backspace.  You are, however, stuck in the password routine until you
exit it.   This prevents window excursions and such that can normally be
done when something is being read in the minibuffer.@refill

@subsection Automatic Restart

This is a new feature of IRC version 2.1 and still needs polishing.
Current notable problems include improper cursor placement in the
restarted buffer and lack of continuity of your nickname if it has
changed from the default.

@node Server Bugs, Emacs Bugs, IRC-mode Bugs, Problems
@section Server Bugs

These problems pertain to the IRC servers directly.  Some of them may
already be fixed but all have been observed in servers up through
version 2.2PL1 of the standard IRC server.

@subsection Away

There are two problems with @dfn{Away} status on IRC.  The first is a
design decision made by the server programmers.  They will not pass
the status on to other servers when a local client goes away or becomes
here again.  Thus when you do a @code{/WHO} or @code{/WHOIS} the
information returned will not mark people on remote servers as
away when they are.@refill

The other problem is a bug.  An away message from a remote user will
return in the following format:

@example
:@: 301 twiggy out to lunch
@end example

This is not the way that the message should have returned; the name of
the person who is away is supposed to be included.  A properly formed
server message would look like this:

@example
:[server] 301 twiggy Orson :out to lunch
@end example

When IRC-mode detects a bogus message of the first form it will try to
accept it gracefully and report that, ``Someone is away, ``out to
lunch''.''  This of course is a little misleading, or maybe even exactly
correct, if there is a user by the name of @samp{Someone}.

@subsection Topics

When a server comes on-line it is not informed of existing channel
topics.  This can create the situation that some of the users on the
channel think it has a topic but other users don't think it has any.
Worse yet is the situation where seperate IRC subnets were rejoined and
half of the IRCnet then thinks a channel has one topic when the other
half thinks it has a very different one.

@subsection Time

Querying a remote server for its time can give somewhat unpredictable
results.  The message returned often lacks information, most notably the
responding server, as with the away messages above.  Often times the
time itself is only a partial representation of the information that
should be returned.  When IRC-mode encounters one of these poorly formed
replies then it will repond, ``It is {whatever it got} somewhere.''

@subsection Message of the Day

Remote servers have a hard time returning their message of the day when
asked for it.  They send back the correct number of lines for their
message of the day but those lines all lack the actual text of the
message.  If IRC-mode gets a reply like this it will report:

@example
(Sorry; a server bug prevents you from seeing this message of the day.)
@end example

@subsection Version

The remote server argument to the @code{/VERSION} command is mostly
ignored by the server.  Usually the version of your host server is
returned regardless of arguments.

@subsection Channel List

The IRC protocol says that @code{LIST} can take a channel argument.
This argument is ignored by servers.

@subsection Nickname Change Confirmation

IRC-mode would like to tell you whether your nickname has been changed or
not in a more clean way.  Unfortunately servers do not send confirmation
of a successful nickname change unless you are on a channel, so IRC-mode
must always report that your nickname was changed and only rescind that
positive confirmation if it gets and error.

@subsection Pattern Matching

The @samp{*} wild-card is supposed to match any number of characters,
including zero.  It does not work correctly to match zero characters at
the end of a string.

@example
/links sun.*
Server:@: sun.com (*)
Server:@: sun.soe.clarkson.edu (Clarkson, Potsdam, NY 13676)

/links sun.*com
Server:@: sun.com (*)

/links sun.com*
[nothing is returned here]
@end example

@subsection Ends of Lists

For people that like the extra blank lines in an IRC session, IRC-mode
would like to be able to insert a line at the end of every list, as with
the above examples of @code{/LINKS}.  It cannot do this because it
doesn't know for certain where any given list ends.  This isn't a bug in
the servers but could be seen as a useful extension to the protocol.

@node Emacs Bugs,, Server Bugs, Problems
@section Emacs Bugs

The bugs are due to GNU Emacs; perhaps one or two could be circumvented
by coding IRC-mode differently, but the code which exists and still has
these problems is technically correct.  These are found in GNU Emacs 18.55.

@subsection Cursor Location in X

Emacs ignores the ambient value of @code{cursor-in-echo-area} when
running in its own X window.  The password routine uses this variable to
put the cursor in the minibuffer while the password is being read.

@subsection Byte-Compiler

The byte-compiler does something wrong with @code{irc-do-stamp}.  When
not byte-compiled, with only private messages getting time stamps:

@example
/stamp public
Private and public messages get time-stamps.  The time interval is 15 minutes.
@end example

However, the same example with a byte-compiled @code{irc-do-stamp}:

@example
/stamp public
No messages get time-stamps.  The time interval is fifteen minutes.
@end example

@subsection Making Connexions

There is a rather elusive Emacs bug that has been seen with IRC-mode and
and a couple of other packages which use @code{open-network-stream}.
Sometimes Emacs will not succeed in making the connexion the first time
it tries even though there is no apparent reason why it should fail.
When this happens a second attempt usually proves successful.@refill

A possibly related Emacs bug is seen when the display switches to the
session buffer but the opening version line of IRC-mode is not
displayed, nor does anything seem to be happening.  Often times simply
typing any key, such as @kbd{@key{SPC}}, will get the message and an
announcement that the connexion attempt was unsuccessful.  This
behaviour generally indicates a genuine problem with reaching the
server, such as it being down.@refill

@subsection Dropping Connexions

Every once in a while Emacs doesn't notice that it has lost the
connexion that it had to the server.  This is thought to be more of a
general network problem and not a specific Emacs bug.

@subsection Buffer Selection

This might be a bug in IRC-mode or one in Emacs.  It has been noticed
during i-search with @code{search-slow-speed} set and new output in the
IRC session.  Perhaps any server message, like @samp{PING} which does
not result in output, causes it.  Perhaps, also, it only occurs if the
interval timer is on.  Not much time has been spent trying to debug this
yet; it is a tricky thing to nail down.  What happens is the i-search
window gets replaced with another buffer than the one you were searching
in and the search continues (and usually starts failing) in that new
buffer.

@subsection Interaction with GNUS

It has been observed that if a signal is issued for an event while the
GNUS news reader is getting data via NNTP then it will hang for a
lengthy period of time.  It appears to be completely dead, but after a
minute or two of pause it will resume what it was doing.  This hanging
is not something that was designed in to IRC-mode and is directly
related to the @code{ding} LISP function.

@node Glossary, Index, Problems, Top
@appendix Glossary
@c this section needs work.

@table @asis
@item channels
The basic meeting places on IRC, where you can talk to a group of people
simultaneously.  From the Citizen's Band (CB) Radio world, @xref{Channels}.

@item client
A programme that is used to communicate with a server.

@item FOFH
Fascist Operator From Hell.  An operator who has little tolerance for
chicanery and will remove a user at the slightest provocation.

@item globbing
Expansion of a name subset to its full representation, @xref{Globbing}.

@item input region
The area of you session buffer where you type new input, @xref{Paging}.

@item IRC
Internet Relay Chat.

@item n|ff n|ff
A common greeting on IRC.  This is Finnish for the noise that a pig makes.

@item operator
A user on IRC who maintains a server.  Can remove users and try to make
new connexions.

@item output region
Your processed input and any output you have received, @xref{Paging}.

@item prefix argument
A numeric argument provided to a command before invoking it through its
keybinding or @code{execute-extended-command}, @kbd{@key{M-x}}.  It is
done by typing @kbd{@key{ESC}} or @kbd{@key{C-u}} followed by the
number.@refill 

@item server
A machine that maintains information for use by a client and talks to 
other machines on the client behalf.

@item smiley
Most commonly seen as @dfn{:@:-)}, representing a smiling face turned on
its side.  There are many variants on this which attempt to convey a
wide variety of emotion.

@item Twilight Zone
The domain of the operators.  Named for Rod Serling's series based on
the period when people are transitioning out of sleep.
@c I still don't know what The Twilight Zone has to do with operators.
@end table

@node Index,, Glossary, Top
@unnumbered Concept Index

@printindex cp

@unnumbered Command, Function and Variable Index

@printindex fn

@summarycontents
@contents

@bye
