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