summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/Makefile.am11
-rw-r--r--docs/commands.txt423
-rw-r--r--docs/design.txt117
-rw-r--r--docs/formats.txt19
-rw-r--r--docs/perl.txt621
-rw-r--r--docs/signals.txt222
-rw-r--r--docs/special_vars.txt99
7 files changed, 1507 insertions, 5 deletions
diff --git a/docs/Makefile.am b/docs/Makefile.am
index c2d6f6c2..b1fb7b24 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -1,9 +1,10 @@
EXTRA_DIST = \
FAQ \
- COMMANDS \
- FORMATS \
- PERL \
- SIGNALS \
- botnet.txt
+ botnet.txt \
+ commands.txt \
+ formats.txt \
+ perl.txt \
+ signals.txt \
+ special_vars.txt
SUBDIRS = help
diff --git a/docs/commands.txt b/docs/commands.txt
new file mode 100644
index 00000000..71d99396
--- /dev/null
+++ b/docs/commands.txt
@@ -0,0 +1,423 @@
+
+ ** Some definitions
+
+
+"Level" usually means that you can use these words there:
+
+ CRAP - Can be almost anything
+ MSGS - Private messages
+ PUBLIC - Public messages in channel
+ NOTICES - Notices
+ SNOTES - Server notices
+ CTCPS - CTCP messages
+ ACTIONS - Actions (/me)
+ JOINS - Someone joins a channel
+ PARTS - Someone parts a channel
+ QUITS - Someone quits IRC
+ KICKS - Someone gets kicked from channel
+ MODES - Channel mode is changed
+ TOPICS - Channel topic is changed
+ WALLS - WALL is received (not all servers support this)
+ WALLOPS - Wallop is received
+ INVITES - Invite is received
+ NICKS - Someone changes nick
+ DCC - DCC messages
+ CLIENTNOTICES - Irssi's notices
+ CLIENTERRORS - Irssi's error messages
+ CLIENTCRAP - Some other messages from Irssi
+ HILIGHT - Hilighted text
+
+
+ ** Server handling
+
+
+CONNECT <address> [port [password [nick]]]
+
+ Connect to specified server, if there's no password set it to -
+
+DISCONNECT <* / tag> [message]
+
+ Disconnect from server
+
+SERVER [+]<address> [port [password [nick]]]
+
+ Disconnect from current server and connect to new one, or with
+ /SERVER +address it creates a new window and connects to server
+ there without disconnecting.
+
+SERVERS
+
+ Display a list of servers
+
+RMRECONNS
+
+ Remove all servers from reconnection list
+
+
+ ** Basic IRC commands
+
+
+QUIT [message]
+
+ Quit irssi
+
+JOIN <channel> [key] [, channel...]
+
+ Join to channel(s)
+
+PART [channel] [message]
+
+ Leave from channel
+
+QUERY <nick>
+
+ Create query window
+
+UNQUERY <nick>
+
+ Close query window
+
+MSG <nick/channel> <message>
+
+ Send message to nick/channel
+
+ME <message>
+
+ Send action to channel (/me thinks..)
+
+NOTICE <nick/channel> <message>
+
+ Send notice to nick/channel
+
+WHOIS [server/nick] <nick>
+
+ Send WHOIS query, you can also specify from what server to ask the
+ information. If you type the nick twice it will ask from the same
+ server what nick is using.
+
+AWAY [-all] [message]
+
+ Sets yourself away/unaway. If -all is used, it will set away
+ status in all servers
+
+WHO <nick/channel>
+
+ Show WHO list
+
+NAMES [channel]
+
+ List nicks (in channel)
+
+
+ ** Bit more advanced commands
+
+
+MODE <channel/nick> <mode>
+
+ Get/set channel/nick mode.
+
+ Get channel modes:
+ b - Get ban list
+ e - Get ban exception list
+ I - Get invite list
+
+ Set channel modes (use +/- before these):
+ b *!ban@mask - Set/remove ban
+ e *!ban@mask - Set/remove ban exception
+ I *!ban@mask - Set/remove channel invite
+ o nick - Set/remove op status
+ v nick - Set/remove voice status
+ l limit - Set remove max. people limit in channel
+ k key - Set/remove channel key
+ s - Secret
+ p - Private
+ m - Moderated
+ i - Invite only
+ n - No external messages
+ t - Only ops can change topic
+
+ User modes:
+ i - Invisible
+ w - Show wallops
+ s - Show server notices
+
+TOPIC [channel] [topic]
+
+ Get/set channel topic
+
+INVITE <nick> [channel]
+
+ Invite nick to channel
+
+CTCP <nick/channel> <command>
+
+ Send CTCP request to nick/channel (PING, VERSION, ..)
+
+NCTCP <nick/channel> <reply>
+
+ Send CTCP reply to nick/channel
+
+PING <nick>
+
+ Send CTCP PING to nick and tell how long it took to receive the reply
+
+ISON [nick [nick...]]
+
+ Ask if nicks are in IRC.
+
+WALL [channel] <message>
+
+ Send notice message to all operators in channel.
+
+OP, DEOP, VOICE, DEVOICE [channel] [nick [nick...]
+
+ Op/deop/voice/devoice nick(s) in channel
+
+KICK [channel] <nick> <reason>
+
+ Kick nick from channel
+
+KICKBAN [channel] <nick> <reason>
+
+ Kick+ban nick from channel
+
+KNOCKOUT [secs] <nick> <reason>
+
+ Kick+ban+delay (default to 5min)+unban
+
+BAN [channel] [nick [nick...]]
+
+ Ban nick(s) in channel
+
+UNBAN [channel] [mask [mask...]]
+
+ Remove ban(s) from channel
+
+BANSTAT [channel]
+
+ List bans and ban exceptions in channel
+
+BANTYPE <normal/host/domain/custom>
+
+ Set ban type:
+
+ Normal - *!user@*.domain.net
+ Host - *!*@host.domain.net
+ Domain - *!*@*.domain.net
+ Custom [nick] [user] [host] [domain]
+ eg. /bantype custom nick domain - nick!*@*.domain.net
+ eg. /bantype custom user host - *!user@host.domain.net
+
+INVITELIST [channel]
+
+ List invites (+I) in channel
+
+VERSION [server]
+
+ Displays irssi version and asks IRC server's version
+
+VER [nick/channel]
+
+ Sends CTCP VERSION request to nick/channel
+
+SV [nick/channel]
+
+ Sends irssi version text to nick/channel
+
+KILL <nick> <message>
+
+ Kill nick from irc network. [irc ops only]
+
+WALLOPS <message>
+
+ Write wallops message. [irc ops only]
+
+QUOTE <message>
+
+ Send raw data to irc server - DON'T USE THIS unless you really know
+ what you're doing!
+
+
+ ** DCC handling
+
+
+DCC
+
+ List DCC connections (same as DCC LIST)
+
+DCC CHAT <nick>
+
+ Open DCC chat
+
+DCC SEND <nick> <filename>
+
+ Send file to nick
+
+DCC GET <nick> [filename]
+
+ Get file offered by nick
+
+DCC RESUME <nick> [filename]
+
+ (MIRC) Resume getting file offered by nick
+
+DCC CLOSE <type> <nick> [filename]
+
+ Close DCC connection
+
+DCC LIST
+
+ List DCC connections
+
+MIRCDCC [n]
+
+ Set MIRC style CTCPs on/off
+
+
+ ** User interface handling
+
+
+WINDOW <NEW/CLOSE/SERVER/PREV/NEXT/GOTO/LEVEL>
+
+ NEW [HIDDEN/TAB]
+
+ Create new window (in tab)
+
+ CLOSE
+
+ Close the current window
+
+ SERVER <tag>
+
+ Change which server to use in current window
+
+ PREV/NEXT/GOTO <N>
+
+ Go to previous/next/Nth window
+
+ LEVEL <[+/-]pub/msgs/...>
+
+ Change window level, eg.
+ /window level msgs - creates messages window
+ /window level all -msgs - creates status window
+
+CLEAR
+
+ Clear screen
+
+ECHO <text>
+
+ Print text to screen
+
+MODES
+
+ Open channel modes dialog (GTK/GNOME version)
+
+GWHOIS <nick>
+
+ Display WHOIS information in dialog (GTK/GNOME version)
+
+LAST [-pub -msgs...] <text>
+
+ Display (only public/msgs/..) lines where <text> appears
+ (Text version only)
+
+
+ ** Configuration
+
+
+SET [key [value]]
+
+ Get/set configuration. Boolean values also need to be changed
+ with ON/OFF/TOGGLE values (not yes/no). Settings aren't saved
+ to disk until you use /SAVE.
+
+TOGGLE key [ON|OFF]
+
+ Same as /SET <key> TOGGLE, or if ON or OFF parameter is given
+ it will work just like /SET.
+
+SAVE
+
+ Save configuration to disk.
+
+/ALIAS [-]<alias> [<command>]
+
+ Show, add or remove aliases. Typing extra / before /command
+ (//command) ignores any aliases
+
+/UNALIAS <alias>
+
+ Remove alias, same as /ALIAS -alias
+
+IGNORE [-regexp | -word] [-pattern <pattern>] [-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
+ -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>
+
+ Remove ignore.
+
+NOTIFY [-away] [-idle [minutes]] <mask> [ircnet [ircnet...]]
+
+ Add mask (nick) to notify list for specified ircnets..
+
+ -away notifies about away-status changes
+ -idle notifies if idle time is first larger than `minutes'
+ (default is hour) and then it drops down.
+
+UNNOTIFY <mask>
+
+ Remove mask from notify list.
+
+HILIGHT [-nick | -regexp | -fullword] [-color <color>]
+ [-level <level>] [-channels <channels>] <text>
+
+ -nick: match only for nick
+ -regexp: `text' is a regular expression
+ -fullword: `text' must match to full words
+ -color: print the reply with `color' - color can be a bold (^B),
+ underline (^_) etc. too
+ -level: match only for `level' messages, default is
+ publics,msgs,notices,actions
+ -channels: match only in `channels'
+
+DEHILIGHT <ref#> | <text>
+
+ Remove hilight
+
+LOG <CREATE/CLOSE/START/STOP/LIST>
+
+ CREATE <filename> [<+/->level ...] [#channel/nick [
+ [<+/->level ...] ...]
+
+ Create and start logging to file
+
+ Example: /log create mylog -all +msgs #linux +chan +public
+ (or simply #linux +all logs everything that appears in #linux
+ window).
+
+ CLOSE <filename>
+
+ Close log and remove from configuration
+
+ START <filename>
+
+ Start logging to file
+
+ STOP <filename>
+
+ Stop logging to file
+
+ LIST
+
+ List logs.
diff --git a/docs/design.txt b/docs/design.txt
new file mode 100644
index 00000000..66790b6a
--- /dev/null
+++ b/docs/design.txt
@@ -0,0 +1,117 @@
+
+ Irssi's hierarchy is something like this:
+
+
+ sub1 sub2
+ \ /
+ xxx IRC COMMON ICQ yyy
+ |____|___________|____|____|
+ |
+ GUI (gtk/gnome, qt/kde, text, none)
+ |
+ sub1 sub2 |
+ \ / |
+ xxx IRC | COMMON ICQ yyy
+ |____|_____|_____|____|____|
+ |
+ COMMON UI
+ |
+ sub1 sub2 |
+ \ / |
+ xxx IRC | ICQ yyy
+ |____|_____|_____|____|
+ |
+ CORE
+ / \
+ lib-config lib-popt
+
+
+ (IRC, ICQ, xxx and yyy are chat protocols ..)
+ (sub1 and sub2 are submodules of IRC module, like DCC and flood protect)
+
+
+ Chat protocols and frontends are kept in separate modules. Common UI
+ and GUI modules also have the common parts which don't know anything
+ about the chat protocols. This should allow implementing modules to
+ whatever chat protocols and with whatever frontends easily.
+
+
+ ** lib-popt
+
+ CORE depends on this for command line parameter handling.
+ (distributed with irssi)
+
+
+ ** lib-config
+
+ Irssi depends on this for reading and saving configuration.
+ (created by me for irssi)
+
+
+ ** CORE module
+
+ Provides some functionality that all other modules can use:
+ - signal handling
+ - keeping list of settings
+ - keeping list of /commands
+ - keeping track of loaded modules
+ - networking functions (with nonblocking connects, IPv6 support)
+ - handles connecting to servers
+ - raw logging of server's input/output data
+ - /EVAL support
+ - fgets() like function line_split() without any maximum line limits
+ - command line parameter handling
+ - miscellaneous useful little functions
+ - handles logging
+
+
+ ** COMMON UI module
+
+ - knows basics about windows and window items (=channels, queries, ..)
+ - printtext() - parsing texts and feeding it for GUI to print.
+ - themes
+ - translation tables
+ - text hilighting
+ - command history
+ - user interface (/commands) for CORE's functionality
+
+
+ ** GUI modules
+
+ - all the rest of the functionality needed for a working client.
+
+
+ ** IRC module
+
+ * CORE
+
+ - IRC specific /commands
+ - flood protecting commands sent to server
+ - creating IRC masks based on nick/address for bans, ignores, etc.
+ - keeps list of channels, nicks, channel modes, bans, etc.
+ - keeps list of servers, server settings, irc networks,
+ server reconnections and irc network splits
+ - redirection of commands' replies
+ - lag detection
+ - ctcp support and flood protection
+ - Handles ignoring people
+
+ * DCC
+
+ - DCC chat, send and get
+
+ * FLOOD
+
+ - detects private or channel flooding and sends "flood" signal
+ - automatic ignoring when flooding
+
+ * NOTIFYLIST
+
+ - handles notifylist
+
+
+ ** IRC UI module
+
+ - placing channels and queries in windows
+ - nick completion
+ - printing infomation of some events
diff --git a/docs/formats.txt b/docs/formats.txt
new file mode 100644
index 00000000..633b0e42
--- /dev/null
+++ b/docs/formats.txt
@@ -0,0 +1,19 @@
+ text text background
+ ---------------------------------------------------------------------
+ %k %K %0 black bold black black
+ %r %R %1 red bold red red
+ %g %G %2 green bold green green
+ %y %Y %3 yellow bold yellow yellow
+ %b %B %4 blue bold blue blue
+ %m %M %5 magenta bold magenta magenta
+ %p %P magenta (think: purple)
+ %c %C %6 cyan bold cyan cyan
+ %w %W %7 white bold white white
+ %n All colors turned off
+ %U Underline on/off
+ %8 Reverse on/off
+ %9 %_ Bold on/off
+ %: Insert newline
+ %| Marks the indentation position
+ %% A single %
+
diff --git a/docs/perl.txt b/docs/perl.txt
new file mode 100644
index 00000000..94b83e11
--- /dev/null
+++ b/docs/perl.txt
@@ -0,0 +1,621 @@
+ Running Perl scripts
+ --------------------
+
+Place new scripts to ~/.irssi/scripts/, or /usr/lib/irssi/scripts/
+directory and run then with /RUN script. Or you could also run the
+script from another place by specifying the whole path to it. Scripts
+in ~/.irssi/scripts/autorun/ directory are automatically run at
+startup.
+
+Using /PERLFLUSH closes and reopens the perl interpreter removing all
+Perl scripts from memory. There's currently no way to unload a single Perl
+script. Also, Irssi doesn't check if you run the same script twice or
+different scripts use signal_add() for the same named function - it will
+probably crash or do some weird things then.
+
+
+ Irssi's signals
+ ---------------
+
+Irssi is pretty much based on sending and handling different signals.
+Like when you receive a message from server, say,
+":nick!user@there.org PRIVMSG you :blahblah". Irssi will first send a
+"server incoming" signal with the raw line as it's first parameter. You
+probably don't want to use this signal. Next thing Irssi does is to
+interpret the header and send a "server event" signal with arguments
+"PRIVMSG you...", server, "nick", "user@there.org". You probably don't
+want to use this either, since next irssi will send an "event privmsg"
+signal with the "you :blahblah" as it's argument. You can at any point
+grab the signal, do whatever you want to do with it and optionally stop
+it from going any further by returning from the function with value 1.
+
+For example:
+
+--------------------------------------------------------
+sub event_privmsg {
+ # $data = "nick/#channel :text"
+ my ($data, $server, $nick, $address) = @_;
+ my ($target, $text) = $data =~ /^(\S*)\s:(.*)/;
+
+ return 1 if ($text =~ /free.*porn/);
+ return 1 if ($nick =~ /idiot/);
+}
+
+Irssi::signal_add("event privmsg", "event_privmsg")
+--------------------------------------------------------
+
+This will hide all public or private messages that match the regexp
+"free.*porn" or the sender's nick contain the word "idiot".
+
+You can also use signal_add_last() if you wish to let the Irssi's internal
+functions be run before yours.
+
+A list of signals that irssi send can be found from SIGNALS file.
+
+
+ Message levels
+ --------------
+
+Several functions expect message levels. Sometimes numeric and sometimes
+alphabetic. Yes, it's stupid, will fix it :) For now you can use
+Irssi::level2bits() function to convert the level string to numeric. Here's
+all the levels that irssi supports currently:
+
+CRAP, MSGS, PUBLIC, NOTICES, SNOTES, CTCPS, ACTIONS, JOINS, PARTS
+QUITS, KICKS, MODES, SMODES, TOPICS, WALLOPS, INVITES, NICKS, PONGS
+DCC, CLIENTNOTICE, CLIENTCRAP, CLIENTERROR, HILIGHT
+(and NOHILIGHT if you don't want the message to be hilighted ever..)
+
+For example:
+
+$server->printtext("#channel", Irssi::level2bits('clientcrap'), 'Hello, world');
+
+Writes text to #channel window with clientcrap level.
+
+
+ Functions that you can use in Irssi's Perl scripts
+ --------------------------------------------------
+
+This is just my very first implementation and things will probably change.
+
+Commands marked with (!!) mean that you shouldn't use it unless you
+know what you're doing..
+
+If there's a "Xxxx::" text before the command, it means that it belongs to
+that package. Like "Server::command" means that you should either call it as
+ Irssi::Server::command($server, $cmd);
+or more easily:
+ $server->command($cmd);
+
+Commands that don't have the Xxxx prefix are called as Irssi::command();
+
+
+ *** General
+
+Channel cur_channel() - return current channel
+Server cur_server() - return current server
+
+channels() - return list of all channels
+servers() - return list of all servers
+commands() - return list of all commands
+dccs() - return list of all dcc connections
+logs() - return list of all log files
+plugins() - return list of all plugins
+
+print(str)
+ Print `str' to current window as "Irssi notice".
+
+command(cmd, [Server server, [Channel channel]])
+ Send a command `cmd' (in current channel). This will work just as if you
+ had typed `cmd' in command line, so you'll need to use /COMMANDS or the
+ text will be sent to the channel.
+
+Server::command(cmd, [Channel channel])
+ Just like above, except different calling method.
+
+Channel::command(cmd)
+ Just like above, except different calling method.
+
+Server::printtext(channel, level, str)
+ Print `str'.
+
+setup_get(option)
+ Get value of `option' from setup and return it.
+
+
+ *** Message levels
+
+level2bits(level)
+ Level string -> number
+
+bits2level(bits)
+ Level number -> string
+
+combine_level(level, str)
+ Combine level number to level string ("+level -level").
+ Return new level number.
+
+
+ *** Signals / timeouts
+
+signal_emit(signal, ...)
+ Send signal `signal'
+
+signal_add(signal, func)
+ Bind `signal' to function `func'
+
+signal_add_last(signal, func)
+ Bind `signal' to function `func'. Call `func' as late as possible.
+
+signal_remove(signal, func)
+ Unbind `signal' from function `func'
+
+tag timeout_add(msecs, func, data)
+ Call `func' every `msecs' milliseconds (1000 = 1 second) with
+ parameter `data'. Returns tag which can be used to stop the timeout.
+
+timeout_remove(tag)
+ Remove timeout with tag.
+
+
+ *** Commands
+
+Command::values()
+ Get some information about command. This function returns a reference to
+ hash table. Hash table has keys:
+ "cmd" - Command
+ "category" - Category
+
+command_bind(cmd, category, func)
+ Bind command `cmd' to call function `func'. `category' is the
+ category where the command is displayed in /HELP.
+
+command_unbind(cmd, func)
+ Unbind command `cmd' from function 'func.
+
+Server::irc_send_cmd_split(cmd, arg, max_nicks)
+ Split the `cmd' into several commands so `arg' argument has only
+ `max_nicks' number of nicks.
+
+ Example: $server->irc_send_cmd_split("KICK #channel nick1,nick2,nick3 :byebye", 2, 2);
+ Irssi will send commands "KICK #channel nick1,nick2 :byebye" and
+ "KICK #channel nick3 :byebye" to server.
+
+
+ *** Server Connects
+
+This is a record where we keep connection information. All Servers and
+Reconnects records have pointer to one of these.
+
+Connect::values()
+ Get some information about connect. This function returns a reference to
+ hash table. Hash table has keys:
+ "address" - Address where we connected (irc.blah.org)
+ "port" - Port where we connected
+ "password" - Password we used in connection.
+
+ "ircnet" - IRC network
+ "wanted_nick" - Nick which we would prefer to use
+ "alternate_nick" - Alternate nick which we would prefer to use
+ "username" - User name
+ "realname" - Real name
+
+Connect server_create_conn(address, [port=6667, [password='', [nick='', [channels='']]]])
+ Create new server connection.
+
+ *** Server functions
+
+Server::values()
+ Get some information about server. This function returns a reference to
+ hash table. Hash table has keys:
+ "address" - Address where we connected (irc.blah.org)
+ "port" - Port where we connected
+ "password" - Password we used in connection.
+
+ "ircnet" - IRC network
+ "wanted_nick" - Nick which we would prefer to use
+ "alternate_nick" - Alternate nick which we would prefer to use
+ "username" - User name
+ "realname" - Real name
+
+ "tag" - Unique server tag.
+ "real_address" - Who the server thinks it is (irc1.blah.org)
+ "nick" - Current nick
+ "usermode" - Current user mode
+ "usermode_away" - Are we marked as away? 1|0
+ "away_reason" - Away reason
+ "connected" - Is connection finished? 1|0
+ "connection_lost" - Did we lose the connection (1) or was
+ the connection meant to be disconnected (0)
+ Example:
+ %server_info = %{Irssi::cur_server->values()};
+ Irssi::print("Current server = ".$server_info{'address'});
+
+Server Connect::connect()
+ Connect to server.
+
+Server::disconnect()
+ Disconnect from server.
+
+Server server_find_tag(tag)
+ Find server with tag
+
+Server server_find_ircnet(ircnet)
+ Find first server that is in `ircnet'
+
+Channel channel_find(channel)
+ Find `channel' from any server
+
+Channel Server::channel_find_level(level)
+ Find channel with level `level' preferably from specified server, but
+ fallbacks to any channel the matching level.
+
+Server::send_raw(cmd)
+ Send raw message to server, it will be flood protected so you
+ don't need to worry about it.
+
+Server::ctcp_send_reply(data)
+ Send CTCP reply. This will be "CTCP flood protected" so if there's too
+ many CTCP requests in buffer, this reply might not get sent.
+
+
+ *** Server redirections
+
+WARNING: It's easy to mess up the Irssi's internal server expectations with
+these commands!
+
+This is a powerful feature of Irssi that I can't seen in other IRC clients.
+You can EASILY grab the server's reply for a command you send to server
+without any horrible kludges.
+
+Server::redirect_init(command, last, ...)
+ Initialize redirection for specified command. This needs to be done only
+ once. Irssi already initializes commands "WHOIS", "WHO", "LIST" and "ISON".
+ `command' is the whole name of the signal, like "command whois".
+ `last' specifies how many of the items in `...' is considered as the
+ "last event" from the command.
+
+ Example: $server->redirection_init('command who',
+ 2, # 2 first events will finish the command
+ 'event 401', # unknown nick (finished)
+ 'event 315', # end of who (finished)
+ 'event 352'); # who line (wait..)
+
+Server::redirect_event(arg, last, ...)
+ Add redirection. `arg' is a space separated list of arguments that should
+ match before Irssi will redirect the event (think of /WHOIS nick nick and
+ doing another to different nick immediately after it, there's no way of
+ knowing which will return first. so, arg would be in this case 'nick').
+
+ `last' specifies how many of the following events are considered as
+ "last event" from command - just like in redirect_init().
+
+ `...' is `event, signal, argpos, ...`, where
+ `event' is the event we're waiting from server.
+ `signal' is the signal we will send after receiving the event. It should
+ always start with 'redir ' so that Irssi's perl handler knows to
+ send correct arguments to signal handler.
+ `argpos' is the argument position in event's data or -1 if it
+ should be ignored.
+
+ Example:
+ $server->send_raw('WHOIS :cras');
+ $server->redirect_event('cras', 2,
+ "event 318", "redir end_of_whois", -1,
+ "event 402", "redir no_such_server", -1,
+ "event 401", "redir no_such_nick", 1,
+ "event 311", "redir whois", 1,
+ "event 301", "redir whois_away", 1,
+ "event 312", "redir whois_server", 1,
+ "event 313", "redir whois_oper", 1,
+ "event 317", "redir whois_idle", 1,
+ "event 319", "redir whois_channels", 1);
+ In the 402-case we tried "/WHOIS nick nick" but nick didn't exist..
+
+group Server::redirect_single_event(arg, last, group, event, signal, argpos)
+ Same as redirect_event() except you can set it up in pieces.
+ If `group' is 0, it will create new group and return it's id.
+
+
+ *** IRC masks
+
+irc_mask_match(mask, nick, user, host)
+ Return 1 if `mask' matches nick!user@host.
+
+irc_mask_match_address(mask, nick, address)
+ Return 1 if `mask' matches nick!address.
+
+irc_masks_match(masks, nick, address)
+ Return 1 if any mask in the `masks' (string separated with spaces)
+ matches nick!address.
+
+irc_get_mask(nick, host, flags)
+ Create IRC mask from nick!host.
+ flags = you need to combine these:
+ (FIXME: export the IRC_xxx defines to perl (or something))
+ IRC_MASK_NICK 0x01
+ IRC_MASK_USER 0x02
+ IRC_MASK_HOST 0x04
+ IRC_MASK_DOMAIN 0x08
+
+
+ *** Channels
+
+Channel::values()
+ Get some information about channel. This function returns a reference to
+ hash table. Hash table has keys:
+ "server" - Server of the channel
+ "name" - Channel name
+ "type" - Channel type ("channel", "query", "dcc chat", "empty")
+ "topic" - Channel topic
+ "key" - Channel key (password)
+ "limit" - Max. users in channel (+l mode)
+ "level" - Channel's level number.
+ "new_data" - 0=no new data, 1=text, 2=msg, 3=msg for you
+ "synced" - Channel is synchronized
+ "wholist" - Channel has received /WHO list
+ "names_got" - Channel has received /NAMES list
+ "chanop" - You are channel operator
+ "left" - You just left the channel (for "channel destroyed" event)
+ "kicked" - You was just kicked out of the channel (for
+ "channel destroyed" event)
+
+Channel Server::channel_create(channel, type, automatic)
+ Create new channel with name `channel'. `type' is one of:
+ (FIXME: export these to perl somehow)
+ CHANNEL_TYPE_CHANNEL 0
+ CHANNEL_TYPE_QUERY 1
+ CHANNEL_TYPE_DCC_CHAT 2
+ CHANNEL_TYPE_EMPTY 3
+ `automatic' means that channel is created "automatically" and
+ Irssi will NOT change the active window to it.
+
+Channel::destroy()
+ Destroy channel.
+
+Channel::change_name(name)
+ Change channel's name
+
+Channel::get_mode()
+ Return channel's mode
+
+Channel Server::channel_find(channel)
+ Find `channel' in server.
+
+Channel Server::channel_find_closest(channel, level)
+ Find `channel' or if not found, some other channel that has
+ level `level' (number).
+
+Channel channel_find_level(level)
+ Find channel with level `level'.
+
+
+ *** Channel modes
+
+Ban::values()
+ Get some information about ban. This function returns a reference to
+ hash table. Hash table has keys:
+ "ban" - The ban
+ "setby" - Nick of who set the ban
+ "time" - Timestamp when ban was set
+
+Ban Channel::ban_add(ban, nick, time)
+ Add new ban. (!!)
+
+Channel::ban_remove(ban)
+ Remove ban. (!!)
+
+Ban Channel::ban_exception_add(ban, nick, time)
+ Add ban exception (!!)
+
+Channel::ban_exception_remove(ban)
+ Remove ban exception (!!)
+
+Channel::invitelist_add(mask)
+ Add invite (!!)
+
+Channel::invitelist_remove(mask)
+ Remove invite (!!)
+
+Channel::modes_parse_channel(setby, modestr)
+ Parse mode string (!!)
+
+Channel::ban_get_mask(nick)
+ Get ban mask for `nick'.
+
+Channel::modes_set(data, mode)
+ Set mode `mode' ("+o", "-o", etc.) to all nicks in `data'
+ separated with spaces.
+
+
+ *** Nick list
+
+Nick::values()
+ Get some information about nick. This function returns a reference to
+ hash table. Hash table has keys:
+ "nick" - Plain nick
+ "host" - Host (blah@there.org)
+ "name" - Real name
+ "hops" - Hop count to the server nick is using
+ "op", "voice", "gone", "ircop" - 1 or 0
+ "last_check" - timestamp when last checked gone/ircop status.
+ "send_massjoin" - Waiting to be sent in a "massjoin" signal - 1 or 0
+
+Nick Channel::nicklist_insert(nick, op, voice, send_massjoin)
+ Add nick to nicklist. (!!)
+
+Channel::nicklist_remove(nick)
+ Remove nick from nicklist. (!!)
+
+Nick Channel::nicklist_find(mask)
+ Find nick from nicklist.
+
+Channel::nicklist_getnicks(channel)
+ Return a list of all nicks (Nick packages) in channel.
+
+
+ *** DCC
+
+Dcc:destroy()
+ Destroy DCC connection. (!!)
+
+dcc_type2str(type)
+ DCC type number to string
+
+dcc_str2type(type)
+ DCC type string to number
+
+Dcc dcc_find_item(type, nick, arg)
+ Find DCC connection.
+
+Dcc dcc_find_by_port(nick, port)
+ Find DCC connection by port.
+
+
+ *** Reconnects
+
+Reconnect::values()
+ Get some information about reconnect. This function returns a reference to
+ hash table. Hash table has keys:
+ "tag" - Unique numeric tag
+ "next_connect" - Unix time stamp when the next connection occurs
+
+ "address" - Address where we connected (irc.blah.org)
+ "port" - Port where we connected
+ "password" - Password we used in connection.
+
+ "ircnet" - IRC network
+ "wanted_nick" - Nick which we would prefer to use
+ "alternate_nick" - Alternate nick which we would prefer to use
+ "username" - User name
+ "realname" - Real name
+
+
+ *** Netsplits
+
+Netsplit::values()
+ Get some information about netsplit. This function returns a reference to
+ hash table. Hash table has keys:
+ "nick" - Nick
+ "address" - Nick's host
+ "server" - The server nick was in
+ "destserver" - The other server where split occured.
+ "destroy" - Timestamp when this record should be destroyed
+ /*FIXME: add list of channels the nick was in;*/
+
+Netsplit Server::netsplit_find(nick, address)
+ Check if nick!address is on the other side of netsplit. Netsplit records
+ are automatically removed after 30 minutes (current default)..
+
+Nick Server::netsplit_find_channel(nick, address, channel)
+ Find nick record for nick!address in channel `channel'.
+
+
+ *** Notify list
+
+notifylist_add(nick, ircnet)
+ Add `nick' to notify list in irc network `ircnet'
+
+Server notifylist_ison(nick, ircnets)
+ Check if `nick' is in IRC. `ircnets' is a space separated
+ list of irc networks. If it's empty string, all servers will be checked.
+
+Server::notifylist_ison_server(nick)
+ Check if `nick' is on IRC server.
+
+
+ *** Rawlog
+
+Server::rawlog_input(str)
+ Send `str' to raw log as input text. (!!)
+
+Server::rawlog_output(str)
+ Send `str' to raw log as output text. (!!)
+
+Server::rawlog_redirect(str)
+ Send `str' to raw log as redirection text. (!!)
+
+
+ *** Ignores
+
+Autoignore::values()
+ Get some information about autoignore. This function returns a reference to
+ hash table. Hash table has keys:
+ "nick" - Ignored nick
+ "timeleft" - Seconds left to ignore
+ "level" - Ignoring level number
+
+ignore_add(mask, level)
+ Ignore `mask' with level string
+
+ignore_remove(mask, level)
+ Unignore level string from `mask'
+
+Server::ignore_check(nick, host, type)
+ Return 1 if nick!host is ignored with level number `type'.
+
+Server::autoignore_add(type, nick)
+ Autoignore `nick' in server with level number `type'.
+
+Server::autoignore_remove(mask, level)
+ Remove autoignoring `nick' from server. `level' is a string.
+
+
+ *** Logging
+
+Log::values()
+ Get some information about log. This function returns a reference to
+ hash table. Hash table has keys:
+ "fname" - Log file name
+ "autoopen_log" - Automatically open log at startup
+ "last" - Timestamp when last write occured.
+ "level" - Global logging level.
+ /*FIXME: add list of Logitems;*/
+
+Logitem::values()
+ Get some information about logitem. This function returns a reference to
+ hash table. Hash table has keys:
+ "name" - Log item name.
+ "level" - Logging level number.
+
+Log log_create(fname, data)
+ Create log file. `data' = logging level ("-all #channel +public")
+
+Log log_create_with_level(fname, level)
+ Create log file with level number.
+
+Log log_file_find(fname)
+ Find log file.
+
+Log::destroy()
+ Destroy log file
+
+Log::open()
+ Start logging
+
+Log::close()
+ Stop logging
+
+Log::append_item(name, level)
+ Append log item with level number `level' to log file. (!!)
+
+Log::remove_item(log, name)
+ Remove log item. (!!)
+
+
+ *** Plugins
+
+Plugin::values()
+ Get some information about plugin. This function returns a reference to
+ hash table. Hash table has keys:
+ "name" - Plugin name
+ "description" - Plugin description
+
+plugin_load(name, args)
+ Load plugin.
+
+plugin_get_description(name)
+ Get plugin description string.
+
+Plugin plugin_find(name)
+ Find plugin.
diff --git a/docs/signals.txt b/docs/signals.txt
new file mode 100644
index 00000000..f3c4881c
--- /dev/null
+++ b/docs/signals.txt
@@ -0,0 +1,222 @@
+IRC base
+--------
+
+* Requires to work properly:
+
+ "gui exit"
+ "gui channel open", CHANNEL_REC
+ "send command", char *command, SERVER_REC, CHANNEL_REC
+
+* Provides signals:
+
+irc.c:
+
+ "send command", char *args, SERVER_REC
+ "command "<cmd>, char *args, SERVER_REC, CHANNEL_REC
+ "default command", char *args, SERVER_REC, CHANNEL_REC
+
+ "server event", char *data, SERVER_REC, char *sender_nick, char *sender_address
+ "event "<cmd>, char *args, SERVER_REC, char *sender_nick, char *sender_address
+ "default event", char *data, SERVER_REC, char *sender_nick, char *sender_address
+
+ "server incoming", SERVER_REC, char *data
+
+(for perl parser..)
+ "redir "<cmd>, char *args, SERVER_REC, char *sender_nick, char *sender_address
+
+bans.c:
+
+ "ban new", BAN_REC
+ "ban remove", BAN_REC
+ "ban exception new", BAN_REC
+ "ban exception remove", BAN_REC
+ "ban type changed", char *bantype
+
+commands.c:
+ "commandlist new", COMMAND_REC
+ "commandlist remove", COMMAND_REC
+
+channels.c:
+
+ "channel created", CHANNEL_REC
+ "channel destroyed", CHANNEL_REC
+ "channel name changed", CHANNEL_REC
+ "channel topic changed", CHANNEL_REC
+ "channel server changed", CHANNEL_REC, SERVER_REC *oldserver
+
+ "channel query", CHANNEL_REC
+ "channel wholist", CHANNEL_REC
+ "channel sync", CHANNEL_REC
+
+ctcp.c:
+
+ "ctcp msg "<cmd>, char *args, SERVER_REC, char *nick, char *addr, char *target
+ "default ctcp msg", char *args, SERVER_REC, char *nick, char *addr, char *target
+ "ctcp reply "<cmd>, char *args, SERVER_REC, char *nick, char *addr, char *target
+ "default ctcp reply", char *args, SERVER_REC, char *nick, char *addr, char *target
+
+lag.c:
+
+ "server lag", SERVER_REC
+ "server lag disconnect", SERVER_REC
+ "lag", char *server, int lag
+
+modes.c:
+
+ "invitelist new", CHANNEL_REC, char *mask
+ "invitelist remove", CHANNEL_REC, char *mask
+
+ "channel mode changed", CHANNEL_REC
+ "user mode changed", SERVER_REC
+ "nick mode changed", CHANNEL_REC, NICK_REC
+
+netsplit.c:
+
+ "netsplit add", NETSPLIT_REC
+ "netsplit remove", NETSPLIT_REC
+
+nicklist.c:
+
+ "nicklist new", CHANNEL_REC, NICK_REC
+ "nicklist remove", CHANNEL_REC, NICK_REC
+ "nicklist changed", CHANNEL_REC, NICK_REC, char *oldnick
+ "nick gone changed", CHANNEL_REC, NICK_REC
+ "nick ircop changed", CHANNEL_REC, NICK_REC
+ "server nick changed", SERVER_REC
+ "massjoin", CHANNEL_REC, GSList of NICK_RECs
+
+rawlog.c:
+
+ "rawlog", SERVER_REC, char *data
+
+server.c:
+
+ "server connect failed", SERVER_REC
+ "server connected", SERVER_REC
+ "server connecting", SERVER_REC, ulong *ip
+ "server looking", SERVER_REC
+ "server disconnected", SERVER_REC
+ "event connected", SERVER_REC
+
+server-reconnect.c:
+
+ "server reconnect new", RECONNECT_REC
+ "server reconnect remove", RECONNECT_REC
+ "server reconnect not found", char *tag
+
+signal.c:
+
+ "signal", char *name, ...
+ "last signal", char *name, ...
+
+IRC extra
+---------
+
+* Requires to work properly:
+
+ "print text stripped", SERVER_REC, char *channel, int level, char *text
+ "plugin add menu", char *menuitem, void (*func) (gpointer, PLUGIN_REC), PLUGIN_REC
+
+* Provides signals:
+
+dcc.c:
+
+ "dcc ctcp "<cmd>, char *args, DCC_REC
+ "default dcc ctcp", char *args, DCC_REC
+ "dcc unknown ctcp", char *args, char *sender, char *sendaddr
+
+ "dcc reply "<cmd>, char *args, DCC_REC
+ "default dcc reply", char *args, DCC_REC
+ "dcc unknown reply", char *args, char *sender, char *sendaddr
+
+ "dcc chat message", DCC_REC, char *msg
+
+ "dcc created", DCC_REC
+ "dcc destroyed", DCC_REC
+ "dcc connected", DCC_REC
+ "dcc rejecting", DCC_REC
+ "dcc closed", DCC_REC
+ "dcc chat message", DCC_REC, char *msg
+ "dcc transfer update", DCC_REC
+ "dcc request", DCC_REC
+ "dcc get receive", DCC_REC
+ "dcc error connect", DCC_REC
+ "dcc error file create", DCC_REC, char *filename
+ "dcc error file not found", char *nick, char *filename
+ "dcc error get not found", char *nick
+ "dcc error send exists", char *nick, char *filename
+ "dcc error unknown type", char *type
+ "dcc error close not found", char *type, char *nick, char *filename
+
+flood.c:
+
+ "flood", SERVER_REC, char *nick, char *host, char *level, char *target
+
+ignore.c:
+
+ "autoignore new", SERVER_REC, AUTOIGNORE_REC
+ "autoignore remove", SERVER_REC, AUTOIGNORE_REC
+
+log.c:
+
+ "log new", LOG_REC
+ "log remove", LOG_REC
+ "log locked", LOG_REC
+ "log started", LOG_REC
+ "log stopped", LOG_REC
+ "log written", LOG_REC, char *line
+
+notifylist.c:
+
+ "notifylist new", NOTIFYLIST_REC
+ "notifylist remove", NOTIFYLIST_REC
+ "notifylist joined", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg
+ "notifylist away changed", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg
+ "notifylist unidle", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg
+ "notifylist left", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg
+
+plugins.c:
+
+ "plugin created", PLUGIN_REC
+ "plugin loaded", PLUGIN_REC
+ "plugin destroyed", PLUGIN_REC
+
+ "plugin error already loaded", char *plugin
+ "plugin error invalid", char *plugin
+ "plugin error load", char *plugin, char *error
+ "plugin error not loaded", char *plugin
+ "plugin error version", char *plugin
+
+UI common
+---------
+
+* Requires to work properly:
+
+ "gui print text", CHANNEL_REC, int fg, int bg, int flags, char *text
+ "gui window goto", int number
+
+* Can be used to determine when all "gui print text"s are sent (not required)
+
+ "print text finished", CHANNEL_REC
+
+* Provides signals:
+
+ui-keyboard.c:
+
+ "keyinfo created", KEYINFO_REC
+ "keyinfo destroyed", KEYINFO_REC
+
+ui-printtext.c:
+
+ "print text", SERVER_REC, char *channel, int level, char *text
+ "print text stripped", SERVER_REC, char *channel, int level, char *text
+
+ui-themes.c:
+
+ "theme created", THEME_REC
+ "theme destroyed", THEME_REC
+
+ui-windows.c:
+
+ "window created", WINDOW_REC
+ "window destroyed", WINDOW_REC
diff --git a/docs/special_vars.txt b/docs/special_vars.txt
new file mode 100644
index 00000000..4890b55a
--- /dev/null
+++ b/docs/special_vars.txt
@@ -0,0 +1,99 @@
+NOTE: This is just a slightly modified file taken from EPIC's help.
+'!' at start of the line means that the feature doesn't work yet..
+
+Special Variables and Expandos
+
+Irssi supports a number of reserved, dynamic variables, sometimes
+referred to as expandos. They are special in that the client is
+constantly updating their values automatically. There are also
+numerous variable modifiers available.
+
+ Modifier Description
+ $variable A normal variable, expanding to the first match of:
+ | 1) an internal SET variable
+ | 2) an environment variable
+ $[num]variable Expands to the variables value, with 'num' width. If
+ | the number is negative, the value is right-aligned.
+ | The value is padded to meet the width with the
+ | character given after number (default is space).
+ | The value is truncated to specified width unless
+ | '!' character precedes the number.
+ $#variable Expands to the number of words in $variable. If $variable
+ | is omitted, it assumes $*
+ $@variable Expands to the number of characters in $variable. if
+ | $variable is omitted, it assumes $*
+ $($subvariable) This is somewhat similar to a pointer, in that the
+ | value of $subvar is taken as the name of the
+ | variable to expand to. Nesting is allowed.
+ ${expression} Permits the value to be embedded in another string
+ | unambiguously.
+ $!history! Expands to a matching entry in the client's command
+ | history, wildcards allowed.
+
+Whenever an alias is called, these expandos are set to the arguments passed
+to it. If none of these expandos are used in the alias, or the $() form
+shown above, any arguments passed will automatically be appended to the last
+command in the alias.
+
+ Expando Description
+ $* expands to all arguments passed to an alias
+ $n expands to argument 'n' passed to an alias (counting from zero)
+ $n-m expands to arguments 'n' through 'm' passed to an alias
+ $n- expands to all arguments from 'n' on passed to an alias
+ $-m expands to all arguments up to 'm' passed to an alias
+ $~ expands to the last argument passed to an alias
+
+These variables are set and updated dynamically by the client. The case of
+$A .. $Z is important.
+
+ Variable Description
+ $, last person who sent you a MSG
+ $. last person to whom you sent a MSG
+ $: last person to join a channel you are on
+ $; last person to send a public message to a channel you are on
+ $A text of your AWAY message, if any
+ $B body of last MSG you sent
+ $C current channel
+ $D last person that NOTIFY detected a signon for
+ $E idle time
+ $F time client was started, $time() format
+ $H current server numeric being processed
+ $I channel you were last INVITEd to
+ $J client version text string
+ $K current value of CMDCHARS
+ $L current contents of the input line
+ $M modes of current channel, if any
+ $N current nickname
+ $O value of STATUS_OPER if you are an irc operator
+ $P if you are a channel operator in $C, expands to a '@'
+ $Q nickname of whomever you are QUERYing
+ $R version of current server
+ $S current server name
+ $T target of current input (channel or QUERY nickname)
+! $U value of cutbuffer
+ $V client release date (numeric version string)
+ $W current working directory
+ $X your /userhost $N address (user@host)
+ $Y value of REALNAME
+ $Z time of day (hh:mm)
+ $$ a literal '$'
+
+For example, assume you have the following alias:
+
+ alias blah msg $D Hi there!
+
+If /blah is passed any arguments, they will automatically be appended to the
+MSG text. For example:
+
+ /blah oops /* command as entered */
+ "Hi there! oops" /* text sent to $D */
+
+Another useful form is ${}. In general, variables can be embedded inside
+strings without problems, assuming the surrounding text could not be
+misinterpreted as part of the variable name. This form guarantees that
+surrounding text will not affect the expression's return value.
+
+ /eval echo foo$Nfoo /* breaks, looks for $nfoo */
+ /eval echo foo${N}foo /* ${N} returns current nickname */
+ fooYourNickfoo /* returned by above command */
+