* net/tramp-sh.el (tramp-sh-handle-set-file-acl): Add argument to
[bpt/emacs.git] / doc / misc / rcirc.texi
CommitLineData
4009494e
GM
1\input texinfo
2@c %**start of header
db78a8cb 3@setfilename ../../info/rcirc
4009494e
GM
4@settitle rcirc Manual
5@c %**end of header
6
7@copying
f99f1641 8Copyright @copyright{} 2006--2012 Free Software Foundation, Inc.
4009494e
GM
9
10@quotation
11Permission is granted to copy, distribute and/or modify this document
6a2c4aec 12under the terms of the GNU Free Documentation License, Version 1.3 or
4009494e
GM
13any later version published by the Free Software Foundation; with no
14Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
15and with the Back-Cover Texts as in (a) below. A copy of the license is
debf4439 16included in the section entitled ``GNU Free Documentation License''.
4009494e 17
6f093307 18(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
6bf430d1 19modify this GNU manual.''
4009494e
GM
20@end quotation
21@end copying
22
0c973505 23@dircategory Emacs network features
4009494e 24@direntry
62e034c2 25* Rcirc: (rcirc). Internet Relay Chat (IRC) client.
4009494e
GM
26@end direntry
27
28@titlepage
29@title rcirc Manual
30@page
31@vskip 0pt plus 1filll
32@insertcopying
33@end titlepage
34
5dc584b5
KB
35@contents
36
4009494e 37@ifnottex
563a450c 38@node Top
4009494e 39@top rcirc Manual
4009494e
GM
40
41@code{rcirc} is an Emacs IRC client.
42
43IRC (Internet Relay Chat) is a multi-user chat protocol. Users
44communicate with each other in real-time. Communication occurs both in
45topic channels which are collections of many users, or privately, with
46just one other user.
47
5dc584b5
KB
48@insertcopying
49
50@end ifnottex
51
4009494e
GM
52@menu
53* Basics::
54* Reference::
331e4d02 55* Fighting Information Overload::
4009494e
GM
56* Hacking and Tweaking::
57* GNU Free Documentation License::
58* Key Index::
59* Variable Index::
60* Index::
61
62@detailmenu
63 --- The Detailed Node Listing ---
64
65Basics
66
67* Internet Relay Chat::
68* Getting started with rcirc::
69
70Reference
71
72* rcirc commands::
73* Useful IRC commands::
74* Configuration::
75
331e4d02
AS
76Fighting Information Overload
77
78* Channels::
79* People::
80* Keywords::
81* Notices::
82
4009494e
GM
83Hacking and Tweaking
84
85* Skipping /away messages using handlers::
86* Using fly spell mode::
87* Scrolling conservatively::
88* Changing the time stamp format::
89* Defining a new command::
90* Reconnecting after you have lost the connection::
91
92@end detailmenu
93@end menu
94
563a450c 95@node Basics
4009494e
GM
96@chapter Basics
97
98This chapter contains a brief introduction to IRC (Internet Relay Chat),
99and a quick tutorial on @code{rcirc}.
100
101@menu
102* Internet Relay Chat::
103* Getting started with rcirc::
104@end menu
105
563a450c 106@node Internet Relay Chat
4009494e
GM
107@section Internet Relay Chat
108@cindex internet relay chat
109@cindex irc
110
111@cindex channel
112@dfn{Internet Relay Chat} (IRC) is a form of instant communication over the
113Internet. It is mainly designed for group (many-to-many) communication
114in discussion forums called channels, but also allows one-to-one
115communication.
116
117@cindex instant messaging, comparison
118@cindex server
119@cindex network
120Contrary to most Instant Messenger (IM) systems, users usually don't
99a3e35f
AS
121connect to a central server. Instead, users connect to a random
122server in a network, and servers relay messages from one to the next.
4009494e
GM
123
124Here's a typical example:
125
126@cindex redirection to random servers
127When you connect to the Freenode network
128(@code{http://freenode.net/}), you point your IRC client at the
129server @code{irc.freenode.net}. That server will redirect your client
130to a random server on the network, such as @code{zelazny.freenode.net}.
131
132@cindex channel name
133@cindex # starts a channel name
134Once you're connected, you can send messages to all other users
135connected to the same network, and you can join all channels on the same
136network. You might join the @code{#emacs} and the @code{#rcirc}
137channels, for example. (Typically, channel names begin with a hash
138character.)
139
140Once you have joined a channel, anything you type will be broadcast to
141all the other users on the same channel.
142
143@cindex addressing other people
144@cindex other people, addressing them
145@cindex talk to other people
146If you want to address someone specifically, for example as an answer to
147a question, it is customary to prefix the message with the nick followed
148by a colon, like this:
149
150@example
151deego: fsbot rules!
152@end example
153
154@cindex nick completion
155@cindex completion of nicks
156@kindex TAB
157Since this is so common, you can use @key{TAB} to do nick completion.
158
563a450c 159@node Getting started with rcirc
4009494e
GM
160@section Getting started with rcirc
161@cindex getting started
162@cindex connecting to a server
163
164@cindex irc command
165Use the command @kbd{M-x irc} to connect using the defaults.
166@xref{Configuration}, if you want to change the defaults.
167
1df7defd 168Use @kbd{C-u M-x irc} if you don't want to use the defaults, e.g., if you
4009494e
GM
169want to connect to a different network, or connect to the same network
170using a different nick. This will prompt you for four things:
171
172@table @asis
173@cindex server, connecting
174@cindex Freenode network
99a3e35f 175@item IRC Server
4009494e
GM
176What server do you want to connect to? All the servers in a particular
177network are equivalent. Some networks use a round-robin system where a
178single server redirects new connections to a random server in the
179network. @code{irc.freenode.net} is such a server for the Freenode
180network. Freenode provides the network ``for the Free and Open Source
6772c8e1 181Software communities, for not-for-profit organizations and for related
4009494e
GM
182communities and organizations.''
183
184@cindex port, connecting
185@cindex 6667, default IRC port
99a3e35f 186@item IRC Port
4009494e
GM
187All network connections require a port. Just as web servers and clients
188use port 80 per default, IRC uses port 6667 per default. You rarely
189have to use a different port.
190
191@cindex nick, connecting
192@cindex changing nick
193@cindex name changes
99a3e35f 194@item IRC Nick
4009494e
GM
195@vindex user-login-name
196Every users needs a handle on-line. You will automatically be assigned
197a slightly different nick if your chosen nick is already in use. If
198your @code{user-login-name} is @code{alex}, and this nick is already
199in use, you might for example get assigned the nick @code{alex`}.
200
201@cindex channels, connecting
202@cindex initial channels
203@cindex startup channels
99a3e35f 204@item IRC Channels
4009494e
GM
205A space separated list of channels you want to join when connecting.
206You don't need to join any channels, if you just want to have one-to-one
207conversations with friends on the same network. If you're new to the
208Freenode network, join @code{#emacs}, the channel about all things
209Emacs, or join @code{#rcirc}, the channel about @code{rcirc}.
210@end table
211
212@cindex server buffer
213When you have answered these questions, @code{rcirc} will create a server
214buffer, which will be named something like @code{*irc.freenode.net*},
215and a channel buffer for each of the channels you wanted to join.
216
217@kindex RET
218@cindex talking
219@cindex communicating
99a3e35f 220To talk in a channel, just type what you want to say in a channel
4009494e
GM
221buffer, and press @key{RET}.
222
223@kindex C-c C-c
224@cindex multiline messages
225@cindex messages, multiple lines
226@cindex pasting multiple lines
227@cindex edit message before sending
228If you want to paste multiple lines, such as source code, you can use
229@kbd{C-c C-c} to edit your message in a separate buffer. Use @kbd{C-c
230C-c} to finish editing. You still need to press @key{RET} to send it,
231though. Generally, IRC users don't like people pasting more than around
232four lines of code, so use with care.
233
99a3e35f
AS
234@comment This section copied from the Channels section.
235@comment All index markers should point to the original!
236Once you are connected to multiple channels, or once you've turned you
237attention to other buffers in Emacs, you probably want to be notified
238of any activity in channels not currently visible. All you need to do
239is switch channel tracking on using @kbd{M-x rcirc-track-minor-mode}.
240To make this permanent, add the following to your init file:
331e4d02
AS
241
242@example
243(rcirc-track-minor-mode 1)
244@end example
245
99a3e35f
AS
246Use @kbd{C-c C-@key{SPC}} to switch to these buffers.
247
563a450c 248@node Reference
4009494e
GM
249@chapter Reference
250@cindex reference
251
252This is the reference section of the manual. It is not complete. For
253complete listings of @code{rcirc} features, use Emacs built-in
254documentation.
255
256@menu
257* rcirc commands::
258* Useful IRC commands::
259* Configuration::
260@end menu
261
563a450c 262@node rcirc commands
4009494e
GM
263@section rcirc commands
264@cindex rcirc commands
265@cindex commands
266
267@kindex C-h m
268This is a list of commands that you may use in @code{rcirc}. It is not
269complete. For a complete listing, press @kbd{C-h m} in an @code{rcirc}
270buffer.
271
272In addition to using regular Emacs key bindings, you can call them by
273typing them into an @code{rcirc} buffer.
274
275@cindex call commands
276@cindex typing commands
277@cindex commands
278For instance, instead of using the command @kbd{C-c C-j} to join a new
279channel, you may type this in an @code{rcirc} buffer, and press @key{RET}:
280
281@example
282/join #emacs
283@end example
284
285@cindex / starts a command
286@cindex messages starting with a slash disappear
287@cindex disappearing messages if starting with a slash
288@cindex slash hides message
289This is why you cannot start a message with a slash. You will have to
290precede the command with a space, or rewrite your message in order to
291send it to a channel.
292
293@cindex multiple words as parameters
294@cindex string delimiters
295@cindex quotes
296@cindex double-quotes
297Many commands take parameters. IRC commands usually ignore string
298delimiters. Neither quote nor double-quote have special meanings in
299IRC.
300
301@example
302/nick "alex schroeder"
303@end example
304
305This will try to change your nick to @code{"alex}. Usually this will
a7d51a21 306fail because the double quote character is not a valid character for
4009494e
GM
307nicks.
308
309@cindex case insensitive commands
310These commands are case insensitive.
311
312@cindex new command
313@cindex unknown command
314@cindex command unknown
315If a command isn't known by @code{rcirc}, it will simply be sent along to the
316server. There is a list of some useful commands like that in the next
317section.
318
319@table @kbd
320@item C-c C-j
321@kindex C-c C-j
322@cindex /join
323@cindex join channels
324@cindex other channels
325@cindex rooms, joining
326@cindex discussion, joining
327This joins a channel such as @code{#rcirc} or @code{#emacs}. On most
328networks, anybody can create new channels. If you want to talk with
329some friends, for example, all you have to do is agree on a valid
330channel name and join that channel. (Also @code{/join #emacs}.)
331
332@item C-c C-p
333@kindex C-c C-p
334@cindex /part
335@cindex part a channel
336@cindex leave a channel
337@cindex disconnect from a channel
338@cindex stop talking on a channel
339@cindex kill channel buffer
340This leaves the current channel. You can optionally provide a reason
341for parting. When you kill a channel buffer, you automatically part the
342corresponding channel. (Also @code{/part you are too weird!}.)
343
344@item C-c C-r
345@kindex C-c C-r
346@cindex /nick
347@cindex change name
348@cindex nick changing
349@cindex rename yourself
350@cindex other name
351This changes your nick to some other name. Your nick must be unique
352across the network. Most networks don't allow too many nick changes in
353quick succession, and have restrictions on the valid characters in nick
354names. (Also @code{/nick alex-test})
355
356@item C-c C-w
357@kindex C-c C-w
358@cindex /whois
359@cindex who are these people
360@cindex identifying people
361@cindex channels other people are on
362@cindex what channels people are on
363Gives you some basic information about a nick. This often includes what
364other channels people are on. (Also @code{/whois fsbot}.)
365
366@item C-c C-q
367@kindex C-c C-q
368@cindex /query
369@cindex starting a private conversation
370@cindex one-to-one conversation
371@cindex talk privately
372@cindex private conversation
373@cindex contact one person only
374@cindex query a person
375Starts a one-to-one conversation with another person on the same
376network. A new buffer will be created for this conversation. It works
377like a channel with only two members. (Also @code{/query fsbot}.)
378
379@item C-c @key{RET}
380@kindex C-c RET
381@cindex /msg
382@cindex single message
383@cindex message sending
384This sends a single message to a nick. Like with @kbd{C-c C-q}, a new
385buffer is created, where the response from the other party will show
386up. (Also @code{/msg nickserv identify secret}.)
387
388@item C-c C-x
389@kindex C-c C-x
390@cindex /quit
391@cindex quit
392@cindex disconnect
393@cindex kill connection
394@cindex connection end
395@cindex part all channels
396@cindex end connection
397@cindex server buffer killing
398@cindex reason for quitting
399This disconnects from the server and parts all channels. You can
400optionally provide a reason for quitting. When you kill the server
401buffer, you automatically quit the server and part all channels. (Also
402@code{/quit ZZZzzz...}.)
403@end table
404
563a450c 405@node Useful IRC commands
4009494e
GM
406@section Useful IRC commands
407@cindex irc commands
408@cindex commands
409
410As mentioned, if a command isn't known by @code{rcirc}, it will simply be sent
411along to the server. Some such commands are available on nearly all IRC
412servers, such as:
413
414@table @code
415@item /away
416@cindex /away
417@cindex away status
418@cindex pause status
419@cindex unavailable status
420@cindex set away status
421This sets your status as ``being away'' if you provide a reason, or sets
422your status as ``being back'' if you do not. People can use the
423@kbd{C-c C-w} command to check your status. Example: @code{/away food}.
424@end table
425
426@cindex irc resources
427@cindex help about irc
428Typical IRC servers implement many more commands. You can read more
429about the fantastic world of IRC online at
430@uref{http://www.irchelp.org/, the Internet Relay Chat (IRC) help
431archive}.
432
563a450c 433@node Configuration
4009494e
GM
434@section Configuration
435@cindex configuring rcirc
436
437These are some variables you can change to configure @code{rcirc} to your
438liking.
439
440@table @code
125a630f
AS
441@item rcirc-server-alist
442@vindex rcirc-server-alist
443@cindex channels, configuration
444@cindex initial channels, configuration
445@cindex startup channels, configuration
446@cindex servers, configuration
447@cindex initial servers, configuration
448@cindex startup servers, configuration
99a3e35f
AS
449This variable contains an alist of servers to connect to by default
450and the keywords parameters to use. The keyword parameters are
451optional. If you don't provide any, the defaults as documented below
452will be used.
4009494e 453
99a3e35f 454The most important parameter is the @code{:channels} parameter. It
125a630f
AS
455controls which channels you will join by default as soon as you are
456connected to the server.
457
458Here's an example of how to set it:
459
460@example
461(add-to-list 'rcirc-server-alist
462 '("otherworlders.org"
463 :channels ("#FUDGE" "#game-design")))
464@end example
465
466By default you will be connected to the @code{rcirc} support channel:
467@code{#rcirc} on @code{irc.freenode.net}.
468
469@table @code
470@item :nick
471This overrides @code{rcirc-default-nick}.
472
473@item :port
474This overrides @code{rcirc-default-port}.
475
476@item :user-name
477This overrides @code{rcirc-default-user-name}.
478
479@item :full-name
480This overrides @code{rcirc-default-full-name}.
481
482@item :channels
99a3e35f
AS
483This describes which channels to join when connecting to the server.
484If absent, no channels will be connected to automatically.
125a630f
AS
485
486@end table
4009494e
GM
487
488@item rcirc-default-nick
489@vindex rcirc-default-nick
99a3e35f 490This variable is used for the default nick. It defaults to the login
125a630f 491name returned by @code{user-login-name}.
4009494e
GM
492
493@example
125a630f 494(setq rcirc-default-nick "kensanata")
4009494e
GM
495@end example
496
125a630f
AS
497@item rcirc-default-port
498@vindex rcirc-default-port
499@cindex port
99a3e35f 500This variable contains the default port to connect to. It is 6667 by
125a630f
AS
501default and rarely needs changing.
502
503@item rcirc-default-user-name
504@vindex rcirc-default-user-name
505@cindex user name
99a3e35f
AS
506This variable contains the default user name to report to the server.
507It defaults to the login name returned by @code{user-login-name}, just
508like @code{rcirc-default-nick}.
125a630f 509
3da13bb9
DD
510@item rcirc-default-full-name
511@vindex rcirc-default-full-name
4009494e
GM
512@cindex full name
513@cindex real name
514@cindex surname
1df7defd 515This variable is used to set your ``real name'' on IRC@. It defaults
99a3e35f
AS
516to the name returned by @code{user-full-name}. If you want to hide
517your full name, you might want to set it to some pseudonym.
4009494e
GM
518
519@example
3da13bb9 520(setq rcirc-default-full-name "Curious Minds Want To Know")
4009494e
GM
521@end example
522
125a630f 523@item rcirc-authinfo
4009494e 524@vindex rcirc-authinfo
fac916bf 525@cindex authentication
4009494e
GM
526@cindex identification
527@cindex nickserv
528@cindex login
125a630f 529This variable is an alist used to automatically identify yourself on
99a3e35f
AS
530networks. Each sublist starts with a regular expression that is
531compared to the server address you're connecting to. The second
532element in the list is a symbol representing the method to use,
533followed by the arguments this method requires.
4009494e
GM
534
535Here is an example to illustrate how you would set it:
536
537@example
538(setq rcirc-authinfo
539 '(("freenode" nickserv "bob" "p455w0rd")
540 ("freenode" chanserv "bob" "#bobland" "passwd99")
541 ("bitlbee" bitlbee "robert" "sekrit")))
542@end example
543
544And here are the valid method symbols and the arguments they require:
545
546@table @code
547@item nickserv
fac916bf 548@cindex nickserv authentication
4009494e
GM
549Use this symbol if you need to identify yourself as follows when
550connecting to a network: @code{/msg nickserv identify secret}. The
551necessary arguments are the nickname you want to use this for, and the
552password to use.
553
554Before you can use this method, you will have to register your nick and
555pick a password for it. Contact @code{nickserv} and check out the
556details. (Using @code{/msg nickserv help}, for example.)
557
558@item chanserv
fac916bf 559@cindex chanserv authentication
4009494e
GM
560Use this symbol if you need to identify yourself as follows if you want
561to join a particular channel: @code{/msg chanserv identify #underground
562secret}. The necessary arguments are the nickname and channel you want
563to use this for, and the password to use.
564
565Before you can use this method, a channel contact must tell you about
566the password to use. Contact @code{chanserv} and check out the details.
567(Using @code{/msg chanserv help}, for example.)
568
569@item bitlbee
fac916bf 570@cindex bitlbee authentication
4009494e
GM
571Use this symbol if you need to identify yourself in the Bitlbee channel
572as follows: @code{identify secret}. The necessary arguments are the
573nickname you want to use this for, and the password to use.
574
575@cindex gateway to other IM services
576@cindex instant messaging, other services
577@cindex Jabber
578@cindex AIM
579@cindex ICQ
580@cindex MSN
581@cindex Yahoo!
582Bitlbee acts like an IRC server, but in fact it is a gateway to a lot of
583other instant messaging services. You can either install Bitlbee
584locally or use a public Bitlbee server. There, you need to create an
585account with a password. This is the nick and password you need to
fac916bf 586provide for the bitlbee authentication method.
4009494e
GM
587
588Later, you will tell Bitlbee about your accounts and passwords on all
589the other instant messaging services, and Bitlbee will log you in. All
590@code{rcirc} needs to know, is the login to your Bitlbee account. Don't
591confuse the Bitlbee account with all the other accounts.
331e4d02 592
4009494e
GM
593@end table
594
125a630f
AS
595@end table
596
563a450c 597@node Fighting Information Overload
331e4d02
AS
598@chapter Fighting Information Overload
599@cindex information overload
600
601This is the section of the manual that caters to the busy person
99a3e35f
AS
602online. There are support channels with several hundred people in
603them. Trying to follow a conversation in these channels can be a
604daunting task. This chapters tells you how @code{rcirc} can help.
331e4d02
AS
605
606@menu
607* Channels::
608* People::
609* Keywords::
610* Notices::
611@end menu
612
563a450c 613@node Channels
331e4d02
AS
614@section Channels
615@cindex channels
616@cindex modeline
617
99a3e35f 618@comment This section copied to the Getting started with rcirc section
4009494e
GM
619@kindex C-c C-SPC
620@vindex rcirc-track-minor-mode
621@cindex switching channels
622@cindex tracking activity
623@cindex active channel
624@cindex abbreviated channel names
625@cindex modeline tracks activity
626Most people want a notification when something is said on a channel they
627have joined, particularly if they have been addressed directly. There
628is a global minor mode that will do this kind of tracking for you. All
629you need to do is switch it on using @kbd{M-x rcirc-track-minor-mode}.
630To make this permanent, add the following to your init file:
631
632@example
633(rcirc-track-minor-mode 1)
634@end example
635
636When other people say things in buffers that are currently buried (no
637window is showing them), the mode line will now show you the abbreviated
638channel or nick name. Use @kbd{C-c C-@key{SPC}} to switch to these
639buffers.
640
641@vindex rcirc-mode-hook
642If you prefer not to load @code{rcirc} immediately, you can delay the
643activation of this mode:
644
645@example
646(add-hook 'rcirc-mode-hook
647 (lambda ()
648 (rcirc-track-minor-mode 1)))
649@end example
650
331e4d02
AS
651@cindex busy channels
652If you've joined a very active support channel, tracking activity is
99a3e35f 653no longer useful. The channel will be always active. Switching to
331e4d02
AS
654active channels using @kbd{C-c C-@key{SPC}} no longer works as
655expected.
656
657@kindex C-c C-l
658@cindex low priority channels
867d4bb3 659The solution is to mark this channel as a low priority channel.
99a3e35f
AS
660Use @kbd{C-c C-l} to make the current channel a low-priority channel.
661Low priority channels have the modeline indicator ``LowPri''.
331e4d02
AS
662@kbd{C-c C-@key{SPC}} will not switch to low priority channels unless
663you use the @kbd{C-u} prefix.
664
665@kindex C-c TAB
666@cindex ignored channels
667If you prefer a channel to never show up in the modeline, then you
99a3e35f 668have to ignore it. Use @kbd{C-c @key{TAB}} to ignore the current
331e4d02
AS
669channel.
670
563a450c 671@node People
331e4d02
AS
672@section People
673@cindex people, how to ignore
674@cindex nicks, how to ignore
675@cindex friends
676@cindex buddies
677@cindex trolls
678
679The most important command available to the discerning IRC user is
99a3e35f 680@code{/ignore}. It's the big equalizer online: If people aggravate
331e4d02
AS
681you, just ignore them.
682
683This is of course a crude all-or-nothing solution. Fear not,
684@code{rcirc} offers alternatives: You can ``brighten'' your buddies
685and ``dim'' certain other nicks that you don't want to ignore
686altogether.
687
688@table @code
689@item /ignore
690@cindex /ignore
691@cindex ignoring other people
692@cindex trolls, ignoring
693@cindex hide some posts
694@cindex idiots online
695This command toggles the ignore status of a nick, if you provide one.
696If you don't provide a nick, the command lists all the nicks you are
697ignoring. All messages by ignored nicks are---you guessed it---ignored.
698Since only ``operators'' can kick people from channels, the
699ignore command is often the only way to deal with some of the more
11ac7c8e 700obnoxious fellows online. Example: @code{/ignore rudybot}.
331e4d02
AS
701
702@item /bright
703@cindex /bright
704@cindex highlight other people
705@cindex friends, highlight
706@cindex buddies, highlight
707@cindex nicks, highlight
708@cindex brighten nicks
709This command toggles the bright status of a nick, if you provide one.
710If you don't provide a nick, the command lists all the ``brightened''
711nicks. All messages by brightened nicks are---you guessed
99a3e35f 712it---brightened. Use this for your friends. Example: @code{/bright
331e4d02
AS
713rcy}.
714
715@item /dim
716@cindex /dim
717@cindex soft-ignore other people
718@cindex obnoxious people online
719@cindex rabble online
720This command toggles the dim status of a nick, if you provide one. If
721you don't provide a nick, the command lists all the ``dimmed'' nicks.
722All messages by dimmed nicks are---you guessed it---dimmed. Use this
99a3e35f
AS
723for boring people and bots. If you are tracking channel activity,
724messages by dimmed nicks will not register as activity. Example:
331e4d02
AS
725@code{/dim fsbot}.
726@end table
727
728
563a450c 729@node Keywords
331e4d02
AS
730@section Keywords
731@cindex keywords
732
733On a busy channel, you might want to ignore all activity (using
99a3e35f 734@kbd{C-c @key{TAB}}) and just watch for certain keywords. The
331e4d02
AS
735following command allows you to highlight certain keywords:
736
737@table @code
738@item /keyword
739@cindex /keyword
740This command toggles the highlighting of a keyword, if you provide
99a3e35f
AS
741one. If you don't provide a keyword, the current keywords are
742listed. Example: @code{/keyword manual}.
331e4d02
AS
743@end table
744
563a450c 745@node Notices
331e4d02 746@section Notices
867d4bb3 747@cindex part notices, how to omit
331e4d02
AS
748@cindex join notices, how to omit
749@cindex quit notices, how to omit
750@cindex nick notices, how to omit
751
752@kindex C-c C-o
753@cindex low priority channels
754In busy channels you might not be interested in all the joining,
99a3e35f 755parting, quitting, and renaming that goes on. You can omit those
331e4d02
AS
756notices using @kbd{C-c C-o}.
757
758@vindex rcirc-omit-responses
759@cindex away notices, how to omit
760You can control which notices get omitted via the
99a3e35f
AS
761@code{rcirc-omit-responses} variable. Here's an example of how to
762omit away messages:
331e4d02
AS
763
764@example
f4f3b439 765(setq rcirc-omit-responses '("JOIN" "PART" "QUIT" "NICK" "AWAY"))
331e4d02
AS
766@end example
767
768@vindex rcirc-omit-threshold
769Notice that these messages will not be omitted if the nick in question
99a3e35f
AS
770has recently been active. After all, you don't want to continue a
771conversation with somebody who just left. That's why @code{rcirc}
331e4d02 772checks recent lines in the buffer to figure out if a nick has been
99a3e35f 773active and only omits a message if the nick has not been active. The
331e4d02
AS
774window @code{rcirc} considers is controlled by the
775@code{rcirc-omit-threshold} variable.
776
563a450c 777@node Hacking and Tweaking
4009494e
GM
778@chapter Hacking and Tweaking
779@cindex hacking and tweaking
780
781Here are some examples of stuff you can do to configure @code{rcirc}.
782
783@menu
784* Skipping /away messages using handlers::
785* Using fly spell mode::
786* Scrolling conservatively::
787* Changing the time stamp format::
788* Defining a new command::
789* Reconnecting after you have lost the connection::
790@end menu
791
563a450c 792@node Skipping /away messages using handlers
4009494e
GM
793@section Skipping @code{/away} messages using handlers
794@cindex /away messages
795
796@cindex handlers
797@cindex status codes
798The IRC protocol specifies how certain events are signaled from server
799to client. These events have numbers and are dealt with using so-called
800handlers. You can override existing handlers by exploiting the naming
801convention adopted for @code{rcirc}.
802
803Here's how to stop @code{rcirc} from printing @code{/away} messages.
804Since @code{rcirc} doesn't define a 301 handler, you don't need to
805require @code{rcirc} before defining the handler:
806
807@example
808(defun rcirc-handler-301 (process cmd sender args)
809 "/away message handler.")
810@end example
811
563a450c 812@node Using fly spell mode
4009494e
GM
813@section Using fly spell mode
814@cindex fly spell
815@cindex spelling
816@cindex spell-checking as you type
817@cindex automatic spelling
818@vindex rcirc-mode-hook
819
820The following code activates Fly Spell Mode
821for @code{rcirc} buffers:
822
823@example
824(add-hook 'rcirc-mode-hook (lambda ()
825 (flyspell-mode 1)))
826@end example
827
828@xref{Spelling, , Flyspell mode, emacs, The GNU Emacs Manual},
829for details.
830
563a450c 831@node Scrolling conservatively
4009494e
GM
832@section Scrolling conservatively
833@cindex input line
834@cindex scrolling
835@vindex scroll-conservatively
836@vindex rcirc-mode-hook
837
838IRC buffers are constantly growing. If you want to see as much as
839possible at all times, you would want the prompt at the bottom of the
840window when possible. The following snippet uses a local value for
841@code{scroll-conservatively} to achieve this:
842
843@example
844(add-hook 'rcirc-mode-hook
845 (lambda ()
846 (set (make-local-variable 'scroll-conservatively)
847 8192)))
848@end example
849
850@xref{Scrolling, , Scrolling conservatively, emacs, The GNU Emacs
851Manual}, for details.
852
563a450c 853@node Changing the time stamp format
4009494e
GM
854@section Changing the time stamp format
855@cindex time stamp
856@cindex date time
857@cindex format time stamp
858@vindex rcirc-time-format
859
860@code{rcirc-time-format} is the format used for the time stamp. Here's
861how to include the date in the time stamp:
862
863@example
864(setq rcirc-time-format "%Y-%m-%d %H:%M ")
865@end example
866
563a450c 867@node Defining a new command
4009494e
GM
868@section Defining a new command
869@cindex defining commands
870@cindex commands, defining
871@cindex new commands, defining
872
873Here's a simple new command, @code{/sv}. With it, you can boast about
874your IRC client. It shows how you can use @code{defun-rcirc-command} to
875define new commands.
876
877We're waiting for the definition of this command until @code{rcirc} is loaded
878because @code{defun-rcirc-command} is not yet available, and without
879@code{rcirc} loaded, the command wouldn't do us much good anyway.
880
881@smallexample
882(eval-after-load 'rcirc
883 '(defun-rcirc-command sv (arg)
884 "Boast about rcirc."
885 (interactive "i")
886 (rcirc-send-message process target
887 (concat "I use " rcirc-id-string))))
888@end smallexample
889
563a450c 890@node Reconnecting after you have lost the connection
4009494e
GM
891@section Reconnecting after you have lost the connection
892@cindex reconnecting
893@cindex disconnecting servers, reconnecting
894
895If you're chatting from a laptop, then you might be familiar with this
896problem: When your laptop falls asleep and wakes up later, your IRC
6772c8e1 897client doesn't realize that it has been disconnected. It takes several
4009494e
GM
898minutes until the client decides that the connection has in fact been
899lost. The simple solution is to use @kbd{M-x rcirc}. The problem is
900that this opens an @emph{additional} connection, so you'll have two
f99f1641 901copies of every channel buffer, one dead and one live.
4009494e
GM
902
903The real answer, therefore, is a @code{/reconnect} command:
904
905@smallexample
906(eval-after-load 'rcirc
907 '(defun-rcirc-command reconnect (arg)
908 "Reconnect the server process."
909 (interactive "i")
910 (unless process
911 (error "There's no process for this target"))
912 (let* ((server (car (process-contact process)))
913 (port (process-contact process :service))
914 (nick (rcirc-nick process))
915 channels query-buffers)
916 (dolist (buf (buffer-list))
917 (with-current-buffer buf
918 (when (eq process (rcirc-buffer-process))
919 (remove-hook 'change-major-mode-hook
920 'rcirc-change-major-mode-hook)
921 (if (rcirc-channel-p rcirc-target)
922 (setq channels (cons rcirc-target channels))
923 (setq query-buffers (cons buf query-buffers))))))
924 (delete-process process)
925 (rcirc-connect server port nick
926 rcirc-default-user-name
3da13bb9 927 rcirc-default-full-name
4009494e
GM
928 channels))))
929@end smallexample
930
563a450c 931@node GNU Free Documentation License
4009494e
GM
932@appendix GNU Free Documentation License
933@include doclicense.texi
934
935
563a450c 936@node Key Index
4009494e
GM
937@unnumbered Key Index
938@printindex ky
939
563a450c 940@node Variable Index
4009494e
GM
941@unnumbered Variable Index
942@printindex vr
943
563a450c 944@node Index
4009494e
GM
945@unnumbered Index
946@printindex cp
947
948@bye