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