summaryrefslogtreecommitdiff
path: root/doc/misc/rcirc.texi
blob: da214958d5c96a8d5427ff90f1b44f1215d5df4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
\input texinfo
@c %**start of header
@setfilename ../../info/rcirc.info
@settitle rcirc Manual
@include docstyle.texi
@c %**end of header

@copying
Copyright @copyright{} 2006--2022 Free Software Foundation, Inc.

@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
and with the Back-Cover Texts as in (a) below.  A copy of the license is
included in the section entitled ``GNU Free Documentation License''.

(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
modify this GNU manual.''
@end quotation
@end copying

@dircategory Emacs network features
@direntry
* Rcirc: (rcirc).               Internet Relay Chat (IRC) client.
@end direntry

@titlepage
@title rcirc Manual
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@contents

@ifnottex
@node Top
@top rcirc Manual

@code{rcirc} is an Emacs IRC client.

IRC (Internet Relay Chat) is a multi-user chat protocol.  Users
communicate with each other in real-time.  Communication occurs both in
topic channels which are collections of many users, or privately, with
just one other user.

@insertcopying

@end ifnottex

@menu
* Basics::
* Reference::
* Fighting Information Overload::
* Hacking and Tweaking::
* GNU Free Documentation License::
* Key Index::
* Variable Index::
* Index::

@detailmenu
 --- The Detailed Node Listing ---

Basics

* Internet Relay Chat::
* Getting started with rcirc::

Reference

* rcirc commands::
* Useful IRC commands::
* Configuration::

Fighting Information Overload

* Channels::
* People::
* Keywords::
* Notices::

Hacking and Tweaking

* Skipping /away messages using handlers::
* Using fly spell mode::
* Scrolling conservatively::
* Changing the time stamp format::
* Defining a new command::

@end detailmenu
@end menu

@node Basics
@chapter Basics

This chapter contains a brief introduction to IRC (Internet Relay Chat),
and a quick tutorial on @code{rcirc}.

@menu
* Internet Relay Chat::
* Getting started with rcirc::
@end menu

@node Internet Relay Chat
@section Internet Relay Chat
@cindex internet relay chat
@cindex irc

@cindex channel
@dfn{Internet Relay Chat} (IRC) is a form of instant communication over the
Internet.  It is mainly designed for group (many-to-many) communication
in discussion forums called channels, but also allows one-to-one
communication.

@cindex instant messaging, comparison
@cindex server
@cindex network
Contrary to most Instant Messenger (IM) systems, users usually don't
connect to a central server.  Instead, users connect to a random
server in a network, and servers relay messages from one to the next.

Here's a typical example:

@cindex redirection to random servers
When you connect to the Libera.Chat network
(@code{https://libera.chat}), you point your IRC client at the
server @code{irc.libera.chat}.  That server will redirect your client
to a random server on the network, such as
@code{zirconium.libera.chat}.

@cindex channel name
@cindex # starts a channel name
Once you're connected, you can send messages to all other users
connected to the same network, and you can join all channels on the same
network.  You might join the @code{#emacs} and the @code{#rcirc}
channels, for example.  (Typically, channel names begin with a hash
character.)

Once you have joined a channel, anything you type will be broadcast to
all the other users on the same channel.

@cindex addressing other people
@cindex other people, addressing them
@cindex talk to other people
If you want to address someone specifically, for example as an answer to
a question, it is customary to prefix the message with the nick followed
by a colon, like this:

@example
deego: fsbot rules!
@end example

@cindex nick completion
@cindex completion of nicks
@kindex TAB
Since this is so common, you can use @key{TAB} to do nick completion.

@node Getting started with rcirc
@section Getting started with rcirc
@cindex getting started
@cindex connecting to a server

@cindex irc command
Use the command @kbd{M-x irc} to connect using the defaults.
@xref{Configuration}, if you want to change the defaults.

Use @kbd{C-u M-x irc} if you don't want to use the defaults, e.g., if you
want to connect to a different network, or connect to the same network
using a different nick.  This will prompt you for four things:

@table @asis
@cindex server, connecting
@cindex Libera.Chat network
@item IRC Server
What server do you want to connect to? All the servers in a particular
network are equivalent.  Some networks use a round-robin system where
a single server redirects new connections to a random server in the
network.  @code{irc.libera.chat} is such a server for the Libera.Chat
network.  Libera.Chat's purpose is ``to provide services such as a
community platform for free open-source software and peer directed
projects on a volunteer basis,'' and was chosen as the official home
of the GNU Project and the Free Software Foundation's IRC channels in
June 2021 in the aftermath of the changes in governance and policies
of the Freenode IRC network.  GNU and FSF's announcements about this
are at
@uref{https://lists.gnu.org/archive/html/info-gnu/2021-06/msg00005.html},
@uref{https://lists.gnu.org/archive/html/info-gnu/2021-06/msg00007.html},
and
@uref{https://lists.gnu.org/archive/html/info-gnu-emacs/2021-06/msg00000.html}.

@cindex port, connecting
@cindex 6667, default IRC port
@item IRC Port
All network connections require a port.  Just as web servers and clients
use port 80 per default, IRC uses port 6667 per default.  You rarely
have to use a different port.

@cindex nick, connecting
@cindex changing nick
@cindex name changes
@item IRC Nick
@vindex user-login-name
Every users needs a handle on-line.  You will automatically be assigned
a slightly different nick if your chosen nick is already in use.  If
your @code{user-login-name} is @code{alex}, and this nick is already
in use, you might for example get assigned the nick @code{alex`}.

@cindex channels, connecting
@cindex initial channels
@cindex startup channels
@item IRC Channels
A space separated list of channels you want to join when connecting.
You don't need to join any channels, if you just want to have one-to-one
conversations with friends on the same network.  If you're new to the
Libera.Chat network, join @code{#emacs}, the channel about all things
Emacs, or join @code{#rcirc}, the channel about @code{rcirc}.
@end table

@cindex server buffer
When you have answered these questions, @code{rcirc} will create a server
buffer, which will be named something like @file{*irc.libera.chat*},
and a channel buffer for each of the channels you wanted to join.

@kindex RET
@cindex talking
@cindex communicating
To talk in a channel, just type what you want to say in a channel
buffer, and press @key{RET}.

@kindex C-c C-c
@cindex multiline messages
@cindex messages, multiple lines
@cindex pasting multiple lines
@cindex edit message before sending
If you want to paste multiple lines, such as source code, you can use
@kbd{C-c C-c} to edit your message in a separate buffer.  Use @kbd{C-c
C-c} to finish editing.  You still need to press @key{RET} to send it,
though.  Generally, IRC users don't like people pasting more than around
four lines of code, so use with care.

@comment This section copied from the Channels section.
@comment All index markers should point to the original!
Once you are connected to multiple channels, or once you've turned you
attention to other buffers in Emacs, you probably want to be notified
of any activity in channels not currently visible.  All you need to do
is switch channel tracking on using @kbd{M-x rcirc-track-minor-mode}.
To make this permanent, add the following to your init file:

@example
(rcirc-track-minor-mode 1)
@end example

Use @kbd{C-c C-@key{SPC}} to switch to these buffers.

@vindex rcirc-track-ignore-server-buffer-flag
If the user wishes to ignore events in the server buffer, set
@code{rcirc-track-ignore-server-buffer-flag} to a non-nil value.

@node Reference
@chapter Reference
@cindex reference

This is the reference section of the manual.  It is not complete.  For
complete listings of @code{rcirc} features, use Emacs built-in
documentation.

@menu
* rcirc commands::
* Useful IRC commands::
* Configuration::
@end menu

@node rcirc commands
@section rcirc commands
@cindex rcirc commands
@cindex commands

@kindex C-h m
This is a list of commands that you may use in @code{rcirc}.  It is not
complete.  For a complete listing, press @kbd{C-h m} in an @code{rcirc}
buffer.

In addition to using regular Emacs key bindings, you can call them by
typing them into an @code{rcirc} buffer.

@cindex call commands
@cindex typing commands
@cindex commands
For instance, instead of using the command @kbd{C-c C-j} to join a new
channel, you may type this in an @code{rcirc} buffer, and press @key{RET}:

@example
/join #emacs
@end example

@cindex / starts a command
@cindex messages starting with a slash disappear
@cindex disappearing messages if starting with a slash
@cindex slash hides message
This is why you cannot start a message with a slash.  You will have to
precede the command with a space, or rewrite your message in order to
send it to a channel.

@cindex multiple words as parameters
@cindex string delimiters
@cindex quotes
@cindex double-quotes
Many commands take parameters.  IRC commands usually ignore string
delimiters.  Neither apostrophe nor double-quote have special meanings in
IRC.

@example
/nick "alex schroeder"
@end example

This will try to change your nick to @code{"alex}.  Usually this will
fail because the double quote character is not a valid character for
nicks.

@cindex case insensitive commands
These commands are case insensitive.

@cindex new command
@cindex unknown command
@cindex command unknown
If a command isn't known by @code{rcirc}, it will simply be sent along to the
server.  There is a list of some useful commands like that in the next
section.

@table @kbd
@item C-c C-j
@kindex C-c C-j
@cindex /join
@cindex join channels
@cindex other channels
@cindex rooms, joining
@cindex discussion, joining
This joins a channel such as @code{#rcirc} or @code{#emacs}.  On most
networks, anybody can create new channels.  If you want to talk with
some friends, for example, all you have to do is agree on a valid
channel name and join that channel.  (Also @code{/join #emacs}.)

@item C-c C-p
@kindex C-c C-p
@cindex /part
@cindex part a channel
@cindex leave a channel
@cindex disconnect from a channel
@cindex stop talking on a channel
@cindex kill channel buffer
This leaves the current channel.  You can optionally provide a
different channel name and reason for parting.  When you kill a
channel buffer, you automatically part the corresponding channel.
(Also @code{/part #emacs you are too weird!}.)

@item C-c C-r
@kindex C-c C-r
@cindex /nick
@cindex change name
@cindex nick changing
@cindex rename yourself
@cindex other name
This changes your nick to some other name.  Your nick must be unique
across the network.  Most networks don't allow too many nick changes in
quick succession, and have restrictions on the valid characters in nick
names.  (Also @code{/nick alex-test})

@item C-c C-w
@kindex C-c C-w
@cindex /whois
@cindex who are these people
@cindex identifying people
@cindex channels other people are on
@cindex what channels people are on
Gives you some basic information about a nick.  This often includes what
other channels people are on.  (Also @code{/whois fsbot}.)

@item C-c C-q
@kindex C-c C-q
@cindex /query
@cindex starting a private conversation
@cindex one-to-one conversation
@cindex talk privately
@cindex private conversation
@cindex contact one person only
@cindex query a person
Starts a one-to-one conversation with another person on the same
network.  A new buffer will be created for this conversation.  It works
like a channel with only two members.  (Also @code{/query fsbot}.)

@item C-c @key{RET}
@kindex C-c RET
@cindex /msg
@cindex single message
@cindex message sending
This sends a single message to a nick.  Like with @kbd{C-c C-q}, a new
buffer is created, where the response from the other party will show
up.  (Also @code{/msg nickserv identify secret}.)

@item C-c C-x
@kindex C-c C-x
@cindex /quit
@cindex quit
@cindex disconnect
@cindex kill connection
@cindex connection end
@cindex part all channels
@cindex end connection
@cindex server buffer killing
@cindex reason for quitting
This disconnects from the server and parts all channels.  You can
optionally provide a reason for quitting.  When you kill the server
buffer, you automatically quit the server and part all channels.  (Also
@code{/quit ZZZzzz...}.)

@item /reconnect
@cindex /reconnect
@cindex reconnect
@cindex lost connection
@cindex disconnecting servers, reconnecting
This reconnects after you have lost the connection.

If you're chatting from a laptop, then you might be familiar with this
problem: When your laptop falls asleep and wakes up later, your IRC
client doesn't realize that it has been disconnected.  It takes several
minutes until the client decides that the connection has in fact been
lost.  The simple solution is to use @kbd{M-x rcirc}.  The problem is
that this opens an @emph{additional} connection, so you'll have two
copies of every channel buffer, one dead and one live.

One option therefore, is the @code{/reconnect} command.

An other approach is to set @code{rcirc-reconnect-delay} to a value
greater than 0, and allow rcirc to reconnect when it detects that the
connection has been closed.  By default it will try to do this three
times (as specified by @code{rcirc-reconnect-attempts}), before giving
up.
@end table

@node Useful IRC commands
@section Useful IRC commands
@cindex irc commands
@cindex commands

As mentioned, if a command isn't known by @code{rcirc}, it will simply be sent
along to the server.  Some such commands are available on nearly all IRC
servers, such as:

@table @code
@item /away
@cindex /away
@cindex away status
@cindex pause status
@cindex unavailable status
@cindex set away status
This sets your status as ``being away'' if you provide a reason, or sets
your status as ``being back'' if you do not.  People can use the
@kbd{C-c C-w} command to check your status.  Example: @code{/away food}.
@end table

@cindex irc resources
@cindex help about irc
Typical IRC servers implement many more commands.  You can read more
about the fantastic world of IRC online at
@uref{https://www.irchelp.org/, the Internet Relay Chat (IRC) help
archive}.

@node Configuration
@section Configuration
@cindex configuring rcirc

These are some variables you can change to configure @code{rcirc} to your
liking.

@table @code
@item rcirc-server-alist
@vindex rcirc-server-alist
@cindex channels, configuration
@cindex initial channels, configuration
@cindex startup channels, configuration
@cindex servers, configuration
@cindex initial servers, configuration
@cindex startup servers, configuration
This variable contains an alist of servers to connect to by default
and the keywords parameters to use.  The keyword parameters are
optional.  If you don't provide any, the defaults as documented below
will be used.

The most important parameter is the @code{:channels} parameter.  It
controls which channels you will join by default as soon as you are
connected to the server.

Here's an example of how to set it:

@example
(add-to-list 'rcirc-server-alist
             '("otherworlders.org"
               :channels ("#FUDGE" "#game-design")))
@end example

By default you will be connected to the @code{rcirc} support channel:
@code{#rcirc} on @code{irc.libera.chat}.

@table @code
@item :nick
This overrides @code{rcirc-default-nick}.

@item :port
This overrides @code{rcirc-default-port}.

@item :user-name
This overrides @code{rcirc-default-user-name}.

@item :full-name
This overrides @code{rcirc-default-full-name}.

@item :channels
This describes which channels to join when connecting to the server.
If absent, no channels will be connected to automatically.

@end table

@item rcirc-default-nick
@vindex rcirc-default-nick
This variable is used for the default nick.  It defaults to the login
name returned by @code{user-login-name}.

@example
(setq rcirc-default-nick "kensanata")
@end example

@item rcirc-default-port
@vindex rcirc-default-port
@cindex port
This variable contains the default port to connect to.  It is 6667 by
default and rarely needs changing.

@item rcirc-default-user-name
@vindex rcirc-default-user-name
@cindex user name
This variable contains the default user name to report to the server.
It defaults to the login name returned by @code{user-login-name}, just
like @code{rcirc-default-nick}.

@item rcirc-default-full-name
@vindex rcirc-default-full-name
@cindex full name
@cindex real name
@cindex surname
This variable is used to set your ``real name'' on IRC@.  It defaults
to the name returned by @code{user-full-name}.  If you want to hide
your full name, you might want to set it to some pseudonym.

@example
(setq rcirc-default-full-name "Curious Minds Want To Know")
@end example

@item rcirc-authinfo
@vindex rcirc-authinfo
@cindex authentication
@cindex identification
@cindex nickserv
@cindex login
This variable is an alist used to automatically identify yourself on
networks.  Each sublist starts with a regular expression that is
compared to the server address you're connecting to.  The second
element in the list is a symbol representing the method to use,
followed by the arguments this method requires.

Here is an example to illustrate how you would set it:

@example
(setq rcirc-authinfo
      '(("Libera.Chat" nickserv "bob" "p455w0rd")
        ("Libera.Chat" chanserv "bob" "#bobland" "passwd99")
        ("bitlbee" bitlbee "robert" "sekrit")))
@end example

And here are the valid method symbols and the arguments they require:

@table @code
@item nickserv
@cindex nickserv authentication
Use this symbol if you need to identify yourself as follows when
connecting to a network: @code{/msg nickserv identify secret}.  The
necessary arguments are the nickname you want to use this for, and the
password to use.

Before you can use this method, you will have to register your nick and
pick a password for it.  Contact @code{nickserv} and check out the
details.  (Using @code{/msg nickserv help}, for example.)

@item chanserv
@cindex chanserv authentication
Use this symbol if you need to identify yourself as follows if you want
to join a particular channel: @code{/msg chanserv identify #underground
secret}.  The necessary arguments are the nickname and channel you want
to use this for, and the password to use.

Before you can use this method, a channel contact must tell you about
the password to use.  Contact @code{chanserv} and check out the details.
(Using @code{/msg chanserv help}, for example.)

@item bitlbee
@cindex bitlbee authentication
Use this symbol if you need to identify yourself in the Bitlbee channel
as follows: @code{identify secret}.  The necessary arguments are the
nickname you want to use this for, and the password to use.

@item sasl
@cindex sasl authentication
Use this symbol if you want to use @acronym{SASL} authentication.  The
necessary arguments are the nickname you want to use this for, and the
password to use.

@cindex gateway to other IM services
@cindex instant messaging, other services
@cindex Jabber
@cindex AIM
@cindex ICQ
@cindex MSN
@cindex Yahoo!
Bitlbee acts like an IRC server, but in fact it is a gateway to a lot of
other instant messaging services.  You can either install Bitlbee
locally or use a public Bitlbee server.  There, you need to create an
account with a password.  This is the nick and password you need to
provide for the bitlbee authentication method.

Later, you will tell Bitlbee about your accounts and passwords on all
the other instant messaging services, and Bitlbee will log you in.  All
@code{rcirc} needs to know, is the login to your Bitlbee account.  Don't
confuse the Bitlbee account with all the other accounts.

@end table

@end table

@node Fighting Information Overload
@chapter Fighting Information Overload
@cindex information overload

This is the section of the manual that caters to the busy person
online.  There are support channels with several hundred people in
them.  Trying to follow a conversation in these channels can be a
daunting task.  This chapters tells you how @code{rcirc} can help.

@menu
* Channels::
* People::
* Keywords::
* Notices::
@end menu

@node Channels
@section Channels
@cindex channels
@cindex modeline

@comment This section copied to the Getting started with rcirc section
@kindex C-c C-SPC
@vindex rcirc-track-minor-mode
@cindex switching channels
@cindex tracking activity
@cindex active channel
@cindex abbreviated channel names
@cindex modeline tracks activity
Most people want a notification when something is said on a channel they
have joined, particularly if they have been addressed directly.  There
is a global minor mode that will do this kind of tracking for you.  All
you need to do is switch it on using @kbd{M-x rcirc-track-minor-mode}.
To make this permanent, add the following to your init file:

@example
(rcirc-track-minor-mode 1)
@end example

When other people say things in buffers that are currently buried (no
window is showing them), the mode line will now show you the abbreviated
channel or nick name.  Use @kbd{C-c C-@key{SPC}} to switch to these
buffers.

@cindex rcirc-track-abbrevate-flag
By default the channel names are abbreviated, set
@code{rcirc-track-abbrevate-flag} to a non-nil value. This might be
interesting if the IRC activities are not tracked in the mode line,
but somewhere else.

@vindex rcirc-mode-hook
If you prefer not to load @code{rcirc} immediately, you can delay the
activation of this mode:

@example
(add-hook 'rcirc-mode-hook
          (lambda ()
            (rcirc-track-minor-mode 1)))
@end example

@cindex busy channels
If you've joined a very active support channel, tracking activity is
no longer useful.  The channel will be always active.  Switching to
active channels using @kbd{C-c C-@key{SPC}} no longer works as
expected.

@kindex C-c C-l
@cindex low priority channels
The solution is to mark this channel as a low priority channel.
Use @kbd{C-c C-l} to make the current channel a low-priority channel.
Low priority channels have the modeline indicator ``LowPri''.
@kbd{C-c C-@key{SPC}} will not switch to low priority channels unless
you use the @kbd{C-u} prefix.

@kindex C-c TAB
@cindex ignored channels
If you prefer a channel to never show up in the modeline, then you
have to ignore it.  Use @kbd{C-c @key{TAB}} to ignore the current
channel.

@node People
@section People
@cindex people, how to ignore
@cindex nicks, how to ignore
@cindex friends
@cindex buddies
@cindex trolls

The most important command available to the discerning IRC user is
@code{/ignore}.  It's the big equalizer online: If people aggravate
you, just ignore them.

This is of course a crude all-or-nothing solution.  Fear not,
@code{rcirc} offers alternatives: You can ``brighten'' your buddies
and ``dim'' certain other nicks that you don't want to ignore
altogether.

@table @code
@item /ignore
@cindex /ignore
@cindex ignoring other people
@cindex trolls, ignoring
@cindex hide some posts
@cindex idiots online
This command toggles the ignore status of a nick, if you provide one.
If you don't provide a nick, the command lists all the nicks you are
ignoring.  All messages by ignored nicks are---you guessed it---ignored.
Since only ``operators'' can kick people from channels, the
ignore command is often the only way to deal with some of the more
obnoxious fellows online.  Example: @code{/ignore rudybot}.

@item /bright
@cindex /bright
@cindex highlight other people
@cindex friends, highlight
@cindex buddies, highlight
@cindex nicks, highlight
@cindex brighten nicks
This command toggles the bright status of a nick, if you provide one.
If you don't provide a nick, the command lists all the ``brightened''
nicks.  All messages by brightened nicks are---you guessed
it---brightened.  Use this for your friends.  Example: @code{/bright
rcy}.

@item /dim
@cindex /dim
@cindex soft-ignore other people
@cindex obnoxious people online
@cindex rabble online
This command toggles the dim status of a nick, if you provide one.  If
you don't provide a nick, the command lists all the ``dimmed'' nicks.
All messages by dimmed nicks are---you guessed it---dimmed.  Use this
for boring people and bots.  If you are tracking channel activity,
messages by dimmed nicks will not register as activity.  Example:
@code{/dim fsbot}.
@end table


@node Keywords
@section Keywords
@cindex keywords

On a busy channel, you might want to ignore all activity (using
@kbd{C-c @key{TAB}}) and just watch for certain keywords.  The
following command allows you to highlight certain keywords:

@table @code
@item /keyword
@cindex /keyword
This command toggles the highlighting of a keyword, if you provide
one.  If you don't provide a keyword, the current keywords are
listed.  Example: @code{/keyword manual}.
@end table

@node Notices
@section Notices
@cindex part notices, how to omit
@cindex join notices, how to omit
@cindex quit notices, how to omit
@cindex nick notices, how to omit

@kindex C-c C-o
@cindex low priority channels
In busy channels you might not be interested in all the joining,
parting, quitting, and renaming that goes on.  You can omit those
notices using @kbd{C-c C-o}.

@vindex rcirc-omit-responses
@cindex away notices, how to omit
You can control which notices get omitted via the
@code{rcirc-omit-responses} variable.  Here's an example of how to
omit away messages:

@example
(setq rcirc-omit-responses '("JOIN" "PART" "QUIT" "NICK" "AWAY"))
@end example

@vindex rcirc-omit-threshold
Notice that these messages will not be omitted if the nick in question
has recently been active.  After all, you don't want to continue a
conversation with somebody who just left.  That's why @code{rcirc}
checks recent lines in the buffer to figure out if a nick has been
active and only omits a message if the nick has not been active.  The
window @code{rcirc} considers is controlled by the
@code{rcirc-omit-threshold} variable.

@vindex rcirc-omit-unless-requested
Certain messages can be omitted by default, unless the user manual
requests them. For example, if you don't want to display @code{TOPIC}
and @code{NAMES} messages, after reconnecting, you can configure
@code{rcirc-omit-unless-requested} to hide:

@example
(setq rcirc-omit-unless-requested '("TOPIC" "NAMES"))
@end example

Now NAMES will only be displayed, after it has been requested via the
@code{rcirc-cmd-name} command.

@node Hacking and Tweaking
@chapter Hacking and Tweaking
@cindex hacking and tweaking

Here are some examples of stuff you can do to configure @code{rcirc}.

@menu
* Skipping /away messages using handlers::
* Using fly spell mode::
* Scrolling conservatively::
* Changing the time stamp format::
* Defining a new command::
* Using rcirc with bouncers::
@end menu

@node Skipping /away messages using handlers
@section Skipping @code{/away} messages using handlers
@cindex /away messages

@cindex handlers
@cindex status codes
The IRC protocol specifies how certain events are signaled from server
to client.  These events have numbers and are dealt with using so-called
handlers.  You can override existing handlers by exploiting the naming
convention adopted for @code{rcirc}.

Here's how to stop @code{rcirc} from printing @code{/away} messages.
Since @code{rcirc} doesn't define a 301 handler, you don't need to
require @code{rcirc} before defining the handler:

@example
(defun rcirc-handler-301 (process cmd sender args)
  "/away message handler.")
@end example

@node Using fly spell mode
@section Using fly spell mode
@cindex fly spell
@cindex spelling
@cindex spell-checking as you type
@cindex automatic spelling
@vindex rcirc-mode-hook

The following code activates Fly Spell Mode
for @code{rcirc} buffers:

@example
(add-hook 'rcirc-mode-hook (lambda ()
                             (flyspell-mode 1)))
@end example

@xref{Spelling, , Flyspell mode, emacs, The GNU Emacs Manual},
for details.

@node Scrolling conservatively
@section Scrolling conservatively
@cindex input line
@cindex scrolling
@vindex scroll-conservatively
@vindex rcirc-mode-hook

IRC buffers are constantly growing.  If you want to see as much as
possible at all times, you would want the prompt at the bottom of the
window when possible.  The following snippet uses a local value for
@code{scroll-conservatively} to achieve this:

@example
(add-hook 'rcirc-mode-hook
          (lambda ()
            (set (make-local-variable 'scroll-conservatively)
                 8192)))
@end example

@xref{Scrolling, , Scrolling conservatively, emacs, The GNU Emacs
Manual}, for details.

@node Changing the time stamp format
@section Changing the time stamp format
@cindex time stamp
@cindex date time
@cindex format time stamp
@vindex rcirc-time-format

@code{rcirc-time-format} is the format used for the time stamp.  Here's
how to include the date in the time stamp:

@example
(setq rcirc-time-format "%Y-%m-%d %H:%M ")
@end example

@node Defining a new command
@section Defining a new command
@cindex defining commands
@cindex commands, defining
@cindex new commands, defining

Here's a simple new command, @code{/sv}.  With it, you can boast about
your IRC client.  It shows how you can use @code{rcirc-define-command} to
define new commands.

@findex rcirc-define-command
We're waiting for the definition of this command until @code{rcirc} is loaded
because @code{rcirc-define-command} is not yet available, and without
@code{rcirc} loaded, the command wouldn't do us much good anyway.

@smallexample
(with-eval-after-load 'rcirc
  (rcirc-define-command sv ()
    "Boast about rcirc."
    (interactive "i")
    (rcirc-send-message process target "I use " rcirc-id-string)))
@end smallexample

@node Using rcirc with bouncers
@section Using rcirc with bouncers
@cindex bouncer

Some bouncers multiplex connections to various servers, but have to
modify nicks and channel names to make this work. The channel
@code{#emacs} on @code{irc.libera.chat} becomes
@code{#emacs/irc.libera.chat}.

@vindex rcirc-nick-filter
@vindex rcirc-channel-filter
The options @code{rcirc-nick-filter} and @code{rcirc-channel-filter}
can be used to make this feel more natural. When set to functions,
these will be used to change how nicks and channel names are
displayed. A simple configuration to fix the above example might be:

@smallexample
(defun my/rcirc-remove-suffix (STR)
  "Remove suffixes from STR."
  (save-match-data
    (if (string-match "/[[:alpha:]]+?\\'" str)
        (substring str 0 (match-beginning 0))
      str)))

(setq rcirc-nick-filter #'my/rcirc-remove-suffix
      rcirc-channel-filter #'local/rcirc-soju-suffix)
@end smallexample

@node GNU Free Documentation License
@appendix GNU Free Documentation License
@include doclicense.texi


@node Key Index
@unnumbered Key Index
@printindex ky

@node Variable Index
@unnumbered Variable Index
@printindex vr

@node Index
@unnumbered Index
@printindex cp

@bye