summaryrefslogtreecommitdiffstats
path: root/docs/manual.txt
diff options
context:
space:
mode:
Diffstat (limited to 'docs/manual.txt')
-rw-r--r--docs/manual.txt957
1 files changed, 957 insertions, 0 deletions
diff --git a/docs/manual.txt b/docs/manual.txt
new file mode 100644
index 0000000..d55e362
--- /dev/null
+++ b/docs/manual.txt
@@ -0,0 +1,957 @@
+
+ Irssi 0.8 documentation - https://irssi.org/
+
+ Copyright(c) 2000 Timo Sirainen <cras@irssi.org>
+
+
+ Index
+
+ 0. Generic babbling
+ 1. Command line parameters
+ 2. Message levels
+ 3. Flood protection
+ 4. Configuration
+ 5. Servers
+ 6. Channels
+ 7. IRC commands and features
+ 8. Notify list
+ 9. Text highlighting
+ 10. Ignoring
+ 11. Logging
+ 12. Commands
+ 14. Last log (currently text version only)
+ 15. Word completion
+ 16. Recode
+ 18. Key bindings (text version)
+ 19. Perl scripting
+
+ ( not written yet: )
+ 13. Themes
+ 17. Windowing system (text version)
+
+
+
+ 0. Generic babbling
+
+ 0.1 History
+
+ Hello. I'm Timo Sirainen aka. cras, and I'm an IRC addict. :)
+
+ I'm actually quite new in IRC, I got my first internet connection
+ sometimes around fall 1997 and I started actively IRCing around
+ christmas. I used EPIC and BitchX mostly at the start, but soon
+ found some nice KDE IRC client which name I can't remember anymore.
+ It's author however stopped developing it after I had been using it
+ a few months. And since it had bugs and all, I wanted another nice
+ GUI IRC client. I didn't find any.
+
+ Since I've always been a coder and do-it-yourself guy (my own
+ offline reader and BBS software in the BBS ages), I started my own
+ IRC client at spring 1998. I called it yagIRC standing for "Yet
+ another GTK IRC client". GTK was in around version 1.0 back then,
+ and it had a lot of features/bugs which I found all the time as I
+ tried to do some "different" things than other people. These
+ sometimes prevented me of doing something some feature I wanted.
+
+ So, in summer 1998 I went to army and I passed development of yagIRC
+ to two guys, they did a few new features and released a version or
+ two, but finally (in summer 1999?) they put a message to web page
+ which told that they finally had stopped developing it entirely,
+ also saying that my code was a total mess :) (yes, it was a mess)
+
+ I got out of the army 1.1.1999. I promised to myself that I wouldn't
+ do another IRC client, but after trying to use BitchX a while, I
+ started dreaming about an IRC client which would have an excellent
+ look and feel. After trying various things, I only came up with the
+ GNOME panel applet which people still tell me that it's a great
+ feature. I was more like thinking some pretty little icons in
+ some corner telling me about new messages and other stuff..
+
+ I thought that I would keep Irssi a small project, just doing a few
+ little features that *I* wanted, nothing for others. But after few
+ versions and few interested people, I started coding it more and
+ more generic..
+
+ Finally, after releasing version 0.6.0 (february, 1999) I realized
+ that things were getting into a big mess again. I started a rewrite,
+ I organized the code into irc-base, irc-extra, user interface and
+ GUI directories, created the signalling system for letting them
+ communicate themselves easily and released 0.7.0. This was the base
+ for the rest of the 0.7.x releases, and it did work pretty well.
+ The signalling system was excellent, for example creating text mode
+ version was really easy and you didn't need tens of (empty) gui_xxx()
+ functions like in the yagIRC days. Maintaining the text and GTK
+ versions separately was really easy too.
+
+ About a year later after releasing Irssi 0.7.0, I started having
+ dreams about an IRC client that would be extremely modular, like you
+ could upgrade the client to newer version ON THE FLY without needing
+ to even disconnect from the servers. I started a project codenamed
+ i2k, I took the code from Irssi, split it into more directories and
+ changed quite a lot of the code to work a bit differently.
+
+ I developed i2k quite a long, until I finally gave up with it since
+ it could do only some basic things, and Irssi 0.7 really needed
+ maintaining. After a while I got an idea, maybe I could merge the
+ code from the i2k to Irssi more easily than rewriting the whole
+ client. This was more easier than I thought. It's now been two
+ months since I started it, and Irssi 0.8 is looking absolutely
+ excellent.
+
+ 0.2 Irssi 0.8
+
+ Irssi 0.8 is my fourth try to create the perfect IRC client.
+ This time I'm concentrating to the code. I try to avoid kludges, I
+ try to make as simple code as I can, and I try to provide enough
+ easy to use functions so that extending Irssi is as simple as
+ possible. I also try to keep the "bloat" features in scripts or
+ modules instead of build-in.
+
+ I think I'm succeeded with these goals pretty well, there's some
+ small problems but everything in the big picture looks great.
+
+ 0.3 Future
+
+ What about Irssi 1.0, what will it look like?
+
+ I was thinking about the Linux kernel versioning and keeping
+ Irssi 0.8 a stable version all the time while developing new
+ features only to Irssi 0.9. After 0.9 is finished, it will be
+ called 0.10 or 1.0 depending if I think it's ready to be called 1.0.
+
+ 1.0's goal is that it has all the possible features anyone will
+ ever need. If not build-in, then in scripts or loadable modules.
+ Not very small goal :)
+
+ 0.4 This documentation
+
+ Strange, I just created the index list and started writing this.
+ I've never been too good at documentation and I usually don't like
+ writing it, but after coding so much recently and seeing that the
+ NEWS file was getting *SO* large, I thought that I had to put all
+ these features down somewhere so people (and me!) would find them.
+
+
+ 1. Command line parameters
+
+ --connect -c <server> Connect to server at startup
+ --port -p <port> - specify port
+ --noconnect -! Don't autoconnect to any servers at startup
+ --nick -n Specify what nick to use
+ --hostname -h Specify what host name to use
+
+
+ 2. Message levels <https://irssi.org/documentation/help/levels/>
+
+ 3. Flood protection
+
+ 3.1 Command flood protection
+
+ Most (all?) IRC servers' flood protection works like this
+ (from RFC 1459):
+
+ --------
+ * check to see if client's `message timer' is less than
+ current time (set to be equal if it is);
+
+ * read any data present from the client;
+
+ * while the timer is less than ten seconds ahead of the current
+ time, parse any present messages and penalize the client by
+ 2 seconds for each message;
+
+ which in essence means that the client may send 1 message every 2
+ seconds without being adversely affected.
+ --------
+
+ Irssi's flood protection works the same way, except it penalizes
+ 2.2 seconds by default for each message (helps with some servers).
+ You can change it with /SET cmd_queue_speed <milliseconds>. You can
+ also change the number of commands before flood protection activates
+ (ie. the burst count) with /SET cmds_max_at_once <count>.
+
+ IRC servers also have an input buffer where the client's commands
+ are saved before processed. It's size is server specific (can be as
+ low as 1k!) If it gets full, the server kicks you out (the
+ "Excess flood" quit message). Irssi's flood protecion protects this
+ pretty well with small commands, but if you send many big commands
+ (like >400 char long messages) fast, you could get easily kicked out.
+ Normally this isn't problem, but if you have scripts sending long
+ messages, you should remember this. I'm not sure how much you should
+ wait between the long messages, but 2 seconds isn't enough.
+
+ This protection is used with all commands sent to server, so you
+ don't need to worry about it with your scripts.
+
+ 3.2 CTCP flood protection
+
+ Other people can pretty easily flood you with CTCP requests, and
+ even if you wouldn't get kicked out from the server, they could
+ easily grow your command queue. So, Irssi's CTCP flood protection
+ works like this:
+
+ First it checks how big the CTCP reply queue is, if it's longer
+ than `max_ctcp_queue', the CTCP is ignored. You can change it with
+ /SET max_ctcp_queue <count> (default is 5).
+
+ After this the CTCP reply is placed to server's "idle queue", so
+ the reply is sent "when there's extra time", this means that if
+ you are busy sending other commands, it might take a while before
+ the reply is sent.
+
+ 3.3 Detecting floods
+
+ Irssi is all the time automatically checking different flooding,
+ when flood is noticed, it sends "flood" signal. This can be easily
+ used for example to create a script for kicking channel flooders.
+ Autoignore uses this also, see section 10.2.
+
+ Flood is detected when more than `flood_max_msgs' same kind of
+ messages arrives in `flood_timecheck' seconds to same target
+ (channel or private msg) so it isn't flooding if same user sends a
+ message to 10 different channels you are on, but it is flooding if
+ 10 messages are sent to same channel by the same user.
+
+ Currently only messages, notices and ctcps are checked for
+ flooding.
+
+ /SET flood_max_msgs <count>, default is 4
+ /SET flood_timecheck <seconds>, default is 5 seconds
+ If either of these is 0, the flood checking is disabled.
+
+
+ 4. Configuration <https://irssi.org/documentation/manual/configuration/>
+
+ 5. Servers
+
+ 5.1 Generic
+
+ Irssi is multi-server friendly. You can be connected to multiple
+ different servers, or the same server multiple times. Most of the
+ settings that let you specify the channel, let you also specify IRC
+ network.
+
+ Servers are referenced by a "server tag". If the server is known
+ to belong to some IRC network, the tag is the IRC network's name,
+ like "IRCnet". If the IRC network is unknown, the tag is created
+ from the server's name, like irc.funet.fi -> funet. If the tag
+ already exists, a number is added to the end of it and raised until
+ unused tag is found.
+
+ Quit messages have a small problem if there's already a few
+ commands in server's input command queue. If the server's socket is
+ disconnected immediately after QUIT message is sent, it is possible
+ that the server didn't yet process the quit command and your quit
+ message will be "broken pipe" or something similiar. The right thing
+ to do is to let the server disconnect you, but what if the
+ connection to server is broken and the server never disconnects you?
+ I solved the problem by waiting a few seconds to see if the server
+ disconnects us. If it didn't, force the disconnect. This explains
+ the (a bit annoying) "waiting for servers to close connections"
+ message when quiting Irssi. Most IRC clients just ignore this whole
+ problem, but I hate it if my quit message isn't displayed right.
+
+ 5.2 IRC networks
+
+ Different IRC networks behave a bit differently, and to be as
+ efficient as possible, Irssi needs to know a few things about them
+ or the safe defaults will be used. The default configuration file
+ contains the settings for the biggest IRC networks.
+
+ /NETWORK ADD [-kicks <count>] [-msgs <count>] [-modes <count>]
+ [-whois <count>] [-cmdspeed <ms>] [-cmdmax <count>]
+ [-nick <nick>] [-user <user>] [-realname <name>]
+ [-host <host>] [-autosendcmd <cmd>] <name>
+
+ -kicks: Maximum number of nicks in one /KICK command
+ -msgs: Maximum number of nicks in one /MSG command
+ -modes: Maximum number of mode changes in one /MODE command
+ -whois: Maximum number of nicks in one /WHOIS command
+ -cmdspeed: Same as /SET cmd_queue_speed, see section 3.1
+ -cmdmax: Same as /SET cmds_max_at_once, see section 3.1
+ -nick, -user, -realname: Specify what nick/user/name to use
+ -host: Specify what host name to use, if you have multiple
+ -autosendcmd: Command to send after connecting to a server
+
+ With -autosendcmd argument you can automatically run any commands
+ after connecting to the network. This is useful for automatically
+ identifying yourself to NickServ, for example
+
+ /NETWORK ADD -autosendcmd "/^msg NickServ identify secret" liberachat
+
+ /NETWORK REMOVE <name>
+
+ 5.3 Manually connecting and disconnecting
+
+ To connect to a new server, use:
+ /CONNECT [-network <network>] [-host <hostname>] <address>|<network>
+ [<port> [<password> [<nick>]]]
+
+ If there's no password, set it to -. You can directly connect to
+ IRC server in specified address, or you can connect to some IRC
+ network and Irssi will pick the server for you.
+
+ You don't need to specify the IRC network, password, nick, etc. if
+ you setup the server using /SERVER ADD (see next section). If the
+ settings can't be found there either, Irssi will use the defaults:
+
+ /SET default_nick <nick>, defaults to user_name
+ /SET alternate_nick <nick>, defaults to <default_nick>_
+ /SET user_name <user>, defaults to your login name
+ /SET real_name <name>, taken from /etc/passwd by default
+ /SET hostname <host>, what host name to use when connecting
+ /SET skip_motd ON|OFF|TOGGLE - Don't show server's MOTD
+
+ NOTE: /CONNECT is also a command for IRC operators to connect IRC
+ servers to other IRC servers. If you want to use it, use /SCONNECT
+ instead.
+
+ You can disconnect from the server with:
+ /DISCONNECT *|<tag> [message]
+
+ If message isn't given, Irssi will use the default quit message. You
+ can set it with /SET quit_message <message>, default is "leaving".
+
+ /SERVER disconnects the server in active window and connects to new
+ one. It will take the same arguments as /CONNECT. If you prefix the
+ address with + character, Irssi won't disconnect the active server,
+ and it will create a new window where the server is connected
+ (ie. /window new hide;/connect address)
+
+ /SERVER without any arguments displays list of connected servers.
+
+ 5.4 Server settings
+
+ /SERVER ADD [-tls] [-tls_cert <cert>] [-tls_pkey <pkey>]
+ [-tls_pass <password>] [-tls_verify] [-tls_cafile <cafile>]
+ [-tls_capath <capath>] [-tls_ciphers <list>]
+ [-tls_pinned_cert <fingerprint>] [-tls_pinned_pubkey <fingerprint>]
+ [-auto | -noauto] [-network <network>] [-host <hostname>]
+ [-cmdspeed <ms>] [-cmdmax <count>] [-port <port>]
+ <address> [<port> [<password>]]
+
+ -tls: Connects using TLS encryption.
+ -tls_cert: The TLS client certificate file.
+ -tls_pkey: The TLS client private key, if not included in the
+ certificate file.
+ -tls_pass: The password for the TLS client private key or
+ certificate.
+ -tls_verify: Verifies the TLS certificate of the server.
+ -tls_cafile: The file with the list of CA certificates.
+ -tls_capath: The directory which contains the CA certificates.
+ -tls_ciphers: TLS cipher suite preference lists.
+ -tls_pinned_cert: Pinned x509 certificate fingerprint.
+ -tls_pinned_pubkey: Pinned public key fingerprint.
+ -auto: Automatically connect to server at startup
+ -noauto: Don't connect to server at startup (default)
+ -network: Specify what IRC network this server belongs to
+ -ircnet: Same as -network. Deprecated. Do not use.
+ -host: Specify what host name to use, if you have multiple
+ -cmdspeed: Same as /SET cmd_queue_speed, see section 3.1
+ -cmdmax: Same as /SET cmds_max_at_once, see section 3.1
+ -port: This is pretty much like the port argument later, except
+ this can be used to modify existing server's port.
+
+ /SERVER REMOVE <address> [<port>]
+
+ /SERVER LIST
+
+ Servers are identified by their name and port. You can have multiple
+ entries for the same server name but in different ports. This is
+ useful for IRC proxies, in one port you could have IRCNet proxy,
+ another port would have EFNet, etc.
+
+ If you wish to change existing server's port to something else, use
+ -port command. For example if you had irc.server.org in port 6667
+ and you wanted to change it to port 6668, use command:
+
+ /SERVER ADD -port 6668 irc.server.org 6667
+
+ If you want to remove some settings from existing server, for
+ example hostname, just give -host "" parameters to it.
+
+ After connected to server, Irssi can automatically change your user
+ mode. You can set it with /SET usermode <mode>, default is +i.
+
+ /SET resolve_prefer_ipv6 - If ON, prefer IPv6 for hosts that
+ have both v4 and v6 addresses.
+
+ 5.5 Automatic reconnecting
+
+ If you get disconnected from server, Irssi will try to reconnect
+ back to some of the servers in the same IRC network. To prevent
+ flooding the server that doesn't let you in (and avoiding K-lines),
+ Irssi won't try to reconnect to the same server more often than
+ once in `server_reconnect_time' seconds. You can change it with
+ /SET server_reconnect_time <seconds>, default is 5 minutes.
+
+ After reconnected to server, Irssi will re-set your user mode, away
+ message and will join you back to the same channels where you were
+ before the connection was lost.
+
+ You can see list of the reconnections with /SERVER. The servers
+ that have tag as RECON-n are the reconnections. You can remove them
+ with /DISCONNECT <tag>, and you can reconnect to them immediately
+ with /RECONNECT <n>. /RECONNECT without any arguments will
+ disconnect from the active server and reconnect back immediately.
+
+ 5.6 Server redirections
+
+ Getting replies matched to IRC commands can be quite complicated.
+ Server redirection allow this in a relatively easy way. They are
+ used internally and are available to scripts; see Server redirections
+ in perl.txt for details.
+
+ 5.7 Server idle command queue
+
+ There's some situations when you want to ask something from the
+ server which isn't really important. For example when connected
+ to server and you didn't get your nick, Irssi asks with /WHOIS
+ who has your nick and displays it. But if you already have a lot of
+ commands in buffer, like you just autojoined to many channels,
+ you'd rather first let the JOIN commands to be sent to server
+
+ This is where server idle queue gets into picture. Commands in
+ idle queue are sent to server when there's nothing else in the
+ normal command queue.
+
+ Idle queue works with server redirections, so you can ask something
+ from server when it has time and your function is called when the
+ reply is received.
+
+ 5.8 Net splits
+
+ Irssi keeps track of people who were lost in net splits. You can
+ get a list of them with /NETSPLIT command.
+
+ Another use for this is with bots. Channel master can op anyone in
+ the channel and the bot happily accepts it. But if the opped user
+ is lost behind a net split and in netjoin the server gives ops for
+ the user, the bot should decide if the user (who isn't in bot's user
+ database) is a malicious attacker who should be deopped, or if
+ he/she/it is just some user that already had ops before the net
+ split.
+
+ /SET hide_netsplit_quits - If ON, hide all netsplit quit messages
+ and display only "Netsplit host1 host2: nicks".
+
+ /SET netsplit_max_nicks - If non-zero, limit the number of nicks
+ printed in netsplit message and add "(+<n> more, use /NETSPLIT
+ to show all of them)" text.
+
+ 5.9 Lag checking
+
+ Irssi will constantly check how big the lag to the server is. It is
+ done by sending PING commands. Lag checking is disabled for broken
+ servers that do not support PING.
+
+ If the lag is too big, Irssi will reconnect to different IRC server.
+ This is sometimes useful if the connection has been stuck for 30
+ minutes but it still hasn't been closed.
+
+ /SET lag_check_time <time> - Specifies how often to check the lag.
+ If it is set to 0, the lag detection is disabled. Default
+ is 1 minute.
+ /SET lag_max_before_disconnect <time> - Specifies how big the lag
+ can be before reconnecting to another server. Default is 5
+ minutes.
+ /SET lag_min_show <time> - Specifies the minimum lag to display
+ in status bar. Default is 1 second.
+
+ 5.10 Raw log
+
+ All data that is received or sent to server is kept in a raw log
+ buffer for a while. Also event redirections are kept there. This is
+ very useful for debugging purposes.
+
+ /RAWLOG SAVE <filename> - Save the current raw log buffer to file
+ /RAWLOG OPEN <filename> - Like /RAWLOG SAVE, but keep the log file
+ open and write all new log to it.
+ /RAWLOG CLOSE - Close the open raw log
+
+ /SET rawlog_lines <count> - Specify the number of raw log lines to
+ keep in memory.
+
+
+ 6. Channels
+
+ 6.1 Generic
+
+ There's several types of channels you can join, here's a list of
+ the ones that Irssi supports:
+
+ #channel - Normal channels, most commonly used
+ +channel - Modeless channels, channel has no modes, no channel
+ operators and no topic. This way no-one is above others
+ and there's no operator-wars etc. But on the other hand,
+ you can't kick any troublemakers..
+ &channel - Local channels, these channels aren't distributed outside
+ the IRC server. IRCNet has replaced server notices with
+ several different &channels (&ERRORS, &NOTICES, etc.)
+ !channel - New channels, currently supported only by IRCNet. These
+ channels are designed so that they can't be taken over
+ with net splits. /JOIN !channel joins to existing
+ !channel, /JOIN !!channel creates a new channel.
+
+ Most of the commands that take channel name as parameter, can also
+ accept * as the channel name, which means the active channel.
+
+
+ 6.2 Joining, parting
+
+ Channels can be joined with /JOIN command. You can join to multiple
+ channels with one /JOIN by giving it a comma-separated list of
+ channels, like /JOIN #channel1,#channel2. If you don't give the
+ channel mode character (#+&!) before the channel name, Irssi
+ automatically uses # channels.
+
+ Channel names may contain any characters except SPACE, BELL, NUL,
+ CR, LF or comma (','). On IRCnet and a few other networks, you can
+ also restrict the channel to only certain servers by adding the
+ mask to the end of the channel name separated with a ':'
+ character, for example #channel:*.fi lets only people on .fi
+ servers join the channel. Other servers will not even know about
+ the channel. This is pretty difficult to use, since everyone will
+ have to always join #channel:*.fi; #channel and #channel:*.fi are
+ different channels. Ban exceptions (+e) and especially invite
+ lists (+I) replace this functionality pretty well, see section 6.5.
+
+ If channel has a password (aka. key), you can join it with
+ /JOIN #channel pass, or multiple channels with passwords with
+
+ /JOIN #secret1,#public,#secret2 pass1,x,pass2
+
+ #public didn't have any password, so we used "x" as it's password.
+ It doesn't really matter what password you send with channels that
+ don't have passwords.
+
+ If you want to join to channel in different server than active one
+ in window, you can do it with /JOIN -<server tag> #channel, like
+ /JOIN -efnet #irssi.
+
+ You can leave channels with /PART [<channels>] [<part message>].
+ For example "/PART byebye all" leaves the active channel with
+ "byebye all" message, or /PART #chan1,#chan2 leaves those channels.
+
+ NOTE: Sending JOIN 0 directly to server (/quote join 0) leaves all
+ the channels you are joined. There's been some jokes about joining
+ for example to #2000,0 where the server actually leaves you from all
+ channels. With Irssi this isn't really a problem, since irssi would
+ happily join to channels #2000 and #0.
+
+ 6.3 Automatic joining
+
+ Irssi can automatically join to specified channels in specified
+ IRC networks. It can also automatically send the password when
+ manually joining to channel without specifying the password.
+
+ /CHANNEL ADD [-auto | -noauto] [-bots <masks>] [-botcmd <command>]
+ <channel> <network> [<password>]
+
+ With -bots and -botcmd arguments you can automatically send
+ commands to someone in channel. This is useful for automatically
+ getting ops for channels, for example
+
+ /CHANNEL ADD -auto -bots "*!bot@bothost.org bot*!*@host2.org"
+ -botcmd "msg $0 op mypass" #channel ircnet
+
+ You can also use the -botcmd without -bots argument. The command is
+ then sent whenever you join the channel.
+
+ If you want to remove some settings from existing channel record,
+ for example bots, just give the -bots "" parameters to it. Password
+ can be removed by setting it to - (or actually, "" works too).
+
+ You can remove the channels with
+ /CHANNEL REMOVE <channel> <network>
+
+ /CHANNEL LIST displays list of channels with settings.
+ /CHANNEL without any arguments displays list of channels you have
+ joined. You can also use /CHANNEL to join to channels just as with
+ /JOIN, like /CHANNEL #a.
+
+ 6.4 After-join automation
+
+ When joined to channel, Irssi asks some information about it.
+ After it has got all of it, it prints the "Channel synchronized"
+ text. The following information is asked:
+
+ - Channel mode
+ - WHO list to get nicks' hosts - useful for /BAN for example
+ - Ban list - useful for allowing /UNBAN to use wildcards
+
+ If you have joined many channels at once, Irssi tries to optimize
+ the commands it sends to server. Instead of sending two commands
+ to ask two channels' mode, it just sends MODE #a,#b. Same thing with
+ WHO list and ban lists. Some servers do not support this and they
+ reply with different kinds of error messages, Irssi tries to deal
+ with them all right and resend the commands again separately.
+ However, some strange servers sometimes use some weird error replies
+ that Irssi doesn't know about, and the channel never gets
+ synchronized. If this happens with some server you know, please
+ let the Irssi's author know about it.
+
+ 6.5 Channel modes
+
+ Common channel modes are:
+
+ i - Invite only - People can't join to channel without being
+ /INVITEd, or being in invite list (+I, see below).
+ m - Moderated - People who don't have voices (+v) can't send
+ messages to channel
+ p - Private - People who aren't joined to channel can't see it
+ for example with /WHOISing people who are in channel.
+ s - Secret - Like private, but the channel isn't displayed in
+ /LIST's output.
+ n - No external msgs - Without this mode, anyone can send messages
+ to channel without even being joined.
+ t - Topic can be changed only by channel operators.
+
+ k <key> - Channel password (aka. key) - The channel can't be joined
+ without specifying the channel key (see section 6.2).
+
+ l <count> - User limit - No more than <count> people can join to
+ channel. This can be overridden with /INVITE with some
+ servers.
+
+ This is usually used for protecting channel from join
+ flooding, like some bot allows max. 5 users to join in
+ one minute or so.
+
+ b - Set/remove ban. For example MODE #channel +b *!*@*.org bans
+ everyone from .org domain.
+
+ If someone from .org domain was already in channel before the
+ ban was set, he/she cannot send any messages to channel (doesn't
+ work with all servers).
+
+ Bans can also be overridden with /INVITE, although many stupid
+ IRC clients automatically kick the user out because they see
+ the ban and think that because of it the user shouldn't be in
+ the channel (doesn't work with all servers).
+
+ e - Ban exceptions. You could for example ban everyone from
+ *!*@*.org but set ban exception to *!*@*.host.org - does not work
+ with all servers.
+
+ I - Invite list. If channel is invite only (+i), people in this
+ list can join it without being /INVITEd - does not work with all
+ servers.
+
+ This is excellent for in-country channels that don't want
+ foreigners (spammers!) to join the channel, for example setting
+ channel's mode to +i and +I *!*@*.fi allows only finnish people
+ to join the channel. In addition to this, there's usually a bot
+ in the channels and sending /MSG bot invite command to it
+ /INVITEs you to the channel.
+
+ On IRCnet, the ':' feature in channel names can also be used for
+ a similar effect, see section 6.2.
+
+ o <nick> - Grant or revoke channel operator status from nick
+ v <nick> - Grant or revoke voice status from nick, only people with
+ +v (or +o) can talk to channel when it's moderated (+m).
+
+ You can send multiple mode changes with one mode command:
+
+ /MODE #channel +nto-o+v nick1,nick2,nick3
+
+ This would set channel's mode to +nt, give ops to nick1, take ops
+ from nick2 and give voices to nick3.
+
+ You can set only limited number of modes that requires argument in
+ one command. In IRCnet it's 3, in EFnet it's 4 and in many others
+ it's 6. If it's not known, Irssi defaults to 3. Irssi will also
+ automatically split them, so you can use /MODE +oooooo n1,n2,..
+ command to op 6 people and Irssi will split it to two commands in
+ IRCnet/EFnet.
+
+ Many networks have additional modes and/or change the meaning of existing
+ modes. Check the documentation for the network or the server software in
+ use for details.
+
+ Instead of manually setting o, v and b modes you probably want to
+ use /OP, /DEOP, /VOICE, /DEVOICE, /BAN and /UNBAN commands.
+
+ /OP, /DEOP, /VOICE and /DEVOICE commands allows wildcards as their
+ argument. So /OP ni* will op all non-opped people whose nick start
+ with "ni". /DEOP * will deop everyone else except you. /VOICE and
+ /DEVOICE work the same way.
+
+ 6.6 Bans
+
+ You can give /BAN a list of nicks or whole ban masks. /UNBAN
+ accepts wildcards, so if you have ban nick!user@reallylonghost.org,
+ you can simply unban it with /UNBAN *really*
+
+ Using /BAN <nicks>, Irssi will automatically create the mask. You
+ can change the way it's created with the ban_type setting:
+
+ /SET ban_type normal|host|domain|custom
+
+ Normal - *!user@*.domain.net
+ Host - *!*@host.domain.net
+ Domain - *!*@*.domain.net
+ Custom [nick] [user] [host] [domain]
+ eg. /SET ban_type custom nick domain - nick!*@*.domain.net
+ eg. /SET ban_type custom user host - *!user@host.domain.net
+
+ Irssi has also a couple of commands to help banning people:
+
+ /KICKBAN [<channel>] <nick> <reason> - ban and kick the nick
+ /KNOCKOUT [<seconds>] <nick> <reason> - kickban the nick, unban
+ after waiting <seconds>, default is 5 minutes.
+
+ 6.7 Massjoins
+
+ Automatic opping the nick right after joined to channel is a pretty
+ commonly used. What mostly irritates me with this is that the nick
+ may be opped multiple times by different people, or after netsplits
+ when the people join back, the server will op them, but still the
+ bots op the people again, even if it was just done by the server.
+
+ Irssi has this feature that it sends a "massjoin" signal a while
+ after the real join. If someone has already opped the nick, you can
+ easily check it in the massjoin signal handler.
+
+ The default is to report maximum of 5 joins in one massjoin signal.
+ If the 5 joins don't come in 5 seconds, the signal is sent anyway.
+ You can change these with /SET massjoin_max_wait <milliseconds> and
+ /SET massjoin_max_joins <count>.
+
+
+ 7. IRC commands and features <https://irssi.org/documentation/help/>
+
+ 8. Notify list
+
+ Notify list is generally used for knowing when someone you know
+ comes to IRC or leaves from IRC. Traditionally notify list can
+ handle only a list of nicks, no nick masks etc. I lost interest to
+ traditional notify lists long time ago, since the people I know
+ are in IRC all the time. So I made a bit more featureful notify
+ list:
+
+ /NOTIFY [-list] [-away] <mask> [network [network...]]
+
+ -away: Notifies about away-status changes
+ -list: Lists the notify list entries with all their settings
+ <mask>: Either a simple "nick" or "nick!*@*blah.org". The nick
+ can't contain wildcards, but the user/host can.
+
+ /UNNOTIFY <mask>
+
+ /NOTIFY without any arguments displays if the people in notify
+ list are online or offline.
+
+
+ 9. Text highlighting
+
+ Irssi supports highlighting lines that match the specified pattern.
+ You can also change the color of the nicks that match specified nick
+ mask, so you could for example show your friends' nicks with
+ different color.
+
+ /HILIGHT [-mask | -regexp | -word] [-nick] [-color <color>]
+ [-level <level>] [-channels <channels>] <text>
+
+ -mask: Match only for nick, <text> is a nick mask
+ -regexp: <text> is a regular expression
+ -word: <text> must match to full words
+ -nick: Hilight only the nick, not the whole line
+ -color: Print the reply with <color>. color is in %code format
+ (see docs/formats.txt)
+ -level: Match only for <level> messages, default is
+ publics,msgs,notices,actions
+ -channels: Match only in <channels>
+
+ /DEHILIGHT <ref#> | <text>
+
+ /HILIGHT without any arguments displays list of the hilights.
+
+ If <color> is a number, Irssi will treat it as a MIRC color
+ code. You can also use bolds (^B), underlines (^_) etc. as
+ <color> if you like.
+
+
+ 10. Ignoring
+
+ 10.1 Manual ignoring
+
+ Irssi's ignoring options should be enough for everyone :)
+
+ /IGNORE [-regexp | -word] [-pattern <pattern>] [-replies] [-except]
+ [-channels <channel>] <mask> <levels> <^levels>
+
+ -regexp: <pattern> is a regular expression
+ -word: <pattern> must match to full words
+ -pattern: <pattern> must match to the message's text
+ -replies: Ignore replies to nick in channels. For example
+ "/IGNORE -replies *!*@*.fi PUBLIC" ignores everyone
+ from Finland, but also anyone sending message
+ "tofinnishnick: blahblah".
+ -except: *DON'T* ignore
+ -channels: Ignore only in channels
+ <mask>: Either a nick mask or list of channels
+ <levels>: List of levels to ignore
+ <^levels>: List of levels to NOT ignore
+ (/ignore -except nick notices = /ignore nick ^notices)
+
+ /UNIGNORE <ref#> | <mask>
+
+ /IGNORE without any arguments displays list of ignores.
+
+ The best match always wins, so you can have:
+
+ /IGNORE * CTCPS
+ /IGNORE -except *!*@host.org CTCPS
+
+ 10.2 Automatic ignoring
+
+ Irssi can automatically set ignores for people who flood you.
+ Currently you can autoignore MSGS, NOTICES, CTCPS and PUBLIC.
+ Actions are placed to either MSGS or PUBLIC. See section 3.3 for
+ definition of the flood.
+
+ /SET autoignore_time <seconds> specifies how long to ignore the
+ user.
+
+ /SET autoignore_levels <levels> specifies what levels to ignore
+ automatically, default is to ignore only CTCPS.
+
+
+ 11. Logging
+
+ 11.1 Basic logging
+
+ /LOG OPEN [-noopen] [-autoopen] [-targets <targets>]
+ [-window] <filename> [<levels>]
+
+ -noopen: Create the entry to log list, but don't start logging
+ -autoopen: Automatically open this log file at startup
+ -targets: Log only in specified channels/nicks
+ -window: Log the active window
+ <filename>: File name where to log, it is parsed with
+ strftime(), so %d=day, etc. see "man strftime" for
+ more info. Irssi will automatically check every hour
+ if log should be rotated.
+ <levels>: Defaults to ALL
+
+ /LOG CLOSE <ref#> | <fname> - Close log and remove from log list
+ /LOG START <ref#> | <fname> - Start logging to file
+ /LOG STOP <ref#> | <fname> - Stop logging to file
+ /LOG without any arguments displays the log list
+
+ /SET log_create_mode <mode> - Specifies what file mode to use with
+ the created log files. Default is 0644.
+
+ All of these are parsed with strftime():
+ /SET log_timestamp <text> - Specifies the time stamp format.
+ Default is "%H:%M ".
+ /SET log_open_string <text> - Text written to log when it's opened
+ /SET log_close_string <text> - Text written to log when it's closed
+ /SET log_day_changed <text> - Text written to log when day changes
+
+ NOTE: Log files are locked after opened, so two Irssis can't
+ accidentally try to write to the same log file.
+
+ Examples:
+
+ /LOG OPEN -targets cras ~/irclogs/cras.log MSGS
+ - Logs all messages from/to nick `cras'
+
+ /LOG OPEN -targets #linux ~/irclogs/linux/linux-%Y-%m-%d
+ - Logs all messages in channel #linux. Log is rotated daily, so
+ logs in 1. May 2000 goes to file "linux-2000-05-01", when the
+ day is changed, Irssi closes the log and starts logging to
+ "linux-2000-05-02" etc.
+
+ 11.2 Window logging
+
+ /WINDOW LOG ON|OFF|TOGGLE [<filename>]
+
+ Start/stop logging the active window. This works exactly like
+ /LOG OPEN -window.
+
+ /WINDOW LOGFILE <filename>
+
+ Sets the default log file to use in the window, it can be
+ overridden with specifying the file name in /WINDOW LOG. If no file
+ name isn't given, Irssi defaults to ~/irc.log.<windowname> or
+ ~/irc.log.Window<ref#> if window doesn't have name.
+
+ Creates the entry to log list, same as /LOG OPEN -window -noopen.
+ Also, if /WINDOW LOG ON is used it starts logging to this file.
+
+ 11.3 Automatic logging
+
+ This is the logging method that I had been asked to implement for
+ ages, and it is really simple to use too. It logs only messages
+ that have "targets", ie. private messages and channel specific
+ messages (msgs, modes, topics, etc). WHOIS replies and such aren't
+ logged. If you with to log them too, use the /LOG command.
+
+ So, when for example a private messages comes to you from "guy"
+ nick, Irssi creates a log file ~/irclogs/guy.log for it. After few
+ minutes of inactivity, the log file is closed.
+
+ /SET AUTOLOG ON|OFF|TOGGLE - Enable/disable autolog.
+
+ /SET AUTOLOG_LEVEL <level> - Specifies what levels to log, default
+ is ALL.
+
+ /SET AUTOLOG_PATH <path> - expandos (see special_vars.txt) can be
+ used, $0 is the target. If you are using multiple servers, it makes
+ sense to use the server tag as part of the file name, for example
+ ~/irclogs/$tag/$0.log (this is the default). The directories are
+ created automatically.
+
+ 11.4 Awaylog
+
+ Irssi logs specified messages when you're away. After you set
+ yourself unaway, Irssi will display all the messages in the awaylog.
+
+ /SET awaylog_level <level> - Default is MSGS HILIGHT
+ /SET awaylog_file <filename> - Default is ~/.irssi/away.log
+
+ You can disable this feature by setting awaylog_level to NONE.
+
+ 12. Commands <https://irssi.org/documentation/manual/commands/>
+
+ 13. Themes
+
+ 14. Last log <https://irssi.org/documentation/help/lastlog/>
+
+ 15. Word completion <https://irssi.org/documentation/help/completion/>
+
+ 16. Recode
+
+ Irssi supports selective encoding of incoming/outgoing messages
+ through the recode system. All incoming/outgoing messages can be
+ optionally converted to/from the charset specified by the
+ `term_charset' variable (which defaults to the locale encoding and
+ should _not_ be changed in most cases), by setting the `recode'
+ variable to 'ON'.
+ Since there is no way in IRC to know the encoding associated to a
+ message, for incoming messages Irssi uses the following algorithm:
+
+ if `recode_autodetect_utf8' is 'ON' and the message is valid UTF-8 the
+ encoding is assumed to be UTF-8.
+ if an encoding is set for the target (through /recode) use it,
+ otherwise fallback to the value of `recode_fallback'.
+
+ For outgoing messages it is simpler:
+
+ if an encoding is set for the target (through /recode) use it,
+ otherwise fallback to the value of `recode_out_default_charset'.
+
+ /SET recode_transliterate - Append '//TRANSLIT' to the destination
+ encoding for both incoming/outgoing messages. '//TRANSLIT' is a GNU
+ iconv specific extension to peform transliteration (locale dependent)
+ when a character is not representable in the destination encoding.
+
+ 18. Key bindings <https://irssi.org/documentation/help/bind_-list/>
+
+ 19. Scripting <https://irssi.org/documentation/scripting/>
+
+.. no, the docs end here, I got bored of writing these after a few days and
+haven't touched these since then.