aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorricho <richo@psych0tik.net>2011-07-18 03:36:40 +0000
committerricho <richo@psych0tik.net>2011-07-18 03:36:40 +0000
commite4b9ea15d7abdae8211d18737fa54933f3faf57b (patch)
treefda4cc23faebfd1f130578b39fe161fe4c0ba1f8
parentAdded goodnicks from richoH/richos-irssi (diff)
parentOnly attempt join if channel exists (diff)
downloadirssi-scripts-e4b9ea15d7abdae8211d18737fa54933f3faf57b.tar.gz
irssi-scripts-e4b9ea15d7abdae8211d18737fa54933f3faf57b.zip
Merge branch 'master' into richoH-dev
Diffstat (limited to '')
-rw-r--r--.gitignore5
-rw-r--r--Makefile42
-rw-r--r--README.md130
-rw-r--r--act_hide/act_hide.pl353
-rw-r--r--auto-server/auto_server.pl15
-rwxr-xr-xchanged_update.pl122
-rw-r--r--docs/General/Formats.pod147
-rw-r--r--docs/General/Guide.pod370
-rw-r--r--docs/General/Internals.pod48
-rw-r--r--docs/General/Signals.pod2464
-rw-r--r--docs/Irssi.pod1109
-rw-r--r--docs/Irssi/Channel.pod86
-rw-r--r--docs/Irssi/Chatnet.pod26
-rw-r--r--docs/Irssi/Command.pod12
-rw-r--r--docs/Irssi/Ignore.pod27
-rw-r--r--docs/Irssi/Irc.pod51
-rw-r--r--docs/Irssi/Irc/Ban.pod15
-rw-r--r--docs/Irssi/Irc/Channel.pod16
-rw-r--r--docs/Irssi/Irc/Client.pod21
-rw-r--r--docs/Irssi/Irc/Dcc.pod79
-rw-r--r--docs/Irssi/Irc/Notifylist.pod23
-rw-r--r--docs/Irssi/Irc/Server.pod26
-rw-r--r--docs/Irssi/Log.pod55
-rw-r--r--docs/Irssi/Logitem.pod16
-rw-r--r--docs/Irssi/Nick.pod25
-rw-r--r--docs/Irssi/Query.pod30
-rw-r--r--docs/Irssi/Rawlog.pod48
-rw-r--r--docs/Irssi/Reconnect.pod20
-rw-r--r--docs/Irssi/Script.pod10
-rw-r--r--docs/Irssi/Server.pod149
-rw-r--r--docs/Irssi/TextUI.pod12
-rw-r--r--docs/Irssi/TextUI/Line.pod16
-rw-r--r--docs/Irssi/TextUI/LineCache.pod3
-rw-r--r--docs/Irssi/TextUI/LineInfo.pod3
-rw-r--r--docs/Irssi/TextUI/MainWindow.pod3
-rw-r--r--docs/Irssi/TextUI/StatusbarItem.pod29
-rw-r--r--docs/Irssi/TextUI/TextBufferView.pod26
-rw-r--r--docs/Irssi/TextUI/Textbuffer.pod3
-rw-r--r--docs/Irssi/UI.pod13
-rw-r--r--docs/Irssi/UI/Process.pod25
-rw-r--r--docs/Irssi/UI/Server.pod13
-rw-r--r--docs/Irssi/UI/TextDest.pod11
-rw-r--r--docs/Irssi/UI/Theme.pod169
-rw-r--r--docs/Irssi/UI/Window.pod167
-rw-r--r--docs/Irssi/Windowitem.pod78
-rw-r--r--docs/TODO63
-rw-r--r--docs/allsigs-clean.txt379
-rw-r--r--docs/allsigs-uniq.txt358
-rw-r--r--docs/allsigs.txt737
-rwxr-xr-xdocs/analyse-irssi.pl35
-rwxr-xr-xdocs/buildpod.pl102
-rwxr-xr-xdocs/buildsig2.pl140
-rwxr-xr-xdocs/buildsignals.pl239
-rw-r--r--docs/cmpusers.pl301
-rw-r--r--docs/complete-signal-list.txt379
-rw-r--r--docs/msglevels.txt58
-rwxr-xr-xdocs/parse_formats.pl23
-rwxr-xr-xdocs/parse_xsfuncs.pl76
-rw-r--r--docs/perl.txt437
-rw-r--r--docs/podstyle.css107
-rwxr-xr-xdocs/sigextract.pl24
-rw-r--r--docs/siglist.txt12255
-rw-r--r--docs/signals.txt257
-rw-r--r--docs/sigtree.pl13918
-rw-r--r--docs/xsfuncs.txt347
-rw-r--r--docs/xsfuncs_args.txt320
-rw-r--r--feature-tests/augment_inputline.pl9
-rw-r--r--feature-tests/bindings.pl114
-rw-r--r--feature-tests/colour_test.pl16
-rw-r--r--feature-tests/easy_exec.pl59
-rw-r--r--feature-tests/exec.pl442
-rw-r--r--feature-tests/format-test.pl23
-rw-r--r--feature-tests/getchan.pl165
-rw-r--r--feature-tests/key_sig.pl51
-rw-r--r--feature-tests/local_input_capture.pl50
-rw-r--r--feature-tests/pipes.pl87
-rw-r--r--feature-tests/redir-input.pl9
-rw-r--r--feature-tests/sig_unbind.pl58
-rw-r--r--feature-tests/signal_logger.pl170
-rw-r--r--feature-tests/signal_redir.pl116
-rw-r--r--feature-tests/template.pl56
-rw-r--r--foreach-guard/foreach-guard.pl208
-rw-r--r--history-search/README.pod149
-rw-r--r--history-search/rl_history_search.pl564
-rw-r--r--ido-mode/README.pod247
-rw-r--r--ido-mode/ido_switcher.pl462
-rw-r--r--joinforward/joinforward.pl65
-rw-r--r--longify/README.pod79
-rw-r--r--longify/longify-urls.list227
-rw-r--r--longify/longify-urls.pl268
-rw-r--r--modules/key_emitter/COPYING339
-rw-r--r--modules/key_emitter/Makefile57
-rw-r--r--modules/key_emitter/README.md36
-rw-r--r--modules/key_emitter/key_emitter_core.c34
-rw-r--r--modules/key_emitter/key_emitter_core.h27
-rw-r--r--modules/key_emitter/key_emitter_impl.c18
-rw-r--r--modules/key_emitter/key_emitter_impl.h7
-rw-r--r--modules/key_emitter/key_emitter_irssi.h51
-rw-r--r--modules/overlays/COPYING339
-rw-r--r--modules/overlays/Makefile59
-rw-r--r--modules/overlays/README.md10
-rw-r--r--modules/overlays/overlay_core.c46
-rw-r--r--modules/overlays/overlay_core.h27
-rw-r--r--modules/overlays/overlay_impl.c23
-rw-r--r--modules/overlays/overlay_impl.h9
-rw-r--r--modules/overlays/overlay_irssi.h52
-rw-r--r--modules/perl_plus/COPYING339
-rw-r--r--modules/perl_plus/Makefile56
-rw-r--r--modules/perl_plus/README.md36
-rw-r--r--modules/perl_plus/perl_plus_core.c34
-rw-r--r--modules/perl_plus/perl_plus_core.h27
-rw-r--r--modules/perl_plus/perl_plus_impl.c18
-rw-r--r--modules/perl_plus/perl_plus_impl.h7
-rw-r--r--modules/perl_plus/perl_plus_irssi.h51
-rw-r--r--modules/test/Makefile28
-rw-r--r--modules/test/README.md17
-rw-r--r--modules/test/test_core.c1
-rw-r--r--modules/test/test_core.h2
-rw-r--r--modules/test/test_impl.c7
-rw-r--r--modules/test/test_impl.h4
-rw-r--r--patches/fix-cumode_space.patch32
-rw-r--r--patches/fix-signal-remove-coderef.patch22
-rw-r--r--patches/reduce-timeout-bound.diff24
-rw-r--r--patches/remove-timeout-bound.diff30
-rw-r--r--prompt_info/README.pod273
-rw-r--r--prompt_info/old/input_overlay.pl (renamed from prompt_info/input_overlay.pl)188
-rw-r--r--prompt_info/old/overlays.pl (renamed from prompt_info/overlays.pl)0
-rw-r--r--prompt_info/old/prompt_info.pl (renamed from prompt_info/prompt_info.pl)0
-rw-r--r--prompt_info/old/prompt_replace.pl (renamed from prompt_info/prompt_replace.pl)0
-rw-r--r--prompt_info/old/visual.pl (renamed from prompt_info/visual.pl)0
-rw-r--r--prompt_info/uberprompt.pl550
-rw-r--r--quit-notify/README.pod97
-rw-r--r--quit-notify/notifyquit.pl484
-rwxr-xr-xreadme_generator.pl77
-rw-r--r--scrolled-reminder/scrolled_reminder.pl8
-rw-r--r--tab_stop/tab_stop.pl49
-rw-r--r--testing/.gitignore5
-rw-r--r--testing/Changes0
-rw-r--r--testing/MANIFEST13
-rw-r--r--testing/MANIFEST.SKIP9
-rw-r--r--testing/Makefile.PL30
-rw-r--r--testing/README0
-rw-r--r--testing/lib/Test/Irssi.pm314
-rw-r--r--testing/lib/Test/Irssi/Callbacks.pm123
-rw-r--r--testing/lib/Test/Irssi/Driver.pm258
-rw-r--r--testing/lib/Test/Irssi/Misc.pm35
-rw-r--r--testing/lib/Test/Irssi/Test.pm308
-rw-r--r--testing/lib/Test/Irssi/VirtualIrssi.pm32
-rwxr-xr-xtesting/t/001-use.t27
-rwxr-xr-xtesting/t/002-init.t33
-rw-r--r--testing/test-shim.pl114
-rwxr-xr-xtesting/test.pl17
-rwxr-xr-xtesting/tests/001-basic.t50
-rwxr-xr-xtesting/tests/002-cursor-test.t29
-rw-r--r--tinyurl-tabcomplete/README.pod56
-rw-r--r--tinyurl-tabcomplete/complete-tiny-url.pl63
-rw-r--r--undo/kill-ring.pl129
-rw-r--r--undo/undo.pl134
-rw-r--r--vim-mode/README.pod584
-rw-r--r--vim-mode/input.txt58
-rw-r--r--vim-mode/irssi/config38
l---------vim-mode/irssi/scripts/autorun/uberprompt.pl1
l---------vim-mode/irssi/scripts/autorun/vim_mode.pl1
-rw-r--r--vim-mode/tests.pl171
-rw-r--r--vim-mode/vim_mode.pl1211
165 files changed, 10982 insertions, 36816 deletions
diff --git a/.gitignore b/.gitignore
index 830c860..91f484a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,7 @@
/test/irssi/*
/nightfrog
+/modules/*/*.so
+/modules/*/*.o
+/vim-mode/TAGS
+/testing/irssi-test.log
+/vim-mode/irssi/scripts/autorun/README.pod
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..b351d8e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,42 @@
+SCRIPT_DIRS = \
+ history-search \
+ ido-mode \
+ prompt_info \
+ quit-notify \
+ sb-position \
+ scrolled-reminder \
+ tinyurl-tabcomplete \
+ vim-mode
+
+# act_hide \
+# auto-server \
+# colour-popup \
+# feature-tests \
+# joinforward \
+# masshilight \
+# modules \
+# no-key-modes \
+# patches \
+# testing \
+# throttled-autojoin \
+# undo \
+# url_hilight \
+
+SCRIPT_FILES = $(foreach FOO, $(SCRIPT_DIRS), $(wildcard $(FOO)/*.pl))
+
+$GENERATOR = "./readme_generator"
+
+.PHONY: all clean rebuild
+
+all:
+
+ echo making all: $(SCRIPT_DIRS)
+ echo files are: $(SCRIPT_FILES)
+
+rebuild: clean all
+
+clean:
+ -echo cleaning.
+
+README.pod:
+ -echo stuff
diff --git a/README.md b/README.md
index e69de29..f333829 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,130 @@
+# Shabble's Irssi Scripts
+
+This repository contains a collection of scripts I have written or adapted from
+others to improve my (and your!) irssi using experience.
+
+## What's In Here
+
+I never thought I'd end up writing so many scripts, so rather than give them
+each their own repository as might be sensible, they're all stuffed in here.
+
+The following is a brief list of the interesting scripts, and why you might want
+to use them.
+
+* `auto_server/` -- provides a `/join+` command which allows you to join
+ channels on servers to which you're not currently connected, as long as you've
+ got everything set up correctly in your `/channels` and `/networks` config.
+
+
+* `history_search/` -- an improved version of coekie's original history_search, it
+ behaves a lot more like the standard Readline incremental
+ search over your recent command history.
+
+* `ido_mode/` -- A window switching mode best described as "The bastard lovechild
+ of emacs ido-mode and window_switcher.pl". It supports flexible matching of
+ channel names, filtering by active windows, servers, and more. See the script
+ comments for details.
+
+* `feature_tests/` has a bunch of different little scripts written to test certain
+ aspects of Irssi behaviour. None of them are likely to be particularly useful
+ unless you're looking for simple examples of various things on which to build.
+ Some of the ones which might actually be useful are:
+
+ * `key_test.pl` - decodes and prints keyboard inputs from the `gui key pressed`
+ signal. Useful for checking what keycode a particular combo generates.
+
+ * `template.pl` - A basic outline of a script to use as a starting point
+ for others.
+
+ * `pipes.pl` A barebones template for a script which uses forking and pipes
+ to handle async tasks in the background without hanging Irssi.
+
+* `modules/` contains a few half-baked attempts at loadable modules for Irssi,
+ none of which do very much at the moment. They might be useful as templates
+ for your own modules, however.
+
+* `no_key_modes/` provides an additional expando `$M_nopass` which you can
+ add to your theme to provide channel modes, but without showing the channel
+ key. This is probably less useful since someone pointed me at `/set
+ chanmode_expando_strip` which has much the same effect.
+
+* `patches/` contains a few patches for the irssi source, probably out of date
+ by now, which do various things. The easiest way to figure out what is to read
+ them, unless I get bored and document them sometime.
+
+* `prompt_info/` was the original "How can I put dynamic status crap into my
+ prompt string" script. This has since been superceded by the far nicer
+ `uberprompt.pl` which also lives in that dir. Many of my other scripts
+ require uberprompt as a way to provide part of their user interface.
+
+* `sb_position/` gives you an additional status bar item which indicates
+ approximately how far you are scrolled in a given window buffer, in terms
+ of pages and percentage. It is configurable as the comments in the script
+ explain.
+
+* `scrolled_reminder/` is a script that tries to prevent one of the more
+ common accidental IRC screwups -- replying to a conversation that happened
+ hours ago because you didn't notice you were scrolled up in the history buffer.
+ If you try to send a message whilst scrolled, it'll warn you and check you
+ really want to first.
+
+* `quit-notify/` is based on a script by vague@#irssi/Freenode. It is most
+ useful when you are ignoring joins/parts/quits from a channel, and hence
+ don't realise when the person you are responding to has left. If they have
+ (or if you prefix your message with a nonexistent nick), the script will
+ ask you to confirm that you want to send the message, much like
+ `scrolled_reminder`.
+
+* `undo/` contains 2 scripts, `undo.pl` and `kill-ring.pl`. See their header
+ for further documentation.
+
+* `testing/` is a Perl framework external to Irssi (ie: not a script) that will
+ ultimately allow you to write unit tests for your scripts, and run them in a
+ real irssi instance, and check that they behave correctly. Still undergoing
+ heavy development, and not really ready for public usage.
+
+* `throttled_autojoin/` doesn't work. It's meant to allow people with huuuuuuge
+ numbers of autojoin channels and servers to connect slowly, so as not to time
+ themselves out when reconnecting. Mostly dead.
+
+* `tinyurl_tabcomplete/` is a script which lets you hit tab following anything
+ that looks like a URL to replace it with a tinyurl'd version. Handy if you
+ regularly paste Google-maps links or other massive horrible links.
+
+* `url_hilight/` I can't remember what this one does. Suggestions welcome.
+
+* `vim_mode/` The most exciting (and by far the largest) script here. Gives
+ vim-addicted users a way to use most of their finger-memory in Irssi. Still
+ under active development, features and bug-requests welcome. Also supported
+ in #irssi_vim on Freenode.
+
+## Documentation
+
+If you are here looking for my Irssi scripting documentation, please note that
+it has been moved to
+[https://github.com/shabble/irssi-docs/wiki](https://github.com/shabble/irssi-docs/wiki)
+
+## Other Things
+
+Many of my scripts require [uberprompt](https://github.com/shabble/irssi-scripts/blob/master/prompt_info/uberprompt.pl) as a
+dependency. Those that do will say so in the comments at the top of the file,
+and will probably refuse to load without it.
+
+## Reminders for myself
+
+### Deployment Process
+
+* Commit messages should be prefixed with something approximating the name of
+ the script or directory to make it obvious what thing is being worked on.
+
+* `./readme_generator.pl <dir> [<dirs]` to generate README files for each script
+ that has POD in it. Use `--overwrite` from time to time to clean things out.
+
+* `./changed_update.pl <script_name>` changes the %IRSSI{changed} timestamp
+ to the current time, which is something I always forget to do.
+
+* Think about bumping the internal version number if it's a big change.
+
+* Commit!
+
+
diff --git a/act_hide/act_hide.pl b/act_hide/act_hide.pl
new file mode 100644
index 0000000..95c10b9
--- /dev/null
+++ b/act_hide/act_hide.pl
@@ -0,0 +1,353 @@
+=pod
+
+=head1 NAME
+
+act_hide.pl
+
+=head1 DESCRIPTION
+
+A minimalist template useful for basing actual scripts on.
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+=head1 USAGE
+
+None, since it doesn't actually do anything.
+
+=head1 AUTHORS
+
+Derived from the L<hide.pl|http://scripts.irssi.org/scripts/hide.pl> script,
+Original Copyright E<copy> 2002 Marcus Rueckert C<E<lt>darix@irssi.deE<gt>>
+
+Modifications Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+B<TODO:> Is this Public Domain enough?
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+=head1 TODO
+
+=cut
+
+use strict;
+use warnings;
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'Marcus Rueckert, shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => 'act_hide',
+ description => 'Improved interface to activity_hide_* settings',
+ license => 'Public Domain',
+ );
+
+# Globals.
+
+my $CMD_NAME = "hide";
+my $SUB_CMDS = {
+ add => \&cmd_hide_add,
+ del => \&cmd_hide_del,
+ list => \&cmd_hide_list,
+ };
+
+my $CMD_OPTS = "-target -level";
+
+
+act_hide_init();
+
+sub act_hide_init {
+
+ Irssi::command_bind($CMD_NAME, \&subcmd_handler);
+
+ foreach my $subcmd (keys %$SUB_CMDS) {
+ my $coderef = $SUB_CMDS->{$subcmd};
+ Irssi::command_bind("$CMD_NAME $subcmd", $coderef);
+ Irssi::command_set_options("$CMD_NAME $subcmd", $CMD_OPTS);
+ }
+}
+
+sub subcmd_handler {
+ my ($data, $server, $w_item) = @_;
+ $data =~ s/\s+$//g; # strip trailing whitespace.
+ Irssi::command_runsub($CMD_NAME, $data, $server, $w_item);
+}
+
+sub parse_args {
+ my ($cmd, $data) = @_;
+ my $options = {};
+ my @opts = Irssi::command_parse_options($cmd, $data);
+
+ if (@opts and ref($opts[0]) eq 'HASH') {
+ $options = $opts[0];
+ $options->{__remainder} = $opts[1];
+ print "Options: " . Dumper($options);
+ } else {
+ $options->{__remainder} = $data;
+ }
+ return $options;
+}
+
+sub cmd_hide_add {
+ my ($args, $server, $w_item) = @_;
+ my $opts = parse_args("$CMD_NAME add", $args);
+
+ if (exists $opts->{target}) {
+ my $target = $opts->{__remainder};
+ $target =~ s/^\s*(\S+)\s*$/$1/;
+
+ if (add_item_to_targets($target)) {
+ $w_item->print("added $target");
+ } else {
+ $w_item->print("failed to add $target");
+ }
+ } elsif (exists $opts->{level}) {
+
+ } else {
+ print "Bah";
+ }
+
+}
+
+sub cmd_hide_del {
+ my ($args, $server, $w_item) = @_;
+ my $opts = parse_args("$CMD_NAME del", $args);
+ if (exists $opts->{target}) {
+ my $target = $opts->{__remainder};
+ $target =~ s/^\s*(\S+)\s*$/$1/;
+
+ if (remove_item_from_targets($target)) {
+ $w_item->print("removed $target");
+ } else {
+ $w_item->print("failed to remove $target");
+ }
+ } elsif (exists $opts->{level}) {
+
+ } else {
+ print "Bah";
+ }
+
+}
+
+sub cmd_hide_list {
+ my ($args, $server, $w_item) = @_;
+ my $opts = parse_args("$CMD_NAME list", $args);
+ if (exists $opts->{target}) {
+ $w_item->print("Targets: "
+ . Irssi::settings_get_str('activity_hide_targets'));
+ } elsif (exists $opts->{level}) {
+ $w_item->print("Levels: "
+ . Irssi::settings_get_level('activity_hide_level'));
+ } else {
+ $w_item->print("Bah");
+ }
+
+}
+
+sub add_item_to_targets {
+ my ($item) = @_;
+ my $current = Irssi::settings_get_str('activity_hide_targets');
+ my %map = map { $_ => 1 } split /\s+/, $current;
+
+ if (not exists $map{$item}) {
+ Irssi::settings_set_str('activity_hide_targets', $current . ' ' . $item);
+ return 1;
+ } else {
+ print "Cannot add $item, already exists";
+ return 0;
+ }
+}
+
+sub remove_item_from_targets {
+ my ($item) = @_;
+ my $current = Irssi::settings_get_str('activity_hide_targets');
+ my %map = map { $_ => 1 } split /\s+/, $current;
+
+ if (exists $map{$item}) {
+ my $new_str = join ' ', grep { $_ ne $item } keys %map;
+ Irssi::settings_set_str('activity_hide_targets', $new_str);
+ return 1;
+ } else {
+ print "Cannot remove $item, doesn't exist";
+ return 0;
+ }
+}
+
+
+
+
+# sub add_item {
+# my ($target_type, $data) = @_;
+# my $target = target_check ($target_type);
+# return 0 unless $target;
+# if ($data =~ /^\s*$/ ) {
+# print (CRAP "\cBNo target specified!\cB");
+# print (CRAP "\cBUsage:\cB hide $target_type add [$target_type]+");
+# }
+# else {
+# my $set = settings_get_str($target);
+# for my $item ( split (/\s+/, $data) ) {
+# if ($set =~ m/^\Q$item\E$/i) {
+# print (CRAP "\cBWarning:\cB $item is already in in $target_type hide list.")
+# }
+# else {
+# print (CRAP "$item added to $target_type hide list.");
+# $set = join (' ', $set, $item);
+# }
+# };
+# settings_set_str ($target, $set);
+# signal_emit('setup changed');
+# }
+# return 1;
+# }
+
+# sub remove_item {
+# my ($target_type, $data) = @_;
+# my $target = target_check ($target_type);
+# if ( not ( $target )) { return 0 };
+# if ($data =~ /^\s*$/ ) {
+# print (CRAP "\cBNo target specified!\cB");
+# print (CRAP "\cBUsage:\cB hide $target_type remove [$target_type]+");
+# }
+# else {
+# my $set = settings_get_str($target);
+# for my $item ( split (/\s+/, $data) ) {
+# if ($set =~ s/$item//i) {
+# print (CRAP "$item removed from $target_type hide list.")
+# }
+# else {
+# print (CRAP "\cBWarning:\cB $item was not in $target_type hide list.")
+# }
+# };
+# settings_set_str ($target, $set);
+# signal_emit('setup changed');
+# }
+# return 1;
+# }
+
+# sub target_check {
+# my ($target_type) = @_;
+# my $target = '';
+# if ($target_type eq 'level') {
+# $target = 'activity_hide_level';
+# }
+# elsif ($target_type eq 'target') {
+# $target = 'activity_hide_targets';
+# }
+# else {
+# print (CLIENTERROR "\cBadd_item: no such target_type $target_type\cB");
+# }
+# return $target;
+# }
+
+# sub print_usage {
+# print (CRAP "\cBUsage:\cB");
+# print (CRAP " hide target [add|remove] [targets]+");
+# print (CRAP " hide level [add|remove] [levels]+");
+# print (CRAP " hide usage");
+# print (CRAP " hide print");
+# print (CRAP "See also: levels");
+# };
+
+# sub print_items {
+# my ($target_type) = @_;
+# my $delimiter = settings_get_str('hide_print_delimiter');
+# my $target = target_check ($target_type);
+# if ( not ( $target )) { return 0 };
+# print ( CRAP "\cB$target_type hide list:\cB$delimiter", join ( $delimiter, sort ( split ( " ", settings_get_str($target) ) ) ) );
+# return 1;
+# }
+
+# #
+# # targets
+# #
+
+# command_bind 'hide target' => sub {
+# my ($data, $server, $item) = @_;
+# if ($data =~ m/^[(add)|(remove)]/i ) {
+# command_runsub ('hide target', $data, $server, $item);
+# }
+# else {
+# print (CRAP "\cBUsage:\cB hide target [add|remove] [targets]+");
+# }
+# };
+
+# command_bind 'hide target add' => sub {
+# my ($data, $server, $item) = @_;
+# add_item ('target', $data);
+# };
+
+# command_bind 'hide target remove' => sub {
+# my ($data, $server, $item) = @_;
+# remove_item ('target', $data);
+# };
+
+# #
+# # levels
+# #
+# command_bind 'hide level' => sub {
+# my ($data, $server, $item) = @_;
+# if ($data =~ m/^[(add)|(remove)]/i ) {
+# command_runsub ('hide level', $data, $server, $item);
+# }
+# else {
+# print (CRAP "\cBUsage:\cB hide level [add|remove] [levels]+");
+# print (CRAP "See also: levels");
+# }
+# };
+
+# command_bind 'hide level add' => sub {
+# my ($data, $server, $item) = @_;
+# add_item ('level', $data);
+# };
+
+# command_bind 'hide level remove' => sub {
+# my ($data, $server, $item) = @_;
+# remove_item ('level', $data);
+# };
+
+# #
+# # general
+# #
+
+# command_bind 'hide' => sub {
+# my ($data, $server, $item) = @_;
+# if ($data =~ m/^[(target)|(level)|(help)|(usage)|(print)]/i ) {
+# command_runsub ('hide', $data, $server, $item);
+# }
+# else {
+# print_usage();
+# }
+# };
+
+# command_bind 'hide print' => sub {
+# print_items ('level');
+# print_items ('target');
+# };
+
+# command_bind 'hide usage' => sub { print_usage (); };
+# command_bind 'hide help' => sub { print_usage (); };
+
+# #
+# # settings
+# #
+
+# settings_add_str ( 'script', 'hide_print_delimiter', "\n - ");
diff --git a/auto-server/auto_server.pl b/auto-server/auto_server.pl
index 0f5a11e..0046340 100644
--- a/auto-server/auto_server.pl
+++ b/auto-server/auto_server.pl
@@ -104,8 +104,8 @@ sub haxy_print_hook {
sub parse_channel_map {
#my $data = Irssi::settings_get_str('joinplus_server_maps');
- unbind_completion();
my $data = retrieve_channels();
+ unbind_completion();
my @items = split /\s+/, $data;
if (@items % 2 == 0) {
$channel_map = { @items }; # risky?
@@ -135,7 +135,7 @@ sub join_plus {
# parse out channel name from args:
my $channel;
- if ($args =~ m/^(#?[#a-zA-Z0-9]+)/) {
+ if ($args =~ m/^(#?[#a-zA-Z0-9-]+)/) {
$channel = $1;
_debug_print ("Channel is: $channel");
}
@@ -211,13 +211,14 @@ sub do_channel_join {
my $channel = $pending_joins->{$serv->{address}};
$channel = $pending_joins->{$serv->{tag}} unless $channel;
+ if ($channel) {
+ _debug_print ("attempting to join $channel");
- _debug_print ("attempting to join $channel");
+ Irssi::server_find_tag($serv->{tag})->command("JOIN $channel");
- Irssi::server_find_tag($serv->{tag})->command("JOIN $channel");
-
- delete $pending_joins->{$serv->{address}};
- delete $pending_joins->{$serv->{tag}};
+ delete $pending_joins->{$serv->{address}};
+ delete $pending_joins->{$serv->{tag}};
+ }
}
diff --git a/changed_update.pl b/changed_update.pl
new file mode 100755
index 0000000..15f6667
--- /dev/null
+++ b/changed_update.pl
@@ -0,0 +1,122 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use feature qw/say/;
+use DateTime;
+
+my $infile = $ARGV[0] // die "No File provided"; #'feature-tests/template.pl.copy';
+my $transform = PPI::Transform::UpdateTimestamp->new
+ (
+ updated => DateTime->now,
+ quiet => 1
+ );
+
+
+my $ret = $transform->file($infile);
+
+#say "Return value: " .
+
+exit (defined $ret && $ret ? 0 : 1);
+
+
+
+package PPI::Transform::UpdateTimestamp;
+
+use strict;
+use warnings;
+
+use PPI;
+use PPI::Dumper;
+use DateTime;
+use Carp qw/carp/;
+
+use base 'PPI::Transform';
+
+our $VERSION = '3.14';
+
+use feature qw/say/;
+
+sub new {
+ my ($class, @args) = @_;
+ my $self = $class->SUPER::new(@args);
+
+ # Must provide an updated timestamp.
+ unless ( exists ($self->{updated}) ) {
+ #PPI::Exception->throw("Did not provide a valid updated timestamp.");
+ my $now = DateTime->now();
+ carp("No updated value provided, using $now");
+ $self->set_updated($now);
+ }
+
+ return $self;
+}
+
+sub updated {
+ $_[0]->{updated};
+}
+sub quiet {
+ $_[0]->{quiet}
+}
+
+sub set_updated {
+ my ($self, $val) = shift;
+ $self->{updatd} = $val;
+}
+
+sub document {
+ my ($self, $doc) = @_;
+ die "Transform requires PPI::Document" unless ref($doc) eq 'PPI::Document';
+
+ my $vars = $doc->find('PPI::Statement::Variable');
+ my $ret = 0;
+ foreach my $var (@$vars) {
+ foreach my $vc ($var->children) {
+ if ($vc->class eq 'PPI::Token::Symbol' and
+ $vc->canonical eq '%IRSSI') {
+ say "Found IRSSI Hash, processing it" unless $self->quiet;
+ $ret = $self->examine_struct($vc->statement);
+ }
+ }
+ }
+ return $ret;
+}
+
+sub examine_struct {
+ my ($self, $stmt) = @_;
+ my $ret = 0;
+
+ unless ($self->quiet) {
+ my $dumper = PPI::Dumper->new($stmt);
+ $dumper->print();
+ say "-" x 60;
+ }
+
+ foreach my $node ($stmt->schildren) {
+
+ if ($node->class eq 'PPI::Structure::List') {
+
+ foreach my $t ($node->tokens) {
+ next unless $t->significant;
+ if ($t->class eq 'PPI::Token::Word' and
+ $t->content =~ m/updated/) {
+
+ my $val = $t->snext_sibling->snext_sibling;
+ $val->set_content($self->updated);
+
+ if ($val->content eq $self->updated) {
+ $ret = 1;
+ }
+
+ say "Thingie: " . $t->content unless $self->quiet;
+ say "value set to: " . $val->content unless $self->quiet;
+ }
+ }
+ }
+ }
+ return $ret;
+}
+
+1;
+
diff --git a/docs/General/Formats.pod b/docs/General/Formats.pod
deleted file mode 100644
index 0aaca37..0000000
--- a/docs/General/Formats.pod
+++ /dev/null
@@ -1,147 +0,0 @@
-__END__
-
-=head1 NAME
-
-Formats
-
-=head1 DESCRIPTION
-
-I<Stuff>
-
-=head1 COLOURS
-
-Irssi's colors that you can use in text formats, hilights, etc:
-
- C1 C2 C3 Text Colour (C1) Text Colour (C2) Background (C3)
- --------------------------------------------------------------------------
- %k %K %0 black dark grey 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 %N Changes the color to "default color", removing
- all other coloring and formatting. %N is always
- the terminal's default color. %n is usually too,
- except in themes it changes to "previous color",
- ie. hello = "%Rhello%n" and "%G{hello} world"
- would print hello in red, and %n would turn back
- into %G making world green.
-
- %F Blinking on/off (think: flash)
- %U Underline on/off
- %8 Reverse on/off
- %9 %_ Bold on/off
- %: Insert newline
- %| Marks the indentation position
- %# Monospace font on/off (useful with lists and GUI)
- %% A single %
-
-
-=head1 VARIABLE SYNTAX
-
-Irssi supports a number of reserved, dynamic variables, sometimes
-referred to as I<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. If '.' character
- | precedes the number the value isn't padded, just
- | truncated.
- $#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.
-
-B<TODO: provide some examples of the various forms of truncation/padding, etc>
-
-=head1 ALIAS AND FORMAT TEMPLATE ARGUMENTS
-
-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 C<$()> 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
-
-=head1 EXPANDOS (SPECIAL VARIABLES)
-
-These variables are set and updated dynamically by the client. The case of
-C<$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
- $k first character in 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 nick of query)
- $U value of cutbuffer
- $V client release date (format YYYYMMDD)
- $W current working directory
- $X your /userhost $N address (user@host)
- $Y value of REALNAME
- $Z time of day (hh:mm, can be changed with /SET timestamp_format)
- $$ a literal '$'
-
- $versiontime prints time of the irssi version in HHMM format
- $sysname system name (eg. Linux)
- $sysrelease system release (eg. 2.2.18)
- $sysarch system architecture (eg. i686)
- $topic channel topic
- $usermode user mode
- $cumode own channel user mode
- $cumode_space like $cumode, but gives space if there's no mode.
- $tag server tag
- $chatnet chat network of server
- $winref window reference number
- $winname window name
- $itemname like $T, but use item's visible_name which may be
- different (eg. $T = !12345chan, $itemname = !chan)
diff --git a/docs/General/Guide.pod b/docs/General/Guide.pod
deleted file mode 100644
index a3cfe38..0000000
--- a/docs/General/Guide.pod
+++ /dev/null
@@ -1,370 +0,0 @@
-__END__
-
-=head1 NAME
-
-Guide To Irssi Scripting.
-
-=head1 DESCRIPTION
-
-This page presents a bunch of additional information about scripting for Irssi
-that doesn't fit well anywhere else. It contains useful tips, common pitfalls,
-and a bunch of other handy things. At least, I hope so.
-
-=head1 LOADING AND UNLOADING SCRIPTS
-
-=head2 File Locations
-
-Packaged Irssi script files are usually placed in F</usr/share/irssi/scripts/>,
-but custom scripts or those required by a single user can be placed in
-F<~/.irssi/scripts/>.
-
-=head3 Autorunning Scripts
-
-If you require a script be run when Irssi starts, you can place the file (or
-better, create a symlink to it) into F<~/.irssi/scripts/autorun/>.
-
-Alternatively, if you want more control over the order in which scripts are
-autoloaded, you can place
-
- SCRIPT LOAD script1
- SCRIPT LOAD script2
- SCRIPT LOAD script3
-
-into your F<~/.irssi/startup> file.
-
-I<This tip was provided by C<Rhonda> on Freenode/#irssi>.
-
-=head2 Testing
-
-=for comment B<TODO: Forgotten what was going to go here>
-
-=head3 C</SCRIPT EXEC>
-
-The C<SCRIPT EZEC> command allows you to test various simple ideas straight from
-the Irssi interface. It can also be used to register signal handlers and
-commands if run with the C<-permanent> option.
-
-B<NB: C<-permanent> only means that the script should not terminate
-immediately. It is still not persistent between restarts of the Irssi client.
-Truly permanent scripts should be placed in autorun scripts or added to
-F<~/.irssi/startup>>
-
-
-B<TODO: Using it for testing stuff out>
-
-B<TODO: Also for very short scripts (with -permanent?)>
-
-B<TODO: Quoting rules for vars and things?>
-
-=head2 Loading
-
-Scripts are loaded via C</SCRIPT LOAD I<filename>>. A default Irssi
-configuration also provides the C</RUN> alias as an alternative to C</SCRIPT
-LOAD>.
-
-Loaded scripts will exist in the Irssi namespace as:
-C<Irssi::Script::I<E<lt>nameE<gt>>>, where I<name> is the filename stripped of its
-F<.pl> extension.
-
-=head2 Unloading
-
-A script can be unloaded via the C</SCRIPT UNLOAD I<name>> command. The name is
-typically the script filename without the F<.pl> extension, so F<nickcolor.pl>
-becomes C</SCRIPT UNLOAD nickcolor>.
-
-As part of the unloading process, if the script contains a
-
- sub UNLOAD {
- ...
- }
-
-function, it will be run just before the script is unloaded and all variables
-destroyed. This can be used to clean up any temporary files, shut down any
-network connections or processes, and restore any Irssi modifications made.
-
-=head1 ANATOMY OF A SCRIPT
-
-In this section, we develop a very simplistic script and look at the
-necessary code.
-
-B<Note:> This section has considerable overlap with L<Juerd's Scripting
-Tutorial|http://juerd.nl/site.plp/irssiscripttut>, which you may also
-wish to read.
-
-B<TODO: Figure out a basic script to use as an example>
-
-=head2 Preamble
-
-All scripts should contain a header as follows:
-
- use strict;
- use warnings;
-
- use vars qw($VERSION %IRSSI);
- use Irssi;
-
- $VERSION = '1.00';
- %IRSSI = (
- authors => 'Author Name(s)',
- contact => 'author_email@example.com',
- name => 'Script Title',
- description => 'Longer script description ',
- license => 'Public Domain',
- );
-
-The first two lines are optional, but strongly advised. They provide far greater
-error checking and diagnostics should you make a mistake in your code.
-
-The C<use vars qw($VERSION %IRSSI)> defines two global variables, which are then
-set below to the appropriate values.
-
-C<use Irssi> tells the script to make the various L<Irssi> support functions available.
-Additional parameters passed here with C<qw/.../> can be used to import functions into
-the current script namespace.
-
-
-=head1 COMMONLY SCRIPTED TASKS
-
-=head2 Modifying an input line before sending
-
-B<TODO: catch "send text", modify it if necessary, signal_emit it>
-
-=head2 Responding to a public message
-
-B<TODO: catch "messsage public", check params, generate response>
-
-=head2 Responding to a private message
-
-B<TODO: catch "messsage private", check params, generate response>
-
-=head1 USEFUL THINGS
-
-
-=head2 Dealing with Blocking IO
-
-B<TODO: see F<hddtemp.pl> on SIO> - fork and use pipes to communicate. Also
-remember to pidwait the child>
-
-
-=head2 Getting the Response Value of a Remote Command
-
-B<TODO: Add bazerka's snippet here>
-
-=head2 Getting the Response Value of a Local Command
-
-B<TODO: How?!??>
-
-There is no simple way to achieve this. The data backing most common activities
-can be extracted through other API calls, but there are some exceptions.
-
-Maybe, look up the format, intercept gui print text, try to match it against
-what you're expecting?
-
-Can this be generalised at all?
-
-=head2 Sharing Code Between Scripts
-
-There are 2 main ways for scripts to communicate, either via emitting and
-handling Irssi signals, or by calling functions from one another directly.
-
-=head3 Using Signals
-
-In order to use custom signals, they must first be registered with Irssi.
-During registration, a list of the parameters must also be specified. Once specified,
-it cannot be changed without restarting Irssi, so be warned.
-
-After registration, your script can simply listen for signals with
-L<Irssi::signal_add|Irssi/signal_add $sig_name, $func>, or generate them for
-others to handle with L<Irssi::signal_emit|Irssi/signal_emit $sig_name, @params>
-
-For example:
-
-B<TODO: Example here>
-
-=head3 Using Functions
-
-Because scripts exist in a well-defined namespace of C<Irssi::Script::SOMEPACKAGE>,
-it is possible to manipulate the perl symbol table to call functions directly on them,
-assuming they are loaded.
-
-Because the following code depends on I<symbolic references>, it is necessary to
-tell Perl to allow them, despite normally being prohibited by C<use strict>.
-The C<no strict 'refs';> line takes care of this, and reenables them at the end
-of the snippet.
-
- no strict 'refs';
- if (defined %{ 'Irssi::Script::SOMEPACKAGE::' }) {
- if (defined &{'Irssi::Script::SOMEPACKAGE::SOME_FUNC'} ) {
- (&{'Irssi::Script::SOMEPAKAGE::SOME_FUNC'}(@args));
- } else {
- print("Err: can't find Irssi::Script::SOMEPACKAGE::SOME_FUNC");
- }
- }
- use strict 'refs';
-
-Here, C<SOMEPACKAGE> is the name of the script package which contains the
-function you want to call, and C<SOME_FUNC> is the name of the function within
-it you wish to call. The first 2 C<defined(..)> lines take care of ensuring
-that the package and function exist, and generate an error otherwise. Other
-error handling is possible, including executing a C</SCRIPT LOAD> to load the
-necessary script and retry, but is not shown here.
-
-I<This snippet was provided by C<Bazerka> on Freenode/#irssi>.
-
-=head2 If In Doubt, Dump!
-
-C<Data::Dumper> is an extremely good way to inspect Irssi internals if you're
-looking for an undocumented feature.
-
-The C<DUMP> alias by L<Wouter
-Coekaerts|http://wouter.coekaerts.be/site/irssi/aliases> provides an easy way to
-check object fields.
-
-Dump perl object (e.g. C</dump Irssi::active_win>):
-
- /alias DUMP script exec use Data::Dumper\; print Data::Dumper->new([\\$0-])->Dump
-
-=head2 Making Scripts Act Native
-
-An important part of creating a good script is to make it behave as though it
-were a part of Irssi. Adhering to some of the standard conventions can make this
-easier.
-
-=head3 Provide Help
-
-Scripts commonly store information about how to use them in comments at the top
-of their file. Whilst better than no documentation at all, a preferable approach
-is to allow that help to be accessed from within Irssi itself, using the C</HELP>
-command.
-
- my $help = "this is help for b";
-
- Irssi::command_bind('help', sub {
- if ($_[0] eq 'test_b') {
- Irssi::print($help, MSGLEVEL_CLIENTCRAP);
- Irssi::signal_stop;
- }
- }
- );
-
-This example demonstrates overriding the C</HELP> command, and if the argument
-matches our command, print some custom help and prevent the internal Irssi help
-function from being called. Otherwise, it falls back to the default help.
-
-
-I<This snippet was provided by C<culb> on Freenode/#irssi>.
-
-=head3 Use Tab Completion
-
-One of the great features of Irssi is the ability to complete commands,
-subcommands and even certain arguments. Using the subcommands processing feature
-described below automatically allows those subcommands to be tab-completed, but
-for more complex tasks, you can hook into the autocompletion system itself.
-
-In order to create your own completions, you must intercept the C<"complete
-word"> signal and return a list of completion candidates.
-
- sub do_complete {
- my ($strings, $window, $word, $linestart, $want_space) = @_;
-
- # only provide these completions if the input line is otherwise empty.
- return unless ($linestart eq '' && $word eq '');
-
- # add the completion candidates
- push @$strings, qw/foo bar baz bacon/;
-
- # indicate that we want to include a space after the completion
- $$want_space = 1;
-
- # prevent internal Irssi completion from responding
- Irssi::signal_stop;
- }
-
- Irssi::signal_add_first('complete word', \&do_complete);
-
-I<This snippet taken from
-L<F<complete_lastspoke.pl>|http://scripts.irssi.org/scripts/complete_lastspoke.pl>
-by Daenyth>
-
-=head3 Use Settings for Customisation
-
-Many scripts require the setting of various parameters to affect how they behave.
-One approach is to require the user to directly edit the script file, but this
-is less than ideal for a number of reasons. Firstly, it is easy to introduce
-errors into a script by accidentally deleting closing quotes or semicolons.
-Secondly, it has no effect until the script is reloaded, leading to confusion.
-
-A much better alternative is to use Irssi's inbuilt settings mechanism to allow
-users to set these parameters from within Irssi, as well as to C</SAVE> their
-settings for subsequent invocations.
-
-B<TODO: different types of settings>
-
-B<TODO: register/set/get>
-
-B<TODO: Listening for changes and acting accordingly>
-
-=head3 Use Subcommands to Group Script Functionality
-
-A common theme in Irssi scripts is to define commands with a prefix, such as
-C</myscript_foo>, C<myscript_bar>, etc. This helps to avoid accidentally clobbering
-native commands and those defined by other scripts, but is a problem better solved
-with I<subcommands>.
-
-Subcommands allow you to bind commands such as C</myscript foo> and C</myscript bar>.
-Completions are automatically handled for both the primary command, and any
-subcommands contained within it.
-
-The following example demonstrates how to use subcommands from within a script:
-
- Irssi::command_bind("foo bar", \&subcmd_bar);
- Irssi::command_bind("foo", \&subcmd_handler);
-
- sub subcmd_handler {
- my ($data, $server, $item) = @_;
- $data =~ s/\s+$//g; # strip trailing whitespace.
- Irssi::command_runsub('foo', $data, $server, $item);
- }
-
- sub subcmd_bar {
- my ($args) = @_;
- print "subcommand called with: $args";
- }
-
-=head1 AUTHOR & THANKS
-
-This page was written by Tom Feist C<shabble+irssi@metavore.org>, but draws
-on the help of many many people.
-
-The denizens of Freenode/#irssi have been particularly helpful, especially
-C<Bazerka> and C<culb>.
-
-To report bugs or suggestions, email me at the address before, or come talk to
-me in C<#irssi> on C<irc.freenode.net>.
-
-=head1 OTHER RESOURCES
-
-The documentation assembled here and elsewhere on this site has been drawn from
-many different places, and a lot of valuable information is available from the
-following sites.
-
-
-=over
-
-=item L<http://irssi.org/documentation/perl>
-
-=item L<http://irssi.org/documentation/signals>
-
-=item L<http://irssi.org/documentation/special_vars>
-
-=item L<http://irssi.org/documentation/formats>
-
-=item L<http://irssi.org/documentation/settings>
-
-=item L<http://juerd.nl/site.plp/irssiscripttut>
-
-=item L<http://irchelp.org/irchelp/rfc/rfc.html>
-
-=item L<http://wouter.coekaerts.be/site/irssi/irssi>
-
-=back
diff --git a/docs/General/Internals.pod b/docs/General/Internals.pod
deleted file mode 100644
index c364dd5..0000000
--- a/docs/General/Internals.pod
+++ /dev/null
@@ -1,48 +0,0 @@
-__END__
-
-=head1 Random Notes on Irssi Internals.
-
-
-=head2 Display Output
-
-Irssi has to deal with a whole bunch of things between a script print() and actually
-putting it on the screen.
-
-Some of these things are:
-
-=over 4
-
-=item Message Levels
-
-=item Abstract Replacements
-
-=item Theme formats
-
-=item Module (C</format>) formats
-
-=back
-
-==head3 Message Levels
-
-Message levels are defined in F<src/core/levels.h> and some
-support functions in F<src/core/levels.c>
-
-We have:
-
-=over 4
-
-=item C<int level_get(str level)>
-
-Special cases: C<ALL, *> both return MSGLEVEL_ALL, and C<NEVER> returns 0.
-The remainder are looked up in a big static string array by name to
-find the appropriate numeric level. Partial matches are permitted as
-long as they are unambigious.
-
-
-=item C<int level2bits(str level, int *errorp)>
-
-=item C<str bits2level(int bits)>
-
-=item C<int combine_level(int dest, str src)>
-
-
diff --git a/docs/General/Signals.pod b/docs/General/Signals.pod
deleted file mode 100644
index 2c83262..0000000
--- a/docs/General/Signals.pod
+++ /dev/null
@@ -1,2464 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi Signal Documentation
-
-=head1 DESCRIPTION
-
-Perl POD documentation based on the doc/signals.txt documentation supplied with
-Irssi.
-
-=head1 USING SIGNALS
-
-See L<Irssi/"Signals">
-
-=begin irssi_signal_types
-
-START OF SIGNAL TYPES
-
-=over
-
-=item C<GList \* of ([^,]*)> C<glistptr_$1>
-
-=item C<GSList \* of (\w+)s> C<gslist_$1>
-
-=item C<char \*> C<string>
-
-=item C<ulong \*> C<ulongptr>
-
-=item C<int \*> C<intptr>
-
-=item C<int> C<int>
-
-
-
-=item C<CHATNET_REC> C<iobject>
-
-=item C<SERVER_REC> C<iobject>
-
-=item C<RECONNECT_REC> C<iobject>
-
-=item C<CHANNEL_REC> C<iobject>
-
-=item C<QUERY_REC> C<iobject>
-
-=item C<COMMAND_REC> C<iobject>
-
-=item C<NICK_REC> C<iobject>
-
-=item C<LOG_REC> C<Irssi::Log>
-
-=item C<RAWLOG_REC> C<Irssi::Rawlog>
-
-=item C<IGNORE_REC> C<Irssi::Ignore>
-
-=item C<MODULE_REC> C<Irssi::Module>
-
-
-=item C<BAN_REC> C<Irssi::Irc::Ban>
-
-=item C<NETSPLIT_REC> C<Irssi::Irc::Netsplit>
-
-=item C<NETSPLIT_SERVER__REC> C<Irssi::Irc::Netsplitserver>
-
-
-=item C<DCC_REC> C<siobject>
-
-=item C<AUTOIGNORE_REC> C<Irssi::Irc::Autoignore>
-
-=item C<AUTOIGNORE_REC> C<Irssi::Irc::Autoignore>
-
-=item C<NOTIFYLIST_REC> C<Irssi::Irc::Notifylist>
-
-=item C<CLIENT_REC> C<Irssi::Irc::Client>
-
-
-=item C<THEME_REC> C<Irssi::UI::Theme>
-
-=item C<KEYINFO_REC> C<Irssi::UI::Keyinfo>
-
-=item C<PROCESS_REC> C<Irssi::UI::Process>
-
-=item C<TEXT_DEST_REC> C<Irssi::UI::TextDest>
-
-=item C<WINDOW_REC> C<Irssi::UI::Window>
-
-=item C<WI_ITEM_REC> C<iobject>
-
-
-
-=item C<PERL_SCRIPT_REC> C<Irssi::Script>
-
-=back
-
-END OF SIGNAL TYPES
-
-=end irssi_signal_types
-
-=head1 SIGNAL DEFINITIONS
-
-The following signals are categorised as in the original documentation, but
-have been revised to note Perl variable types and class names.
-
-Arguments are passed to signal handlers in the usual way, via C<@_>.
-
-=for irssi_signal_defs START OF SIGNAL DEFINITIONS
-
-=head2 Core
-
-=over 4
-
-=item C<"gui exit">
-
-=over
-
-=item I<None>
-
-=back
-
-=item C<"gui dialog">
-
-=over
-
-=item string C<$type>
-
-=item string C<$text>
-
-=back
-
-=item C<"send command">
-
-=over
-
-=item string C<$command>,
-
-=item L<Irssi::Server> C<$server>,
-
-=item L<Irssi::Windowitem> C<$window_item>
-
-=back
-
-This is sent when a command is entered via the GUI, or by scripts via L<Irssi::command>.
-
-=back
-
-=head3 F<chat-protocols.c>:
-
-B<TODO: What are CHAT_PROTOCOL_REC types?>
-
-=over 4
-
-=item C<"chat protocol created">
-
-=over
-
-=item CHAT_PROTOCOL_REC C<$protocol>
-
-=back
-
-=item C<"chat protocol updated">
-
-=over
-
-=item CHAT_PROTOCOL_REC C<$protocol>
-
-=back
-
-=item C<"chat protocol destroyed">
-
-=over
-
-=item CHAT_PROTOCOL_REC C<$protocol>
-
-=back
-
-=back
-
-=head3 F<channels.c>:
-
-=over 4
-
-=item C<"channel created">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item int C<$automatic>
-
-=back
-
-=item C<"channel destroyed">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=back
-
-=back
-
-=head3 F<chatnets.c>:
-
-=over 4
-
-=item C<"chatnet created">
-
-=over
-
-=item CHATNET_REC C<$chatnet>
-
-=back
-
-=item C<"chatnet destroyed">
-
-=over
-
-=item CHATNET_REC C<$chatnet>
-
-=back
-
-=back
-
-=head3 F<commands.c>:
-
-=over 4
-
-=item C<"commandlist new">
-
-=over
-
-=item L<Irssi::Command> C<$cmd>
-
-=back
-
-=item C<"commandlist remove">
-
-=over
-
-=item L<Irssi::Command> C<$cmd>
-
-=back
-
-=item C<"error command">
-
-=over
-
-=item int C<$err>
-
-=item string C<$cmd>
-
-=back
-
-=item C<"send command">
-
-=over
-
-=item string C<$args>
-
-=item L<Irssi::Server> C<$server>
-
-=item L<Irssi::Windowitem> C<$witem>
-
-=back
-
-=item C<"send text">
-
-=over
-
-=item string C<$line>
-
-=item L<Irssi::Server> C<$server>
-
-=item L<Irssi::Windowitem> C<$witem>
-
-=back
-
-=item C<"command "<cmd>>
-
-=over
-
-=item string C<$args>
-
-=item L<Irssi::Server> C<$server>
-
-=item L<Irssi::Windowitem> C<$witem>
-
-=back
-
-B<TODO: check this "cmd" out?>
-
-=item C<"default command">
-
-=over
-
-=item string C<$args>
-
-=item L<Irssi::Server> C<$server>
-
-=item L<Irssi::Windowitem> C<$witem>
-
-=back
-
-=back
-
-=head3 F<ignore.c>:
-
-=over 4
-
-=item C<"ignore created">
-
-=over
-
-=item L<Irssi::Ignore> C<$ignore>
-
-=back
-
-=item C<"ignore destroyed">
-
-=over
-
-=item L<Irssi::Ignore> C<$ignore>
-
-=back
-
-=item C<"ignore changed">
-
-=over
-
-=item L<Irssi::Ignore> C<$ignore>
-
-=back
-
-=back
-
-=head3 F<log.c>:
-
-=over 4
-
-=item C<"log new">
-
-=over
-
-=item L<Irssi::Log> C<$log>
-
-=back
-
-=item C<"log remove">
-
-=over
-
-=item L<Irssi::Log> C<$log>
-
-=back
-
-=item C<"log create failed">
-
-=over
-
-=item L<Irssi::Log> C<$log>
-
-=back
-
-=item C<"log locked">
-
-=over
-
-=item L<Irssi::Log> C<$log>
-
-=back
-
-=item C<"log started">
-
-=over
-
-=item L<Irssi::Log> C<$log>
-
-=back
-
-=item C<"log stopped">
-
-=over
-
-=item L<Irssi::Log> C<$log>
-
-=back
-
-=item C<"log rotated">
-
-=over
-
-=item L<Irssi::Log> C<$log>
-
-=back
-
-=item C<"log written">
-
-=over
-
-=item L<Irssi::Log> C<$log>
-
-=item string C<$line>
-
-=back
-
-=back
-
-=head3 F<modules.c>:
-
-B<TODO: what are these types?>
-
-=over 4
-
-=item C<"module loaded">
-
-=over
-
-=item MODULE_REC C<$module>
-
-=item MODULE_FILE_REC C<$module_file>
-
-=back
-
-=item C<"module unloaded">
-
-=over
-
-=item MODULE_REC C<$module>
-
-=item MODULE_FILE_REC C<$module_file>
-
-=back
-
-=item C<"module error">
-
-=over
-
-=item int C<$error>
-
-=item string C<$text>
-
-=item string C<$root_module>
-
-=item string C<$sub_module>
-
-=back
-
-=back
-
-=head3 F<nicklist.c>:
-
-=over 4
-
-=item C<"nicklist new">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item L<Irssi::Nick> C<$nick>
-
-=back
-
-=item C<"nicklist remove">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item L<Irssi::Nick> C<$nick>
-
-=back
-
-=item C<"nicklist changed">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item L<Irssi::Nick> C<$nick>
-
-=item string C<$old_nick>
-
-=back
-
-=item C<"nicklist host changed">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item L<Irssi::Nick> C<$nick>
-
-=back
-
-=item C<"nicklist gone changed">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item L<Irssi::Nick> C<$nick>
-
-=back
-
-=item C<"nicklist serverop changed">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item L<Irssi::Nick> C<$nick>
-
-=back
-
-=back
-
-=head3 F<pidwait.c>:
-
-=over 4
-
-=item C<"pidwait">
-
-=over
-
-=item int C<$pid>
-
-=item int C<$status>
-
-=back
-
-=back
-
-=head3 F<queries.c>:
-
-=over 4
-
-=item C<"query created">
-
-=over
-
-=item L<Irssi::Query> C<$query>
-
-=item int C<$automatic>
-
-=back
-
-=item C<"query destroyed">
-
-=over
-
-=item L<Irssi::Query> C<$query>
-
-=back
-
-=item C<"query nick changed">
-
-=over
-
-=item L<Irssi::Query> C<$query>
-
-=item string C<$original_nick>
-
-=back
-
-=item C<"window item name changed">
-
-=over
-
-=item L<Irssi::Windowitem> C<$witem>
-
-=back
-
-=item C<"query address changed">
-
-=over
-
-=item L<Irssi::Query> C<$query>
-
-=back
-
-=item C<"query server changed">
-
-=over
-
-=item L<Irssi::Query> C<$query>
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-=back
-
-
-=head3 F<rawlog.c>:
-
-=over 4
-
-=item C<"rawlog">
-
-=over
-
-=item L<Irssi::Rawlog> C<$raw_log>
-
-=item string C<$data>
-
-=back
-
-=back
-
-=head3 F<server.c>:
-
-=over 4
-
-=item C<"server looking">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-=item C<"server connected">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-
-=item C<"server connecting">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item ulongptr C<$ip>
-
-=back
-
-=item C<"server connect failed">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-=item C<"server disconnected">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-=item C<"server quit">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$message>
-
-=back
-
-=item C<"server sendmsg">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$target>
-
-=item string C<$message>
-
-=item int C<$target_type>
-
-=back
-
-=back
-
-=head3 F<settings.c>:
-
-=over 4
-
-=item C<"setup changed">
-
-=over
-
-=item I<None>
-
-=back
-
-=item C<"setup reread">
-
-=over
-
-=item string C<$fname>
-
-=back
-
-=item C<"setup saved">
-
-=over
-
-=item string C<$fname>
-
-=item int C<$autosaved>
-
-=back
-
-=back
-
-=head2 IRC Core
-
-=head3 F<bans.c>:
-
-=over 4
-
-=item C<"ban type changed">
-
-=over
-
-=item string C<$bantype>
-
-=back
-
-=back
-
-=head3 F<channels>, F<nicklist>:
-
-B<TODO: are these actual files? .c?>
-
-=over 4
-
-=item C<"channel joined">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=back
-
-=item C<"channel wholist">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=back
-
-=item C<"channel sync">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=back
-
-=item C<"channel topic changed">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=back
-
-=back
-
-=head3 F<ctcp.c>:
-
-=over
-
-=item C<"ctcp msg">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$args>
-
-=item string C<$nick>
-
-=item string C<$addr>
-
-=item string C<$target>
-
-=back
-
-=item C<"ctcp msg "<cmd>>
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$args>
-
-=item string C<$nick>
-
-=item string C<$addr>
-
-=item string C<$target>
-
-=back
-
-=item C<"default ctcp msg">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$args>
-
-=item string C<$nick>
-
-=item string C<$addr>
-
-=item string C<$target>
-
-=back
-
-=item C<"ctcp reply">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$args>
-
-=item string C<$nick>
-
-=item string C<$addr>
-
-=item string C<$target>
-
-=back
-
-=item C<"ctcp reply "<cmd>>
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$args>
-
-=item string C<$nick>
-
-=item string C<$addr>
-
-=item string C<$target>
-
-=back
-
-=item C<"default ctcp reply">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$args>
-
-=item string C<$nick>
-
-=item string C<$addr>
-
-=item string C<$target>
-
-=back
-
-=item C<"ctcp action">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$args>
-
-=item string C<$nick>
-
-=item string C<$addr>
-
-=item string C<$target>
-
-=back
-
-=back
-
-=head3 F<irc-log.c>:
-
-=over
-
-=item C<"awaylog show">
-
-=over
-
-=item L<Irssi::Log> C<$log>
-
-=item int C<$away_msgs>
-
-=item int C<$filepos>
-
-=back
-
-=back
-
-=head3 F<irc-nicklist.c>:
-
-=over
-
-=item C<"server nick changed">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-=back
-
-=head3 F<irc-servers.c>:
-
-=over
-
-=item C<"event connected">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-=back
-
-=head3 F<irc.c>:
-
-=over
-
-=item C<"server event">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$data>
-
-=item string C<$sender_nick>
-
-=item string C<$sender_addr>
-
-=back
-
-=item C<"event "<cmd>>
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$args>
-
-=item string C<$sender_nick>
-
-=item string C<$sender_addr>
-
-=back
-
-=item C<"default event">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$data>
-
-=item string C<$sender_nick>
-
-=item string C<$sender_addr>
-
-=back
-
-=item C<"whois default event">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$data>
-
-=item string C<$sender_nick>
-
-=item string C<$sender_addr>
-
-=back
-
-=item C<"server incoming">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$data>
-
-=back
-
-=item C<"redir "<cmd>>
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$args>
-
-=item string C<$sender_nick>
-
-=item string C<$sender_addr>
-
-=back
-
-=back
-
-=head3 F<lag.c>:
-
-=over
-
-=item C<"server lag">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-=item C<"server lag disconnect">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-=back
-
-=head3 F<massjoin.c>:
-
-=over
-
-=item C<"massjoin">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item List of L<Irssi::Nick> C<@nicks>
-
-B<TODO: Check this is actually a perl list (array)>
-
-=back
-
-=back
-
-=head3 F<mode-lists.c>:
-
-=over
-
-=item C<"ban new">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item L<Irssi::Irc::Ban> C<$ban>
-
-=back
-
-=item C<"ban remove">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item L<Irssi::Irc::Ban> C<$ban>
-
-=item string C<$set_by>
-
-=back
-
-=back
-
-=head3 F<modes.c>:
-
-=over
-
-=item C<"channel mode changed">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item string C<$set_by>
-
-=back
-
-=item C<"nick mode changed">
-
-=over
-
-=item L<Irssi::Channel> C<$channel>
-
-=item L<Irssi::Nick> C<$nick>
-
-=item string C<$set_by>
-
-=item string C<$mode>
-
-=item string C<$type>
-
-=back
-
-=item C<"user mode changed">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$old_mode>
-
-=back
-
-=item C<"away mode changed">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-=back
-
-=head3 F<netsplit.c>:
-
-=over
-
-=item C<"netsplit server new">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item L<Irssi::Irc::Netsplitserver> C<$netsplit_server>
-
-=back
-
-=item C<"netsplit server remove">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item L<Irssi::Irc::Netsplitserver> C<$netsplit_server>
-
-=back
-
-=item C<"netsplit new">
-
-=over
-
-=item L<Irssi::Irc::Netsplit> C<$netsplit>
-
-=back
-
-=item C<"netsplit remove">
-
-=over
-
-=item L<Irssi::Irc::Netsplit> C<$netsplit>
-
-=back
-
-=back
-
-=head2 IRC Modules
-
-
-=head3 F<dcc*.c>:
-
-=over
-
-=item C<"dcc ctcp "<cmd>>
-
-=over
-
-=item string C<$args>
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"default dcc ctcp">
-
-=over
-
-=item string C<$args>
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc unknown ctcp">
-
-=over
-
-=item string C<$args>
-
-=item string C<$sender>
-
-=item string C<$send_addr>
-
-=back
-
-=item C<"dcc reply "<cmd>>
-
-=over
-
-=item string C<$args>
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"default dcc reply">
-
-=over
-
-=item string C<$args>
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc unknown reply">
-
-=over
-
-=item string C<$args>
-
-=item string C<$sender>
-
-=item string C<$send_addr>
-
-=back
-
-=item C<"dcc chat message">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=item string C<$msg>
-
-=back
-
-=item C<"dcc created">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc destroyed">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc connected">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc rejecting">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc closed">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc request">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=item string C<$send_addr>
-
-=back
-
-=item C<"dcc request send">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc chat message">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=item string C<$msg>
-
-=back
-
-=item C<"dcc transfer update">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc get receive">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc error connect">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=back
-
-=item C<"dcc error file create">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=item string C<$filename>
-
-=back
-
-=item C<"dcc error file open">
-
-=over
-
-=item string C<$nick>
-
-=item string C<$filename>
-
-=item int C<$errno>
-
-=back
-
-=item C<"dcc error get not found">
-
-=over
-
-=item string C<$nick>
-
-=back
-
-=item C<"dcc error send exists">
-
-=over
-
-=item string C<$nick>
-
-=item string C<$filename>
-
-=back
-
-=item C<"dcc error unknown type">
-
-=over
-
-=item string C<$type>
-
-=back
-
-=item C<"dcc error close not found">
-
-=over
-
-=item string C<$type>
-
-=item string C<$nick>
-
-=item string C<$filename>
-
-=back
-
-=back
-
-=head3 F<autoignore.c>:
-
-=over
-
-=item C<"autoignore new">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item L<Irssi::Irc::Autoignore> C<$autoignore>
-
-=back
-
-=item C<"autoignore remove">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item L<Irssi::Irc::Autoignore> C<$autoignore>
-
-=back
-
-=back
-
-=head3 F<flood.c>:
-
-=over
-
-=item C<"flood">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$nick>
-
-=item string C<$host>
-
-=item int C<$level>
-
-=item string C<$target>
-
-=back
-
-=back
-
-=head3 F<notifylist.c>:
-
-=over
-
-=item C<"notifylist new">
-
-=over
-
-=item L<Irssi::Irc::Notifylist> C<$notify_list>
-
-=back
-
-=item C<"notifylist remove">
-
-=over
-
-=item L<Irssi::Irc::Notifylist> C<$notify_list>
-
-=back
-
-=item C<"notifylist joined">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$nick>
-
-=item string C<$user>
-
-=item string C<$host>
-
-=item string C<$real_name>
-
-=item string C<$away_message>
-
-=back
-
-=item C<"notifylist away changed">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$nick>
-
-=item string C<$user>
-
-=item string C<$host>
-
-=item string C<$real_name>
-
-=item string C<$away_message>
-
-=back
-
-=item C<"notifylist left">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$nick>
-
-=item string C<$user>
-
-=item string C<$host>
-
-=item string C<$real_name>
-
-=item string C<$away_message>
-
-=back
-
-=back
-
-=head3 F<proxy/listen.c>:
-
-=over
-
-=item C<"proxy client connected">
-
-=over
-
-=item L<Irssi::Irc::Client> C<$client>
-
-=back
-
-=item C<"proxy client disconnected">
-
-=over
-
-=item L<Irssi::Irc::Client> C<$client>
-
-=back
-
-=item C<"proxy client command">
-
-=over
-
-=item L<Irssi::Irc::Client> C<$client>
-
-=item string C<$args>
-
-=item string C<$data>
-
-=back
-
-=item C<"proxy client dump">
-
-=over
-
-=item L<Irssi::Irc::Client> C<$client>
-
-=item string C<$data>
-
-=back
-
-=back
-
-=head2 Display (FE) Common
-
-B<Requires to work properly:>
-
-=over
-
-=item C<"gui print text">
-
-=over
-
-=item L<Irssi::Window> C<$window>
-
-=item int C<$fg>
-
-=item int C<$bg>
-
-=item int C<$flags>
-
-=item string C<$text>
-
-=item L<Irssi::UI::TextDest> C<$text_dest>
-
-=back
-
-This signal is called multiple times for a given print operation, in a fashion
-similar to run-length coding. A single line of printed output which varies in
-colour may emit this signal multiple times, once for each colour change. The
-C<$fg>, C<$bg>, and C<$flags> contain the formatting information for C<$text>.
-
-
-=item C<"gui print text finished">
-
-=over
-
-=item L<Irssi::Window> C<$window>
-
-=back
-
-(Can be used to determine when all C<"gui print text">s are sent (not required))
-
-=back
-
-
-B<Provides signals:>
-
-=head3 F<completion.c>:
-
-=over
-
-=item C<"complete word">
-
-=over
-
-=item arrayref of strings C<$strings_ref>
-
-An arrayref which can be modified to add additional completion candidates.
-
-For example:
-
- push @$strings_ref, "another_candidate";
-
-=item L<Irssi::Window> C<$window>
-
-=item string C<$word>
-
-The prefix of the word currently being typed.
-
-=item string C<$linestart>
-
-The contents of the input line up to (but not including) the current
-word prefix C<$word>.
-
-=item int C<$want_space>
-
-A scalar reference which can be set to indicate if tab completion of these
-candidates should be appended with a space.
-
-=back
-
-=back
-
-=head3 F<fe-common-core.c>:
-
-=over
-
-=item C<"irssi init read settings">
-
-=over
-
-=item I<None>
-
-=back
-
-=back
-
-=head3 F<fe-exec.c>:
-
-=over
-
-=item C<"exec new">
-
-=over
-
-=item L<Irssi::UI::Process> C<$process>
-
-=back
-
-=item C<"exec remove">
-
-=over
-
-=item L<Irssi::UI::Process> C<$process>
-
-=item int C<$status>
-
-=back
-
-=item C<"exec input">
-
-=over
-
-=item L<Irssi::UI::Process> C<$process>
-
-=item string C<$text>
-
-=back
-
-=back
-
-=head3 F<fe-messages.c>:
-
-=over
-
-=item C<"message public">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$msg>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=item string C<$target>
-
-=back
-
-=item C<"message private">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$msg>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=back
-
-=item C<"message own_public">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$msg>
-
-=item string C<$target>
-
-=back
-
-=item C<"message own_private">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$msg>
-
-=item string C<$target>
-
-=item string C<$original_target>
-
-=back
-
-=item C<"message join">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$channel>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=back
-
-=item C<"message part">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$channel>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=item string C<$reason>
-
-=back
-
-=item C<"message quit">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=item string C<$reason>
-
-=back
-
-=item C<"message kick">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$channel>
-
-=item string C<$nick>
-
-=item string C<$kicker>
-
-=item string C<$address>
-
-=item string C<$reason>
-
-=back
-
-=item C<"message nick">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$new_nick>
-
-=item string C<$old_nick>
-
-=item string C<$address>
-
-=back
-
-=item C<"message own_nick">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$new_nick>
-
-=item string C<$old_nick>
-
-=item string C<$address>
-
-=back
-
-=item C<"message invite">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$channel>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=back
-
-=item C<"message topic">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$channel>
-
-=item string C<$topic>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=back
-
-=back
-
-=head3 F<keyboard.c>:
-
-=over
-
-=item C<"keyinfo created">
-
-=over
-
-=item L<Irssi::UI::Keyinfo> C<$key_info>
-
-=back
-
-=item C<"keyinfo destroyed">
-
-=over
-
-=item L<Irssi::UI::Keyinfo> C<$key_info>
-
-=back
-
-=back
-
-=head3 F<printtext.c>:
-
-=over
-
-=item C<"print text">
-
-=over
-
-=item L<Irssi::UI::TextDest> C<$text_dest>
-
-=item string C<$text>
-
-=item string C<$stripped_text>
-
-=back
-
-=back
-
-=head3 F<themes.c>:
-
-=over
-
-=item C<"theme created">
-
-=over
-
-=item L<Irssi::UI::Theme> C<$theme>
-
-=back
-
-=item C<"theme destroyed">
-
-=over
-
-=item L<Irssi::UI::Theme> C<$theme>
-
-=back
-
-=back
-
-=head3 F<window-activity.c>:
-
-=over
-
-=item C<"window hilight">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=back
-
-=item C<"window dehilight">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=back
-
-=item C<"window activity">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=item int C<$old_level>
-
-=back
-
-=item C<"window item hilight">
-
-=over
-
-=item L<Irssi::Windowitem> C<$window_item>
-
-=back
-
-=item C<"window item activity">
-
-=over
-
-=item L<Irssi::Windowitem> C<$window_item>
-
-=item int C<$old_level>
-
-=back
-
-=back
-
-=head3 F<window-items.c>:
-
-=over
-
-=item C<"window item new">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=item L<Irssi::Windowitem> C<$window_item>
-
-=back
-
-=item C<"window item remove">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=item L<Irssi::Windowitem> C<$window_item>
-
-=back
-
-=item C<"window item moved">
-
-B<TODO: Check ordering of arguments from/to here>
-
-=over
-
-=item L<Irssi::UI::Window> C<$window_from>
-
-=item L<Irssi::Windowitem> C<$window_item>
-
-=item L<Irssi::UI::Window> C<$window_to>
-
-=back
-
-=item C<"window item changed">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=item L<Irssi::Windowitem> C<$window_item>
-
-=back
-
-=item C<"window item server changed">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=item L<Irssi::Windowitem> C<$window_item>
-
-=back
-
-=back
-
-=head3 F<windows.c>:
-
-=over
-
-=item C<"window created">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=back
-
-=item C<"window destroyed">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=back
-
-=item C<"window changed">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=item L<Irssi::UI::Window> C<$old_window>
-
-=back
-
-B<TODO: does this fire if you don't change windows? (eg: send a switch command
-for the window you're already on)>
-
-=item C<"window changed automatic">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=back
-
-=item C<"window server changed">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=item L<Irssi::Server> C<$server>
-
-=back
-
-=item C<"window refnum changed">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=item int C<$old_refnum>
-
-=back
-
-=item C<"window name changed">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=back
-
-=item C<"window history changed">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=item string C<$old_name>
-
-=back
-
-=item C<"window level changed">
-
-=over
-
-=item L<Irssi::UI::Window> C<$window>
-
-=back
-
-=back
-
-=head2 Display (FE) IRC
-
-=head3 F<fe-events.c>:
-
-=over
-
-=item C<"default event numeric">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$data>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=back
-
-=back
-
-=head3 F<fe-irc-messages.c>:
-
-=over
-
-=item C<"message irc op_public">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$msg>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=item string C<$target>
-
-=back
-
-=item C<"message irc own_wall">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$msg>
-
-=item string C<$target>
-
-=back
-
-=item C<"message irc own_action">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$msg>
-
-=item string C<$target>
-
-=back
-
-=item C<"message irc action">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$msg>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=item string C<$target>
-
-=back
-
-=item C<"message irc own_notice">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$msg>
-
-=item string C<$target>
-
-=back
-
-=item C<"message irc notice">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$msg>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=item string C<$target>
-
-=back
-
-=item C<"message irc own_ctcp">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$cmd>
-
-=item string C<$data>
-
-=item string C<$target>
-
-=back
-
-=item C<"message irc ctcp">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$cmd>
-
-=item string C<$data>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=item string C<$target>
-
-=back
-
-=back
-
-=head3 F<fe-modes.c>:
-
-=over
-
-=item C<"message irc mode">
-
-=over
-
-=item L<Irssi::Server> C<$server>
-
-=item string C<$channel>
-
-=item string C<$nick>
-
-=item string C<$address>
-
-=item string C<$mode>
-
-=back
-
-=back
-
-=head3 F<dcc/fe-dcc-chat-messages.c>:
-
-=over
-
-=item C<"message dcc own">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=item string C<$msg>
-
-=back
-
-=item C<"message dcc own_action">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=item string C<$msg>
-
-=back
-
-=item C<"message dcc own_ctcp">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=item string C<$cmd>
-
-=item string C<$data>
-
-=back
-
-=item C<"message dcc">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=item string C<$msg>
-
-=back
-
-=item C<"message dcc action">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=item string C<$msg>
-
-=back
-
-=item C<"message dcc ctcp">
-
-=over
-
-=item L<Irssi::Dcc> C<$dcc>
-
-=item string C<$cmd>
-
-=item string C<$data>
-
-=back
-
-=back
-
-=head2 Display (FE) Text
-
-=head3 F<gui-readline.c>:
-
-=over 4
-
-=item C<"gui key pressed">
-
-=over
-
-=item int C<$key>
-
-=back
-
-Notes:
-
-Ordinary keys C<a-zA-Z> are their ordinal (ascii) equivalents.
-
-Ctrl-key begins at 1 (C<C-a>), but skips 13?, C<C-j> and C<C-m> both give the same
-as C<RET> (10). Tab and C<C-i> are equivalent (9). C<C-o> does not appear to send
-an observable sequence.
-
-C<BS> sends 127.
-
-C<meta-E<lt>keyE<gt>> sends a 27 (ESC) followed by the original key value.
-
-Arrow keys send usual meta-stuff (C<\e[I<ABCD>>).
-
-B<TODO: Turn this into some sort of list>
-
-=back
-
-=head3 F<gui-printtext.c>:
-
-=over 4
-
-=item C<"beep">
-
-=over
-
-=item I<None>
-
-=back
-
-=back
-
-=head2 Perl Scripting
-
-=over 4
-
-=item C<"script error">
-
-=over
-
-=item L<Irssi::Script> C<$script>
-
-=item string C<$error_msg>
-
-=back
-
-=back
-
-=for irssi_signal_defs END OF SIGNAL DEFINITIONS
-
-=head1 SIGNAL AUTO-GENERATION
-
-This file is used to auto-generate the signal definitions used by Irssi, and hence
-must be edited in order to add new signals.
-
-=head2 Format
-
-
diff --git a/docs/Irssi.pod b/docs/Irssi.pod
deleted file mode 100644
index f5d72b7..0000000
--- a/docs/Irssi.pod
+++ /dev/null
@@ -1,1109 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi
-
-=head1 DESCRIPTION
-
-L<Irssi|http://irssi.org> is a console based fullscreen IRC client. It is
-written in the C programming language, and can be modified through both
-I<Modules> -- dynamically loadable compiled libraries -- and I<Scripts>, written
-in L<Perl|http://perl.org>.
-
-Modules are not covered in this documentation, other than to note that Perl
-scripting support itself may be compiled as a module rather than built directly
-into Irssi. The C</LOAD> command can be used from within Irssi to check if Perl
-support is available. If not, refer to the F<INSTALL> file for how to recompile
-irssi.
-
-The C<Irssi> package is the basis of Perl scripting in Irssi. It does not export any
-functions by default, and requires that all function-calls be fully qualified with the
-C<Irssi::I<cmd>> prefix. See L</EXPORTS> for alternatives.
-
-=head1 CLASSES
-
-This documentation has been split into a number of pages, each documenting a
-particular class or pseudo-class. The following list contains all of these
-additional pages.
-
-B<TODO: fix this list with proper package names>
-
-=over 4
-
-=item L<Irssi::Chatnet>
-
-=item L<Irssi::Command>
-
-=item L<Irssi::Ignore>
-
-=item L<Irssi::Irc::Ban>
-
-=item L<Irssi::Irc::Client>
-
-=item L<Irssi::Irc::Dcc>
-
-=item L<Irssi::Irc::Notifylist>
-
-=item L<Irssi::Log>
-
-=item L<Irssi::Logitem>
-
-=item L<Irssi::Nick>
-
-=item L<Irssi::Process>
-
-=item L<Irssi::Query>
-
-=item L<Irssi::Rawlog>
-
-=item L<Irssi::Reconnect>
-
-=item L<Irssi::Script>
-
-=item L<Irssi::Server>
-
-=item L<Irssi::Theme>
-
-=item L<Irssi::UI::Window>
-
-=item L<Irssi::Windowitem>
-
-=back
-
-
-=head1 EXPORTS
-
-Nothing by default, but passing a list of function names when C<use>ing the module
-will import them into the current namespace.
-
-For example:
-
- use Irssi qw/signal_emit signal_add .../;
-
-=head1 METHODS
-
-=head2 Accessors
-
-=head3 C<active_win>
-
-C<my $win = Irssi::active_win();>
-
-returns the currently active L<Irssi::UI::Window>
-
-=head3 C<active_server>
-
-C<my $server = Irssi::active_server();>
-
-returns the currently active L<Irssi::Server> in active window.
-
-=head3 C<windows>
-
-C<my @windows = Irssi::windows();>
-returns a list of all L<windows|Irssi::UI::Window>.
-
-When called in scalar context C<my $win = Irssi::windows();>, only the first
-window is returned.
-
-=head3 C<servers>
-
-returns a list of all L<servers|Irssi::Server>.
-
-=head3 C<reconnects>
-
-returns a list of all L<server reconnections|Irssi::Reconnect>.
-
-=head3 C<channels>
-
-returns a list of all L<channels|Irssi::Channel>.
-
-=head3 C<queries>
-
-returns a list of all L<queries|Irssi::Query>.
-
-=head3 C<commands>
-
-returns a list of all L<commands|Irssi::Command>.
-
-=head3 C<logs>
-
-returns a list of all L<log files|Irssi::Log>.
-
-=head3 C<ignores>
-
-returns a list of all L<ignores|Irssi::Ignore>.
-
-
-=head2 File Accessors
-
-=head3 C<get_gui>
-
-Indicates if Irssi has been started with a GUI frontend.
-
-Return values are:
-
-=over
-
-=item C<IRSSI_GUI_NONE> - C<0>
-
-=item C<IRSSI_GUI_TEXT> - C<1>
-
-=item C<IRSSI_GUI_GTK> - C<2>
-
-=item C<IRSSI_GUI_GNOME> - C<3>
-
-=item C<IRSSI_GUI_QT> - C<4>
-
-=item C<IRSSI_GUI_KDE> - C<5>
-
-=back
-
-The symbolic constants listed above can be accessed from scripts as follows:
-
- my $is_text = Irssi::get_gui == Irssi::IRSSI_GUI_TEXT;
-
-=head3 C<get_irssi_binary>
-
-Returns a string containing the absolute location of the binary that this
-instance of Irssi was invoked from.
-
-=head3 C<get_irssi_config>
-
-Returns a string containing the absolute location of the config file that was
-specified or defaulted to when Irssi started up. Can be modified at startup
-using the C<--config=> commandline option, or defaults to F<~/.irssi/config>.
-
-=head3 C<get_irssi_dir>
-
-Returns a string containing the absolute location of the base directory that was
-specified or defaulted to when Irssi started up. Can be modified at startup
-using the C<--home=> commandline option, or defaults to F<~/.irssi/>.
-
-=head2 Signals
-
-See also L<General::Signals>
-
-Irssi is pretty much based on sending and handling different signals.
-Like when you receive a message from server, say:
-
-C<:nick!user@there.org PRIVMSG you :blahblah>
-
-Irssi will first send a signal:
-
-C<"server incoming", SERVER_REC, "nick!user@there PRIVMSG ...">
-
-You probably don't want to use this signal. Default handler for this
-signal interprets the header and sends a signal:
-
-C<"server event", Irssi::Server, "PRIVMSG ...", "nick", "user@there.org">
-
-You probably don't want to use this either, since this signal's default
-handler parses the event string and sends a signal:
-
-C<"event privmsg", Irssi::Server, "you :blahblah", "nick", "user@there.org">
-
-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 calling
-L<Irssi::signal_stop|Irssi/signal_stop>
-
-For example:
-
- sub event_privmsg {
- # $data = "nick/#channel :text"
- my ($server, $data, $nick, $address) = @_;
- my ($target, $text) = split(/ :/, $data, 2);
-
- Irssi::signal_stop() if ($text =~ /free.*porn/ || $nick =~ /idiot/);
- }
-
- Irssi::signal_add("event privmsg", "event_privmsg");
-
-This will hide all public or private messages that match the regexp
-C<"free.*porn"> or the sender's nick contain the word "idiot". Yes, you
-could use /IGNORE instead for both of these C<:)>
-
-You can also use L<Irssi::signal_add_last|/signal_add_last> if you wish to let the
-Irssi's internal functions be run before yours.
-
-A list of signals that irssi sends can be found in the L<General::Signals>
-documentation.
-
-
-
-
-=head3 Handling Signals
-
-=head4 C<signal_add $sig_name, $func>
-
-Bind C<$sig_name> to function C<$func>. The C<$func> argument may be either
-a string containing the name of a function to call, or a coderef.
-
-For example:
-
- Irssi::signal_add("default command", sub { ... });
-
- Irssi::signal_add("default command", "my_function");
-
- Irssi::signal_add("default command", \&my_function);
-
-In all cases, the specified function will be passed arguments in C<@_> as specified
-in L<General::Signals>.
-
-=head4 C<signal_add_first $sig_name, $func>
-
-Bind C<$sig_name> to function C<$func>. Call C<$func> as soon as possible when
-the signal is raised.
-
-=head4 C<signal_add_last $sig_name, $func>
-
-Bind C<$sig_name> to function C<$func>. Call C<$func> as late as possible (after
-all other signal handlers).
-
-=head4 C<signal_remove $sig_name, $func>
-
-Unbind C<$sig_name> from function C<$func>.
-B<TODO: Can you unbind a signal from a C<sub { ...}> coderef? What happens?>
-
-
-=head3 Controlling Signal Propagation
-
-=head4 C<signal_emit $sig_name, @params>
-
-Send a signal of type C<$sig_name>. Up to 6 parameters can be passed in C<@params>.
-
-=head4 C<signal_continue @params>
-
-Propagate a currently emitted signal, but with different parameters. This only
-needs to be called if you wish to change them, otherwise all subsequent handlers
-will be invoked as normal.
-
-For example, we can intercept a public message and rewrite the content before
-passing it on:
-
- Irssi::signal_add_first 'message public',
- sub {
- my ($server, $msg, @rest) = @_;
- $msg =~ s/this/that/g;
- Irssi::signal_continue($server, $msg, @rest);
- };
-
-Note that if you want to do this sort of rewriting, it is important to add your
-handler using L<signal_add_first|/signal_add_first $sig_name, $func> to it is
-called before the internal Irssi handlers which would usually consume it.
-
-B<Note: It should only be called from within a signal handler>
-
-=head4 C<signal_stop>
-
-Stop the signal that's currently being emitted, no other handlers after this one will
-be called.
-
-=head4 C<signal_stop_by_name $sig_name>
-
-Stop the signal with name C<$sig_name> that is currently being emitted.
-
-=head3 Registering New Signals
-
-=head4 C<signal_register $hashref>
-
-Register parameter types for one or more signals. C<$hashref> must map one or
-more signal names to references to arrays containing 0 to 6 type names. Some
-recognized type names include int for integers, intptr for references to
-integers and string for strings. For all standard signals see
-F<src/perl/perl-signals-list.h> in the source code (this is generated by
-F<src/perl/get-signals.pl>).
-
-For example:
-
- my $signal_config_hash = { "new signal" => [ qw/string string integer/ ] };
- Irssi::signal_register($signal_config_hash);
-
-Any signals that were already registered are unaffected.
-
-B<Signals are not persistent.> Once registered, a signal cannot be unregistered without
-restarting Irssi. B<TODO: True?>, including modifying the type signature.
-
-Registration is required to get any parameters to signals written in
-Perl and to emit and continue signals from Perl.
-
-B<TODO: What are the complete list of recognised types?>
-
-
-=head2 Commands
-
-See also L<Irssi::Command>
-
-=head3 Registering Commands
-
-=head4 C<command_bind $cmd, $func, $category>
-
-Bind a command string C<$cmd> to call function C<$func>. C<$func> can be
-either a string or coderef. C<$category> is an optional string specifying
-the category to display the command in when C</HELP> is used.
-
-When a command is invoked, either by the user typing C</command args>, the
-handler function will be called.
-
-It will receive the following parameters, passed in C<@_>:
-
- my ($argument_string, $server_obj, $window_item_obj) = @_;
-
-The argument string must be processed by the handler to split it into
-individual words if necessary.
-
-The L<command_parse_options|/command_parse_options $cmd, $data> function can be
-used to process options (beginning with a single dash), and will also return the
-remainder of the string to be processed as desired.
-
-=head4 C<command_runsub $cmd, $data, $server, $item>
-
-Run subcommands for C<$cmd>. First word in C<$data> is parsed as
-subcommand. C<$server> is L<Irssi::Server> record for current
-L<Irssi::Windowitem> C<$item>.
-
-Call command_runsub in handler function for C<$cmd> and bind
-with:
-
- command_bind("$cmd $subcmd", subcmdfunc[, category]);
-
-See the L<example|General::Guide/Use Subcommands to Group Script Functionality>
-for further details.
-
-=head4 C<command_unbind $cmd, $func>
-
-Unbind command C<$cmd> from function C<$func>.
-
-=head3 Invoking Commands
-
-=head4 C<command $string>
-
-Run the command specified in C<$string> in the currently active context.
-
-B<TODO: passing args in C<@_> vs concatenating into the command string?>
-
-See also L<Irssi::Server/command $string>
-
-=head3 Parsing Command Arguments
-
-=head4 C<command_set_options $cmd, $data>
-
-Set options for command C<$cmd> to C<$data>. C<$data> is a string of
-space separated words which specify the options. Each word can be
-optionally prefixed with one of the following character:
-
-=over 16
-
-=item C<->: optional argument
-
-=item C<@>: optional numeric argument
-
-=item C<+>: required argument
-
-=back
-
-For example:
-
- my $argument_format = "+something -other -another @number";
- Irssi::command_set_options('mycmd', $argument_format);
-
-Thus, the command may be run as C</mycmd -something value -other value rest of args>.
-
-=head4 C<command_parse_options $cmd, $data>
-
-Parse out options as specified by L<command_set_options|/command_set_options
-$cmd, $data> for command C<$cmd>. A string containing the input received by the
-command handler should be passed in as C<$data>.
-
-The return value is either C<undef> if an error occurred, or a list containing
-two items. The first is a hashref mapping the option names to their
-values. Optional arguments which were not present in the input will not be
-included in the hash.
-
-The second item in the return list is a string containing the remainder of the input
-after the arguments have been parsed out.
-
-For example:
-
- sub my_cmd_handler {
- my ($command_args) = @_;
- my @options_list = Irssi::command_parse_options "my_cmd", $command_args;
- if (@options_list) {
- my $options = $options_list->[0];
- my $arg_remainder = $options_list->[1];
-
- if (exists $options->{other} && $options->{something} eq 'hello') {
-
- ...
-
- }
- }
- }
-
-=head2 Settings
-
-Settings are a way to permanently store values that your script may wish to use.
-They are also easily manipulable by the user through the C</SET> command, making
-them a good way to allow configuration of your script.
-
-The following list summarises the data types available:
-
-=over
-
-=item C<str>
-
-A generic string type, which can contain arbitrary text. It is also commonly
-used to build space-separated lists of entries.
-
-=item C<int>
-
-An integer type. Integers must be whole numbers, but may also be negative or zero.
-
-It is stored internally as a C<signed int>, and has a range of +/- 2^31.
-
-=item C<bool>
-
-A boolean type. In Perl terms, values are C<0> for false, and anything else for
-true. When acting on them externally, C<ON> and C<OFF> are the usual terms used.
-
-=item C<time>
-
-A time type. An integer with optional unit specifier. Valid specifiers are:
-
- days
- hours
- minutes / mins
- seconds / secs
- milliseconds / millisecs / mseconds / msecs
-
-B<TODO: can different specifiers be combined?>
-
-The value is stored internally as a number of milliseconds. Since it is stored
-as an C<signed int>, it will overflow at 2^31 ms, or approximately 24 days.
-Times longer than this are considered invalid.
-
-The default specifier if none are specified is I<seconds>.
-
-=item C<level>
-
-An irssi Messagelevel. See C</HELP LEVELS> for a full list and description, or
-L</Message Levels> for a list of the Perl equivalents.
-
-=item C<size>
-
-A size type. This is an non-negative integer, and the default suffix is I<kbytes>.
-An optional suffix of C<bytes>, C<kbytes>, C<mbytes>, or C<gbytes> can be used
-to set the size accordingly. Note that sizes are given using the exponent of 2
-scheme, rather than the decimal C<$x * 1000> system.
-
-=back
-
-=head3 Creating New Settings
-
-If a setting does not currently exist, it must first be registered with Irssi
-using one of the C<settings_add> functions.
-
-=head4 C<settings_add_str $section, $key, $def>
-
-=head4 C<settings_add_int $section, $key, $def>
-
-=head4 C<settings_add_bool $section, $key, $def>
-
-=head4 C<settings_add_time $section, $key, $def>
-
-=head4 C<settings_add_level $section, $key, $def>
-
-=head4 C<settings_add_size $section, $key, $def>
-
-Each of the above functions operates in the same way, but creates a different
-data type. For each function, C<$section> is a string describing the
-group the entry falls into, C<$key> is the name of the setting. The key must
-be a single string, and typically multiple words are separated by underscores.
-
-The final parameter, C<$def>, is the default value of this setting. It should
-correspond to the type of the setting being created.
-
-B<TODO: move this list to another section?>
-
-
-=head3 Retrieving Settings
-
-=head4 C<settings_get_str $key>
-
-=head4 C<settings_get_int $key>
-
-=head4 C<settings_get_bool $key>
-
-=head4 C<settings_get_time $key>
-
-=head4 C<settings_get_level $key>
-
-=head4 C<settings_get_size $key>
-
-=head3 Modifying Settings
-
-=head4 C<settings_set_str $key, $value>
-
-=head4 C<settings_set_int $key, $value>
-
-=head4 C<settings_set_bool $key, $value>
-
-=head4 C<settings_set_time $key, $value>
-
-=head4 C<settings_set_level $key, $value>
-
-=head4 C<settings_set_size $key, $value>
-
-Changes the value of the setting with key C<$key> to C<$value>.
-
-B<If you change the settings of another module/script with one of these, you
-must emit a C<"setup changed"> signal afterwards.>
-
-This can be done with:
-
- Irssi::signal_emit("setup changed");
-
-=head4 C<settings_remove $key>
-
-Remove a setting specified with C<$key>.
-
-=head2 IO and Process Management
-
-=head3 C<timeout_add $msecs, $func, $data>
-
-Call C<$func> every C<$msecs> milliseconds (1/1000th of a second) with parameter
-C<$data>. C<$msecs> must be at least 10 or an error is signaled via C<croak>.
-
-Returns a tag which can be used to stop the timeout via L</timeout_remove $tag>.
-
-=head3 C<timeout_add_once $msecs, $func, $data>
-
-Call C<$func> once after C<$msecs> milliseconds (1000 = 1 second) with parameter
-C<$data>. C<$msecs> must be at least 10 or an error is signaled via C<croak>.
-
-Returns tag which can be used to stop the timeout via L</timeout_remove $tag>.
-
-=head3 C<timeout_remove $tag>
-
-Remove timeout specified with tag C<$tag>.
-
-=head3 C<input_add $source, $condition, $func, $data>
-
-Call C<$func> with parameter C<$data> when specified IO happens. C<$source> is
-the file handle that is being listened. C<$condition> can be
-C<Irssi::INPUT_READ>, C<Irssi::INPUT_WRITE> or both. Returns tag which can be
-used to remove the listener with L</input_remove $tag>.
-
-=head3 C<input_remove $tag>
-
-Remove listener with C<$tag>.
-
-=head3 C<pidwait_add $pid>
-
-Adds C<$pid> to the list of processes to wait for. The pid must identify
-a child process of the irssi process. When the process terminates, a
-"pidwait" signal will be sent with the pid and the status from
-waitpid(). This is useful to avoid zombies if your script forks.
-
-=head3 C<pidwait_remove $pid>
-
-Removes C<$pid> from the list of processes to wait for. Terminated
-processes are removed automatically, so it is usually not necessary
-to call this function.
-
-
-=head2 Message Levels
-
-The standard Irssi levels (as specified in C</HELP LEVELS>) are accessible from
-within scripts with the following zero-arguments functions:
-
-=over
-
-=item C<MSGLEVEL_CRAP>
-
-=item C<MSGLEVEL_MSGS>
-
-=item C<MSGLEVEL_PUBLIC>
-
-=item C<MSGLEVEL_NOTICES>
-
-=item C<MSGLEVEL_SNOTES>
-
-=item C<MSGLEVEL_CTCPS>
-
-=item C<MSGLEVEL_ACTIONS>
-
-=item C<MSGLEVEL_JOINS>
-
-=item C<MSGLEVEL_PARTS>
-
-=item C<MSGLEVEL_QUITS>
-
-=item C<MSGLEVEL_KICKS>
-
-=item C<MSGLEVEL_MODES>
-
-=item C<MSGLEVEL_TOPICS>
-
-=item C<MSGLEVEL_WALLOPS>
-
-=item C<MSGLEVEL_INVITES>
-
-=item C<MSGLEVEL_NICKS>
-
-=item C<MSGLEVEL_DCC>
-
-=item C<MSGLEVEL_DCCMSGS>
-
-=item C<MSGLEVEL_CLIENTNOTICE>
-
-=item C<MSGLEVEL_CLIENTCRAP>
-
-=item C<MSGLEVEL_CLIENTERROR>
-
-=item C<MSGLEVEL_HILIGHT>
-
-=item C<MSGLEVEL_ALL>
-
-=item C<MSGLEVEL_NOHILIGHT>
-
-=item C<MSGLEVEL_NO_ACT>
-
-=item C<MSGLEVEL_NEVER>
-
-=item C<MSGLEVEL_LASTLOG>
-
-=back
-
-=head3 C<level2bits $level>
-
-Level string -> number
-
-=head3 C<bits2level $bits>
-
-Level number -> string
-
-=head3 C<combine_level $level, $str>
-
-Combine level number to level string (C<"+level -level">).
-Return new level number.
-
-
-=head2 Themes
-
-See also L<Irssi::UI::Theme>
-
-=head3 C<themes_reload>
-
-Reloads the current theme (set with C</SET THEME>) from file.
-
-See also L<Irssi::UI::Theme/Loading and Testing>.
-
-=head3 C<current_theme>
-
-Returns the current L<theme|Irssi::UI::Theme> object.
-
-=head3 C<theme_register $format_list_ref>
-
-You can have user configurable texts in scripts that work just like
-irssi's internal texts that can be changed in themes.
-
-See also the L<template|Irssi::UI::Theme/TEMPLATES> and L<format
-arguments|General::Formats/ALIAS AND FORMAT TEMPLATE ARGUMENTS> docs for
-details on the structure of these templates.
-
- Irssi::theme_register([
- 'format_name', '{hilight my perl format!}',
- 'format2', 'testing.. nick = $0, channel = $1'
- ]);
-
-B<NB: Format variable placeholders should be single-quoted or escaped to prevent
-Perl from trying to expand the C<$> variables prematurely.>
-
-=head3 Printing
-
-Printing happens with one of the following functions:
-
-=over
-
-=item C<printformat $level, $format, ...>
-
-=item C<Irssi::UI::Window::printformat $window, $level, $format, ...>
-
-=item C<Irssi::Server::printformat $server, $target, $level, $format, ...>
-
-=item C<Irssi::Windowitem::printformat $win_item, $level, $format, ...>
-
-=back
-
-The remaining args passed after C<$format> are passed to the format template as
-arguments, starting at C<$0>.
-
-Note that the latter 3 functions are intended to be called as methods on a
-Window, Server, or Windowitem object, and will print to their respective
-destinations.
-
-B<TODO: What does plain old printformat use as a destination?>
-
-For example:
-
- $channel->printformat(MSGLEVEL_CRAP, 'format2',
- 'nick', $channel->{name});
-
-or
-
- $window->printformat(MSGLEVEL_CRAP, 'format_blah', @format_data);
-
-=head3 C<parse_special $str, $data, $flags>
-
-This function takes a string in C<$str> containing L<colour
-codes|General::Formats/COLOURS> and L<expandos|General::Formats/EXPANDOS
-(SPECIAL VARIABLES)> and ordinary text, returns a string with all variables,
-formats and expandos expanded to their appropriate values.
-
-B<TODO: What is data?>
-
-B<TODO: What are flags?>
-
-
-=head2 Expandos
-
-Expandos are special variables which can be used in format and abstract
-L<templates|Irssi::UI::Theme/TEMPLATES>.
-
-They behave similarly to Perl "Magic" variables, and their value is set behind
-the scenes depending on calling context.
-
-See also L<Formats/Expandos|General::Formats/EXPANDOS (SPECIAL VARIABLES)> for
-a list of builtin expandos.
-
-Scripts can fetch the value of expandos using the L<parse_special|/parse_special
-$cmd, $data, $flags> function, and can also register and handle rendering of
-additional ones.
-
-=head3 C<expando_create $name, $func, $update_flags>
-
-This function creates a new expando with name C<$name>. The expando is
-accessible from templates via C<I<$expando_name>>.
-
-C<$func> is a CODEREF which is called by Irssi internally when the expando
-should be updated.
-
-A simple handler function would look something like:
-
- sub handle_my_expando {
- my ($server, $win_item, $arg) = @_;
- return "some string";
- }
-
-B<TODO: What is passed in $arg?>
-
-C<$update_flags> is a hashref containing one or more C<SIGNAL =E<gt> BEHAVIOUR> pairs.
-
-The signals are strings containing ordinary Irssi L<signals|General::Signals>.
-The behaviour flag can take one of the following (string) values:
-
-=over
-
-=item C<"none">
-
-Unconditionally update the expando when this signal is received.
-
-=item C<"server">
-
-Only update this expando if the signal received passes an L<Irssi::Server>
-argument that matches the Server in which the expando is used in.
-
-=item C<"window">
-
-Only update this expando if the signal received passes an L<Irssi::UI::Window>
-argument that matches the Window in which the expando is used in.
-
-=item C<"windowitem">
-
-Only update this expando if the signal received passes an L<Irssi::Windowitem>
-argument that matches the Windowitem in which the expando is used in.
-
-=item C<"never">
-
-Never update the value of this expando. It is calculated once and never altered.
-
-=back
-
-For example:
-
- Irssi::expando_create 'my_expando', \&handle_my_expando, { 'message part' => 'none' };
-
-This expando will be refreshed (via a call to C<handle_my_expando()>) every time
-a C<message part> signal is emitted.
-
-B<NB: Only expandos used in statusbars will be updated dynamically to reflect
-their new value. Those used in a template to print text will remain static as
-determined by their value when they were firstrendered.>
-
-Expandos used in statusbars can be forced to refresh using
-L<statusbar_items_redraw|/statusbar_items_redraw $name>, even if they have no
-autorefresh signals set.
-
-=head3 C<expando_destroy $name>
-
-This function removes the expando specified by C<$name>. Its handler function
-will no longer be called, and all update signal listeners are also removed.
-
-B<TODO: What is the value of a destroyed expando if used in a template/sbar?>
-
-=head2 Text GUI
-
-=head3 C<gui_input_get_pos>
-
-Returns the position of the cursor in the input field.
-
-=head3 C<gui_input_set $str>
-
-Replaces the contents of the input field with C<$str>
-
-=head3 C<gui_input_set_pos $pos>
-
-Sets the position of the cursor in the input field.
-
-=head3 Getting the Input Field Contents
-
-There is no equivalent function for accessing this directly as there
-are for the others above, but it can be determined using the C<$L> expando
-documented in L<General::Formats>.
-
-For example:
-
- my $gui_input_contents = Irssi::parse_special '$L', undef, 0;
-
-See L<parse_special|/parse_special $cmd, $data, $flags> for more detail.
-
-=head3 C<gui_printtext $x, $y, $str>
-
-Prints C<$str> starting at the C<$x, $y> position on the current screen.
-
-The coordinates treat the top-left corner of the screen as the origin (0, 0).
-
-B<NB: The contents of the string will overwrite whatever is currently located at
-that screen position, but is transient, and will be replaced by the original
-content if the screen is redrawn (C</REDRAW> or C<Ctrl-L>).>
-
-
-=head2 Channels
-
-=head3 C<channel_find $channel>
-
-Find channel from any server. Returns an L<Irssi::Channel> object.
-
-
-=head2 Ignores
-
-=head3 C<ignore_add_rec $ignore>
-
-Add ignore record.
-
-=head3 C<ignore_update_rec $ignore>
-
-Update ignore record in configuration
-
-=head3 C<ignore_check $nick, $host, $channel, $text, $level>
-
-B<TODO: Document what this does>
-
-
-=head2 Logging
-
-=head3 C<log_create_rec $fname, $level>
-
-Create log file. Returns L<Irssi::Log>
-
-
-=head3 C<log_find $fname>
-
-Find log with file name. Returns L<Irssi::Log>
-
-
-=head2 Raw Logging
-
-=head3 C<rawlog_create>
-
-Create a new rawlog. Returns an L<Irssi::Rawlog> object.
-
-=head3 C<rawlog_set_size $lines>
-
-Set the default rawlog size for new rawlogs.
-
-=head2 Chat-Nets
-
-=head3 C<chatnet_find $name>
-
-Find chat network with name.
-
-=head2 Status Bars
-
-See also L<Irssi::TextUI::Statusbaritem>
-
-=head3 C<statusbar_item_register $name, $value, $func>
-
-=head3 C<statusbar_item_unregister $name>
-
-=head3 C<statusbar_items_redraw $name>
-
-=head3 C<statusbars_recreate_items>
-
-=head1 COPYRIGHT
-
-All the content of this site is copyright E<copy> 2000-2010 L<The Irssi
-project|http://irssi.org>.
-
-Formatting to POD, and some additional comments by Tom Feist
- L<shabble+irssi@metavore.org|mailto:shabble+irssi@metavore.org>
-
-=head1 Complete List of Functions
-
-C<*> indicates functions currently documented, C<+> for those which aren't
-useful for scripting, and won't be dealt with here. Go read the source C<:)>
-
- *Irssi::abstracts_register
- *Irssi::active_server
- *Irssi::active_win
-
- Irssi::bits2level
-
- Irssi::channel_find
- Irssi::channels
-
- Irssi::chatnet_find
- Irssi::chatnets
-
- Irssi::combine_level
-
- *Irssi::command
- *Irssi::command_bind
- *Irssi::command_bind_first
- *Irssi::command_bind_last
- *Irssi::command_parse_options
- *Irssi::command_runsub
- *Irssi::command_set_options
- *Irssi::command_unbind
- *Irssi::commands
-
- Irssi::ctcp_register
- Irssi::ctcp_unregister
-
- *Irssi::current_theme
-
- +Irssi::deinit
-
- *Irssi::expando_create
- *Irssi::expando_destroy
-
- Irssi::format_create_dest
- Irssi::format_get_length
- Irssi::format_real_length
-
- *Irssi::get_gui
- *Irssi::get_irssi_binary
- *Irssi::get_irssi_config
- *Irssi::get_irssi_dir
-
- *Irssi::gui_input_get_pos
- *Irssi::gui_input_set
- *Irssi::gui_input_set_pos
- *Irssi::gui_printtext
-
- Irssi::ignore_check
- *Irssi::ignores
- +Irssi::init
- *Irssi::input_add
- *Irssi::input_remove
- Irssi::level2bits
-
- +Irssi::log_create_rec
- Irssi::log_find
- *Irssi::logs
-
- Irssi::mask_match
- Irssi::mask_match_address
- Irssi::masks_match
-
- *Irssi::parse_special
-
- *Irssi::pidwait_add
- *Irssi::pidwait_remove
-
- Irssi::print
- *Irssi::printformat
-
- *Irssi::queries
- Irssi::query_find
-
- *Irssi::rawlog_create
- *Irssi::rawlog_set_size
-
- *Irssi::reconnects
-
- Irssi::server_create_conn
- Irssi::server_find_chatnet
- Irssi::server_find_tag
- *Irssi::servers
-
- *Irssi::settings_add_bool
- *Irssi::settings_add_int
- *Irssi::settings_add_level
- *Irssi::settings_add_size
- *Irssi::settings_add_str
- *Irssi::settings_add_time
- *Irssi::settings_get_bool
- *Irssi::settings_get_int
- *Irssi::settings_get_level
- *Irssi::settings_get_size
- *Irssi::settings_get_str
- *Irssi::settings_get_time
- *Irssi::settings_remove
- *Irssi::settings_set_bool
- *Irssi::settings_set_int
- *Irssi::settings_set_level
- *Irssi::settings_set_size
- *Irssi::settings_set_str
- *Irssi::settings_set_time
-
- *Irssi::signal_add
- *Irssi::signal_add_first
- *Irssi::signal_add_last
- Irssi::signal_add_priority
- *Irssi::signal_continue
- *Irssi::signal_emit
- Irssi::signal_get_emitted
- Irssi::signal_get_emitted_id
- *Irssi::signal_register
- Irssi::signal_remove
- *Irssi::signal_stop
- Irssi::signal_stop_by_name
-
- Irssi::statusbar_item_register
- Irssi::statusbar_item_unregister
- Irssi::statusbar_items_redraw
- Irssi::statusbars_recreate_items
-
- Irssi::strip_codes
-
- Irssi::theme_register
- *Irssi::themes_reload
-
- *Irssi::timeout_add
- *Irssi::timeout_add_once
- *Irssi::timeout_remove
-
- Irssi::version
-
- Irssi::window_find_closest
- Irssi::window_find_item
- Irssi::window_find_level
- Irssi::window_find_name
- Irssi::window_find_refnum
- Irssi::window_item_find
- Irssi::window_refnum_next
- Irssi::window_refnum_prev
- *Irssi::windows
- Irssi::windows_refnum_last
-
diff --git a/docs/Irssi/Channel.pod b/docs/Irssi/Channel.pod
deleted file mode 100644
index baeff6c..0000000
--- a/docs/Irssi/Channel.pod
+++ /dev/null
@@ -1,86 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Channel
-
-=head1 FIELDS
-
-C<Channel-E<gt>{}>
-
- type - "CHANNEL" text
- chat_type - String ID of chat protocol, for example "IRC"
-
- (..contains all the same data as Windowitem above..)
-
- topic - Channel topic
- topic_by - Nick who set the topic
- topic_time - Timestamp when the topic was set
-
- no_modes - Channel is modeless
- mode - Channel mode
- limit - Max. users in channel (+l mode)
- key - Channel key (password)
-
- chanop - You are channel operator
- names_got - /NAMES list has been received
- wholist - /WHO list has been received
- synced - Channel is fully synchronized
-
- joined - JOIN event for this channel has been received
- left - You just left the channel (for "channel destroyed" event)
- kicked - You was just kicked out of the channel (for
- "channel destroyed" event)
-
-=head1 METHODS
-
-
-
-=head2 C<channels_join(channels, automatic)>
-
-Join to channels in server. `channels' may also contain keys for
-channels just like with /JOIN command. `automatic' specifies if this
-channel was joined "automatically" or if it was joined because join
-was requested by user. If channel join is "automatic", irssi doesn't
-jump to the window where the channel was joined.
-
-=head2 C<destroy>
-
-Destroy channel.
-
-=head2 C<bans>
-
-Return a list of bans in channel.
-
-=head2 C<ban_get_mask $nick>
-
-Get ban mask for `nick'.
-
-=head2 C<banlist_add $ban, $nick, $time>
-
-Add a new ban to channel.
-
-=head2 C<banlist_remove $ban>
-
-Remove a ban from channel.
-
-
-=head2 C<nick_insert $nick, $op, $voice, $send_massjoin>
-
-Add nick to nicklist. Returns a L<Irssi::Nick>.
-
-=head2 C<nick_remove $nick>
-
-Remove nick from nicklist.
-
-=head2 C<nick_find $nick>
-
-Find nick from nicklist. Returns L<Irssi::Nick>.
-
-=head2 C<nick_find_mask $mask>
-
-Find nick mask from nicklist, wildcards allowed. Returns L<Irssi::Nick>.
-
-=head2 C<nicks>
-
-Return a list of all nicks in channel.
diff --git a/docs/Irssi/Chatnet.pod b/docs/Irssi/Chatnet.pod
deleted file mode 100644
index 991dd2b..0000000
--- a/docs/Irssi/Chatnet.pod
+++ /dev/null
@@ -1,26 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Chatnet
-
-=head1 FIELDS
-
-Chatnet->{}
-
- type - "CHATNET" text
- chat_type - String ID of chat protocol, for example "IRC"
-
- name - name of chat network
-
- nick - if not empty, nick preferred in this network
- username - if not empty, username preferred in this network
- realname - if not empty, realname preferred in this network
-
- own_host - address to use when connecting this network
- autosendcmd - command to send after connecting to this network
-
-
-=head1 METHODS
-
-I<None found yet>
diff --git a/docs/Irssi/Command.pod b/docs/Irssi/Command.pod
deleted file mode 100644
index d777794..0000000
--- a/docs/Irssi/Command.pod
+++ /dev/null
@@ -1,12 +0,0 @@
-__END__
-
-=head1 NAME
-
-=head1 FIELDS
-
- Command->{}
- cmd - Command name
- category - Category
-
-=head1 METHODS
-
diff --git a/docs/Irssi/Ignore.pod b/docs/Irssi/Ignore.pod
deleted file mode 100644
index 47f5225..0000000
--- a/docs/Irssi/Ignore.pod
+++ /dev/null
@@ -1,27 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Ignore
-
-=head1 FIELDS
-
-C<Ignore-E<gt>{}>
-
- mask - Ignore mask
- servertag - Ignore only in server
- channels - Ignore only in channels (list of names)
- pattern - Ignore text pattern
-
- level - Ignore level
-
- exception - This is an exception ignore
- regexp - Regexp pattern matching
- fullword - Pattern matches only full words
-
-=head1 METHODS
-
-=head2 C<add_rec>
-
-=head2 C<update_rec>
-
diff --git a/docs/Irssi/Irc.pod b/docs/Irssi/Irc.pod
deleted file mode 100644
index e654f59..0000000
--- a/docs/Irssi/Irc.pod
+++ /dev/null
@@ -1,51 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Irc
-
-=head1 DESCRIPTION
-
-=head1 CLASSES
-
-=head1 EXPORTS
-
-=head1 METHODS
-
-=head2 TODO
-
- Irssi::Irc::dcc_chat_find_id
- Irssi::Irc::dcc_chat_send
- Irssi::Irc::dcc_ctcp_message
- Irssi::Irc::dcc_find_request
- Irssi::Irc::dcc_find_request_latest
- Irssi::Irc::dcc_get_download_path
- Irssi::Irc::dcc_register_type
- Irssi::Irc::dcc_str2type
- Irssi::Irc::dcc_type2str
- Irssi::Irc::dcc_unregister_type
- Irssi::Irc::dccs
- Irssi::Irc::deinit
- Irssi::Irc::get_mask
- Irssi::Irc::init
- Irssi::Irc::modes_join
- Irssi::Irc::notifies
- Irssi::Irc::notifylist_add
- Irssi::Irc::notifylist_find
- Irssi::Irc::notifylist_ison
- Irssi::Irc::notifylist_remove
-
-=head2 Accessors
-
-=head3 C<dccs>
-
-returns a list of all L<DCC connections|Irssi::Irc::Dcc>
-
-=head1 COPYRIGHT
-
-All the content of this site is copyright E<copy> 2000-2010 L<The Irssi
-project|http://irssi.org>.
-
-Formatting to POD and linking by Tom Feist
- L<shabble+irssi@metavore.org|mailto:shabble+irssi@metavore.org>
-
diff --git a/docs/Irssi/Irc/Ban.pod b/docs/Irssi/Irc/Ban.pod
deleted file mode 100644
index 7026ca1..0000000
--- a/docs/Irssi/Irc/Ban.pod
+++ /dev/null
@@ -1,15 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Irc::Ban
-
-=head1 FIELDS
-
-Ban->{}
-
- ban - The ban
- setby - Nick of who set the ban
- time - Timestamp when ban was set
-
-=head1 METHODS
diff --git a/docs/Irssi/Irc/Channel.pod b/docs/Irssi/Irc/Channel.pod
deleted file mode 100644
index 02488d1..0000000
--- a/docs/Irssi/Irc/Channel.pod
+++ /dev/null
@@ -1,16 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Irc::Channel
-
-=head1 FIELDS
-
-=head1 METHODS
-
- Irssi::Irc::Channel::ban_get_mask
- Irssi::Irc::Channel::banlist_add
- Irssi::Irc::Channel::banlist_remove
- Irssi::Irc::Channel::bans
- Irssi::Irc::Channel::nick_insert
-
diff --git a/docs/Irssi/Irc/Client.pod b/docs/Irssi/Irc/Client.pod
deleted file mode 100644
index e0a27f4..0000000
--- a/docs/Irssi/Irc/Client.pod
+++ /dev/null
@@ -1,21 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Irc::Client
-
-=head1 FIELDS
-
-Client->{}
-
- nick - nick of the client
- host - host of the client
- proxy_address - address of the proxy server
- server - Irc::Server for which we proxy to this client
- pass_sent - whether the client already send a PASS command
- user_sent - whether the client already send a USER command
- connected - whether the client is connected and ready
- want_ctcp - whether the client wants to receive CTCPs
- ircnet - network tag of the network we proxy
-
-=head1 METHODS
diff --git a/docs/Irssi/Irc/Dcc.pod b/docs/Irssi/Irc/Dcc.pod
deleted file mode 100644
index e3b5b99..0000000
--- a/docs/Irssi/Irc/Dcc.pod
+++ /dev/null
@@ -1,79 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Irc::Dcc
-
-=head1 FIELDS
-
-=head2 C<Dcc-E<gt>{}>
-
- type - Type of the DCC: chat, send, get
- orig_type - Original DCC type that was sent to us - same as type except
- GET and SEND are swapped
- created - Time stamp when the DCC record was created
-
- server - Server record where the DCC was initiated.
- servertag - Tag of the server where the DCC was initiated.
- mynick - Our nick to use in DCC chat.
- nick - Other side's nick name.
-
- chat - Dcc chat record if the request came through DCC chat
- target - Who the request was sent to - your nick, channel or empty
- if you sent the request
- arg - Given argument .. file name usually
-
- addr - Other side's IP address.
- port - Port we're connecting in.
-
- starttime - Unix time stamp when the DCC transfer was started
- transfd - Bytes transferred
-
-=head2 C<Dcc::Chat-E<gt>{}>
-
- id - Unique identifier - usually same as nick
- mirc_ctcp - Send CTCPs without the CTCP_MESSAGE prefix
- connection_lost - Other side closed connection
-
-=head2 C<Dcc::Get-E<gt>{}>
-
- (..contains all the same data as core Dcc object..)
- size - File size
- skipped - Bytes skipped from start (resuming file)
-
- get_type - What to do if file exists?
- 0=default, 1=rename, 2=overwrite, 3=resume
-
- file - The real file name which we use.
- file_quoted - 1 if file name was received quoted ("file name")
-
-=head2 C<Dcc::Send-E<gt>{}>
-
- (..contains all the same data as core Dcc object..)
- size - File size
- skipped - Bytes skipped from start (resuming file)
-
- file_quoted - 1 if file name was received quoted ("file name")
- waitforend - File is sent, just wait for the replies from the other side
- gotalldata - Got all acks from the other end
-
-=head1 METHODS
-
-=head2 C<destroy>
-
-Destroy DCC connection.
-
-=head2 C<chat_send $data>
-
-Send `data' to dcc chat.
-
-=head2 C<ctcp_message $target, $notice, $msg>
-
-Send a CTCP message/notify to target.
-
-=head2 C<close>
-
-=head2 C<init_rec>
-
-=head2 C<reject>
-
diff --git a/docs/Irssi/Irc/Notifylist.pod b/docs/Irssi/Irc/Notifylist.pod
deleted file mode 100644
index fd933ef..0000000
--- a/docs/Irssi/Irc/Notifylist.pod
+++ /dev/null
@@ -1,23 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Irc::Notifylist
-
-=head1 FIELDS
-
-Notifylist->{}
-
- mask - Notify nick mask
- away_check - Notify away status changes
- idle_check_time - Notify when idle time is reset and idle was bigger
- than this (seconds)
- ircnets - List of ircnets (strings) the notify is checked
-
-
-=head1 METHODS
-
-=head2 C<ircnets_match $ircnet>
-
-Returns 1 if notify is checked in `ircnet'.
-
diff --git a/docs/Irssi/Irc/Server.pod b/docs/Irssi/Irc/Server.pod
deleted file mode 100644
index 520bf8d..0000000
--- a/docs/Irssi/Irc/Server.pod
+++ /dev/null
@@ -1,26 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Irc::Server
-
-=head1 FIELDS
-
-=head1 METHODS
-
- Irssi::Irc::Server::ctcp_send_reply
- Irssi::Irc::Server::get_channels
- Irssi::Irc::Server::isupport
- Irssi::Irc::Server::netsplit_find
- Irssi::Irc::Server::netsplit_find_channel
- Irssi::Irc::Server::notifylist_ison_server
- Irssi::Irc::Server::query_create
- Irssi::Irc::Server::redirect_event
- Irssi::Irc::Server::redirect_get_signal
- Irssi::Irc::Server::redirect_peek_signal
- Irssi::Irc::Server::redirect_register
- Irssi::Irc::Server::send_raw
- Irssi::Irc::Server::send_raw_first
- Irssi::Irc::Server::send_raw_now
- Irssi::Irc::Server::send_raw_split
-
diff --git a/docs/Irssi/Log.pod b/docs/Irssi/Log.pod
deleted file mode 100644
index c319654..0000000
--- a/docs/Irssi/Log.pod
+++ /dev/null
@@ -1,55 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Log
-
-=head1 FIELDS
-
-C<Log-E<gt>{}>
-
- fname - Log file name
- real_fname - The actual opened log file (after %d.%m.Y etc. are expanded)
- opened - Log file is open
- level - Log only these levels
- last - Timestamp when last message was written
- autoopen - Automatically open log at startup
- failed - Opening log failed last time
- temp - Log isn't saved to config file
- items - List of log items
-
-
-=head1 METHODS
-
-=head2 C<update>
-
-Add log to list of logs / save changes to config file.
-
-=head2 C<close>
-
-Destroy log file.
-
-=head2 C<start_logging>
-
-Open log file and start logging.
-
-=head2 C<stop_logging>
-
-Close log file.
-
-=head2 C<item_add $type, $name, $server>
-
-Add log item to log.
-
-=head2 C<item_destroy $item>
-
-Remove log item from log.
-
-=head2 C<item_find $type, $item, $server>
-
-Find item from log. Returns L<Irssi::Logitem>
-
-=head2 C<write_rec>
-
-I<Undocumented>
-
diff --git a/docs/Irssi/Logitem.pod b/docs/Irssi/Logitem.pod
deleted file mode 100644
index f30d4b8..0000000
--- a/docs/Irssi/Logitem.pod
+++ /dev/null
@@ -1,16 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Logitem
-
-=head1 FIELDS
-
-C<Logitem-E<gt>{}>
-
- type - 0=target, 1=window refnum
- name - Name
- servertag - Server tag
-
-=head1 METHODS
-
diff --git a/docs/Irssi/Nick.pod b/docs/Irssi/Nick.pod
deleted file mode 100644
index 3e85256..0000000
--- a/docs/Irssi/Nick.pod
+++ /dev/null
@@ -1,25 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Nick
-
-=head1 FIELDS
-
-C<Nick-E<gt>{}>
-
- type - "NICK" text
- chat_type - String ID of chat protocol, for example "IRC"
-
- nick - Plain nick
- host - Host address
- realname - Real name
- hops - Hop count to the server the nick is using
-
- gone, serverop - User status, 1 or 0
- op, voice, halfop - Channel status, 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
-
-=head1 METHODS
diff --git a/docs/Irssi/Query.pod b/docs/Irssi/Query.pod
deleted file mode 100644
index cb7e0d8..0000000
--- a/docs/Irssi/Query.pod
+++ /dev/null
@@ -1,30 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Query
-
-=head1 FIELDS
-
-Query->{}
- type - "QUERY" text
- chat_type - String ID of chat protocol, for example "IRC"
-
- (..contains all the same data as Windowitem above..)
-
- address - Host address of the queries nick
- server_tag - Server tag used for this nick (doesn't get erased if
- server gets disconnected)
- unwanted - 1 if the other side closed or some error occured (DCC chats)
-
-
-=head1 METHODS
-
-=head2 C<destroy>
-
-Destroy the query.
-
-=head2 C<query_change_server $server>
-
-Change the active server of the query.
-
diff --git a/docs/Irssi/Rawlog.pod b/docs/Irssi/Rawlog.pod
deleted file mode 100644
index a5428bf..0000000
--- a/docs/Irssi/Rawlog.pod
+++ /dev/null
@@ -1,48 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Rawlog
-
-=head1 FIELDS
-
-
-C<Rawlog-E<gt>{}>
-
- logging - The rawlog is being written to file currently
- nlines - Number of lines in rawlog
-
-=head1 METHODS
-
-=head2 C<destroy>
-
-Destroy the rawlog.
-
-=head2 C<get_lines>
-
-Returns all lines in rawlog.
-
-=head2 C<open $filename>
-
-Start logging new messages in rawlog to specified file.
-
-=head2 C<close>
-
-Stop logging to file.
-
-=head2 C<save $filename>
-
-Save the current rawlog history to specified file.
-
-=head2 C<input $str>
-
-Send `str' to raw log as input text.
-
-=head2 C<output $str>
-
-Send `str' to raw log as output text.
-
-=head2 C<redirect $str>
-
-Send `str' to raw log as redirection text.
-
diff --git a/docs/Irssi/Reconnect.pod b/docs/Irssi/Reconnect.pod
deleted file mode 100644
index 4085eec..0000000
--- a/docs/Irssi/Reconnect.pod
+++ /dev/null
@@ -1,20 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Reconnect
-
-=head1 FIELDS
-
-Reconnect->{}
- type - "RECONNECT" text
- chat_type - String ID of chat protocol, for example "IRC"
-
- (..contains all the same data as Connect above..)
-
- tag - Unique numeric tag
- next_connect - Unix time stamp when the next connection occurs
-
-
-=head1 METHODS
-
diff --git a/docs/Irssi/Script.pod b/docs/Irssi/Script.pod
deleted file mode 100644
index 9f8b07b..0000000
--- a/docs/Irssi/Script.pod
+++ /dev/null
@@ -1,10 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Script
-
-=head1 FIELDS
-
-=head1 METHODS
-
diff --git a/docs/Irssi/Server.pod b/docs/Irssi/Server.pod
deleted file mode 100644
index e8ca3c1..0000000
--- a/docs/Irssi/Server.pod
+++ /dev/null
@@ -1,149 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Server
-
-=head1 FIELDS
-
-Server->{}
-
- type - "SERVER" text
- chat_type - String ID of chat protocol, for example "IRC"
-
- (..contains all the same data as Connect above..)
-
- connect_time - Time when connect() to server finished
- real_connect_time - Time when server sent "connected" message
-
- tag - Unique server tag
- nick - Current nick
-
- connected - Is connection finished? 1|0
- connection_lost - Did we lose the connection (1) or was
- the connection just /DISCONNECTed (0)
-
- rawlog - Rawlog object for the server
-
- version - Server version
- last_invite - Last channel we were invited to
- server_operator - Are we server operator (IRC op) 1|0
- usermode_away - Are we marked as away? 1|0
- away_reason - Away reason message
- banned - Were we banned from this server? 1|0
- lag - Current lag to server in milliseconds
-
-=head1 METHODS
-
-=head2 C<channels>
-
-- return list of channels in server
-
-=head2 C<queries>
-
-Return list of queries in server
-
-=head2 C<print $channel, $str, [$level]>
-
-=head2 C<command $string>
-
-Run the specified command on this server instance.
-
-
-
-=head2 C<Connect::connect>
-
-B<TODO: What is C<Connect::> package?>
-
-Connect to server. returns L<Irssi::Server> object.
-
-=head2 C<disconnect>
-
-Disconnect from server.
-
-=head2 C<server_find_tag $tag>
-
-Find server with tag. Returns L<Irssi::Server>
-
-
-=head2 C<server_find_chatnet $chatnet>
-
-Find first server that is in `chatnet'
-returns L<Irssi::Server>
-
-=head2 C<isnickflag $flag>
-
-Returns 1 if flag is a nick mode flag (C<@>, C<+> or C<%> in IRC)
-
-=head2 C<ischannel $data>
-
-Returns 1 if start of `data' seems to mean channel.
-
-=head2 C<get_nick_flags>
-
-Returns nick flag characters in order: op, voice, halfop (C<"@+%"> in IRC).
-
-=head2 C<send_message $target, $msg, $target_type>
-
-Sends a message to nick/channel. target_type 0 = channel, 1 = nick
-
-=head2 C<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)..
-
-returns L<Irssi::Irc::Netsplit>
-
-=head2 C<netsplit_find_channel $nick, $address, $channel>
-
-Find nick record for nick!address in channel `channel'.
-returns L<Irssi::Nick>
-
-
-=head2 C<dcc_ctcp_message $target, $notice, $msg>
-
-=head2 C<channel_find $channel>
-
-Find channel from specified server. Returns L<Irssi::Channel>
-
-=head2 C<ignore_check $nick, $host, $channel, $text, $level>
-
-Return 1 if ignoring matched.
-
-=head2 C<nicks_get_same $nick>
-
-Return all L<nick|Irssi::Nick> objects in all channels in server.
-List is in format:
-
- Channel, Nick, Channel, ...
-
-
-=head1 FULL LIST OF FUNCS
-
- Irssi::Server::channel_find
- Irssi::Server::channels
- Irssi::Server::channels_join
- Irssi::Server::command
- Irssi::Server::disconnect
- Irssi::Server::format_create_dest
- Irssi::Server::get_nick_flags
- Irssi::Server::ignore_check
- Irssi::Server::ischannel
- Irssi::Server::isnickflag
- Irssi::Server::mask_match
- Irssi::Server::mask_match_address
- Irssi::Server::masks_match
- Irssi::Server::nicks_get_same
- Irssi::Server::parse_special
- Irssi::Server::print
- Irssi::Server::printformat
- Irssi::Server::queries
- Irssi::Server::query_find
- Irssi::Server::ref
- Irssi::Server::send_message
- Irssi::Server::unref
- Irssi::Server::window_find_closest
- Irssi::Server::window_find_item
- Irssi::Server::window_find_level
- Irssi::Server::window_item_find
-
diff --git a/docs/Irssi/TextUI.pod b/docs/Irssi/TextUI.pod
deleted file mode 100644
index 7993274..0000000
--- a/docs/Irssi/TextUI.pod
+++ /dev/null
@@ -1,12 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::TextUI
-
-=head1 FIELDS
-
-=head1 METHODS
-
- Irssi::TextUI::deinit
- Irssi::TextUI::init
diff --git a/docs/Irssi/TextUI/Line.pod b/docs/Irssi/TextUI/Line.pod
deleted file mode 100644
index 4c29dca..0000000
--- a/docs/Irssi/TextUI/Line.pod
+++ /dev/null
@@ -1,16 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::TextUI::Line
-
-=head1 FIELDS
-
-=head1 METHODS
-
-=head2 C<get_text>
-
-=head2 C<next>
-
-=head2 C<prev>
-
diff --git a/docs/Irssi/TextUI/LineCache.pod b/docs/Irssi/TextUI/LineCache.pod
deleted file mode 100644
index 08bdae1..0000000
--- a/docs/Irssi/TextUI/LineCache.pod
+++ /dev/null
@@ -1,3 +0,0 @@
-__END__
-
-=head1 Empty
diff --git a/docs/Irssi/TextUI/LineInfo.pod b/docs/Irssi/TextUI/LineInfo.pod
deleted file mode 100644
index 08bdae1..0000000
--- a/docs/Irssi/TextUI/LineInfo.pod
+++ /dev/null
@@ -1,3 +0,0 @@
-__END__
-
-=head1 Empty
diff --git a/docs/Irssi/TextUI/MainWindow.pod b/docs/Irssi/TextUI/MainWindow.pod
deleted file mode 100644
index 08bdae1..0000000
--- a/docs/Irssi/TextUI/MainWindow.pod
+++ /dev/null
@@ -1,3 +0,0 @@
-__END__
-
-=head1 Empty
diff --git a/docs/Irssi/TextUI/StatusbarItem.pod b/docs/Irssi/TextUI/StatusbarItem.pod
deleted file mode 100644
index b62890c..0000000
--- a/docs/Irssi/TextUI/StatusbarItem.pod
+++ /dev/null
@@ -1,29 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::TextUI::StatusbarItem
-
-=head1 DESCRIPTION
-
-=head1 FIELDS
-
-=head1 METHODS
-
-=head2 C<default_handler>
-
-=over
-
-=item C<$item>
-
-=item C<$get_size_only>
-
-=item C<$str>
-
-=item C<$data>
-
-=item C<$escape_vars> - defaults to C<TRUE>
-
-=back
-
-
diff --git a/docs/Irssi/TextUI/TextBufferView.pod b/docs/Irssi/TextUI/TextBufferView.pod
deleted file mode 100644
index f42d362..0000000
--- a/docs/Irssi/TextUI/TextBufferView.pod
+++ /dev/null
@@ -1,26 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::TextUI::TextBufferView
-
-=head1 FIELDS
-
-=head1 METHODS
-
- Irssi::TextUI::TextBufferView::clear
- Irssi::TextUI::TextBufferView::get_bookmark
- Irssi::TextUI::TextBufferView::get_line_cache
- Irssi::TextUI::TextBufferView::get_lines
- Irssi::TextUI::TextBufferView::redraw
- Irssi::TextUI::TextBufferView::remove_all_lines
- Irssi::TextUI::TextBufferView::remove_line
- Irssi::TextUI::TextBufferView::scroll
- Irssi::TextUI::TextBufferView::scroll_line
- Irssi::TextUI::TextBufferView::set_bookmark
- Irssi::TextUI::TextBufferView::set_bookmark_bottom
- Irssi::TextUI::TextBufferView::set_default_indent
- Irssi::TextUI::TextBufferView::set_scroll
-
-I<undocumented>
-
diff --git a/docs/Irssi/TextUI/Textbuffer.pod b/docs/Irssi/TextUI/Textbuffer.pod
deleted file mode 100644
index 08bdae1..0000000
--- a/docs/Irssi/TextUI/Textbuffer.pod
+++ /dev/null
@@ -1,3 +0,0 @@
-__END__
-
-=head1 Empty
diff --git a/docs/Irssi/UI.pod b/docs/Irssi/UI.pod
deleted file mode 100644
index aac1c6e..0000000
--- a/docs/Irssi/UI.pod
+++ /dev/null
@@ -1,13 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::UI
-
-=head1 FIELDS
-
-=head1 METHODS
-
- Irssi::UI::deinit
- Irssi::UI::init
- Irssi::UI::processes
diff --git a/docs/Irssi/UI/Process.pod b/docs/Irssi/UI/Process.pod
deleted file mode 100644
index 23d9100..0000000
--- a/docs/Irssi/UI/Process.pod
+++ /dev/null
@@ -1,25 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::UI::Process
-
-=head1 FIELDS
-
-Process->{}
-
- id - ID for the process
- name - Name for the process (if given)
- args - The command that is being executed
-
- pid - PID for the executed command
- target - send text with /msg <target> ...
- target_win - print text to this window
-
- shell - start the program via /bin/sh
- notice - send text with /notice, not /msg if target is set
- silent - don't print "process exited with level xx"
-
-=head1 METHODS
-
-I<None found yet>
diff --git a/docs/Irssi/UI/Server.pod b/docs/Irssi/UI/Server.pod
deleted file mode 100644
index 7bc7080..0000000
--- a/docs/Irssi/UI/Server.pod
+++ /dev/null
@@ -1,13 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::UI::Server
-
-=head1 FIELDS
-
-=head1 METHODS
-
- Irssi::UI::Server::gui_printtext_after
- Irssi::UI::Server::term_refresh_freeze
- Irssi::UI::Server::term_refresh_thaw
diff --git a/docs/Irssi/UI/TextDest.pod b/docs/Irssi/UI/TextDest.pod
deleted file mode 100644
index 24b9d04..0000000
--- a/docs/Irssi/UI/TextDest.pod
+++ /dev/null
@@ -1,11 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::UI::TextDest
-
-=head1 FIELDS
-
-=head1 METHODS
-
- Irssi::UI::TextDest::print
diff --git a/docs/Irssi/UI/Theme.pod b/docs/Irssi/UI/Theme.pod
deleted file mode 100644
index 344b5ae..0000000
--- a/docs/Irssi/UI/Theme.pod
+++ /dev/null
@@ -1,169 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::UI::Theme
-
-=head1 FIELDS
-
-=head1 METHODS
-
-=head2 C<format_expand $theme, $format, $flags>
-
-C<$flags> is an optional bitmask of any of the following flags:
-
-=over
-
-=item C<EXPAND_FLAG_IGNORE_REPLACES>
-
-Any replacements specified in the theme are not applied to this expansion.
-
-=item C<EXPAND_FLAG_RECURSIVE_MASK>
-
-B<TODO: dunno>
-
-=item C<EXPAND_FLAG_IGNORE_EMPTY>
-
-If the format contains variables and no values are specified, an empty string is
-returned instead of a partially filled template.
-
-=back
-
-B<TODO: What?>
-
-Example:
-
- my $formatted_str = Irssi::current_theme()->format_expand('{hilight Hello}');
-
-B<NOTE: it seems that this only operates on abstract templates, not those
-accessible with C</FORMAT>. Weird>
-
-=head2 C<get_format $theme, $module, $tag>
-
-Returns the unexpanded format template for the format name supplied in C<$tag>.
-
-Valid values for C<$module> are:
-
-=over
-
-=item C<fe-common/perl>
-
-=item C<fe-common/irc/dcc>
-
-=item C<fe-common/irc>
-
-=item C<fe-common/core>
-
-=item C<fe-common/irc/notifylist>
-
-=item C<fe-text>
-
-=back
-
-Example:
-
- my $pubmsg_format = Irssi::current_theme()->get_format('fe-common/core', 'pubmsg');
-
-=head1 THEME DETAILS
-
-=head2 Loading and Testing
-
-You can change themes by issuing a C</SET theme F<theme-name>> command from Irssi.
-Reloading is slightly harder, since Irssi will only reload and process a new theme
-if the C<theme> variable I<changes>.
-
-You can force a reload of the theme (and everything else) with C</RELOAD>. This
-reloads the configuration file too, so if you did any changes remember to C</SAVE>
-first.
-
-B<Remember also that C</SAVE> overwrites the theme file with old data so keep
-backups C<:)>>
-
-Better alternatives are the following aliases:
-
- /ALIAS THEMERELOAD SCRIPT EXEC Irssi::themes_reload();
-
-or
-
- /ALIAS THEMERELOAD SET theme default; EVAL SET theme $theme
-
-The former is preferred if you have scripting support, whereas the latter will
-work without scripting (Perl) support loaded, but requires that you are editing
-a custom theme, rather than modifying F<default.theme>.
-
-=head2 TEMPLATES
-
-The actual mechanism used by Irssi to print text into the client involves a
-certain amount of indirection, which allows themes to reformat messages in
-various ways before they are displayed.
-
-The overall structure of these templates is based around 3 basic ideas:
-
-=over
-
-=item Nested Templates
-
-=item Colour Codes
-
-=item Variable Expansion
-
-=item Special Variables
-
-=back
-
-The real text formats that irssi uses are the ones you can find with
-/FORMAT command. Back in the old days all the colors and texts were mixed
-up in those formats, and it was really hard to change the colors since you
-might have had to change them in tens of different places. So, then came
-this templating system.
-
-Now the C</FORMAT>s don't have any colors in them, and they also have very
-little other styling. Most of the stuff you need to change is in this
-theme file. If you can't change something here, you can always go back
-to change the /FORMATs directly, they're also saved in the F<*.theme> files.
-
-So, the templates. They're those C<{blahblah}> parts you see all over the
-/FORMATs and here. Their usage is simply C<{name parameter1 parameter2}>.
-
-When irssi sees this kind of text, it goes to find C<name> from the abstracts
-block below and sets C<parameter1> into C<$0> and C<parameter2> into C<$1> (you
-can have more parameters of course). Templates can have sub-templates. Here's a
-small example:
-
- /FORMAT format hello {colorify {underline world}}
-
- abstracts = { colorify = "%G$0-%n"; underline = "%U$0-%U"; }
-
-When irssi expands the templates in C<"format">, the final string would be:
-
- hello %G%Uworld%U%n
-
-ie. underlined bright green "world" text. and why C<$0->, why not C<$0>? C<$0>
-would only mean the first parameter, C<$0-> means all the parameters. With
-C<{underline hello world}> you'd really want to underline both of the words, not
-just the hello (and world would actually be removed entirely).
-
-See also L<Formats#arguments|Formats/ALIAS AND FORMAT TEMPLATE ARGUMENTS> for
-details on the variable to argument mapping.
-
-=head2 COLOURS
-
-You can find definitions for the colour format codes in L<Formats/COLOURS>.
-
-There's one difference here though. C<%n> format. Normally it means the default
-color of the terminal (white mostly), but here it means the "reset color back to
-the one it was in higher template". For example if there was C</FORMAT test
-%g{foo}bar>, and C<foo = "%Y$0%n">, irssi would print yellow C<"foo"> (as set
-with C<%Y>) but C<"bar"> would be green, which was set at the beginning before
-the C<{foo}> template. If there wasn't the C<%g> at start, the normal behaviour
-of C<%n> would occur. If you I<really> want to use the terminal's default color,
-use C<%N>.
-
-=head1 AUTHOR
-
-Based on the original content found as comments in the F<default.theme> file.
-Copyright E<copy> 2000-2010 L<The Irssi project|http://irssi.org>.
-
-Formatting and additional content by Tom Feist
- L<shabble+irssi@metavore.org|mailto:shabble+irssi@metavore.org>
-
diff --git a/docs/Irssi/UI/Window.pod b/docs/Irssi/UI/Window.pod
deleted file mode 100644
index 2dd6389..0000000
--- a/docs/Irssi/UI/Window.pod
+++ /dev/null
@@ -1,167 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::UI::Window
-
-=head1 FIELDS
-
-C<UI::Window-E<gt>{}>
-
- refnum - Reference number
- name - Name
-
- width - Width
- height - Height
-
- history_name - Name of named historylist for this window
-
- active - Active window item
- active_server - Active server
-
- servertag - active_server must be either undef or have this same tag
- (unless there's items in this window). This is used by
- /WINDOW SERVER -sticky
- level - Current window level
-
- sticky_refnum - 1 if reference number is sticky
-
- data_level - Current data level
- hilight_color - Current activity hilight color
-
- last_timestamp - Last time timestamp was written in window
- last_line - Last time text was written in window
-
- theme_name - Active theme in window, undef = default
-
-C<UI::TextDest-E<gt>{}>
-
- window - Window where the text will be written
- server - Target server
- target - Target channel/query/etc name
- level - Text level
-
- hilight_priority - Priority for the hilighted text
- hilight_color - Color for the hilighted text
-
-
-=head1 METHODS
-
-=head2 C<command $cmd>
-
-=head2 C<print $str, [$level]>
-
-=head2 C<items>
-
-Return a list of items in window.
-
-
-=head2 C<window_create $automatic>
-
-=head2 C<destroy>
-
-Destroy the window.
-
-Irssi::Window
-Windowitem::window()
- Returns parent window for window item.
-
-=head2 C<window_find_name $name>
-
-Find window with name.L<Irssi::UI::Window>
-
-=head2 C<window_find_refnum $refnum>
-
-Find window with reference number.
-
-Window
-window_find_level(level)
-
-Server::window_find_level(level)
- Find window with level.
-
-Window
-window_find_closest(name, level)
-
-Server::window_find_closest(name, level)
- Find window that matches best to given arguments. `name' can be either
- window name or name of one of the window items.
-
-Window
-window_find_item(name)
-
-Server::window_find_item(name)
- Find window which contains window item with specified name/server.
-
-
-=head2 C<item_add $item, $automatic>
-
-Add specified windowitem
-
-=head2 C<item_remove $item>
-
-remove specified windowitem
-
-=head2 C<item_destroy $item>
-
-destroy specified windowitem
-
-=head2 C<set_active>
-
-Set window active.
-
-=head2 C<change_server $server>
-
-=head2 C<set_refnum $refnum>
-
-=head2 C<set_name $name>
-
-=head2 C<set_history $name>
-
-=head2 C<set_level $level>
-
-Change server/refnum/name/history/level in window.
-
-=head2 C<item_prev>
-
-=head2 C<item_next>
-
-Change to previous/next window item.
-
-
-=head2 C<get_active_name>
-
-Return active item's name, or if none is active, window's name
-
-=head2 C<item_find $server, $name>
-
-Find window item that matches best to given arguments.
-
-=head1 Full list of functions
-
- Irssi::UI::Window::activity
- Irssi::UI::Window::change_server
- Irssi::UI::Window::command
- Irssi::UI::Window::destroy
- Irssi::UI::Window::format_get_text
- Irssi::UI::Window::get_active_name
- Irssi::UI::Window::get_history_lines
- Irssi::UI::Window::gui_printtext_after
- Irssi::UI::Window::item_add
- Irssi::UI::Window::item_destroy
- Irssi::UI::Window::item_find
- Irssi::UI::Window::item_next
- Irssi::UI::Window::item_prev
- Irssi::UI::Window::item_remove
- Irssi::UI::Window::items
- Irssi::UI::Window::last_line_insert
- Irssi::UI::Window::print
- Irssi::UI::Window::print_after
- Irssi::UI::Window::printformat
- Irssi::UI::Window::set_active
- Irssi::UI::Window::set_history
- Irssi::UI::Window::set_level
- Irssi::UI::Window::set_name
- Irssi::UI::Window::set_refnum
- Irssi::UI::Window::view
-
diff --git a/docs/Irssi/Windowitem.pod b/docs/Irssi/Windowitem.pod
deleted file mode 100644
index 896600b..0000000
--- a/docs/Irssi/Windowitem.pod
+++ /dev/null
@@ -1,78 +0,0 @@
-__END__
-
-=head1 NAME
-
-Irssi::Windowitem
-
-=head1 DESCRIPTION
-
-
-The meaning of "window" should be pretty clear, but "window item" is something I
-couldn't really figure out a better name for :) They're simply something that's
-inside a window, a channel or a query usually. Windows can have multiple items
-inside them. It's possible to create non-channel/query window items too,
-currently the third possible window item is created by /EXEC -interactive.
-
-In scripts, I think you can quite safely assume that the window item is
-query or channel if the script is intended to be run in one of them.
-Stupid users won't probably have other window items, and smart users
-know where to run the script, or at least later figure out why it
-didn't work :)
-
-=head1 FIELDS
-
-Windowitem->{}
-
- type - Type of the window item, for example "CHANNEL" or "QUERY"
- chat_type - String ID of chat protocol, for example "IRC"
-
- server - Active server for item
- name - Name of the item
-
- createtime - Time the window item was created
- data_level - 0=no new data, 1=text, 2=msg, 3=highlighted text
- hilight_color - Color of the last highlighted text
-
-=head1 METHODS
-
-=head2 C<print $str, [$level]>
-
-=head2 C<command $cmd>
-
-=head2 C<set_active>
-
-Change window item active in parent window.
-
-
-=head2 C<change_server $server>
-
-Change server in window item.
-
-=head2 C<is_active>
-
-Returns 1 if window item is the active item in parent window.
-
-
-=head2 C<get_dcc $item>
-
-If `item' is a query of a =nick, return DCC chat record of nick.
-returns L<Irssi::Dcc> object.
-
-Windowitem::window_create(automatic)
- Create a new window.
-
-=head1 full func list
-
-
- Irssi::Windowitem::activity
- Irssi::Windowitem::change_server
- Irssi::Windowitem::command
- Irssi::Windowitem::get_dcc
- Irssi::Windowitem::is_active
- Irssi::Windowitem::parse_special
- Irssi::Windowitem::print
- Irssi::Windowitem::printformat
- Irssi::Windowitem::set_active
- Irssi::Windowitem::window
- Irssi::Windowitem::window_create
-
diff --git a/docs/TODO b/docs/TODO
deleted file mode 100644
index f4b986d..0000000
--- a/docs/TODO
+++ /dev/null
@@ -1,63 +0,0 @@
-* Documentation
-** Finish writing up function defs in Irssi:: namespace
-** Write up more stuff on Themes, including brief tutorial
-** Fill in more stuff in Guide
-** Write up what triggers signals, when/how, etc.
-** Rest of docs
-*** Window
-*** WindowItem
-*** Server
-*** Channel
-*** Query
-*** Theme/View/Accessing screen content
-* Doc Gen
-** Prettify snippets with perltidy HTML mode
-** Javascript(?) c&p generator for signals
- eg:
- sub handle_sig_<foo> {
- my ($arg1, $arg2, $arg3) = @_;
- }
- Irssi::signal_add("<foo>", \&handle_sig_<foo>);
-
-** Make CSS suck less (steal from perldoc.perl.org?)
-** Sidebar/frameset with quick links menu?
-
-** Write parser for module-formats files and incorporate into docs somewhere
-*** Some sort of javascript bacon for viewing default formats?
- Or just a big list?
-
-** Have something to check link validity, since refs have changed a lot
-** Index page
-*** Make it more multi-level, split on namespaces
-
-* Misc Code
-** finish off build-signals script to parse POD and produce signals header file.
-
-* Patches
-** Bindings
-*** Figure out how memory management / ref-counting works, and check for leaks
-*** Add "binding added/changed/deleted" signals
-*** Talk to someone (Bazerka?) about merging into trunk
-*** Proof of concept (modify adv_windowlist to use bindings rather than parsing cmd)
-
-** Abstract raw access
-*** Where are they stored - why doesn't get_format work?
-** Statusbars
-*** Access to entries (as objects)
-*** Create
-*** Remove
-** StatusbarItems
-*** List (given sbar)
-*** Enable/Disable
-** Aliases
-*** Add / Modify
-*** Remove
-*** List
-*** Fetch Single
-*** Signals
-
-* Misc Stuff
-** Publicise it a bit more, try to get links from people
-** Host on metavore?
-** Talk to maintainers about inclusion in core
-*** Maybe as patches to .xs files + parsing scripts?
diff --git a/docs/allsigs-clean.txt b/docs/allsigs-clean.txt
deleted file mode 100644
index bd7d960..0000000
--- a/docs/allsigs-clean.txt
+++ /dev/null
@@ -1,379 +0,0 @@
-away mode changed"
-"awaylog show"
-"ban type changed"
-"beep"
-"channel created"
-"channel destroyed"
-"channel joined"
-"channel rejoin new"
-"channel sync"
-"channel wholist"
-"chanquery abort"
-"chanquery ban end"
-"chanquery ban"
-"chanquery mode"
-"chanquery who end"
-"chat protocol created"
-"chat protocol deinit"
-"chat protocol destroyed"
-"chat protocol unknown"
-"chatnet destroyed"
-"chatnet read"
-"chatnet saved"
-"command clear"
-"command scrollback"
-"complete command action"
-"complete command alias"
-"complete command away"
-"complete command bind"
-"complete command cat"
-"complete command connect"
-"complete command dcc send"
-"complete command disconnect"
-"complete command format"
-"complete command help"
-"complete command load"
-"complete command msg"
-"complete command query"
-"complete command rawlog open"
-"complete command rawlog save"
-"complete command recode remove"
-"complete command reconnect"
-"complete command reload"
-"complete command save"
-"complete command script load"
-"complete command script unload"
-"complete command server add"
-"complete command server remove"
-"complete command server"
-"complete command set"
-"complete command stats"
-"complete command toggle"
-"complete command topic"
-"complete command unalias"
-"complete command window goto"
-"complete command window item move"
-"complete command window server"
-"complete erase command action"
-"complete erase command msg"
-"complete erase command query"
-"complete erase"
-"complete word"
-"ctcp action"
-"ctcp msg clientinfo"
-"ctcp msg dcc accept"
-"ctcp msg dcc chat"
-"ctcp msg dcc resume"
-"ctcp msg dcc send"
-"ctcp msg dcc"
-"ctcp msg ping"
-"ctcp msg time"
-"ctcp msg userinfo"
-"ctcp msg version"
-"ctcp msg"
-"ctcp reply dcc reject"
-"ctcp reply dcc"
-"ctcp reply ping"
-"ctcp reply"
-"dcc chat message"
-"dcc closed"
-"dcc connected"
-"dcc ctcp action"
-"dcc ctcp dcc"
-"dcc destroyed"
-"dcc error close not found"
-"dcc error connect"
-"dcc error ctcp"
-"dcc error file create"
-"dcc error file open"
-"dcc error get not found"
-"dcc error send exists"
-"dcc error send no route"
-"dcc error unknown type"
-"dcc error write"
-"dcc list print"
-"dcc rejected"
-"dcc reply dcc"
-"dcc reply send pasv"
-"dcc request send"
-"dcc request"
-"dcc server message"
-"dcc server started"
-"default command server"
-"default command"
-"default ctcp msg dcc"
-"default ctcp msg"
-"default ctcp reply dcc"
-"default ctcp reply"
-"default dcc ctcp"
-"default event numeric"
-"default event"
-"error command"
-"event 001"
-"event 004"
-"event 005"
-"event 221"
-"event 254"
-"event 271"
-"event 272"
-"event 281"
-"event 301"
-"event 302"
-"event 303"
-"event 305"
-"event 306"
-"event 311"
-"event 312"
-"event 313"
-"event 314"
-"event 315"
-"event 317"
-"event 318"
-"event 319"
-"event 324"
-"event 326"
-"event 327"
-"event 328"
-"event 329"
-"event 330"
-"event 332"
-"event 333"
-"event 338"
-"event 341"
-"event 344"
-"event 345"
-"event 346"
-"event 347"
-"event 348"
-"event 349"
-"event 352"
-"event 353"
-"event 364"
-"event 365"
-"event 366"
-"event 367"
-"event 368"
-"event 369"
-"event 372"
-"event 375"
-"event 376"
-"event 377"
-"event 378"
-"event 379"
-"event 381"
-"event 386"
-"event 387"
-"event 388"
-"event 389"
-"event 396"
-"event 401"
-"event 403"
-"event 404"
-"event 405"
-"event 407"
-"event 408"
-"event 421"
-"event 422"
-"event 432"
-"event 433"
-"event 436"
-"event 437"
-"event 438"
-"event 439"
-"event 442"
-"event 465"
-"event 470"
-"event 471"
-"event 472"
-"event 473"
-"event 474"
-"event 475"
-"event 476"
-"event 477"
-"event 478"
-"event 479"
-"event 482"
-"event 486"
-"event 489"
-"event 494"
-"event 506"
-"event 707"
-"event 716"
-"event 717"
-"event 728"
-"event 729"
-"event connected"
-"event empty"
-"event error"
-"event invite"
-"event join"
-"event kick"
-"event kill"
-"event mode"
-"event nick"
-"event notice"
-"event part"
-"event ping"
-"event pong"
-"event privmsg"
-"event quit"
-"event silence"
-"event topic"
-"event wallops"
-"exec input"
-"expando timer"
-"flood"
-"gui dialog"
-"gui entry redirect"
-"gui exit"
-"gui key pressed"
-"gui page scrolled"
-"gui print text finished"
-"gui print text"
-"gui window create override"
-"gui window created"
-"ignore changed"
-"ignore created"
-"ignore destroyed"
-"irssi init finished"
-"irssi init read settings"
-"lag ping error"
-"lag pong"
-"layout reset"
-"layout restore item"
-"layout restore window"
-"layout restore"
-"layout save item"
-"layout save window"
-"layout save"
-"list subcommands"
-"log config read"
-"log config save"
-"log create failed"
-"log locked"
-"log new"
-"log written"
-"mainwindow destroyed"
-"mainwindow moved"
-"mainwindow resized"
-"message dcc action"
-"message dcc ctcp"
-"message dcc own"
-"message dcc own_action"
-"message dcc own_ctcp"
-"message dcc"
-"message invite"
-"message irc action"
-"message irc ctcp"
-"message irc mode"
-"message irc notice"
-"message irc op_public"
-"message irc own_action"
-"message irc own_ctcp"
-"message irc own_notice"
-"message irc own_wall"
-"message join"
-"message kick"
-"message nick"
-"message own_nick"
-"message own_private"
-"message own_public"
-"message part"
-"message private"
-"message public"
-"message quit"
-"message topic"
-"module error"
-"module loaded"
-"module unloaded"
-"netsplit new"
-"nickfind event whois"
-"nicklist changed"
-"nicklist host changed"
-"nicklist new"
-"nicklist remove"
-"notifylist away changed"
-"notifylist event whois away"
-"notifylist event whois end"
-"notifylist event whois"
-"notifylist event"
-"notifylist joined"
-"notifylist left"
-"pidwait"
-"print format"
-"print starting"
-"print text"
-"proxy client dump"
-"query created"
-"query destroyed"
-"query nick changed"
-"query server changed"
-"reload"
-"requested usermode change"
-"script destroyed"
-"script error"
-"send command"
-"send text"
-"server add fill"
-"server connect copy"
-"server connect failed"
-"server connected"
-"server connecting"
-"server disconnected"
-"server event"
-"server incoming"
-"server lag disconnect"
-"server lag"
-"server looking"
-"server nick changed"
-"server quit"
-"server reconnect not found"
-"server reconnect remove"
-"server reconnect save status"
-"server sendmsg"
-"server setup fill chatnet"
-"server setup fill connect"
-"server setup fill reconn"
-"server setup read"
-"server setup saved"
-"session restore channel"
-"session restore nick"
-"session restore server"
-"session restore"
-"session save channel"
-"session save server"
-"session save"
-"settings errors"
-"setup changed"
-"setup reread"
-"silent event who"
-"silent event whois"
-"terminal resized"
-"theme changed"
-"theme destroyed"
-"user mode changed"
-"userhost event"
-"whois away"
-"whois default event"
-"whois end"
-"whois event not found"
-"whois event"
-"whois oper"
-"whois try whowas"
-"whowas away"
-"whowas event end"
-"whowas event"
-"window activity"
-"window changed automatic"
-"window changed"
-"window created"
-"window dehilight"
-"window destroyed"
-"window hilight"
-"window history changed"
-"window item changed"
-"window item remove"
-"window item server changed"
-"window print info"
-"window refnum changed"
-"window server changed"
diff --git a/docs/allsigs-uniq.txt b/docs/allsigs-uniq.txt
deleted file mode 100644
index 4dc83e3..0000000
--- a/docs/allsigs-uniq.txt
+++ /dev/null
@@ -1,358 +0,0 @@
-"away mode changed"
-"awaylog show"
-"ban type changed"
-"beep"
-"channel created"
-"channel destroyed"
-"channel joined"
-"channel rejoin new"
-"channel sync"
-"channel wholist"
-"chanquery abort"
-"chanquery ban end"
-"chanquery ban"
-"chanquery mode"
-"chanquery who end"
-"chat protocol created"
-"chat protocol deinit"
-"chat protocol destroyed"
-"chat protocol unknown"
-"chatnet destroyed"
-"chatnet read"
-"chatnet saved"
-"complete command action"
-"complete command alias"
-"complete command away"
-"complete command bind"
-"complete command cat"
-"complete command connect"
-"complete command dcc send"
-"complete command disconnect"
-"complete command format"
-"complete command help"
-"complete command load"
-"complete command msg"
-"complete command query"
-"complete command rawlog open"
-"complete command rawlog save"
-"complete command recode remove"
-"complete command reconnect"
-"complete command reload"
-"complete command save"
-"complete command script load"
-"complete command script unload"
-"complete command server add"
-"complete command server remove"
-"complete command server"
-"complete command set"
-"complete command stats"
-"complete command toggle"
-"complete command topic"
-"complete command unalias"
-"complete command window goto"
-"complete command window item move"
-"complete command window server"
-"complete erase command action"
-"complete erase command msg"
-"complete erase command query"
-"complete word"
-"ctcp action"
-"ctcp msg clientinfo"
-"ctcp msg dcc accept"
-"ctcp msg dcc chat"
-"ctcp msg dcc resume"
-"ctcp msg dcc send"
-"ctcp msg dcc"
-"ctcp msg ping"
-"ctcp msg time"
-"ctcp msg userinfo"
-"ctcp msg version"
-"ctcp msg"
-"ctcp reply dcc reject"
-"ctcp reply dcc"
-"ctcp reply ping"
-"ctcp reply"
-"dcc chat message"
-"dcc closed"
-"dcc connected"
-"dcc ctcp action"
-"dcc ctcp dcc"
-"dcc destroyed"
-"dcc error close not found"
-"dcc error connect"
-"dcc error ctcp"
-"dcc error file create"
-"dcc error file open"
-"dcc error get not found"
-"dcc error send exists"
-"dcc error send no route"
-"dcc error unknown type"
-"dcc error write"
-"dcc list print"
-"dcc rejected"
-"dcc reply dcc"
-"dcc reply send pasv"
-"dcc request send"
-"dcc request"
-"dcc server started"
-"default command server"
-"default command"
-"default ctcp msg dcc"
-"default ctcp msg"
-"default ctcp reply dcc"
-"default ctcp reply"
-"default dcc ctcp"
-"default event numeric"
-"default event"
-"error command"
-"event 001"
-"event 004"
-"event 005"
-"event 221"
-"event 254"
-"event 271"
-"event 272"
-"event 281"
-"event 301"
-"event 302"
-"event 303"
-"event 305"
-"event 306"
-"event 311"
-"event 312"
-"event 313"
-"event 314"
-"event 315"
-"event 317"
-"event 318"
-"event 319"
-"event 324"
-"event 326"
-"event 327"
-"event 328"
-"event 329"
-"event 330"
-"event 332"
-"event 333"
-"event 338"
-"event 341"
-"event 344"
-"event 345"
-"event 346"
-"event 347"
-"event 348"
-"event 349"
-"event 352"
-"event 353"
-"event 364"
-"event 365"
-"event 367"
-"event 368"
-"event 369"
-"event 372"
-"event 375"
-"event 376"
-"event 377"
-"event 378"
-"event 379"
-"event 381"
-"event 386"
-"event 387"
-"event 388"
-"event 389"
-"event 396"
-"event 401"
-"event 403"
-"event 404"
-"event 405"
-"event 407"
-"event 408"
-"event 421"
-"event 422"
-"event 432"
-"event 433"
-"event 436"
-"event 437"
-"event 438"
-"event 439"
-"event 442"
-"event 465"
-"event 470"
-"event 471"
-"event 472"
-"event 473"
-"event 474"
-"event 475"
-"event 476"
-"event 477"
-"event 478"
-"event 479"
-"event 482"
-"event 486"
-"event 489"
-"event 494"
-"event 506"
-"event 707"
-"event 716"
-"event 717"
-"event 728"
-"event 729"
-"event connected"
-"event empty"
-"event error"
-"event invite"
-"event join"
-"event kick"
-"event kill"
-"event mode"
-"event nick"
-"event notice"
-"event part"
-"event ping"
-"event pong"
-"event privmsg"
-"event quit"
-"event silence"
-"event topic"
-"event wallops"
-"exec input"
-"expando timer"
-"flood"
-"gui dialog"
-"gui entry redirect"
-"gui exit"
-"gui key pressed"
-"gui page scrolled"
-"gui print text finished"
-"gui print text"
-"gui window create override"
-"gui window created"
-"ignore changed"
-"ignore created"
-"ignore destroyed"
-"irssi init finished"
-"irssi init read settings"
-"lag ping error"
-"layout reset"
-"layout restore item"
-"layout restore window"
-"layout restore"
-"layout save item"
-"layout save window"
-"layout save"
-"list subcommands"
-"log config read"
-"log config save"
-"log create failed"
-"log locked"
-"log new"
-"log written"
-"mainwindow destroyed"
-"mainwindow moved"
-"mainwindow resized"
-"message dcc action"
-"message dcc ctcp"
-"message dcc own"
-"message dcc own_action"
-"message dcc own_ctcp"
-"message dcc"
-"message irc mode"
-"message irc own_action"
-"message join"
-"message own_private"
-"message own_public"
-"message private"
-"message public"
-"message quit"
-"module error"
-"module loaded"
-"module unloaded"
-"netsplit new"
-"nickfind event whois"
-"nicklist changed"
-"nicklist host changed"
-"nicklist new"
-"nicklist remove"
-"notifylist away changed"
-"notifylist event whois away"
-"notifylist event whois end"
-"notifylist event whois"
-"notifylist event"
-"notifylist joined"
-"notifylist left"
-"pidwait"
-"print format"
-"print starting"
-"print text"
-"proxy client dump"
-"query created"
-"query destroyed"
-"query nick changed"
-"query server changed"
-"reload"
-"requested usermode change"
-"script destroyed"
-"script error"
-"send command"
-"send text"
-"server add fill"
-"server connect copy"
-"server connect failed"
-"server connected"
-"server connecting"
-"server disconnected"
-"server event"
-"server incoming"
-"server lag disconnect"
-"server lag"
-"server looking"
-"server nick changed"
-"server quit"
-"server reconnect not found"
-"server reconnect remove"
-"server reconnect save status"
-"server sendmsg"
-"server setup fill chatnet"
-"server setup fill connect"
-"server setup fill reconn"
-"server setup read"
-"server setup saved"
-"session restore channel"
-"session restore nick"
-"session restore server"
-"session restore"
-"session save channel"
-"session save server"
-"session save"
-"settings errors"
-"setup changed"
-"setup reread"
-"silent event who"
-"silent event whois"
-"terminal resized"
-"theme changed"
-"theme destroyed"
-"user mode changed"
-"userhost event"
-"whois away"
-"whois default event"
-"whois end"
-"whois event not found"
-"whois event"
-"whois oper"
-"whois try whowas"
-"whowas away"
-"whowas event end"
-"whowas event"
-"window activity"
-"window changed automatic"
-"window changed"
-"window created"
-"window dehilight"
-"window destroyed"
-"window history changed"
-"window item remove"
-"window item server changed"
-"window print info"
-"window refnum changed"
-"window server changed"
diff --git a/docs/allsigs.txt b/docs/allsigs.txt
deleted file mode 100644
index df0fb48..0000000
--- a/docs/allsigs.txt
+++ /dev/null
@@ -1,737 +0,0 @@
-core/channels-setup.c:167: signal_add("setup reread", (SIGNAL_FUNC) channels_read_config);
-core/channels-setup.c:168: signal_add("irssi init read settings", (SIGNAL_FUNC) channels_read_config);
-core/channels.c:279: signal_add("event connected", (SIGNAL_FUNC) event_connected);
-core/chat-commands.c:453: signal_add("default command server", (SIGNAL_FUNC) sig_default_command_server);
-core/chat-commands.c:454: signal_add("server sendmsg", (SIGNAL_FUNC) sig_server_sendmsg);
-core/chatnets.c:183: signal_add_first("event connected", (SIGNAL_FUNC) sig_connected);
-core/chatnets.c:184: signal_add("setup reread", (SIGNAL_FUNC) read_chatnets);
-core/chatnets.c:185: signal_add_first("irssi init read settings", (SIGNAL_FUNC) read_chatnets);
-core/commands.c:170: signal_add_full(module, priority, str, func, user_data);
-core/commands.c:984: signal_add("send command", (SIGNAL_FUNC) event_command);
-core/core.c:229: signal_add_first("gui dialog", (SIGNAL_FUNC) sig_gui_dialog);
-core/core.c:230: signal_add_first("irssi init finished", (SIGNAL_FUNC) sig_init_finished);
-core/core.c:261: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-core/core.c:262: signal_add("irssi init finished", (SIGNAL_FUNC) sig_irssi_init_finished);
-core/expandos.c:177: signal_add("expando timer", funcs[EXPANDO_ARG_NONE]);
-core/expandos.c:185: signal_add_full_id(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT,
-core/expandos.c:697: signal_add("message public", (SIGNAL_FUNC) sig_message_public);
-core/expandos.c:698: signal_add("message private", (SIGNAL_FUNC) sig_message_private);
-core/expandos.c:699: signal_add("message own_private", (SIGNAL_FUNC) sig_message_own_private);
-core/expandos.c:700: signal_add_first("setup changed", (SIGNAL_FUNC) read_settings);
-core/ignore.c:449: signal_add("setup reread", (SIGNAL_FUNC) read_ignores);
-core/log-away.c:112: signal_add("log written", (SIGNAL_FUNC) sig_log_written);
-core/log-away.c:113: signal_add("away mode changed", (SIGNAL_FUNC) sig_away_changed);
-core/log.c:586: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-core/log.c:587: signal_add("setup reread", (SIGNAL_FUNC) log_read_config);
-core/log.c:588: signal_add("irssi init finished", (SIGNAL_FUNC) log_read_config);
-core/nicklist.c:589: signal_add_first("channel created", (SIGNAL_FUNC) sig_channel_created);
-core/nicklist.c:590: signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
-core/nickmatch-cache.c:105: signal_add("nicklist new", (SIGNAL_FUNC) sig_nick_new);
-core/nickmatch-cache.c:106: signal_add("nicklist changed", (SIGNAL_FUNC) sig_nick_new);
-core/nickmatch-cache.c:107: signal_add("nicklist host changed", (SIGNAL_FUNC) sig_nick_new);
-core/nickmatch-cache.c:108: signal_add("nicklist remove", (SIGNAL_FUNC) sig_nick_remove);
-core/rawlog.c:208: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-core/servers-reconnect.c:484: signal_add("server connect failed", (SIGNAL_FUNC) sig_reconnect);
-core/servers-reconnect.c:485: signal_add("server disconnected", (SIGNAL_FUNC) sig_reconnect);
-core/servers-reconnect.c:486: signal_add("event connected", (SIGNAL_FUNC) sig_connected);
-core/servers-reconnect.c:487: signal_add("chat protocol deinit", (SIGNAL_FUNC) sig_chat_protocol_deinit);
-core/servers-reconnect.c:488: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-core/servers-setup.c:550: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-core/servers-setup.c:551: signal_add("setup reread", (SIGNAL_FUNC) read_servers);
-core/servers-setup.c:552: signal_add("irssi init read settings", (SIGNAL_FUNC) read_servers);
-core/servers.c:747: signal_add("chat protocol deinit", (SIGNAL_FUNC) sig_chat_protocol_deinit);
-core/session.c:347: signal_add("session save", (SIGNAL_FUNC) sig_session_save);
-core/session.c:348: signal_add("session restore", (SIGNAL_FUNC) sig_session_restore);
-core/session.c:349: signal_add("session save server", (SIGNAL_FUNC) session_save_server_channels);
-core/session.c:350: signal_add("session restore server", (SIGNAL_FUNC) session_restore_server_channels);
-core/session.c:351: signal_add("session save channel", (SIGNAL_FUNC) session_save_channel_nicks);
-core/session.c:352: signal_add("session restore channel", (SIGNAL_FUNC) session_restore_channel_nicks);
-core/session.c:353: signal_add("irssi init finished", (SIGNAL_FUNC) sig_init_finished);
-core/settings.c:806: signal_add("irssi init finished", (SIGNAL_FUNC) sig_init_finished);
-core/settings.c:807: signal_add("gui exit", (SIGNAL_FUNC) sig_autosave);
-core/signals.c:85:void signal_add_full(const char *module, int priority,
-core/signals.c:88: signal_add_full_id(module, priority, signal_get_uniq_id(signal),
-core/signals.c:93:void signal_add_full_id(const char *module, int priority,
-core/signals.h:16:void signal_add_full(const char *module, int priority,
-core/signals.h:18:void signal_add_full_id(const char *module, int priority,
-core/signals.h:20:#define signal_add(signal, func) \
-core/signals.h:21: signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
-core/signals.h:22:#define signal_add_first(signal, func) \
-core/signals.h:23: signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
-core/signals.h:24:#define signal_add_last(signal, func) \
-core/signals.h:25: signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
-core/signals.h:27:#define signal_add_data(signal, func, data) \
-core/signals.h:28: signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), data)
-core/signals.h:29:#define signal_add_first_data(signal, func, data) \
-core/signals.h:30: signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), data)
-core/signals.h:31:#define signal_add_last_data(signal, func, data) \
-core/signals.h:32: signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), data)
-core/write-buffer.c:172: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/chat-completion.c:1152: signal_add("complete word", (SIGNAL_FUNC) sig_complete_word);
-fe-common/core/chat-completion.c:1153: signal_add("complete command msg", (SIGNAL_FUNC) sig_complete_msg);
-fe-common/core/chat-completion.c:1154: signal_add("complete command query", (SIGNAL_FUNC) sig_complete_msg);
-fe-common/core/chat-completion.c:1155: signal_add("complete command action", (SIGNAL_FUNC) sig_complete_msg);
-fe-common/core/chat-completion.c:1156: signal_add("complete erase command msg", (SIGNAL_FUNC) sig_erase_complete_msg);
-fe-common/core/chat-completion.c:1157: signal_add("complete erase command query", (SIGNAL_FUNC) sig_erase_complete_msg);
-fe-common/core/chat-completion.c:1158: signal_add("complete erase command action", (SIGNAL_FUNC) sig_erase_complete_msg);
-fe-common/core/chat-completion.c:1159: signal_add("complete command connect", (SIGNAL_FUNC) sig_complete_connect);
-fe-common/core/chat-completion.c:1160: signal_add("complete command server", (SIGNAL_FUNC) sig_complete_connect);
-fe-common/core/chat-completion.c:1161: signal_add("complete command disconnect", (SIGNAL_FUNC) sig_complete_tag);
-fe-common/core/chat-completion.c:1162: signal_add("complete command reconnect", (SIGNAL_FUNC) sig_complete_tag);
-fe-common/core/chat-completion.c:1163: signal_add("complete command window server", (SIGNAL_FUNC) sig_complete_tag);
-fe-common/core/chat-completion.c:1164: signal_add("complete command topic", (SIGNAL_FUNC) sig_complete_topic);
-fe-common/core/chat-completion.c:1165: signal_add("complete command away", (SIGNAL_FUNC) sig_complete_away);
-fe-common/core/chat-completion.c:1166: signal_add("complete command unalias", (SIGNAL_FUNC) sig_complete_unalias);
-fe-common/core/chat-completion.c:1167: signal_add("complete command alias", (SIGNAL_FUNC) sig_complete_alias);
-fe-common/core/chat-completion.c:1168: signal_add("complete command window goto", (SIGNAL_FUNC) sig_complete_window);
-fe-common/core/chat-completion.c:1169: signal_add("complete command window item move", (SIGNAL_FUNC) sig_complete_channel);
-fe-common/core/chat-completion.c:1170: signal_add("complete command server add", (SIGNAL_FUNC) sig_complete_server);
-fe-common/core/chat-completion.c:1171: signal_add("complete command server remove", (SIGNAL_FUNC) sig_complete_server);
-fe-common/core/chat-completion.c:1172: signal_add("complete command recode remove", (SIGNAL_FUNC) sig_complete_target);
-fe-common/core/chat-completion.c:1173: signal_add("message public", (SIGNAL_FUNC) sig_message_public);
-fe-common/core/chat-completion.c:1174: signal_add("message join", (SIGNAL_FUNC) sig_message_join);
-fe-common/core/chat-completion.c:1175: signal_add("message private", (SIGNAL_FUNC) sig_message_private);
-fe-common/core/chat-completion.c:1176: signal_add("message own_public", (SIGNAL_FUNC) sig_message_own_public);
-fe-common/core/chat-completion.c:1177: signal_add("message own_private", (SIGNAL_FUNC) sig_message_own_private);
-fe-common/core/chat-completion.c:1178: signal_add("nicklist remove", (SIGNAL_FUNC) sig_nick_removed);
-fe-common/core/chat-completion.c:1179: signal_add("nicklist changed", (SIGNAL_FUNC) sig_nick_changed);
-fe-common/core/chat-completion.c:1180: signal_add("send text", (SIGNAL_FUNC) event_text);
-fe-common/core/chat-completion.c:1181: signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
-fe-common/core/chat-completion.c:1182: signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
-fe-common/core/chat-completion.c:1183: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/command-history.c:278: signal_add("window created", (SIGNAL_FUNC) sig_window_created);
-fe-common/core/command-history.c:279: signal_add("window destroyed", (SIGNAL_FUNC) sig_window_destroyed);
-fe-common/core/command-history.c:280: signal_add("window history changed", (SIGNAL_FUNC) sig_window_history_changed);
-fe-common/core/command-history.c:281: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/completion.c:832: signal_add_first("complete word", (SIGNAL_FUNC) sig_complete_word);
-fe-common/core/completion.c:833: signal_add_first("complete erase", (SIGNAL_FUNC) sig_complete_erase);
-fe-common/core/completion.c:834: signal_add("complete command set", (SIGNAL_FUNC) sig_complete_set);
-fe-common/core/completion.c:835: signal_add("complete command toggle", (SIGNAL_FUNC) sig_complete_toggle);
-fe-common/core/completion.c:836: signal_add("complete command load", (SIGNAL_FUNC) sig_complete_filename);
-fe-common/core/completion.c:837: signal_add("complete command cat", (SIGNAL_FUNC) sig_complete_filename);
-fe-common/core/completion.c:838: signal_add("complete command save", (SIGNAL_FUNC) sig_complete_filename);
-fe-common/core/completion.c:839: signal_add("complete command reload", (SIGNAL_FUNC) sig_complete_filename);
-fe-common/core/completion.c:840: signal_add("complete command rawlog open", (SIGNAL_FUNC) sig_complete_filename);
-fe-common/core/completion.c:841: signal_add("complete command rawlog save", (SIGNAL_FUNC) sig_complete_filename);
-fe-common/core/completion.c:842: signal_add("complete command help", (SIGNAL_FUNC) sig_complete_command);
-fe-common/core/fe-channels.c:159: signal_add("channel created",
-fe-common/core/fe-channels.c:615: signal_add("channel created", (SIGNAL_FUNC) signal_channel_created);
-fe-common/core/fe-channels.c:616: signal_add("channel destroyed", (SIGNAL_FUNC) signal_channel_destroyed);
-fe-common/core/fe-channels.c:617: signal_add_last("window item changed", (SIGNAL_FUNC) signal_window_item_changed);
-fe-common/core/fe-channels.c:618: signal_add_last("server disconnected", (SIGNAL_FUNC) sig_disconnected);
-fe-common/core/fe-channels.c:619: signal_add_last("channel joined", (SIGNAL_FUNC) sig_channel_joined);
-fe-common/core/fe-common-core.c:198: signal_add_first("server connected", (SIGNAL_FUNC) sig_connected);
-fe-common/core/fe-common-core.c:199: signal_add_last("server disconnected", (SIGNAL_FUNC) sig_disconnected);
-fe-common/core/fe-common-core.c:200: signal_add_first("channel created", (SIGNAL_FUNC) sig_channel_created);
-fe-common/core/fe-common-core.c:201: signal_add_last("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
-fe-common/core/fe-common-core.c:447: signal_add_first("setup changed", (SIGNAL_FUNC) sig_setup_changed);
-fe-common/core/fe-core-commands.c:214: signal_add_first("print starting", (SIGNAL_FUNC) sig_stop);
-fe-common/core/fe-core-commands.c:215: signal_add_first("print format", (SIGNAL_FUNC) sig_stop);
-fe-common/core/fe-core-commands.c:216: signal_add_first("print text", (SIGNAL_FUNC) sig_stop);
-fe-common/core/fe-core-commands.c:324: signal_add("send command", (SIGNAL_FUNC) event_command);
-fe-common/core/fe-core-commands.c:325: signal_add_last("send command", (SIGNAL_FUNC) event_command_last);
-fe-common/core/fe-core-commands.c:326: signal_add("default command", (SIGNAL_FUNC) event_default_command);
-fe-common/core/fe-core-commands.c:327: signal_add("error command", (SIGNAL_FUNC) event_cmderror);
-fe-common/core/fe-core-commands.c:328: signal_add("list subcommands", (SIGNAL_FUNC) event_list_subcommands);
-fe-common/core/fe-exec.c:660: signal_add("pidwait", (SIGNAL_FUNC) sig_pidwait);
-fe-common/core/fe-exec.c:661: signal_add("exec input", (SIGNAL_FUNC) sig_exec_input);
-fe-common/core/fe-exec.c:662: signal_add("window destroyed", (SIGNAL_FUNC) sig_window_destroyed);
-fe-common/core/fe-exec.c:663: signal_add_first("send text", (SIGNAL_FUNC) event_text);
-fe-common/core/fe-ignore-messages.c:112: signal_add_first("message public", (SIGNAL_FUNC) sig_message_public);
-fe-common/core/fe-ignore-messages.c:113: signal_add_first("message private", (SIGNAL_FUNC) sig_message_private);
-fe-common/core/fe-ignore-messages.c:114: signal_add_first("message join", (SIGNAL_FUNC) sig_message_join);
-fe-common/core/fe-ignore-messages.c:115: signal_add_first("message part", (SIGNAL_FUNC) sig_message_part);
-fe-common/core/fe-ignore-messages.c:116: signal_add_first("message quit", (SIGNAL_FUNC) sig_message_quit);
-fe-common/core/fe-ignore-messages.c:117: signal_add_first("message kick", (SIGNAL_FUNC) sig_message_kick);
-fe-common/core/fe-ignore-messages.c:118: signal_add_first("message nick", (SIGNAL_FUNC) sig_message_nick);
-fe-common/core/fe-ignore-messages.c:119: signal_add_first("message own_nick", (SIGNAL_FUNC) sig_message_own_nick);
-fe-common/core/fe-ignore-messages.c:120: signal_add_first("message invite", (SIGNAL_FUNC) sig_message_invite);
-fe-common/core/fe-ignore-messages.c:121: signal_add_first("message topic", (SIGNAL_FUNC) sig_message_topic);
-fe-common/core/fe-ignore.c:261: signal_add("ignore destroyed", (SIGNAL_FUNC) sig_ignore_destroyed);
-fe-common/core/fe-ignore.c:262: signal_add("ignore created", (SIGNAL_FUNC) sig_ignore_created);
-fe-common/core/fe-ignore.c:263: signal_add("ignore changed", (SIGNAL_FUNC) sig_ignore_created);
-fe-common/core/fe-log.c:694: signal_add("print format", (SIGNAL_FUNC) sig_print_format);
-fe-common/core/fe-log.c:735: signal_add_first("print text", (SIGNAL_FUNC) sig_printtext);
-fe-common/core/fe-log.c:736: signal_add("window item remove", (SIGNAL_FUNC) sig_window_item_remove);
-fe-common/core/fe-log.c:737: signal_add("window refnum changed", (SIGNAL_FUNC) sig_window_refnum_changed);
-fe-common/core/fe-log.c:738: signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
-fe-common/core/fe-log.c:739: signal_add("log locked", (SIGNAL_FUNC) sig_log_locked);
-fe-common/core/fe-log.c:740: signal_add("log create failed", (SIGNAL_FUNC) sig_log_create_failed);
-fe-common/core/fe-log.c:741: signal_add("log new", (SIGNAL_FUNC) sig_log_new);
-fe-common/core/fe-log.c:742: signal_add("log config read", (SIGNAL_FUNC) sig_log_config_read);
-fe-common/core/fe-log.c:743: signal_add("log config save", (SIGNAL_FUNC) sig_log_config_save);
-fe-common/core/fe-log.c:744: signal_add("awaylog show", (SIGNAL_FUNC) sig_awaylog_show);
-fe-common/core/fe-log.c:745: signal_add("theme destroyed", (SIGNAL_FUNC) sig_theme_destroyed);
-fe-common/core/fe-log.c:746: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/fe-messages.c:685: signal_add_last("message public", (SIGNAL_FUNC) sig_message_public);
-fe-common/core/fe-messages.c:686: signal_add_last("message private", (SIGNAL_FUNC) sig_message_private);
-fe-common/core/fe-messages.c:687: signal_add_last("message own_public", (SIGNAL_FUNC) sig_message_own_public);
-fe-common/core/fe-messages.c:688: signal_add_last("message own_private", (SIGNAL_FUNC) sig_message_own_private);
-fe-common/core/fe-messages.c:689: signal_add_last("message join", (SIGNAL_FUNC) sig_message_join);
-fe-common/core/fe-messages.c:690: signal_add_last("message part", (SIGNAL_FUNC) sig_message_part);
-fe-common/core/fe-messages.c:691: signal_add_last("message quit", (SIGNAL_FUNC) sig_message_quit);
-fe-common/core/fe-messages.c:692: signal_add_last("message kick", (SIGNAL_FUNC) sig_message_kick);
-fe-common/core/fe-messages.c:693: signal_add_last("message nick", (SIGNAL_FUNC) sig_message_nick);
-fe-common/core/fe-messages.c:694: signal_add_last("message own_nick", (SIGNAL_FUNC) sig_message_own_nick);
-fe-common/core/fe-messages.c:695: signal_add_last("message invite", (SIGNAL_FUNC) sig_message_invite);
-fe-common/core/fe-messages.c:696: signal_add_last("message topic", (SIGNAL_FUNC) sig_message_topic);
-fe-common/core/fe-messages.c:698: signal_add("nicklist new", (SIGNAL_FUNC) sig_nicklist_new);
-fe-common/core/fe-messages.c:699: signal_add("nicklist remove", (SIGNAL_FUNC) sig_nicklist_remove);
-fe-common/core/fe-messages.c:700: signal_add("nicklist changed", (SIGNAL_FUNC) sig_nicklist_changed);
-fe-common/core/fe-messages.c:701: signal_add("nicklist host changed", (SIGNAL_FUNC) sig_nicklist_new);
-fe-common/core/fe-messages.c:702: signal_add("channel joined", (SIGNAL_FUNC) sig_channel_joined);
-fe-common/core/fe-modules.c:228: signal_add("module error", (SIGNAL_FUNC) sig_module_error);
-fe-common/core/fe-modules.c:229: signal_add("module loaded", (SIGNAL_FUNC) sig_module_loaded);
-fe-common/core/fe-modules.c:230: signal_add("module unloaded", (SIGNAL_FUNC) sig_module_unloaded);
-fe-common/core/fe-queries.c:254: signal_add("query created",
-fe-common/core/fe-queries.c:362: signal_add("query created", (SIGNAL_FUNC) signal_query_created);
-fe-common/core/fe-queries.c:363: signal_add("query destroyed", (SIGNAL_FUNC) signal_query_destroyed);
-fe-common/core/fe-queries.c:364: signal_add("query server changed", (SIGNAL_FUNC) signal_query_server_changed);
-fe-common/core/fe-queries.c:365: signal_add("query nick changed", (SIGNAL_FUNC) signal_query_nick_changed);
-fe-common/core/fe-queries.c:366: signal_add("window item server changed", (SIGNAL_FUNC) signal_window_item_server_changed);
-fe-common/core/fe-queries.c:367: signal_add("server connected", (SIGNAL_FUNC) sig_server_connected);
-fe-common/core/fe-queries.c:368: signal_add("window changed", (SIGNAL_FUNC) sig_window_changed);
-fe-common/core/fe-queries.c:369: signal_add_first("message private", (SIGNAL_FUNC) sig_message_private);
-fe-common/core/fe-queries.c:370: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/fe-recode.c:198: signal_add_first("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/fe-server.c:388: signal_add("server looking", (SIGNAL_FUNC) sig_server_looking);
-fe-common/core/fe-server.c:389: signal_add("server connecting", (SIGNAL_FUNC) sig_server_connecting);
-fe-common/core/fe-server.c:390: signal_add("server connected", (SIGNAL_FUNC) sig_server_connected);
-fe-common/core/fe-server.c:391: signal_add("server connect failed", (SIGNAL_FUNC) sig_connect_failed);
-fe-common/core/fe-server.c:392: signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
-fe-common/core/fe-server.c:393: signal_add("server quit", (SIGNAL_FUNC) sig_server_quit);
-fe-common/core/fe-server.c:395: signal_add("server lag disconnect", (SIGNAL_FUNC) sig_server_lag_disconnected);
-fe-common/core/fe-server.c:396: signal_add("server reconnect remove", (SIGNAL_FUNC) sig_server_reconnect_removed);
-fe-common/core/fe-server.c:397: signal_add("server reconnect not found", (SIGNAL_FUNC) sig_server_reconnect_not_found);
-fe-common/core/fe-server.c:399: signal_add("chat protocol unknown", (SIGNAL_FUNC) sig_chat_protocol_unknown);
-fe-common/core/fe-settings.c:377: signal_add("settings errors", (SIGNAL_FUNC) sig_settings_errors);
-fe-common/core/fe-windows.c:630: signal_add("print text", (SIGNAL_FUNC) sig_print_text);
-fe-common/core/fe-windows.c:656: signal_add("server looking", (SIGNAL_FUNC) sig_server_connected);
-fe-common/core/fe-windows.c:657: signal_add("server connected", (SIGNAL_FUNC) sig_server_connected);
-fe-common/core/fe-windows.c:658: signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
-fe-common/core/fe-windows.c:659: signal_add("server connect failed", (SIGNAL_FUNC) sig_server_disconnected);
-fe-common/core/fe-windows.c:660: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/formats.c:1091: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/hilight-text.c:693: signal_add_first("print text", (SIGNAL_FUNC) sig_print_text);
-fe-common/core/hilight-text.c:694: signal_add("setup reread", (SIGNAL_FUNC) read_hilight_config);
-fe-common/core/hilight-text.c:695: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/keyboard.c:457: signal_add(key, func);
-fe-common/core/keyboard.c:853: signal_add("irssi init read settings", (SIGNAL_FUNC) read_keyboard_config);
-fe-common/core/keyboard.c:854: signal_add("setup reread", (SIGNAL_FUNC) read_keyboard_config);
-fe-common/core/keyboard.c:855: signal_add("complete command bind", (SIGNAL_FUNC) sig_complete_bind);
-fe-common/core/printtext.c:498: signal_add("print text", (SIGNAL_FUNC) sig_print_text);
-fe-common/core/printtext.c:499: signal_add("gui dialog", (SIGNAL_FUNC) sig_gui_dialog);
-fe-common/core/printtext.c:500: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/themes.c:1368: signal_add("complete command format", (SIGNAL_FUNC) sig_complete_format);
-fe-common/core/themes.c:1369: signal_add("irssi init finished", (SIGNAL_FUNC) sig_print_errors);
-fe-common/core/themes.c:1370: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/themes.c:1371: signal_add("setup reread", (SIGNAL_FUNC) themes_reload);
-fe-common/core/window-activity.c:143: signal_add("print text", (SIGNAL_FUNC) sig_hilight_text);
-fe-common/core/window-activity.c:144: signal_add("window changed", (SIGNAL_FUNC) sig_dehilight_window);
-fe-common/core/window-activity.c:145: signal_add("window dehilight", (SIGNAL_FUNC) sig_dehilight_window);
-fe-common/core/window-activity.c:146: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/core/window-items.c:356: signal_add_last("window item changed", (SIGNAL_FUNC) signal_window_item_changed);
-fe-common/core/windows-layout.c:67: signal_add("query created",
-fe-common/core/windows-layout.c:260: signal_add("layout restore item", (SIGNAL_FUNC) sig_layout_restore_item);
-fe-common/core/windows-layout.c:261: signal_add("layout restore", (SIGNAL_FUNC) sig_layout_restore);
-fe-common/core/windows-layout.c:262: signal_add("layout save item", (SIGNAL_FUNC) sig_layout_save_item);
-fe-common/irc/dcc/fe-dcc-chat-messages.c:135: signal_add("message dcc own", (SIGNAL_FUNC) sig_message_dcc_own);
-fe-common/irc/dcc/fe-dcc-chat-messages.c:136: signal_add("message dcc own_action", (SIGNAL_FUNC) sig_message_dcc_own_action);
-fe-common/irc/dcc/fe-dcc-chat-messages.c:137: signal_add("message dcc own_ctcp", (SIGNAL_FUNC) sig_message_dcc_own_ctcp);
-fe-common/irc/dcc/fe-dcc-chat-messages.c:138: signal_add("message dcc", (SIGNAL_FUNC) sig_message_dcc);
-fe-common/irc/dcc/fe-dcc-chat-messages.c:139: signal_add("message dcc action", (SIGNAL_FUNC) sig_message_dcc_action);
-fe-common/irc/dcc/fe-dcc-chat-messages.c:140: signal_add("message dcc ctcp", (SIGNAL_FUNC) sig_message_dcc_ctcp);
-fe-common/irc/dcc/fe-dcc-chat.c:345: signal_add("dcc request", (SIGNAL_FUNC) dcc_request);
-fe-common/irc/dcc/fe-dcc-chat.c:346: signal_add("dcc connected", (SIGNAL_FUNC) dcc_connected);
-fe-common/irc/dcc/fe-dcc-chat.c:347: signal_add("dcc closed", (SIGNAL_FUNC) dcc_closed);
-fe-common/irc/dcc/fe-dcc-chat.c:348: signal_add("dcc chat message", (SIGNAL_FUNC) dcc_chat_msg);
-fe-common/irc/dcc/fe-dcc-chat.c:349: signal_add("dcc ctcp action", (SIGNAL_FUNC) dcc_chat_action);
-fe-common/irc/dcc/fe-dcc-chat.c:350: signal_add("default dcc ctcp", (SIGNAL_FUNC) dcc_chat_ctcp);
-fe-common/irc/dcc/fe-dcc-chat.c:351: signal_add("dcc error ctcp", (SIGNAL_FUNC) dcc_error_ctcp);
-fe-common/irc/dcc/fe-dcc-chat.c:352: signal_add("default ctcp msg dcc", (SIGNAL_FUNC) dcc_unknown_ctcp);
-fe-common/irc/dcc/fe-dcc-chat.c:353: signal_add("default ctcp reply dcc", (SIGNAL_FUNC) dcc_unknown_reply);
-fe-common/irc/dcc/fe-dcc-chat.c:354: signal_add("dcc destroyed", (SIGNAL_FUNC) sig_dcc_destroyed);
-fe-common/irc/dcc/fe-dcc-chat.c:355: signal_add("query destroyed", (SIGNAL_FUNC) sig_query_destroyed);
-fe-common/irc/dcc/fe-dcc-chat.c:356: signal_add("dcc list print", (SIGNAL_FUNC) sig_dcc_list_print);
-fe-common/irc/dcc/fe-dcc-chat.c:361: signal_add("dcc error close not found", (SIGNAL_FUNC) dcc_error_close_not_found);
-fe-common/irc/dcc/fe-dcc-get.c:129: signal_add("dcc request", (SIGNAL_FUNC) dcc_request);
-fe-common/irc/dcc/fe-dcc-get.c:130: signal_add("dcc connected", (SIGNAL_FUNC) dcc_connected);
-fe-common/irc/dcc/fe-dcc-get.c:131: signal_add("dcc closed", (SIGNAL_FUNC) dcc_closed);
-fe-common/irc/dcc/fe-dcc-get.c:132: signal_add("dcc error file create", (SIGNAL_FUNC) dcc_error_file_create);
-fe-common/irc/dcc/fe-dcc-get.c:133: signal_add("dcc error get not found", (SIGNAL_FUNC) dcc_error_get_not_found);
-fe-common/irc/dcc/fe-dcc-get.c:134: signal_add("dcc error close not found", (SIGNAL_FUNC) dcc_error_close_not_found);
-fe-common/irc/dcc/fe-dcc-get.c:135: signal_add("dcc error write", (SIGNAL_FUNC) dcc_error_write);
-fe-common/irc/dcc/fe-dcc-get.c:136: signal_add("dcc list print", (SIGNAL_FUNC) sig_dcc_list_print);
-fe-common/irc/dcc/fe-dcc-send.c:166: signal_add("dcc connected", (SIGNAL_FUNC) dcc_connected);
-fe-common/irc/dcc/fe-dcc-send.c:167: signal_add("dcc closed", (SIGNAL_FUNC) dcc_closed);
-fe-common/irc/dcc/fe-dcc-send.c:168: signal_add("dcc error file open", (SIGNAL_FUNC) dcc_error_file_open);
-fe-common/irc/dcc/fe-dcc-send.c:169: signal_add("dcc error send exists", (SIGNAL_FUNC) dcc_error_send_exists);
-fe-common/irc/dcc/fe-dcc-send.c:170: signal_add("dcc error send no route", (SIGNAL_FUNC) dcc_error_send_no_route);
-fe-common/irc/dcc/fe-dcc-send.c:171: signal_add("dcc error close not found", (SIGNAL_FUNC) dcc_error_close_not_found);
-fe-common/irc/dcc/fe-dcc-send.c:172: signal_add("complete command dcc send", (SIGNAL_FUNC) sig_dcc_send_complete);
-fe-common/irc/dcc/fe-dcc-send.c:173: signal_add("dcc list print", (SIGNAL_FUNC) sig_dcc_list_print);
-fe-common/irc/dcc/fe-dcc-server.c:72: signal_add("dcc server started", (SIGNAL_FUNC) dcc_server_started);
-fe-common/irc/dcc/fe-dcc-server.c:73: signal_add("dcc closed", (SIGNAL_FUNC) dcc_closed);
-fe-common/irc/dcc/fe-dcc-server.c:74: signal_add("dcc list print", (SIGNAL_FUNC) sig_dcc_list_print);
-fe-common/irc/dcc/fe-dcc.c:164: signal_add("dcc request", (SIGNAL_FUNC) dcc_request);
-fe-common/irc/dcc/fe-dcc.c:165: signal_add("dcc rejected", (SIGNAL_FUNC) dcc_rejected);
-fe-common/irc/dcc/fe-dcc.c:166: signal_add("dcc request send", (SIGNAL_FUNC) dcc_request_send);
-fe-common/irc/dcc/fe-dcc.c:167: signal_add("dcc error connect", (SIGNAL_FUNC) dcc_error_connect);
-fe-common/irc/dcc/fe-dcc.c:168: signal_add("dcc error unknown type", (SIGNAL_FUNC) dcc_error_unknown_type);
-fe-common/irc/fe-ctcp.c:146: signal_add("default ctcp msg", (SIGNAL_FUNC) ctcp_default_msg);
-fe-common/irc/fe-ctcp.c:147: signal_add("ctcp msg ping", (SIGNAL_FUNC) ctcp_ping_msg);
-fe-common/irc/fe-ctcp.c:148: signal_add("ctcp msg version", (SIGNAL_FUNC) ctcp_version_msg);
-fe-common/irc/fe-ctcp.c:149: signal_add("ctcp msg time", (SIGNAL_FUNC) ctcp_time_msg);
-fe-common/irc/fe-ctcp.c:150: signal_add("ctcp msg userinfo", (SIGNAL_FUNC) ctcp_userinfo_msg);
-fe-common/irc/fe-ctcp.c:151: signal_add("ctcp msg clientinfo", (SIGNAL_FUNC) ctcp_clientinfo_msg);
-fe-common/irc/fe-ctcp.c:152: signal_add("default ctcp reply", (SIGNAL_FUNC) ctcp_default_reply);
-fe-common/irc/fe-ctcp.c:153: signal_add("ctcp reply ping", (SIGNAL_FUNC) ctcp_ping_reply);
-fe-common/irc/fe-events-numeric.c:648: signal_add("event 221", (SIGNAL_FUNC) event_user_mode);
-fe-common/irc/fe-events-numeric.c:649: signal_add("event 303", (SIGNAL_FUNC) event_ison);
-fe-common/irc/fe-events-numeric.c:650: signal_add("event 353", (SIGNAL_FUNC) event_names_list);
-fe-common/irc/fe-events-numeric.c:651: signal_add_first("event 366", (SIGNAL_FUNC) event_end_of_names);
-fe-common/irc/fe-events-numeric.c:652: signal_add("event 352", (SIGNAL_FUNC) event_who);
-fe-common/irc/fe-events-numeric.c:653: signal_add("event 315", (SIGNAL_FUNC) event_end_of_who);
-fe-common/irc/fe-events-numeric.c:654: signal_add("event 271", (SIGNAL_FUNC) event_silence_list);
-fe-common/irc/fe-events-numeric.c:655: signal_add("event 272", (SIGNAL_FUNC) sig_empty);
-fe-common/irc/fe-events-numeric.c:656: signal_add("event 281", (SIGNAL_FUNC) event_accept_list);
-fe-common/irc/fe-events-numeric.c:657: signal_add("event 367", (SIGNAL_FUNC) event_ban_list);
-fe-common/irc/fe-events-numeric.c:658: signal_add("event 348", (SIGNAL_FUNC) event_eban_list);
-fe-common/irc/fe-events-numeric.c:659: signal_add("event 346", (SIGNAL_FUNC) event_invite_list);
-fe-common/irc/fe-events-numeric.c:660: signal_add("event 433", (SIGNAL_FUNC) event_nick_in_use);
-fe-common/irc/fe-events-numeric.c:661: signal_add("event 332", (SIGNAL_FUNC) event_topic_get);
-fe-common/irc/fe-events-numeric.c:662: signal_add("event 333", (SIGNAL_FUNC) event_topic_info);
-fe-common/irc/fe-events-numeric.c:663: signal_add("event 324", (SIGNAL_FUNC) event_channel_mode);
-fe-common/irc/fe-events-numeric.c:664: signal_add("event 329", (SIGNAL_FUNC) event_channel_created);
-fe-common/irc/fe-events-numeric.c:665: signal_add("event 306", (SIGNAL_FUNC) event_nowaway);
-fe-common/irc/fe-events-numeric.c:666: signal_add("event 305", (SIGNAL_FUNC) event_unaway);
-fe-common/irc/fe-events-numeric.c:667: signal_add("event 301", (SIGNAL_FUNC) event_away);
-fe-common/irc/fe-events-numeric.c:668: signal_add("event 328", (SIGNAL_FUNC) event_chanserv_url);
-fe-common/irc/fe-events-numeric.c:669: signal_add("event 302", (SIGNAL_FUNC) event_userhost);
-fe-common/irc/fe-events-numeric.c:670: signal_add("event 341", (SIGNAL_FUNC) event_sent_invite);
-fe-common/irc/fe-events-numeric.c:672: signal_add("event 437", (SIGNAL_FUNC) event_target_unavailable);
-fe-common/irc/fe-events-numeric.c:673: signal_add("event 401", (SIGNAL_FUNC) event_no_such_nick);
-fe-common/irc/fe-events-numeric.c:674: signal_add("event 403", (SIGNAL_FUNC) event_no_such_channel);
-fe-common/irc/fe-events-numeric.c:675: signal_add("event 405", (SIGNAL_FUNC) event_too_many_channels);
-fe-common/irc/fe-events-numeric.c:676: signal_add("event 407", (SIGNAL_FUNC) event_duplicate_channel);
-fe-common/irc/fe-events-numeric.c:677: signal_add("event 471", (SIGNAL_FUNC) event_channel_is_full);
-fe-common/irc/fe-events-numeric.c:678: signal_add("event 472", (SIGNAL_FUNC) event_unknown_mode);
-fe-common/irc/fe-events-numeric.c:679: signal_add("event 473", (SIGNAL_FUNC) event_invite_only);
-fe-common/irc/fe-events-numeric.c:680: signal_add("event 474", (SIGNAL_FUNC) event_banned);
-fe-common/irc/fe-events-numeric.c:681: signal_add("event 475", (SIGNAL_FUNC) event_bad_channel_key);
-fe-common/irc/fe-events-numeric.c:682: signal_add("event 476", (SIGNAL_FUNC) event_bad_channel_mask);
-fe-common/irc/fe-events-numeric.c:683: signal_add("event 477", (SIGNAL_FUNC) event_477);
-fe-common/irc/fe-events-numeric.c:684: signal_add("event 375", (SIGNAL_FUNC) event_motd);
-fe-common/irc/fe-events-numeric.c:685: signal_add("event 376", (SIGNAL_FUNC) event_motd);
-fe-common/irc/fe-events-numeric.c:686: signal_add("event 372", (SIGNAL_FUNC) event_motd);
-fe-common/irc/fe-events-numeric.c:687: signal_add("event 422", (SIGNAL_FUNC) event_motd);
-fe-common/irc/fe-events-numeric.c:688: signal_add("event 439", (SIGNAL_FUNC) event_target_too_fast);
-fe-common/irc/fe-events-numeric.c:689: signal_add("event 707", (SIGNAL_FUNC) event_target_too_fast);
-fe-common/irc/fe-events-numeric.c:691: signal_add("default event numeric", (SIGNAL_FUNC) event_numeric);
-fe-common/irc/fe-events-numeric.c:696: signal_add("event 001", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:697: signal_add("event 004", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:698: signal_add("event 005", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:699: signal_add("event 254", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:700: signal_add("event 364", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:701: signal_add("event 365", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:702: signal_add("event 381", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:703: signal_add("event 396", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:704: signal_add("event 421", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:705: signal_add("event 432", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:706: signal_add("event 436", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:707: signal_add("event 438", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:708: signal_add("event 465", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:709: signal_add("event 470", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:710: signal_add("event 479", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events-numeric.c:712: signal_add("event 344", (SIGNAL_FUNC) event_target_received); /* reop list */
-fe-common/irc/fe-events-numeric.c:713: signal_add("event 345", (SIGNAL_FUNC) event_target_received); /* end of reop list */
-fe-common/irc/fe-events-numeric.c:714: signal_add("event 347", (SIGNAL_FUNC) event_target_received); /* end of invite exception list */
-fe-common/irc/fe-events-numeric.c:715: signal_add("event 349", (SIGNAL_FUNC) event_target_received); /* end of ban exception list */
-fe-common/irc/fe-events-numeric.c:716: signal_add("event 368", (SIGNAL_FUNC) event_target_received); /* end of ban list */
-fe-common/irc/fe-events-numeric.c:717: signal_add("event 386", (SIGNAL_FUNC) event_target_received); /* owner list; old rsa challenge (harmless) */
-fe-common/irc/fe-events-numeric.c:718: signal_add("event 387", (SIGNAL_FUNC) event_target_received); /* end of owner list */
-fe-common/irc/fe-events-numeric.c:719: signal_add("event 388", (SIGNAL_FUNC) event_target_received); /* protect list */
-fe-common/irc/fe-events-numeric.c:720: signal_add("event 389", (SIGNAL_FUNC) event_target_received); /* end of protect list */
-fe-common/irc/fe-events-numeric.c:721: signal_add("event 404", (SIGNAL_FUNC) event_target_received); /* cannot send to channel */
-fe-common/irc/fe-events-numeric.c:722: signal_add("event 408", (SIGNAL_FUNC) event_target_received); /* cannot send (+c) */
-fe-common/irc/fe-events-numeric.c:723: signal_add("event 442", (SIGNAL_FUNC) event_target_received); /* you're not on that channel */
-fe-common/irc/fe-events-numeric.c:724: signal_add("event 478", (SIGNAL_FUNC) event_target_received); /* ban list is full */
-fe-common/irc/fe-events-numeric.c:725: signal_add("event 482", (SIGNAL_FUNC) event_target_received); /* not chanop */
-fe-common/irc/fe-events-numeric.c:726: signal_add("event 486", (SIGNAL_FUNC) event_target_received); /* cannot /msg (+R) */
-fe-common/irc/fe-events-numeric.c:727: signal_add("event 489", (SIGNAL_FUNC) event_target_received); /* not chanop or voice */
-fe-common/irc/fe-events-numeric.c:728: signal_add("event 494", (SIGNAL_FUNC) event_target_received); /* cannot /msg (own +R) */
-fe-common/irc/fe-events-numeric.c:729: signal_add("event 506", (SIGNAL_FUNC) event_target_received); /* cannot send (+R) */
-fe-common/irc/fe-events-numeric.c:730: signal_add("event 716", (SIGNAL_FUNC) event_target_received); /* cannot /msg (+g) */
-fe-common/irc/fe-events-numeric.c:731: signal_add("event 717", (SIGNAL_FUNC) event_target_received); /* +g notified */
-fe-common/irc/fe-events-numeric.c:732: signal_add("event 728", (SIGNAL_FUNC) event_target_received); /* quiet (or other) list */
-fe-common/irc/fe-events-numeric.c:733: signal_add("event 729", (SIGNAL_FUNC) event_target_received); /* end of quiet (or other) list */
-fe-common/irc/fe-events.c:435: signal_add("event privmsg", (SIGNAL_FUNC) event_privmsg);
-fe-common/irc/fe-events.c:436: signal_add("ctcp action", (SIGNAL_FUNC) ctcp_action);
-fe-common/irc/fe-events.c:437: signal_add("event notice", (SIGNAL_FUNC) event_notice);
-fe-common/irc/fe-events.c:438: signal_add("event join", (SIGNAL_FUNC) event_join);
-fe-common/irc/fe-events.c:439: signal_add("event part", (SIGNAL_FUNC) event_part);
-fe-common/irc/fe-events.c:440: signal_add("event quit", (SIGNAL_FUNC) event_quit);
-fe-common/irc/fe-events.c:441: signal_add("event kick", (SIGNAL_FUNC) event_kick);
-fe-common/irc/fe-events.c:442: signal_add("event kill", (SIGNAL_FUNC) event_kill);
-fe-common/irc/fe-events.c:443: signal_add("event nick", (SIGNAL_FUNC) event_nick);
-fe-common/irc/fe-events.c:444: signal_add("event mode", (SIGNAL_FUNC) event_mode);
-fe-common/irc/fe-events.c:445: signal_add("event pong", (SIGNAL_FUNC) event_pong);
-fe-common/irc/fe-events.c:446: signal_add("event invite", (SIGNAL_FUNC) event_invite);
-fe-common/irc/fe-events.c:447: signal_add("event topic", (SIGNAL_FUNC) event_topic);
-fe-common/irc/fe-events.c:448: signal_add("event error", (SIGNAL_FUNC) event_error);
-fe-common/irc/fe-events.c:449: signal_add("event wallops", (SIGNAL_FUNC) event_wallops);
-fe-common/irc/fe-events.c:450: signal_add("event silence", (SIGNAL_FUNC) event_silence);
-fe-common/irc/fe-events.c:452: signal_add("default event", (SIGNAL_FUNC) event_received);
-fe-common/irc/fe-events.c:454: signal_add("channel sync", (SIGNAL_FUNC) channel_sync);
-fe-common/irc/fe-events.c:455: signal_add("event connected", (SIGNAL_FUNC) event_connected);
-fe-common/irc/fe-events.c:456: signal_add("nickfind event whois", (SIGNAL_FUNC) event_nickfind_whois);
-fe-common/irc/fe-events.c:457: signal_add("ban type changed", (SIGNAL_FUNC) event_ban_type_changed);
-fe-common/irc/fe-events.c:458: signal_add("whois event not found", (SIGNAL_FUNC) sig_whois_event_not_found);
-fe-common/irc/fe-events.c:459: signal_add("whowas event end", (SIGNAL_FUNC) sig_whowas_event_end);
-fe-common/irc/fe-irc-channels.c:61: signal_add("channel rejoin new", (SIGNAL_FUNC) sig_channel_rejoin);
-fe-common/irc/fe-irc-channels.c:62: signal_add_first("event 470", (SIGNAL_FUNC) sig_event_forward);
-fe-common/irc/fe-irc-messages.c:271: signal_add_last("message own_public", (SIGNAL_FUNC) sig_message_own_public);
-fe-common/irc/fe-irc-messages.c:272: signal_add_last("message irc op_public", (SIGNAL_FUNC) sig_message_irc_op_public);
-fe-common/irc/fe-irc-messages.c:273: signal_add_last("message irc own_wall", (SIGNAL_FUNC) sig_message_own_wall);
-fe-common/irc/fe-irc-messages.c:274: signal_add_last("message irc own_action", (SIGNAL_FUNC) sig_message_own_action);
-fe-common/irc/fe-irc-messages.c:275: signal_add_last("message irc action", (SIGNAL_FUNC) sig_message_irc_action);
-fe-common/irc/fe-irc-messages.c:276: signal_add_last("message irc own_notice", (SIGNAL_FUNC) sig_message_own_notice);
-fe-common/irc/fe-irc-messages.c:277: signal_add_last("message irc notice", (SIGNAL_FUNC) sig_message_irc_notice);
-fe-common/irc/fe-irc-messages.c:278: signal_add_last("message irc own_ctcp", (SIGNAL_FUNC) sig_message_own_ctcp);
-fe-common/irc/fe-irc-messages.c:279: signal_add_last("message irc ctcp", (SIGNAL_FUNC) sig_message_irc_ctcp);
-fe-common/irc/fe-irc-queries.c:88: signal_add_first("event privmsg", (SIGNAL_FUNC) event_privmsg);
-fe-common/irc/fe-irc-server.c:145: signal_add("server add fill", (SIGNAL_FUNC) sig_server_add_fill);
-fe-common/irc/fe-modes.c:135: signal_add("print starting", (SIGNAL_FUNC) sig_print_starting);
-fe-common/irc/fe-modes.c:218: signal_add("message irc mode", (SIGNAL_FUNC) sig_message_mode);
-fe-common/irc/fe-modes.c:219: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/irc/fe-netjoin.c:349: signal_add("print starting", (SIGNAL_FUNC) sig_print_starting);
-fe-common/irc/fe-netjoin.c:454: signal_add("message quit", (SIGNAL_FUNC) msg_quit);
-fe-common/irc/fe-netjoin.c:455: signal_add("message join", (SIGNAL_FUNC) msg_join);
-fe-common/irc/fe-netjoin.c:456: signal_add("message irc mode", (SIGNAL_FUNC) msg_mode);
-fe-common/irc/fe-netjoin.c:469: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/irc/fe-netsplit.c:289: signal_add("print starting", (SIGNAL_FUNC) sig_print_starting);
-fe-common/irc/fe-netsplit.c:361: signal_add("netsplit new", (SIGNAL_FUNC) sig_netsplit_servers);
-fe-common/irc/fe-netsplit.c:362: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-common/irc/fe-whois.c:410: signal_add("event 311", (SIGNAL_FUNC) event_whois);
-fe-common/irc/fe-whois.c:411: signal_add("event 312", (SIGNAL_FUNC) event_whois_server);
-fe-common/irc/fe-whois.c:414: signal_add("event 317", (SIGNAL_FUNC) event_whois_idle);
-fe-common/irc/fe-whois.c:415: signal_add("event 319", (SIGNAL_FUNC) event_whois_channels);
-fe-common/irc/fe-whois.c:416: signal_add("event 313", (SIGNAL_FUNC) event_whois_oper);
-fe-common/irc/fe-whois.c:417: signal_add("event 330", (SIGNAL_FUNC) event_whois_auth);
-fe-common/irc/fe-whois.c:418: signal_add("event 377", (SIGNAL_FUNC) event_whois_usermode);
-fe-common/irc/fe-whois.c:419: signal_add("event 378", (SIGNAL_FUNC) event_whois_realhost);
-fe-common/irc/fe-whois.c:420: signal_add("event 379", (SIGNAL_FUNC) event_whois_modes);
-fe-common/irc/fe-whois.c:421: signal_add("event 327", (SIGNAL_FUNC) event_whois_realhost327);
-fe-common/irc/fe-whois.c:422: signal_add("event 326", (SIGNAL_FUNC) event_whois_usermode326);
-fe-common/irc/fe-whois.c:423: signal_add("event 338", (SIGNAL_FUNC) event_whois_realhost338);
-fe-common/irc/fe-whois.c:424: signal_add("whois away", (SIGNAL_FUNC) event_whois_away);
-fe-common/irc/fe-whois.c:425: signal_add("whois oper", (SIGNAL_FUNC) event_whois_oper);
-fe-common/irc/fe-whois.c:426: signal_add("whowas away", (SIGNAL_FUNC) event_whois_away);
-fe-common/irc/fe-whois.c:427: signal_add("whois default event", (SIGNAL_FUNC) event_whois_default);
-fe-common/irc/fe-whois.c:428: signal_add("event 318", (SIGNAL_FUNC) event_end_of_whois);
-fe-common/irc/fe-whois.c:429: signal_add("event 314", (SIGNAL_FUNC) event_whowas);
-fe-common/irc/fe-whois.c:430: signal_add("event 369", (SIGNAL_FUNC) event_end_of_whowas);
-fe-common/irc/irc-completion.c:35: signal_add("complete command stats", (SIGNAL_FUNC) sig_complete_stats);
-fe-common/irc/notifylist/fe-notifylist.c:230: signal_add("notifylist joined", (SIGNAL_FUNC) notifylist_joined);
-fe-common/irc/notifylist/fe-notifylist.c:231: signal_add("notifylist left", (SIGNAL_FUNC) notifylist_left);
-fe-common/irc/notifylist/fe-notifylist.c:232: signal_add("notifylist away changed", (SIGNAL_FUNC) notifylist_away);
-fe-none/irssi.c:60: signal_add("reload", (SIGNAL_FUNC) sig_reload);
-fe-none/irssi.c:61: signal_add("gui exit", (SIGNAL_FUNC) sig_exit);
-fe-text/gui-printtext.c:252: signal_add("gui print text", (SIGNAL_FUNC) sig_gui_print_text);
-fe-text/gui-printtext.c:253: signal_add("gui print text finished", (SIGNAL_FUNC) sig_gui_printtext_finished);
-fe-text/gui-printtext.c:254: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-text/gui-readline.c:1106: signal_add("window changed automatic", (SIGNAL_FUNC) sig_window_auto_changed);
-fe-text/gui-readline.c:1107: signal_add("gui entry redirect", (SIGNAL_FUNC) sig_gui_entry_redirect);
-fe-text/gui-readline.c:1108: signal_add("gui key pressed", (SIGNAL_FUNC) sig_gui_key_pressed);
-fe-text/gui-readline.c:1109: signal_add("setup changed", (SIGNAL_FUNC) setup_changed);
-fe-text/gui-windows.c:289: signal_add("gui window create override", (SIGNAL_FUNC) sig_window_create_override);
-fe-text/gui-windows.c:290: signal_add("window created", (SIGNAL_FUNC) gui_window_created);
-fe-text/gui-windows.c:291: signal_add("window destroyed", (SIGNAL_FUNC) gui_window_destroyed);
-fe-text/gui-windows.c:292: signal_add_first("window changed", (SIGNAL_FUNC) signal_window_changed);
-fe-text/gui-windows.c:293: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-text/irssi.c:156: signal_add_last("gui exit", (SIGNAL_FUNC) sig_exit);
-fe-text/mainwindow-activity.c:49: signal_add_first("window hilight", (SIGNAL_FUNC) sig_activity);
-fe-text/mainwindow-activity.c:50: signal_add_first("window activity", (SIGNAL_FUNC) sig_activity);
-fe-text/mainwindows-layout.c:215: signal_add("layout save window", (SIGNAL_FUNC) sig_layout_window_save);
-fe-text/mainwindows-layout.c:216: signal_add("layout restore window", (SIGNAL_FUNC) sig_layout_window_restore);
-fe-text/mainwindows-layout.c:217: signal_add("layout save", (SIGNAL_FUNC) sig_layout_save);
-fe-text/mainwindows-layout.c:218: signal_add_first("layout restore", (SIGNAL_FUNC) sig_layout_restore);
-fe-text/mainwindows-layout.c:219: signal_add("layout reset", (SIGNAL_FUNC) sig_layout_reset);
-fe-text/mainwindows.c:1080: signal_add("window print info", (SIGNAL_FUNC) sig_window_print_info);
-fe-text/statusbar-config.c:569: signal_add_last("setup reread", (SIGNAL_FUNC) read_statusbar_config);
-fe-text/statusbar-config.c:570: signal_add("theme changed", (SIGNAL_FUNC) read_statusbar_config);
-fe-text/statusbar-items.c:452: signal_add("window activity", (SIGNAL_FUNC) sig_statusbar_activity_hilight);
-fe-text/statusbar-items.c:453: signal_add("window destroyed", (SIGNAL_FUNC) sig_statusbar_activity_window_destroyed);
-fe-text/statusbar-items.c:454: signal_add("window refnum changed", (SIGNAL_FUNC) sig_statusbar_activity_updated);
-fe-text/statusbar-items.c:458: signal_add("gui page scrolled", (SIGNAL_FUNC) sig_statusbar_more_updated);
-fe-text/statusbar-items.c:459: signal_add("window changed", (SIGNAL_FUNC) sig_statusbar_more_updated);
-fe-text/statusbar-items.c:460: signal_add_last("gui print text finished", (SIGNAL_FUNC) sig_statusbar_more_updated);
-fe-text/statusbar-items.c:461: signal_add_last("command clear", (SIGNAL_FUNC) sig_statusbar_more_updated);
-fe-text/statusbar-items.c:462: signal_add_last("command scrollback", (SIGNAL_FUNC) sig_statusbar_more_updated);
-fe-text/statusbar-items.c:466: signal_add("server lag", (SIGNAL_FUNC) sig_server_lag_updated);
-fe-text/statusbar-items.c:467: signal_add("window changed", (SIGNAL_FUNC) lag_check_update);
-fe-text/statusbar-items.c:468: signal_add("window server changed", (SIGNAL_FUNC) lag_check_update);
-fe-text/statusbar-items.c:476: signal_add_last("setup changed", (SIGNAL_FUNC) read_settings);
-fe-text/statusbar.c:505: signal_add("terminal resized", (SIGNAL_FUNC) sig_terminal_resized);
-fe-text/statusbar.c:506: signal_add("mainwindow resized", (SIGNAL_FUNC) sig_mainwindow_resized);
-fe-text/statusbar.c:507: signal_add("mainwindow moved", (SIGNAL_FUNC) sig_mainwindow_resized);
-fe-text/statusbar.c:855: signal_add_full_id(MODULE_NAME,
-fe-text/statusbar.c:1120: signal_add("terminal resized", (SIGNAL_FUNC) sig_terminal_resized);
-fe-text/statusbar.c:1121: signal_add("mainwindow resized", (SIGNAL_FUNC) sig_mainwindow_resized);
-fe-text/statusbar.c:1122: signal_add("mainwindow moved", (SIGNAL_FUNC) sig_mainwindow_resized);
-fe-text/statusbar.c:1123: signal_add("gui window created", (SIGNAL_FUNC) sig_gui_window_created);
-fe-text/statusbar.c:1124: signal_add("window changed", (SIGNAL_FUNC) sig_window_changed);
-fe-text/statusbar.c:1125: signal_add("mainwindow destroyed", (SIGNAL_FUNC) sig_mainwindow_destroyed);
-fe-text/term-dummy.c:87: signal_add("gui print text", (SIGNAL_FUNC) sig_gui_printtext);
-fe-text/term-dummy.c:88: signal_add("gui print text finished", (SIGNAL_FUNC) sig_gui_printtext_finished);
-fe-text/term-dummy.c:89: signal_add("window created", (SIGNAL_FUNC) sig_window_created);
-fe-text/term.c:159: signal_add("beep", (SIGNAL_FUNC) term_beep);
-fe-text/term.c:160: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-fe-text/textbuffer-commands.c:373: signal_add("away mode changed", (SIGNAL_FUNC) sig_away_changed);
-irc/core/bans.c:348: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-irc/core/channel-events.c:363: signal_add_last("server event", (SIGNAL_FUNC) irc_server_event);
-irc/core/channel-events.c:364: signal_add_first("event 403", (SIGNAL_FUNC) event_no_such_channel); /* no such channel */
-irc/core/channel-events.c:365: signal_add_first("event 407", (SIGNAL_FUNC) event_duplicate_channel); /* duplicate channel */
-irc/core/channel-events.c:367: signal_add("event topic", (SIGNAL_FUNC) event_topic);
-irc/core/channel-events.c:368: signal_add_first("event join", (SIGNAL_FUNC) event_join);
-irc/core/channel-events.c:369: signal_add("event part", (SIGNAL_FUNC) event_part);
-irc/core/channel-events.c:370: signal_add("event kick", (SIGNAL_FUNC) event_kick);
-irc/core/channel-events.c:371: signal_add("event invite", (SIGNAL_FUNC) event_invite);
-irc/core/channel-events.c:372: signal_add("event 332", (SIGNAL_FUNC) event_topic_get);
-irc/core/channel-events.c:373: signal_add("event 333", (SIGNAL_FUNC) event_topic_info);
-irc/core/channel-rejoin.c:269: signal_add_first("event 407", (SIGNAL_FUNC) event_duplicate_channel);
-irc/core/channel-rejoin.c:270: signal_add_first("event 437", (SIGNAL_FUNC) event_target_unavailable);
-irc/core/channel-rejoin.c:271: signal_add_first("channel joined", (SIGNAL_FUNC) sig_remove_rejoin);
-irc/core/channel-rejoin.c:272: signal_add_first("channel destroyed", (SIGNAL_FUNC) sig_remove_rejoin);
-irc/core/channel-rejoin.c:273: signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
-irc/core/channels-query.c:490: signal_add("server connected", (SIGNAL_FUNC) sig_connected);
-irc/core/channels-query.c:491: signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
-irc/core/channels-query.c:492: signal_add("channel joined", (SIGNAL_FUNC) sig_channel_joined);
-irc/core/channels-query.c:493: signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
-irc/core/channels-query.c:495: signal_add("chanquery mode", (SIGNAL_FUNC) event_channel_mode);
-irc/core/channels-query.c:496: signal_add("chanquery who end", (SIGNAL_FUNC) event_end_of_who);
-irc/core/channels-query.c:498: signal_add("chanquery ban end", (SIGNAL_FUNC) event_end_of_banlist);
-irc/core/channels-query.c:499: signal_add("chanquery abort", (SIGNAL_FUNC) query_current_error);
-irc/core/ctcp.c:335: signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
-irc/core/ctcp.c:336: signal_add_first("event privmsg", (SIGNAL_FUNC) event_privmsg);
-irc/core/ctcp.c:337: signal_add_first("event notice", (SIGNAL_FUNC) event_notice);
-irc/core/ctcp.c:338: signal_add("ctcp msg", (SIGNAL_FUNC) ctcp_msg);
-irc/core/ctcp.c:339: signal_add("ctcp reply", (SIGNAL_FUNC) ctcp_reply);
-irc/core/ctcp.c:340: signal_add("ctcp msg ping", (SIGNAL_FUNC) ctcp_ping);
-irc/core/ctcp.c:341: signal_add("ctcp msg version", (SIGNAL_FUNC) ctcp_version);
-irc/core/ctcp.c:342: signal_add("ctcp msg time", (SIGNAL_FUNC) ctcp_time);
-irc/core/ctcp.c:343: signal_add("ctcp msg userinfo", (SIGNAL_FUNC) ctcp_userinfo);
-irc/core/ctcp.c:344: signal_add("ctcp msg clientinfo", (SIGNAL_FUNC) ctcp_clientinfo);
-irc/core/irc-channels-setup.c:27: signal_add("channel wholist", (SIGNAL_FUNC) channel_send_autocommands);
-irc/core/irc-channels.c:231: signal_add_first("server connected", (SIGNAL_FUNC) sig_server_connected);
-irc/core/irc-channels.c:232: signal_add("channel created", (SIGNAL_FUNC) sig_channel_created);
-irc/core/irc-channels.c:233: signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
-irc/core/irc-chatnets.c:87: signal_add("chatnet read", (SIGNAL_FUNC) sig_chatnet_read);
-irc/core/irc-chatnets.c:88: signal_add("chatnet saved", (SIGNAL_FUNC) sig_chatnet_saved);
-irc/core/irc-chatnets.c:89: signal_add("chatnet destroyed", (SIGNAL_FUNC) sig_chatnet_destroyed);
-irc/core/irc-commands.c:1036: signal_add("channel destroyed", (SIGNAL_FUNC) sig_channel_destroyed);
-irc/core/irc-commands.c:1037: signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
-irc/core/irc-commands.c:1038: signal_add("whois try whowas", (SIGNAL_FUNC) sig_whois_try_whowas);
-irc/core/irc-commands.c:1039: signal_add("whois event", (SIGNAL_FUNC) event_whois);
-irc/core/irc-commands.c:1040: signal_add("whois end", (SIGNAL_FUNC) event_end_of_whois);
-irc/core/irc-commands.c:1041: signal_add("whowas event", (SIGNAL_FUNC) event_whowas);
-irc/core/irc-expandos.c:154: signal_add("event join", (SIGNAL_FUNC) event_join);
-irc/core/irc-nicklist.c:465: signal_add_first("event nick", (SIGNAL_FUNC) event_nick);
-irc/core/irc-nicklist.c:466: signal_add_first("event 352", (SIGNAL_FUNC) event_who);
-irc/core/irc-nicklist.c:467: signal_add("silent event who", (SIGNAL_FUNC) event_who);
-irc/core/irc-nicklist.c:468: signal_add("silent event whois", (SIGNAL_FUNC) event_whois);
-irc/core/irc-nicklist.c:469: signal_add_first("event 311", (SIGNAL_FUNC) event_whois);
-irc/core/irc-nicklist.c:470: signal_add_first("whois away", (SIGNAL_FUNC) event_whois_away);
-irc/core/irc-nicklist.c:471: signal_add_first("whois oper", (SIGNAL_FUNC) event_whois_ircop);
-irc/core/irc-nicklist.c:472: signal_add_first("event 306", (SIGNAL_FUNC) event_own_away);
-irc/core/irc-nicklist.c:473: signal_add_first("event 305", (SIGNAL_FUNC) event_own_unaway);
-irc/core/irc-nicklist.c:474: signal_add_first("event 353", (SIGNAL_FUNC) event_names_list);
-irc/core/irc-nicklist.c:475: signal_add_first("event 366", (SIGNAL_FUNC) event_end_of_names);
-irc/core/irc-nicklist.c:476: signal_add_first("event 432", (SIGNAL_FUNC) event_nick_invalid);
-irc/core/irc-nicklist.c:477: signal_add_first("event 433", (SIGNAL_FUNC) event_nick_in_use);
-irc/core/irc-nicklist.c:478: signal_add_first("event 437", (SIGNAL_FUNC) event_target_unavailable);
-irc/core/irc-nicklist.c:479: signal_add_first("event 302", (SIGNAL_FUNC) event_userhost);
-irc/core/irc-nicklist.c:480: signal_add("userhost event", (SIGNAL_FUNC) event_userhost);
-irc/core/irc-nicklist.c:481: signal_add("user mode changed", (SIGNAL_FUNC) sig_usermode);
-irc/core/irc-nicklist.c:482: signal_add("server connected", (SIGNAL_FUNC) sig_connected);
-irc/core/irc-queries.c:120: signal_add_last("event privmsg", (SIGNAL_FUNC) event_privmsg);
-irc/core/irc-queries.c:121: signal_add_last("ctcp action", (SIGNAL_FUNC) ctcp_action);
-irc/core/irc-queries.c:122: signal_add("event nick", (SIGNAL_FUNC) event_nick);
-irc/core/irc-servers-reconnect.c:107: signal_add("server connect copy", (SIGNAL_FUNC) sig_server_connect_copy);
-irc/core/irc-servers-reconnect.c:108: signal_add("server reconnect save status", (SIGNAL_FUNC) sig_server_reconnect_save_status);
-irc/core/irc-servers-reconnect.c:109: signal_add("event connected", (SIGNAL_FUNC) sig_connected);
-irc/core/irc-servers-reconnect.c:110: signal_add("event 436", (SIGNAL_FUNC) event_nick_collision);
-irc/core/irc-servers-reconnect.c:111: signal_add("event kill", (SIGNAL_FUNC) event_kill);
-irc/core/irc-servers-setup.c:157: signal_add("server setup fill reconn", (SIGNAL_FUNC) sig_server_setup_fill_reconn);
-irc/core/irc-servers-setup.c:158: signal_add("server setup fill connect", (SIGNAL_FUNC) sig_server_setup_fill_connect);
-irc/core/irc-servers-setup.c:159: signal_add("server setup fill chatnet", (SIGNAL_FUNC) sig_server_setup_fill_chatnet);
-irc/core/irc-servers-setup.c:160: signal_add("server setup read", (SIGNAL_FUNC) sig_server_setup_read);
-irc/core/irc-servers-setup.c:161: signal_add("server setup saved", (SIGNAL_FUNC) sig_server_setup_saved);
-irc/core/irc-servers.c:873: signal_add_first("server connected", (SIGNAL_FUNC) sig_connected);
-irc/core/irc-servers.c:874: signal_add_last("server disconnected", (SIGNAL_FUNC) sig_disconnected);
-irc/core/irc-servers.c:875: signal_add_last("server quit", (SIGNAL_FUNC) sig_server_quit);
-irc/core/irc-servers.c:876: signal_add("event 001", (SIGNAL_FUNC) event_connected);
-irc/core/irc-servers.c:877: signal_add("event 004", (SIGNAL_FUNC) event_server_info);
-irc/core/irc-servers.c:878: signal_add("event 005", (SIGNAL_FUNC) event_isupport);
-irc/core/irc-servers.c:879: signal_add("event 375", (SIGNAL_FUNC) event_motd);
-irc/core/irc-servers.c:880: signal_add_last("event 376", (SIGNAL_FUNC) event_end_of_motd);
-irc/core/irc-servers.c:881: signal_add_last("event 422", (SIGNAL_FUNC) event_end_of_motd); /* no motd */
-irc/core/irc-servers.c:882: signal_add("event 254", (SIGNAL_FUNC) event_channels_formed);
-irc/core/irc-servers.c:883: signal_add("event 396", (SIGNAL_FUNC) event_hosthidden);
-irc/core/irc-servers.c:884: signal_add("event 465", (SIGNAL_FUNC) event_server_banned);
-irc/core/irc-servers.c:885: signal_add("event error", (SIGNAL_FUNC) event_error);
-irc/core/irc-servers.c:886: signal_add("event ping", (SIGNAL_FUNC) event_ping);
-irc/core/irc-servers.c:887: signal_add("event empty", (SIGNAL_FUNC) event_empty);
-irc/core/irc-session.c:191: signal_add("session save server", (SIGNAL_FUNC) sig_session_save_server);
-irc/core/irc-session.c:192: signal_add("session restore server", (SIGNAL_FUNC) sig_session_restore_server);
-irc/core/irc-session.c:193: signal_add("session restore nick", (SIGNAL_FUNC) sig_session_restore_nick);
-irc/core/irc-session.c:195: signal_add("server connected", (SIGNAL_FUNC) sig_connected);
-irc/core/irc.c:409: signal_add("server event", (SIGNAL_FUNC) irc_server_event);
-irc/core/irc.c:410: signal_add("server connected", (SIGNAL_FUNC) irc_init_server);
-irc/core/irc.c:411: signal_add("server incoming", (SIGNAL_FUNC) irc_parse_incoming_line);
-irc/core/lag.c:129: signal_add_first("lag pong", (SIGNAL_FUNC) lag_event_pong);
-irc/core/lag.c:130: signal_add("lag ping error", (SIGNAL_FUNC) lag_ping_error);
-irc/core/lag.c:131: signal_add("event 421", (SIGNAL_FUNC) sig_unknown_command);
-irc/core/massjoin.c:282: signal_add_first("event join", (SIGNAL_FUNC) event_join);
-irc/core/massjoin.c:283: signal_add("event part", (SIGNAL_FUNC) event_part);
-irc/core/massjoin.c:284: signal_add("event kick", (SIGNAL_FUNC) event_kick);
-irc/core/massjoin.c:285: signal_add("event quit", (SIGNAL_FUNC) event_quit);
-irc/core/massjoin.c:286: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-irc/core/mode-lists.c:132: signal_add("channel destroyed", (SIGNAL_FUNC) channel_destroyed);
-irc/core/mode-lists.c:134: signal_add("chanquery ban", (SIGNAL_FUNC) event_banlist);
-irc/core/modes.c:901: signal_add("event 221", (SIGNAL_FUNC) event_user_mode);
-irc/core/modes.c:902: signal_add("event 305", (SIGNAL_FUNC) event_unaway);
-irc/core/modes.c:903: signal_add("event 306", (SIGNAL_FUNC) event_away);
-irc/core/modes.c:904: signal_add("event 381", (SIGNAL_FUNC) event_oper);
-irc/core/modes.c:905: signal_add("event mode", (SIGNAL_FUNC) event_mode);
-irc/core/modes.c:906: signal_add("requested usermode change", (SIGNAL_FUNC) sig_req_usermode_change);
-irc/core/netsplit.c:422: signal_add_first("event join", (SIGNAL_FUNC) event_join);
-irc/core/netsplit.c:423: signal_add_last("event join", (SIGNAL_FUNC) event_join_last);
-irc/core/netsplit.c:424: signal_add_first("event quit", (SIGNAL_FUNC) event_quit);
-irc/core/netsplit.c:425: signal_add("event nick", (SIGNAL_FUNC) event_nick);
-irc/core/netsplit.c:426: signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
-irc/core/servers-idle.c:257: signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
-irc/core/servers-redirect.c:762: signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
-irc/dcc/dcc-autoget.c:88: signal_add_last("dcc request", (SIGNAL_FUNC) sig_dcc_request);
-irc/dcc/dcc-chat.c:825: signal_add("dcc destroyed", (SIGNAL_FUNC) sig_dcc_destroyed);
-irc/dcc/dcc-chat.c:826: signal_add("ctcp msg dcc chat", (SIGNAL_FUNC) ctcp_msg_dcc_chat);
-irc/dcc/dcc-chat.c:827: signal_add_first("dcc chat message", (SIGNAL_FUNC) dcc_chat_msg);
-irc/dcc/dcc-chat.c:828: signal_add("dcc ctcp dcc", (SIGNAL_FUNC) dcc_ctcp_redirect);
-irc/dcc/dcc-chat.c:829: signal_add("dcc reply dcc", (SIGNAL_FUNC) dcc_ctcp_reply_redirect);
-irc/dcc/dcc-chat.c:830: signal_add("ctcp reply dcc reject", (SIGNAL_FUNC) ctcp_reply_dcc_reject);
-irc/dcc/dcc-chat.c:831: signal_add("event nick", (SIGNAL_FUNC) event_nick);
-irc/dcc/dcc-get.c:582: signal_add("dcc destroyed", (SIGNAL_FUNC) sig_dcc_destroyed);
-irc/dcc/dcc-get.c:583: signal_add("ctcp msg dcc send", (SIGNAL_FUNC) ctcp_msg_dcc_send);
-irc/dcc/dcc-queue.c:213: signal_add("dcc destroyed", (SIGNAL_FUNC) sig_dcc_destroyed);
-irc/dcc/dcc-resume.c:233: signal_add("ctcp msg dcc resume", (SIGNAL_FUNC) ctcp_msg_dcc_resume);
-irc/dcc/dcc-resume.c:234: signal_add("ctcp msg dcc accept", (SIGNAL_FUNC) ctcp_msg_dcc_accept);
-irc/dcc/dcc-send.c:469: signal_add("dcc destroyed", (SIGNAL_FUNC) sig_dcc_destroyed);
-irc/dcc/dcc-send.c:470: signal_add("dcc reply send pasv", (SIGNAL_FUNC) dcc_send_connect);
-irc/dcc/dcc-server.c:401: signal_add("dcc destroyed", (SIGNAL_FUNC) sig_dcc_destroyed);
-irc/dcc/dcc-server.c:402: signal_add_first("dcc server message", (SIGNAL_FUNC) dcc_server_msg);
-irc/dcc/dcc.c:547: signal_add("event connected", (SIGNAL_FUNC) sig_connected);
-irc/dcc/dcc.c:548: signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
-irc/dcc/dcc.c:549: signal_add("server nick changed", (SIGNAL_FUNC) sig_server_nick_changed);
-irc/dcc/dcc.c:550: signal_add("ctcp msg", (SIGNAL_FUNC) ctcp_msg);
-irc/dcc/dcc.c:551: signal_add("ctcp reply", (SIGNAL_FUNC) ctcp_reply);
-irc/dcc/dcc.c:552: signal_add("ctcp msg dcc", (SIGNAL_FUNC) ctcp_msg_dcc);
-irc/dcc/dcc.c:553: signal_add("ctcp reply dcc", (SIGNAL_FUNC) ctcp_reply_dcc);
-irc/dcc/dcc.c:554: signal_add("ctcp reply dcc reject", (SIGNAL_FUNC) ctcp_reply_dcc_reject);
-irc/dcc/dcc.c:555: signal_add("event 401", (SIGNAL_FUNC) event_no_such_nick);
-irc/flood/autoignore.c:83: signal_add("flood", (SIGNAL_FUNC) sig_flood);
-irc/flood/flood.c:304: signal_add("event privmsg", (SIGNAL_FUNC) flood_privmsg);
-irc/flood/flood.c:305: signal_add("event notice", (SIGNAL_FUNC) flood_notice);
-irc/flood/flood.c:306: signal_add("ctcp msg", (SIGNAL_FUNC) flood_ctcp);
-irc/flood/flood.c:325: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-irc/flood/flood.c:326: signal_add_first("server connected", (SIGNAL_FUNC) flood_init_server);
-irc/flood/flood.c:327: signal_add("server disconnected", (SIGNAL_FUNC) flood_deinit_server);
-irc/notifylist/notify-ison.c:332: signal_add("notifylist event", (SIGNAL_FUNC) event_ison);
-irc/notifylist/notify-ison.c:333: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-irc/notifylist/notify-whois.c:138: signal_add("notifylist event whois", (SIGNAL_FUNC) event_whois);
-irc/notifylist/notify-whois.c:139: signal_add("notifylist event whois away", (SIGNAL_FUNC) event_whois_away);
-irc/notifylist/notify-whois.c:140: signal_add("notifylist event whois end", (SIGNAL_FUNC) event_whois_end);
-irc/notifylist/notifylist.c:333: signal_add("server connected", (SIGNAL_FUNC) notifylist_init_server);
-irc/notifylist/notifylist.c:334: signal_add("server disconnected", (SIGNAL_FUNC) notifylist_deinit_server);
-irc/notifylist/notifylist.c:335: signal_add("event quit", (SIGNAL_FUNC) event_quit);
-irc/notifylist/notifylist.c:336: signal_add("event privmsg", (SIGNAL_FUNC) event_privmsg);
-irc/notifylist/notifylist.c:337: signal_add("event join", (SIGNAL_FUNC) event_join);
-irc/notifylist/notifylist.c:338: signal_add("channel wholist", (SIGNAL_FUNC) sig_channel_wholist);
-irc/notifylist/notifylist.c:339: signal_add("setup reread", (SIGNAL_FUNC) notifylist_read_config);
-irc/proxy/listen.c:684: signal_add("server incoming", (SIGNAL_FUNC) sig_incoming);
-irc/proxy/listen.c:685: signal_add("server event", (SIGNAL_FUNC) sig_server_event);
-irc/proxy/listen.c:686: signal_add("event connected", (SIGNAL_FUNC) event_connected);
-irc/proxy/listen.c:687: signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
-irc/proxy/listen.c:688: signal_add_first("event nick", (SIGNAL_FUNC) event_nick);
-irc/proxy/listen.c:689: signal_add("message own_public", (SIGNAL_FUNC) sig_message_own_public);
-irc/proxy/listen.c:690: signal_add("message own_private", (SIGNAL_FUNC) sig_message_own_private);
-irc/proxy/listen.c:691: signal_add("message irc own_action", (SIGNAL_FUNC) sig_message_own_action);
-irc/proxy/listen.c:692: signal_add("setup changed", (SIGNAL_FUNC) read_settings);
-irc/proxy/listen.c:694: signal_add("proxy client dump", (SIGNAL_FUNC) sig_dump);
-perl/common/Core.c:19:static void perl_signal_add_hash(int priority, SV *sv)
-perl/common/Core.c:26: croak("Usage: Irssi::signal_add(hash)");
-perl/common/Core.c:31: perl_signal_add_full(hv_iterkey(he, &len), HeVAL(he), priority);
-perl/common/Core.c:200:XS(XS_Irssi_signal_add); /* prototype to pass -Wmissing-prototypes */
-perl/common/Core.c:201:XS(XS_Irssi_signal_add)
-perl/common/Core.c:212: croak("Usage: Irssi::signal_add(signal, func)");
-perl/common/Core.c:214: perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
-perl/common/Core.c:217: perl_signal_add_hash(SIGNAL_PRIORITY_DEFAULT, ST(0));
-perl/common/Core.c:224:XS(XS_Irssi_signal_add_first); /* prototype to pass -Wmissing-prototypes */
-perl/common/Core.c:225:XS(XS_Irssi_signal_add_first)
-perl/common/Core.c:236: croak("Usage: Irssi::signal_add_first(signal, func)");
-perl/common/Core.c:238: perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
-perl/common/Core.c:241: perl_signal_add_hash(SIGNAL_PRIORITY_HIGH, ST(0));
-perl/common/Core.c:248:XS(XS_Irssi_signal_add_last); /* prototype to pass -Wmissing-prototypes */
-perl/common/Core.c:249:XS(XS_Irssi_signal_add_last)
-perl/common/Core.c:260: croak("Usage: Irssi::signal_add_last(signal, func)");
-perl/common/Core.c:262: perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
-perl/common/Core.c:265: perl_signal_add_hash(SIGNAL_PRIORITY_LOW, ST(0));
-perl/common/Core.c:272:XS(XS_Irssi_signal_add_priority); /* prototype to pass -Wmissing-prototypes */
-perl/common/Core.c:273:XS(XS_Irssi_signal_add_priority)
-perl/common/Core.c:284: croak("Usage: Irssi::signal_add_priority(signal, func, priority)");
-perl/common/Core.c:286: perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1), SvIV(ST(2)));
-perl/common/Core.c:288: perl_signal_add_hash(SvIV(ST(0)), ST(1));
-perl/common/Core.c:2028: (void)newXSproto_portable("Irssi::signal_add", XS_Irssi_signal_add, file, ";@");
-perl/common/Core.c:2029: (void)newXSproto_portable("Irssi::signal_add_first", XS_Irssi_signal_add_first, file, ";@");
-perl/common/Core.c:2030: (void)newXSproto_portable("Irssi::signal_add_last", XS_Irssi_signal_add_last, file, ";@");
-perl/common/Core.c:2031: (void)newXSproto_portable("Irssi::signal_add_priority", XS_Irssi_signal_add_priority, file, ";@");
-perl/common/Core.xs:10:static void perl_signal_add_hash(int priority, SV *sv)
-perl/common/Core.xs:17: croak("Usage: Irssi::signal_add(hash)");
-perl/common/Core.xs:22: perl_signal_add_full(hv_iterkey(he, &len), HeVAL(he), priority);
-perl/common/Core.xs:114:signal_add(...)
-perl/common/Core.xs:117: croak("Usage: Irssi::signal_add(signal, func)");
-perl/common/Core.xs:119: perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
-perl/common/Core.xs:122: perl_signal_add_hash(SIGNAL_PRIORITY_DEFAULT, ST(0));
-perl/common/Core.xs:125:signal_add_first(...)
-perl/common/Core.xs:128: croak("Usage: Irssi::signal_add_first(signal, func)");
-perl/common/Core.xs:130: perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
-perl/common/Core.xs:133: perl_signal_add_hash(SIGNAL_PRIORITY_HIGH, ST(0));
-perl/common/Core.xs:136:signal_add_last(...)
-perl/common/Core.xs:139: croak("Usage: Irssi::signal_add_last(signal, func)");
-perl/common/Core.xs:141: perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1),
-perl/common/Core.xs:144: perl_signal_add_hash(SIGNAL_PRIORITY_LOW, ST(0));
-perl/common/Core.xs:147:signal_add_priority(...)
-perl/common/Core.xs:150: croak("Usage: Irssi::signal_add_priority(signal, func, priority)");
-perl/common/Core.xs:152: perl_signal_add_full((char *)SvPV(ST(0),PL_na), ST(1), SvIV(ST(2)));
-perl/common/Core.xs:154: perl_signal_add_hash(SvIV(ST(0)), ST(1));
-perl/common/Expando.c:46: signal_add("script destroyed", (SIGNAL_FUNC) script_unregister_expandos);
-perl/common/Expando.xs:37: signal_add("script destroyed", (SIGNAL_FUNC) script_unregister_expandos);
-perl/common/Settings.c:66: signal_add("script destroyed", (SIGNAL_FUNC) sig_script_destroyed);
-perl/common/Settings.xs:57: signal_add("script destroyed", (SIGNAL_FUNC) sig_script_destroyed);
-perl/perl-common.c:696: signal_add("chat protocol created", (SIGNAL_FUNC) perl_register_protocol);
-perl/perl-common.c:697: signal_add("chat protocol destroyed", (SIGNAL_FUNC) perl_unregister_protocol);
-perl/perl-core.c:454: signal_add_last("script error", (SIGNAL_FUNC) sig_script_error);
-perl/perl-core.c:461: signal_add("irssi init finished", (SIGNAL_FUNC) sig_autorun);
-perl/perl-fe.c:255: signal_add("script error", (SIGNAL_FUNC) sig_script_error);
-perl/perl-fe.c:256: signal_add("complete command script load", (SIGNAL_FUNC) sig_complete_load);
-perl/perl-fe.c:257: signal_add("complete command script unload", (SIGNAL_FUNC) sig_complete_unload);
-perl/perl-signals.c:367:static void perl_signal_add_full_int(const char *signal, SV *func,
-perl/perl-signals.c:389: /* we used Irssi::signal_add() instead of
-perl/perl-signals.c:394: signal_add_full_id(MODULE_NAME, priority, rec->signal_id,
-perl/perl-signals.c:408:void perl_signal_add_full(const char *signal, SV *func, int priority)
-perl/perl-signals.c:410: perl_signal_add_full_int(signal, func, priority, FALSE, NULL);
-perl/perl-signals.c:475: perl_signal_add_full_int(signal, func, priority, TRUE, category);
-perl/perl-signals.h:7:void perl_signal_add_full(const char *signal, SV *func, int priority);
-perl/textui/Statusbar.c:38: signal_add("script destroyed", (SIGNAL_FUNC) script_unregister_statusbars);
-perl/textui/Statusbar.xs:29: signal_add("script destroyed", (SIGNAL_FUNC) script_unregister_statusbars);
-perl/ui/Themes.c:52: signal_add("script destroyed", (SIGNAL_FUNC) sig_script_destroyed);
-perl/ui/Themes.xs:43: signal_add("script destroyed", (SIGNAL_FUNC) sig_script_destroyed);
diff --git a/docs/analyse-irssi.pl b/docs/analyse-irssi.pl
deleted file mode 100755
index ceab06b..0000000
--- a/docs/analyse-irssi.pl
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-
-use C::Scan;
-use Data::Dumper;
-
-my $basedir = "/Users/tomfeist/sources/irssi/src";
-my $filename = $basedir . "/fe-text/gui-printtext.c";
-
-my $addflags = "-DUOFF_T_INT";
-
-my $c = C::Scan->new( 'filename' => $filename,
-# 'filename_filter' => $filter,b
- 'add_cppflags' => $addflags,
- );
-
-my @includes = (
- $basedir,
- $basedir . "/fe-text/",
- $basedir . "/fe-common/",
- $basedir . "/fe-common/core/",
-
-
- $basedir . "/core/",
- "/opt/local/include/glib-2.0",
- "/opt/local/lib/glib-2.0/include/",
-# "/opt/local/include/",
- );
-
-$c->set('includeDirs' => \@includes);
-
-my $fdec = $c->get('parsed_fdecls');
-print Dumper($fdec), $/;
diff --git a/docs/buildpod.pl b/docs/buildpod.pl
deleted file mode 100755
index e683185..0000000
--- a/docs/buildpod.pl
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-
-package Pod::Simple::HTMLBatch::Custom;
-
-use base qw/Pod::Simple::HTMLBatch/;
-
-use vars qw/$VERSION/;
-
-$VERSION = '0.01';
-sub esc {
- return Pod::Simple::HTMLBatch::esc(@_);
-}
-
-sub new {
- print "Hello!\n";
- my $self = shift;
- my $obj = $self->SUPER::new(@_);
-
- $obj->css_flurry(0);
- $obj->javascript_flurry(0);
-
-
- my @index_header = ("<html>\n",
- "<head>\n",
- "<title>Irssi Scripting Documentation</title>\n",
- "</head><body class='contentspage'>\n",
- "<h1>Irssi Scripting Documentation</h1>\n",
- q(<p><b>This is a work in progress. If you ),
- q(find something obviously wrong, or have requests ),
- q(for further documentation on topics not yet ),
- q(filled out, please ),
- q(<a href="http://github.com/shabble/irssi-scripts/issues#">create an issue</a>),
- " on my Github page, and I'll see what I can do.</b></p>",
- );
-
- $obj->contents_page_start(join("", @index_header));
-
-
- my $index_footer = sprintf("\n\n<p class='contentsfooty'>Generated "
- . "by %s v%s under Perl v%s\n<br >At %s GMT"
- . ", which is %s local time.</p>\n\n</body></html>\n",
- esc(ref($obj), $VERSION,
- $], scalar(gmtime), scalar(localtime)));
-
-
- my @copyright = (
- "<p><small>Much of the content on these pages is taken",
- " from original Irssi documentation, and is Copyright",
- " &copy; 2000-2010 The Irssi project.<br/>",
- " Formatting and additional documentation by Tom Feist",
- " <code>shabble+irssi\@metavore.org</code>",
- "</small></p>");
-
- $obj->contents_page_end($index_footer . join("", @copyright));
-
- return $obj;
-}
-
-
-
-sub _write_contents_middle {
- my($self, $Contents, $outfile, $toplevel2submodules, $toplevel_form_freq) = @_;
-
- foreach my $t (sort keys %$toplevel2submodules) {
- my @downlines = sort {$a->[-1] cmp $b->[-1]}
- @{ $toplevel2submodules->{$t} };
-
- printf $Contents qq[<dt><a name="%s">%s</a></dt>\n<dd>\n],
- esc( $t, $toplevel_form_freq->{$t} ) ;
-
- my($path, $name);
- foreach my $e (@downlines) {
- $name = $e->[0];
- $path = join( "/", '.', esc( @{$e->[3]} ) )
- . ($POD::Simple::HTMLBatch::HTML_EXTENSION
- || $Pod::Simple::HTML::HTML_EXTENSION);
- print $Contents qq{ <a href="$path">}, esc($name), "</a><br/>\n";
- }
- print $Contents "</dd>\n\n";
- }
- return 1;
-}
-
-1;
-
-package main;
-
-use File::Copy;
-
-my $output_dir = "../../tmp/irssi/docs/";
-my $batchconv = Pod::Simple::HTMLBatch::Custom->new;
-my $css = 'podstyle.css';
-
-$batchconv->add_css('podstyle.css', 1);
-
-$batchconv->batch_convert([qw/./], $output_dir);
-print "Copying CSS...\n";
-copy($css, $output_dir . $css);
-print "Done\n";
diff --git a/docs/buildsig2.pl b/docs/buildsig2.pl
deleted file mode 100755
index b1c7268..0000000
--- a/docs/buildsig2.pl
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-#use Pod::Simple::Debug (3);
-use Data::Dumper;
-use Pod::Simple::SimpleTree;
-use Carp qw/croak/;
-$|++;
-
-#package Pod::Simple::Tree;
-
-
-#package main;
-
-my $input_file = $ARGV[0] // 'General/Signals.pod';
-my $parser = Pod::Simple::SimpleTree->new;
-
-$parser->accept_targets('irssi_signal_defs', 'irssi_signal_types');
-my $root = $parser->parse_file($input_file)->root;
-
-#print Dumper($root);
-my @sig_tree;
-
-my $in_list = 0;
-foreach my $node (get_children($root)) {
- #print name($node), "\n";
-
- if (name($node) eq 'for') {
-
- if (attr($node)->{target} eq 'irssi_signal_defs') {
- print "Found For\n";
- my $text = text(get_children($node));
-
- if ($text =~ /START OF SIGNAL DEFINITIONS/) {
- print "start of defs\n";
- $in_list = 1;
- next;
- } elsif ($text =~ /END OF SIGNAL DEFINITIONS/) {
- print "end of defs\n";
- $in_list = 0;
- next;
- }
- }
-
- }
- push @sig_tree, $node if $in_list;
-
-}
-# we've got what we came for
-undef $root;
-undef $parser;
-
-my $module = '';
-my $file = '';
-
-
-print Dumper(\@sig_tree), "\n\n";
-
-foreach my $node (@sig_tree) {
- my $name = name($node);
-
- if ($name eq 'head2') {
- $module = text($node);
- print "Module: $module\n";
- } elsif ($name eq 'head3') {
- $file = text(get_children($node));
- print "File: $file\n";
- } elsif ($name eq 'over-text') {
- my @children = get_children($node);
- while (@children) {
-
- # fetch in pairs $sig => $parameter list
- my ($signal, $params) = (shift @children, shift @children);
- print "Signal: ", Dumper($signal), $/;
- print "Params: ", Dumper($params), $/;
-
- my $sig_name = text(get_children($signal));
-
- print "Sig: $sig_name\n";
-
- my @param_list = get_children($params);
- foreach my $param (@param_list) {
- $param = get_children($param);
- print "Param: ", Dumper($param), "\n";
- my $type = '';
- my $var = '';
- if (!ref $param->[0]) {
- $type = $param->[0];
- my @param_array = @$param;
- foreach my $thing (@param_array) {
- $var = text($thing);
- last if $var =~ m/\$\w+/;
- }
- } elsif (name($param->[0]) eq 'B') {
- # skip
- next;
- } elsif (name($param->[0]) eq 'L') {
- $type = text($param->[0]);
- #$var = text($param->[1]);
- my @param_array = @$param;
- foreach my $thing (@param_array) {
- $var = text($thing);
- last if $var =~ m/\$\w+/;
- }
- } else {
- $var = text($param->[0]);
- }
- $type =~ s/\s*(\w+)\s*/$1/;
- $var =~ s/\s*(\w+)\s*/$1/;
-
- print "Type: $type, Var: >$var<\n";
- }
- }
- }
-}
-
-sub attr {
- my $node = shift;
- return $node->[1];
-}
-sub name {
- my $node = shift;
- return $node->[0];
-}
-
-sub text {
- my $node = shift;
- my $text = ref $node ? $node->[2] : '' ;
- croak("text() called on non-terminal: " . Dumper($node)) if ref($text);
- return $text;
-}
-
-sub get_children {
- my $node = shift;
-
- my @node_arr = ref $node ? @$node : ();
- my @child_slice = @node_arr[2..$#node_arr];
- return wantarray ? @child_slice : \@child_slice;
-}
diff --git a/docs/buildsignals.pl b/docs/buildsignals.pl
deleted file mode 100755
index b2afc2a..0000000
--- a/docs/buildsignals.pl
+++ /dev/null
@@ -1,239 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-#use Pod::Simple::Debug (3);
-use Data::Dumper;
-$|++;
-
-package Pod::Simple::IrssiSignalParser;
-$|++;
-
-use base qw/Pod::Simple::PullParser/;
-use Carp qw/cluck/;
-
-use Data::Dumper;
-
-sub new {
- my $self = __PACKAGE__->SUPER::new(@_);
-
- $self->{__type_mapping} = {};
- $self->{__signals} = {};
-
- return bless $self, __PACKAGE__;
-}
-sub run {
- my $self = shift;
-
- # my ($seen_start, $seen_end) = (0,0);
- my $text_token;
-
- Token:
-
- while(my $token = $self->get_token()) {
- #print "PRocessing token: $token\n";
-
- if ($token->is_start) {
- if ($token->tag eq 'Data') {
- print "Start Data token: ", $token->dump, "\n";
-
- $text_token = $self->get_token;
- print "next token: ", $text_token->dump, "\n";
-
- if ($text_token->is_text && $text_token->text =~ /START OF (.*)$/) {
- print "Found start of $1!\n\n";
- my $type = $1;
-
- if ($type eq 'SIGNAL TYPES') {
- $self->process_types;
- } elsif ($type eq 'SIGNAL DEFINITIONS') {
- $self->process_definitions;
- }
- }
- }
- }
- }
-}
-
-sub process_types {
- my $self = shift;
-
- my $list_ended = 0;
- my $list_started = 0;
-
- print "Processing signal types\n";
-
- while (!$list_ended) {
-
- my $token = $self->get_token;
-
- if (!$list_started) {
- if ($token->is_start && $token->tag eq 'over-text') {
- $list_started = 1;
- } else {
- next;
- }
- } else {
- if ($token->is_end && $token->tag eq 'over-text') {
- $list_ended = 1;
- } else {
- $self->unget_token($token);
- # do tag processing here
- print "Processing token ", $token->dump, $/;
- $self->process_type_entry;
- }
- }
- }
-
- print "Done Processing signal types\n";
-
-}
-
-sub validate_token {
- my ($self, $token, $expected, $type) = @_;
-
- unless ($token->type eq $type && $token->is_tag($expected)) {
- cluck "Eeek. Expected $expected: $type, got "
- . $token->dump();
-
- # cluck("Invalid token. " # on line " . $token->attr('start_line')
- # . "expected $expected $type, got " . $token->tag
- # . " " . $token->type . " : " . $token->dump);
-
- }
-}
-
-sub process_type_entry {
- my $self = shift;
-
- my $token = $self->get_token;
- $self->validate_token($token, 'item-text', 'start');
-
- $token = $self->get_token;
- $self->validate_token($token, 'C', 'start');
-
- $token = $self->get_token;
- my $c_type = $token->text;
-
- $token = $self->get_token;
- $self->validate_token($token, 'C', 'end');
-
- $token = $self->get_token; # consume the separator whitespace.
- die "incorrect separator" unless $token->text =~ /^\s+$/;
-
- $token = $self->get_token;
- $self->validate_token($token, 'C', 'start');
-
- $token = $self->get_token;
- my $perl_type = $token->text;
-
- $token = $self->get_token;
- $self->validate_token($token, 'C', 'end');
-
- $token = $self->get_token;
- $self->validate_token($token, 'item-text', 'end');
-
- print "*** Creating mapping for $c_type => $perl_type\n";
- $self->{__type_mapping}->{$c_type} = $perl_type;
-}
-
-sub process_definitions {
- my $self = shift;
-
- my $list_ended = 0;
- my $list_started = 0;
-
- print "Processing signal definitions\n";
-
- while (!$list_ended) {
-
- my $token = $self->get_token;
- $list_ended = 1 unless $token;
-
- if (!$list_started) {
- if ($token->is_start && $token->tag eq 'over-text') {
- $list_started = 1;
- } else {
- next;
- }
- } else {
- if ($token->is_end && $token->tag eq 'over-text') {
- $list_ended = 1;
- } else {
- $self->unget_token($token);
- # do tag processing here
- print "Processing token ", $token->dump, $/;
- $self->process_def_entry;
- }
- }
- }
-
- print "Done Processing signal defs\n";
-
-}
-
-sub process_def_entry {
- my $self = shift;
- my $token;
- print "Processing definition entry\n";
- while ($token = $self->get_token()) {
- print "Token is ", $token->dump, "\n";
-
- last if $token->is_end && $token->tag eq 'item-text';
-
- $self->validate_token($token, 'item-text', 'start');
- $token = $self->get_token();
- $self->validate_token($token, 'C', 'start');
- $token = $self->get_token();
-
- if ($token->is_text) {
- my $sig_name = $token->text;
- print "Signal: $sig_name\n";
- }
-
- $token = $self->get_token();
-
- $self->validate_token($token, 'C', 'end');
- $token = $self->get_token();
- print "matched end of code\n";
-
- $self->validate_token($token, 'item-text', 'end');
- $token = $self->get_token();
-
- print "matched end of header list\n";
-
- $self->validate_token($token, 'over-text', 'start');
- $token = $self->get_token();
-
- print "matched start of args list\n";
-
- $self->validate_token($token, 'item-text', 'start');
- $token = $self->get_token();
-
- # consume argument list.
- until ($token->is_end && $token->tag eq 'over-text') {
- $token = $self->get_token();
- print "waiting for arglist Token: " . $token->dump() . "\n";
- }
- print "Token now: ", $token->dump(), $/;
-
- print "consumed arg list\n";
- $token = $self->get_token();
- print "Token now: ", $token->dump(), $/;
- $self->validate_token($token, 'item-text', 'end');
- $token = $self->get_token();
-
- }
- #$self->unget_token($token);
- print "Done Processing definition entry\n";
-
-}
-
-package main;
-
-my $input_file = $ARGV[0] // 'General/Signals.pod';
-my $parser = Pod::Simple::IrssiSignalParser->new;
-
-$parser->accept_targets('irssi_signal_defs', 'irssi_signal_types');
-my $tree = $parser->parse_file($input_file);
-
diff --git a/docs/cmpusers.pl b/docs/cmpusers.pl
deleted file mode 100644
index d6080e4..0000000
--- a/docs/cmpusers.pl
+++ /dev/null
@@ -1,301 +0,0 @@
-use strict;
-use warnings;
-
-my $VERSION = "0.3";
-my %IRSSI = (
- authors => 'Bazerka <bazerka@quakenet.org>',
- contact => 'bazerka@quakenet.org',
- name => 'cmpusers',
- description => 'compare channels for two users',
- licence => 'BSD',
- url => 'n/a',
-);
-
-use Irssi;
-use Data::Dumper;
-
-sub request_whois($$);
-sub event_whois_user($$);
-sub event_whois_channels($$);
-sub event_whois_end($$);
-sub event_whois_nosuchnick($$);
-sub event_whois_timeout($$);
-sub compare_channels();
-sub cleanup();
-sub to_casemap($);
-sub cmd_cmpusers($$$);
-
-my $debug = 0;
-
-my $running = 0;
-my @nick_list = ();
-my %nick_info = ();
-my %isupport = ();
-
-# bahamut - % hidden chan;
-my $custom_chanprefix = '%';
-
-
-sub request_whois ($$) {
- my ($server, $nick) = @_;
-
- $server->redirect_event(
- 'whois',
- 1,
- $nick,
- 0,
- 'redir cmpusers_whois_timeout',
- {
- 'event 311' => 'redir cmpusers_whois_user',
- 'event 318' => 'redir cmpusers_whois_end',
- 'event 319' => 'redir cmpusers_whois_channels',
- 'event 401' => 'redir cmpusers_whois_nosuchnick',
- '' => 'event empty',
- }
- );
-
- $server->send_raw("WHOIS $nick");
-}
-
-
-sub event_whois_user ($$) {
- my ($server, $data) = @_;
-
- my ($nick, $user, $host) = (split / +/, $data, 6)[1,2,3];
- my $casenick = to_casemap($nick);
-
- $nick_info{$casenick} = {
- 'nick' => $nick,
- 'username' => $user,
- 'hostname' => $host,
- 'channels' => {},
- };
-
- Irssi::print("cmpusers whois_user: $nick!$user\@$host", MSGLEVEL_CLIENTCRAP) if $debug;
-}
-
-
-sub event_whois_channels ($$) {
- my ($server, $data) = @_;
-
- my ($nick, $channels) = (split / +/, $data, 3)[1,2];
- my $casenick = to_casemap($nick);
- $channels =~ s/^://;
-
- my @channel_list = split / /, $channels;
-
- foreach my $channel (@channel_list) {
- my $prefix = '';
- my $unknown_prefix = '';
- my $stripped_channel;
-
- Irssi::print("cmpusers whois_channels: channel \"$channel\"", MSGLEVEL_CLIENTCRAP) if $debug;
- for (my $i=0; $i<length($channel); $i++) {
- my $char = substr($channel, $i, 1);
- Irssi::print("cmpusers whois_channels: char \"$char\"", MSGLEVEL_CLIENTCRAP) if $debug;;
-
- if (index ($custom_chanprefix, $char) > -1) {
- $stripped_channel .= $char;
- Irssi::print("cmpusers whois_channels: stripped_channel \"$stripped_channel\"", MSGLEVEL_CLIENTCRAP) if $debug;
- next;
- }
-
- if (index ($isupport{'CHANTYPES'}, $char) > -1) {
- $stripped_channel .= substr($channel, $i, length($channel));
- Irssi::print("cmpusers whois_channels: stripped_chan \"$stripped_channel\"", MSGLEVEL_CLIENTCRAP) if $debug;
- last;
- }
- if (index ($isupport{'PREFIX'}, $char) > -1) {
- $prefix .= $char;
- Irssi::print("cmpusers whois_channels: prefix \"$prefix\"", MSGLEVEL_CLIENTCRAP) if $debug;
- } else {
- $unknown_prefix .= $char;
- Irssi::print("cmpusers whois_channels: unknown_prefix \"$prefix\"", MSGLEVEL_CLIENTCRAP) if $debug;
- }
- }
-
- $nick_info{$casenick}{'channels'}{$stripped_channel}{prefix} = $prefix;
- $nick_info{$casenick}{'channels'}{$stripped_channel}{unknown_prefix} = $unknown_prefix;
- Irssi::print("cmpuser whois_channels: stripped_channel \"$stripped_channel\"", MSGLEVEL_CLIENTCRAP) if $debug;
- }
-
- Irssi::print("cmpusers whois_channels: $nick - $channels", MSGLEVEL_CLIENTCRAP) if $debug;
-}
-
-
-sub event_whois_end ($$) {
- my ($server, $data) = @_;
- my ($nick) = (split / +/, $data, 3)[1];
- Irssi::print("cmpusers whois_end: $nick", MSGLEVEL_CLIENTCRAP) if $debug;
-
- return if $running == 0; # catch 318 -> 401 (nosuchnick followed by endofwhois)
-
- if (to_casemap($nick) eq $nick_list[0]) {
- request_whois($server, $nick_list[1]);
- } else {
- compare_channels();
- }
-}
-
-
-sub event_whois_nosuchnick ($$) {
- my ($server, $data) = @_;
- my $nick = (split / +/, $data, 4)[1];
- Irssi::active_win->print("cmpusers error: no such nick $nick - aborting.", MSGLEVEL_CLIENTCRAP);
- cleanup();
-}
-
-
-sub event_whois_timeout($$) {
- my ($server, $data) = @_;
- Irssi::print("cmpusers whois_timeout", MSGLEVEL_CLIENTCRAP) if $debug;
- Irssi::active_win->print("cmpusers error: whois timed out or failed. please try again.", MSGLEVEL_CLIENTCRAP);
- cleanup();
-}
-
-
-sub cleanup () {
- $running = 0;
- print Dumper \@nick_list if $debug;
- print Dumper \%nick_info if $debug;
- print Dumper \%isupport if $debug;
- @nick_list = ();
- %nick_info = ();
- %isupport = ();
- Irssi::print("cmpusers cleanup", MSGLEVEL_CLIENTCRAP) if $debug;
-}
-
-
-sub to_casemap ($) {
- my $nick = shift;
- my $type = $isupport{'CASEMAPPING'};
-
- for (my $i = 0; $i < length($nick); $i++) {
- my $ord = ord(substr($nick, $i, 1));
-
- if ($type == 1) { # rfc1459
- substr($nick, $i, 1) = ($ord >= 65 && $ord <= 94) ? chr($ord + 32) : chr($ord);
- } elsif ($type == 2) { # ascii
- substr($nick, $i, 1) = ($ord >= 65 && $ord <= 90) ? chr($ord + 32) : chr($ord);
- } else { # unknown
- }
- }
-
- return $nick;
-}
-
-
-sub compare_channels() {
- my @intersection = my @uniq_chans_0 = my @uniq_chans_1 = ();
- my %count = ();
-
- foreach my $element ( keys %{$nick_info{$nick_list[0]}{'channels'}}, keys %{$nick_info{$nick_list[1]}{'channels'}} ) {
- $count{$element}++;
- # nasty :<
- if ( exists $nick_info{$nick_list[0]}{'channels'}{$element} && (!exists $nick_info{$nick_list[1]}{'channels'}{$element})) {
- push @uniq_chans_0, $element;
- } elsif ((!exists $nick_info{$nick_list[0]}{'channels'}{$element}) && exists $nick_info{$nick_list[1]}{'channels'}{$element}) {
- push @uniq_chans_1, $element;
- }
- }
- foreach my $element (keys %count) {
- push @intersection, $element if $count{$element} == 2;
- }
-
- my $common_chans = join " ", sort @intersection;
- my $uniq0 = join " ", sort @uniq_chans_0;
- my $uniq1 = join " ", sort @uniq_chans_1;
-
- # workaround Irssi's crappy % handling. No, really, this irssi issue needs fixing.
- $common_chans =~ s/%/%%/g;
- $uniq0 =~ s/%/%%/g;
- $uniq1 =~ s/%/%%/g;
-
- Irssi::active_win->print(sprintf('Comparing user <%s!%s@%s> with user <%s!%s@%s>',
- $nick_info{$nick_list[0]}{'nick'},
- $nick_info{$nick_list[0]}{'username'},
- $nick_info{$nick_list[0]}{'hostname'},
- $nick_info{$nick_list[1]}{'nick'},
- $nick_info{$nick_list[1]}{'username'},
- $nick_info{$nick_list[1]}{'hostname'}), MSGLEVEL_CLIENTCRAP );
-
- Irssi::active_win->print(sprintf("Common channels for both users: %s", $common_chans), MSGLEVEL_CLIENTCRAP);
- Irssi::active_win->print(sprintf("Unique channels for %s: %s", $nick_info{$nick_list[0]}{'nick'}, $uniq0), MSGLEVEL_CLIENTCRAP);
- Irssi::active_win->print(sprintf("Unique channels for %s: %s", $nick_info{$nick_list[1]}{'nick'}, $uniq1), MSGLEVEL_CLIENTCRAP);
- cleanup();
-}
-
-
-sub cmd_cmpusers($$$) {
- my ($args, $server, $witem) = @_;
- $args = lc $args;
- my @nicks = split /\s+/, $args;
-
- if (scalar @nicks != 2) {
- Irssi::active_win->print("cmpusers error: please supply two nickname arguments.", MSGLEVEL_CLIENTCRAP);
- return;
- }
-
- if ($nicks[0] eq $nicks[1]) {
- Irssi::active_win->print("cmpusers error: please supply two unique nicknames.", MSGLEVEL_CLIENTCRAP);
- return;
- }
-
- if (!defined $server) {
- Irssi::active_win->print("cmpusers error: active window not connected to a server.", MSGLEVEL_CLIENTCRAP);
- return;
- }
-
- if ($server->{'chat_type'} ne 'IRC') {
- Irssi::active_win->print("cmpusers error: server is not of type IRC.", MSGLEVEL_CLIENTCRAP);
- }
-
- if ($running) {
- Irssi::active_win->print("cmpusers error: a request is currently being processed - please try again shortly.", MSGLEVEL_CLIENTCRAP);
- return;
- }
-
- $running = 1;
-
- if ($server->{'isupport_sent'}) {
- if (defined $server->isupport('PREFIX')) {
- my $prefix = $server->isupport('PREFIX');
- my $l = (length($prefix) - 2) / 2;
- $isupport{'PREFIX'} = substr($prefix, $l + 2, $l);
- Irssi::print("cmpusers prefix: $prefix", MSGLEVEL_CLIENTCRAP) if $debug;
- }
- if (defined $server->isupport('CASEMAPPING')) {
- my $casemap = $server->isupport('CASEMAPPING');
- $isupport{'CASEMAPPING'} = $casemap eq 'rfc1459' ? 1
- : $casemap eq 'ascii' ? 2
- : 3;
- Irssi::print("cmpusers casemap: $casemap", MSGLEVEL_CLIENTCRAP) if $debug;
- }
- if (defined $server->isupport('CHANTYPES')) {
- $isupport{'CHANTYPES'} = $server->isupport('CHANTYPES');
- Irssi::print("cmpusers chantypes: $isupport{CHANTYPES}", MSGLEVEL_CLIENTCRAP) if $debug;
- }
- }
-
- for (my $i=0; $i <= $#nicks; $i++) {
- $nicks[$i] = to_casemap($nicks[$i]);
- }
-
- push @nick_list, @nicks;
- request_whois($server, $nicks[0]);
-}
-
-
-Irssi::signal_add(
- {
- 'redir cmpusers_whois_user' => \&event_whois_user,
- 'redir cmpusers_whois_channels' => \&event_whois_channels,
- 'redir cmpusers_whois_end' => \&event_whois_end,
- 'redir cmpusers_whois_nosuchnick' => \&event_whois_nosuchnick,
- 'redir cmpusers_whois_timeout' => \&event_whois_timeout,
- }
-);
-
-
-Irssi::command_bind("cmpusers", \&cmd_cmpusers);
-Irssi::print(sprintf("Loaded %s v%s...", $IRSSI{'name'}, $VERSION));
diff --git a/docs/complete-signal-list.txt b/docs/complete-signal-list.txt
deleted file mode 100644
index 4769192..0000000
--- a/docs/complete-signal-list.txt
+++ /dev/null
@@ -1,379 +0,0 @@
-away mode changed
-awaylog show
-ban type changed
-beep
-channel created
-channel destroyed
-channel joined
-channel rejoin new
-channel sync
-channel wholist
-chanquery abort
-chanquery ban
-chanquery ban end
-chanquery mode
-chanquery who end
-chat protocol created
-chat protocol deinit
-chat protocol destroyed
-chat protocol unknown
-chatnet destroyed
-chatnet read
-chatnet saved
-command clear
-command scrollback
-complete command action
-complete command alias
-complete command away
-complete command bind
-complete command cat
-complete command connect
-complete command dcc send
-complete command disconnect
-complete command format
-complete command help
-complete command load
-complete command msg
-complete command query
-complete command rawlog open
-complete command rawlog save
-complete command recode remove
-complete command reconnect
-complete command reload
-complete command save
-complete command script load
-complete command script unload
-complete command server
-complete command server add
-complete command server remove
-complete command set
-complete command stats
-complete command toggle
-complete command topic
-complete command unalias
-complete command window goto
-complete command window item move
-complete command window server
-complete erase
-complete erase command action
-complete erase command msg
-complete erase command query
-complete word
-ctcp action
-ctcp msg
-ctcp msg clientinfo
-ctcp msg dcc
-ctcp msg dcc accept
-ctcp msg dcc chat
-ctcp msg dcc resume
-ctcp msg dcc send
-ctcp msg ping
-ctcp msg time
-ctcp msg userinfo
-ctcp msg version
-ctcp reply
-ctcp reply dcc
-ctcp reply dcc reject
-ctcp reply ping
-dcc chat message
-dcc closed
-dcc connected
-dcc ctcp action
-dcc ctcp dcc
-dcc destroyed
-dcc error close not found
-dcc error connect
-dcc error ctcp
-dcc error file create
-dcc error file open
-dcc error get not found
-dcc error send exists
-dcc error send no route
-dcc error unknown type
-dcc error write
-dcc list print
-dcc rejected
-dcc reply dcc
-dcc reply send pasv
-dcc request
-dcc request send
-dcc server message
-dcc server started
-default command
-default command server
-default ctcp msg
-default ctcp msg dcc
-default ctcp reply
-default ctcp reply dcc
-default dcc ctcp
-default event
-default event numeric
-error command
-event 001
-event 004
-event 005
-event 221
-event 254
-event 271
-event 272
-event 281
-event 301
-event 302
-event 303
-event 305
-event 306
-event 311
-event 312
-event 313
-event 314
-event 315
-event 317
-event 318
-event 319
-event 324
-event 326
-event 327
-event 328
-event 329
-event 330
-event 332
-event 333
-event 338
-event 341
-event 344
-event 345
-event 346
-event 347
-event 348
-event 349
-event 352
-event 353
-event 364
-event 365
-event 366
-event 367
-event 368
-event 369
-event 372
-event 375
-event 376
-event 377
-event 378
-event 379
-event 381
-event 386
-event 387
-event 388
-event 389
-event 396
-event 401
-event 403
-event 404
-event 405
-event 407
-event 408
-event 421
-event 422
-event 432
-event 433
-event 436
-event 437
-event 438
-event 439
-event 442
-event 465
-event 470
-event 471
-event 472
-event 473
-event 474
-event 475
-event 476
-event 477
-event 478
-event 479
-event 482
-event 486
-event 489
-event 494
-event 506
-event 707
-event 716
-event 717
-event 728
-event 729
-event connected
-event empty
-event error
-event invite
-event join
-event kick
-event kill
-event mode
-event nick
-event notice
-event part
-event ping
-event pong
-event privmsg
-event quit
-event silence
-event topic
-event wallops
-exec input
-expando timer
-flood
-gui dialog
-gui entry redirect
-gui exit
-gui key pressed
-gui page scrolled
-gui print text
-gui print text finished
-gui window create override
-gui window created
-ignore changed
-ignore created
-ignore destroyed
-irssi init finished
-irssi init read settings
-lag ping error
-lag pong
-layout reset
-layout restore
-layout restore item
-layout restore window
-layout save
-layout save item
-layout save window
-list subcommands
-log config read
-log config save
-log create failed
-log locked
-log new
-log written
-mainwindow destroyed
-mainwindow moved
-mainwindow resized
-message dcc
-message dcc action
-message dcc ctcp
-message dcc own
-message dcc own_action
-message dcc own_ctcp
-message invite
-message irc action
-message irc ctcp
-message irc mode
-message irc notice
-message irc op_public
-message irc own_action
-message irc own_ctcp
-message irc own_notice
-message irc own_wall
-message join
-message kick
-message nick
-message own_nick
-message own_private
-message own_public
-message part
-message private
-message public
-message quit
-message topic
-module error
-module loaded
-module unloaded
-netsplit new
-nickfind event whois
-nicklist changed
-nicklist host changed
-nicklist new
-nicklist remove
-notifylist away changed
-notifylist event
-notifylist event whois
-notifylist event whois away
-notifylist event whois end
-notifylist joined
-notifylist left
-pidwait
-print format
-print starting
-print text
-proxy client dump
-query created
-query destroyed
-query nick changed
-query server changed
-reload
-requested usermode change
-script destroyed
-script error
-send command
-send text
-server add fill
-server connect copy
-server connect failed
-server connected
-server connecting
-server disconnected
-server event
-server incoming
-server lag
-server lag disconnect
-server looking
-server nick changed
-server quit
-server reconnect not found
-server reconnect remove
-server reconnect save status
-server sendmsg
-server setup fill chatnet
-server setup fill connect
-server setup fill reconn
-server setup read
-server setup saved
-session restore
-session restore channel
-session restore nick
-session restore server
-session save
-session save channel
-session save server
-settings errors
-setup changed
-setup reread
-silent event who
-silent event whois
-terminal resized
-theme changed
-theme destroyed
-user mode changed
-userhost event
-whois away
-whois default event
-whois end
-whois event
-whois event not found
-whois oper
-whois try whowas
-whowas away
-whowas event
-whowas event end
-window activity
-window changed
-window changed automatic
-window created
-window dehilight
-window destroyed
-window hilight
-window history changed
-window item changed
-window item remove
-window item server changed
-window print info
-window refnum changed
-window server changed
diff --git a/docs/msglevels.txt b/docs/msglevels.txt
deleted file mode 100644
index c8bd576..0000000
--- a/docs/msglevels.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-=over
-
-=item C<MSGLEVEL_CRAP>
-
-=item C<MSGLEVEL_MSGS>
-
-=item C<MSGLEVEL_PUBLIC>
-
-=item C<MSGLEVEL_NOTICES>
-
-=item C<MSGLEVEL_SNOTES>
-
-=item C<MSGLEVEL_CTCPS>
-
-=item C<MSGLEVEL_ACTIONS>
-
-=item C<MSGLEVEL_JOINS>
-
-=item C<MSGLEVEL_PARTS>
-
-=item C<MSGLEVEL_QUITS>
-
-=item C<MSGLEVEL_KICKS>
-
-=item C<MSGLEVEL_MODES>
-
-=item C<MSGLEVEL_TOPICS>
-
-=item C<MSGLEVEL_WALLOPS>
-
-=item C<MSGLEVEL_INVITES>
-
-=item C<MSGLEVEL_NICKS>
-
-=item C<MSGLEVEL_DCC>
-
-=item C<MSGLEVEL_DCCMSGS>
-
-=item C<MSGLEVEL_CLIENTNOTICE>
-
-=item C<MSGLEVEL_CLIENTCRAP>
-
-=item C<MSGLEVEL_CLIENTERROR>
-
-=item C<MSGLEVEL_HILIGHT>
-
-=item C<MSGLEVEL_ALL>
-
-=item C<MSGLEVEL_NOHILIGHT>
-
-=item C<MSGLEVEL_NO_ACT>
-
-=item C<MSGLEVEL_NEVER>
-
-=item C<MSGLEVEL_LASTLOG>
-
-=back
-
diff --git a/docs/parse_formats.pl b/docs/parse_formats.pl
deleted file mode 100755
index b3adec6..0000000
--- a/docs/parse_formats.pl
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-
-
-use C::Scan;
-use Data::Dumper;
-use Config;
-
-my $home = $ENV{HOME};
-my $src_loc = "$home/sources/irssi/src";
-my $file = "perl/module-formats.c";
-
-
-my $scan = C::Scan->new(filename => $src_loc . "/". $file);
-$scan->set('includeDirs' => [$src_loc,
- $src_loc . "/perl",
- "/opt/local/include",
- "/opt/local/include/glib-2.0",
- $Config::Config{shrpdir}]);
-
-print Dumper($scan->get('typedef_structs'));
diff --git a/docs/parse_xsfuncs.pl b/docs/parse_xsfuncs.pl
deleted file mode 100755
index d26cb2b..0000000
--- a/docs/parse_xsfuncs.pl
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-
-use Glib::ParseXSDoc;
-use File::Find;
-use Data::Dumper;
-
-my $home = $ENV{HOME};
-my $src_dir = "$home/sources/irssi/src/perl";
-$ENV{FORCE_DATA_DUMPER} = 1;
-print "=over\n\n";
-
-find(\&process_file, $src_dir);
-
-print "=back\n\n";
-
-sub process_file {
- my $filename = $_;
- return unless $filename =~ /\.xs$/;
-
- my $filepath = $File::Find::name;
-# print "Processing file: $filepath\n";
-
- my $parser = Glib::ParseXSDoc->new; #xsdocparse($filepath);
-
- $parser->parse_file($filepath);
- $parser->canonicalize_xsubs;
- $parser->swizzle_pods;
- $parser->preprocess_pods;
- $parser->clean_out_empty_pods;
-
-# print Dumper($parser->{data}), $/;
- my $data = $parser->{data};
- foreach my $package (keys %$data) {
- #print "Package: $package\n";
- my $subs = $data->{$package}->{xsubs};
- foreach my $sub (@$subs) {
-
- my $sub_name = $sub->{symname};
-
- my $args_str = '';
- my @processed_args = ();
- my $args = $sub->{args};
-
- foreach my $arg (@$args) {
- my $type = $arg->{type} // '';
- if ($type eq 'char *') {
- $type = 'string';
- } elsif ($type eq 'SV *') {
- $type = 'SVptr';
- }
- my $aname = $arg->{name} // '';
- if ($aname eq '...') {
- push @processed_args, '...';
- } else {
- push @processed_args, $type . ' $' . $aname;
- }
- }
- $args_str = join(", ", @processed_args);
-
- next if $sub_name =~ m/::$/;
- print $sub->{symname}, "(", $args_str, ")\n";
- }
- }
-}
-
-sub print_msglevel {
- my ($sym) = @_;
- if ($sym =~ m/::MSGLEVEL/) {
- $sym =~ s/^Irssi:://;
- print "=item C<$sym>\n\n";
- }
-}
-
diff --git a/docs/perl.txt b/docs/perl.txt
deleted file mode 100644
index 89588ca..0000000
--- a/docs/perl.txt
+++ /dev/null
@@ -1,437 +0,0 @@
- Installation problems
- ---------------------
-
-You'll need to have perl support compiled with irssi. If "/LOAD"
-doesn't show perl in list of loaded modules, you have a problem. See
-INSTALL file for information about perl problems.
-
-
- Running scripts
- ---------------
-
-Scripts are run with /SCRIPT LOAD command, or the default /RUN alias.
-"/SCRIPT" shows list of running script, and /SCRIPT UNLOAD can unload
-scripts.
-
-Scripts should be placed to ~/.irssi/scripts/ or
-/usr/local/lib/irssi/scripts/ (or depending on where irssi was
-installed) directories. After that /RUN script_name should work, you
-don't need to add the .pl suffix.
-
-
- Creating/replacing /COMMANDS
- ----------------------------
-
-You can create your own commands, or replace existing ones with
-Irssi::command_bind(). The command handling work internally pretty much
-the same as signal handlers, so if you replace existing command and don't
-wish to let it run, call Irssi::signal_stop().
-
-Here's an example:
-
- # Usage: /HELLO [<nick>]
- sub cmd_hello {
- # data - contains the parameters for /HELLO
- # server - the active server in window
- # witem - the active window item (eg. channel, query)
- # or undef if the window is empty
- my ($data, $server, $witem) = @_;
-
- if (!$server || !$server->{connected}) {
- Irssi::print("Not connected to server");
- return;
- }
-
- if ($data) {
- $server->command("MSG $data Hello!");
- } elsif ($witem && ($witem->{type} eq "CHANNEL" ||
- $witem->{type} eq "QUERY")) {
- # there's query/channel active in window
- $witem->command("MSG ".$witem->{name}." Hello!");
- } else {
- Irssi::print("Nick not given, and no active channel/query in window");
- }
- }
-
- Irssi::command_bind('hello', 'cmd_hello');
-
-
- Message levels
- --------------
-
-Several functions expect message levels. They're used to roughly
-classify messages. They're used by a lot of things including logging,
-ignoring, highlighting, etc. so you should use as good level as
-possible. It's possible to have several levels in one message, like
-ACTIONS+PUBLIC or ACTIONS+MSGS.
-
-Here's all the levels that irssi supports currently:
-
- CRAP, MSGS, PUBLIC, NOTICES, SNOTES, CTCPS, ACTIONS, JOINS, PARTS
- QUITS, KICKS, MODES, TOPICS, WALLOPS, INVITES, NICKS, DCC, DCCMSGS,
- CLIENTNOTICE, CLIENTCRAP, CLIENTERROR
-
-And a few special ones that could be included with the levels above:
-
- HILIGHT - text is highlighted
- NOHILIGHT - don't check highlighting for this message
- NO_ACT - don't trigger channel activity when printing this message
- NEVER - never ignore or log this message (not a good idea usually)
-
-You can use them with a MSGLEVEL_ prefix, for example:
-
- $server->print("#channel", 'Hello, world', MSGLEVEL_CLIENTCRAP);
-
-Writes text to #channel window with CLIENTCRAP level.
-
-
-
-
- Functions that you can use in Irssi's Perl scripts
- --------------------------------------------------
-
-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();
-
-Information from most objects can be fetched with $object->{data}, for
-example current nick in server could be read with $server->{nick}. List
-of all the information that are in objects are in "Object->{}" sections
-below.
-
-Commands are split in two groups, generic ones that could be used with
-any chat protocol, and IRC specific commands. If you want to use IRC
-specific commands, or use IRC specific ->{data} in your scripts, you'll
-need to add "use Irssi::Irc" to your scripts. IRC specific commands are
-listed after the generic ones.
-
-
- *** General
-
-
-
-print(str[, level])
- Print `str'. Default level is MSGLEVEL_CLIENTNOTICE.
-
-command(cmd)
- Send a command `cmd' (in current channel). The '/' char isn't needed.
-
-
- *** Themes
-
-
-
- *** Settings
-
-
- *** Signals
-
- *** timeouts / IO listener / pidwait
-
-
-
- *** Message levels
-
-
-
- *** Commands
-
-
-
-
- *** Windows
-
-
-
-Windowitem window_item_find(name)
-Server::window_item_find(name)
-
-window_refnum_prev(refnum, wrap)
-window_refnum_next(refnum, wrap)
- Return refnum for window that's previous/next in windows list.
-
-windows_refnum_last()
- Return refnum for last window.
-
-
- *** Server Connects
-
-Connect->{}
- type - "SERVER CONNECT" text
- chat_type - String ID of chat protocol, for example "IRC"
-
- address - Address where we connected (irc.blah.org)
- port - Port where we connected
- chatnet - Chat network
-
- password - Password we used in connection.
- wanted_nick - 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 reconnections
-
-
-
- *** Chat networks
-
-
-
- *** Server redirections
-
-This is a powerful feature of Irssi that I haven'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.
-
-redirect_register(command, remote, timeout, start, stop, opt)
- Register new redirection command. By default irssi has already
- registered at least: whois, whowas, who, list, ison, userhost, ping,
- "mode channel" (/MODE #channel), "mode b" (/MODE #channel b), "mode e"
- and "mode I".
-
- `command' specifies the name of the command to register, it doesn't
- have to be a real command name, but something you just specify to
- redirect_event() when using this redirection.
-
- `remote' specifies if the command is by default a remote command
- (eg. sent to another server). redirect_event() may override this.
-
- `timeout' - If remote is TRUE, specifies how many seconds to wait for
- reply before aborting.
-
- `start', `stop', `opt' - hash references with "event" => argpos entries.
- List of events that start and stop this redirection.
- Start event list may be empty, but there must be at least one
- stop event. Optional events are checked only if they are received
- immediately after one of the stop-events. `argpos' specifies the
- word number in event string which is compared to wanted argument,
- -1 = don't compare, TRUE always.
-
- Example (already done by irssi):
-
- Irssi::redirect_register('mode channel', 0, 0,
- undef, # no start events
- { # stop events
- "event 324" => 1, # MODE-reply
- "event 403" => 1, # no such channel
- "event 442" => 1, # "you're not on that channel"
- "event 479" => 1 # "Cannot join channel (illegal name)"
- }, { # optional events
- "event 329", 1 # Channel create time
- } );
-
-Server::redirect_event(command, count, arg, remote, failure_signal, signals)
- Specify that the next command sent to server will be redirected.
- NOTE: This command MUST be called before sending the command to server.
-
- `command' - Name of the registered redirection that we're using.
-
- `count' - How many times to execute the redirection. Some commands may
- send multiple stop events, like MODE #a,#b.
-
- `arg' - The argument to be compared in event strings. You can give multiple
- arguments separated with space.
-
- `remote' - Specifies if the command is a remote command, -1 = use default.
-
- `failure_signal' - If irssi can't find the stop signal for the redirection,
- this signal is called.
-
- `signals' - hash reference with "event" => "redir signal" entries.
- If the event is "", all the events belonging to the redirection but not
- specified here, will be sent there.
-
- Example:
-
- # ignore all events generated by whois query, except 311.
- $server->redirect_event("whois", 1, "cras", 0, undef, {
- "event 311" => "redir whois",
- "" => "event empty" });
- $server->send_raw("WHOIS :cras");
-
-
- *** Window items
-
-
-
- *** Channels
-
-
-
- *** Nick list
-
-
- *** Queries
-
-
-Query
-query_create(chat_type, server_tag, nick, automatic)
- Create a new query.
-
-Query
-query_find(nick)
- Find query from any server.
-
-Query
-Server::query_find(nick)
- Find query from specified server.
-
-
- *** Masks
-
-You should use the Server version of the function if possible, since
-with different chat protocols the mask matching could be different.
-
-mask_match(mask, nick, user, host)
-Server::mask_match(mask, nick, user, host)
- Return 1 if `mask' matches nick!user@host.
-
-mask_match_address(mask, nick, address)
-Server::mask_match_address(mask, nick, address)
- Return 1 if `mask' matches nick!address.
-
-masks_match(masks, nick, address)
-Server::masks_match(masks, nick, address)
- Return 1 if any mask in the `masks' (string separated with spaces)
- matches nick!address.
-
-
-
-
- *** Logging
-
-
-
- *** Ignores
-
-
- *** /EXEC processes
-
-
-
- ***
- *** IRC specific functions. All objects below this are prefixed with Irc::
- ***
-
- *** IRC servers
-
-Irc::Server->{}
- (..contains all the same data as core Server object..)
- real_address - Address the IRC server gives
- usermode - User mode in server
- userhost - Your user host in server
-
-Irc::Connect->{}
- (..contains all the same data as core Connect object..)
- alternate_nick - Alternate nick to use if default nick is taken.
-
-Connect::connect()
- Connect to IRC server.
-
-Server::get_channels(server)
- Return a string of all channels (and keys, if any have them) in server,
- like "#a,#b,#c,#d x,b_chan_key,x,x" or just "#e,#f,#g"
-
-Server::send_raw(cmd)
- Send raw message to server, it will be flood protected so you
- don't need to worry about it.
-
-Server::send_raw_now(cmd)
- Send raw message to server immediately without flood protection.
-
-Server::send_raw_split(cmd, nickarg, max_nicks)
- Split the `cmd' into several commands so `nickarg' argument has only
- `max_nicks' number of nicks.
-
- Example:
- $server->send_raw_split("KICK #channel nick1,nick2,nick3 :byebye", 3, 2);
-
- Irssi will send commands "KICK #channel nick1,nick2 :byebye" and
- "KICK #channel nick3 :byebye" to server.
-
-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. The data
- is the full raw command to be sent to server, like
- "NOTICE nick :\001VERSION irssi\001"
-
-Server::isupport(name)
- Returns the value of the named item in the ISUPPORT (005) numeric to the
- script. If the item is not present returns undef, if the item has no value
- then "" is returned use defined $server->isupport("name") if you need to
- check whether a property is present.
- See http://tools.ietf.org/id/draft-brocklesby-irc-isupport-03.txt
- for more information on the ISUPPORT numeric.
-
- *** IRC channels
-
-
-
- *** DCC
-
-
-
-
-
- *** Netsplits
-
-Netsplit->{}
- nick - Nick
- address - Nick's host
- destroy - Timestamp when this record should be destroyed
- server - Netsplitserver object
- channels - list of channels (Netsplitchannel objects) the nick was in
-
-Netsplitserver->{}
- server - The server nick was in
- destserver - The other server where split occured.
- count - Number of splits in server
-
-Netsplitchannel->{}
- name - Channel name
- nick - Nick object
-
-
-
- *** Notify list
-
-
-notifies() - Return list of all notifies
-
-Notifylist
-notifylist_add(mask, ircnets, away_check, idle_check_time)
- Add new item to notify list.
-
-notifylist_remove(mask)
- Remove item from notify list.
-
-Notifylist
-notifylist_find(mask, ircnet)
- Find notify.
-
-Server
-notifylist_ison(nick, serverlist)
- Check if `nick' is in IRC. `serverlist' is a space separated
- list of server tags. If it's empty string, all servers will be checked.
-
-Server::notifylist_ison_server(nick)
- Check if `nick' is on IRC server.
-
- *** Proxy clients
-
-
-
-All the content of this site is copyright © 2000-2010 The Irssi project.
diff --git a/docs/podstyle.css b/docs/podstyle.css
deleted file mode 100644
index 1cecdfb..0000000
--- a/docs/podstyle.css
+++ /dev/null
@@ -1,107 +0,0 @@
-/* For accessibility reasons, never specify text sizes in px/pt/pc/in/cm/mm */
-
-@media all { .hide { display: none; } }
-
-@media screen, tty, tv, projection {
- .noscreen { display: none; }
-
- a:link { color: #7070ff; text-decoration: underline; }
- a:visited { color: #e030ff; text-decoration: underline; }
- a:active { color: #800000; text-decoration: underline; }
- body.contentspage a { text-decoration: none; }
- a.u { color: #000 !important; text-decoration: none; }
-
- body.pod {
- margin: 0 5px;
- color: #000;
- background-color: #fff;
- }
-
- .pod pre {
- background: #eeeeee;
- border: 1px solid #888888;
- color: black;
- padding: 1em;
- white-space: pre;
- }
-
- body.pod h1, body.pod h2, body.pod h3, body.pod h4 {
- font-family: Tahoma, Verdana, Helvetica, Arial, sans-serif;
- font-weight: normal;
- margin-top: 1.2em;
- margin-bottom: .1em;
- border-top: medium solid transparent;
- /* margin-left: -5px; border-left: 2px #7070ff solid; padding-left: 3px; */
- }
-
- body.pod h1 { border-top-color: #55f; }
- body.pod h2 { border-top-color: #77f; }
- body.pod h3 { border-top-color: #bbf; }
- body.pod h4 { border-top-color: #eef; }
-
- p.backlinktop + h1 { border-top: none; margin-top: 0em; }
- p.backlinktop + h2 { border-top: none; margin-top: 0em; }
- p.backlinktop + h3 { border-top: none; margin-top: 0em; }
- p.backlinktop + h4 { border-top: none; margin-top: 0em; }
-
- body.pod dt {
- font-size: 105%; /* just a wee bit more than normal */
- }
-
- .indexgroup { font-size: 80%; }
-
- .backlinktop, .backlinkbottom {
- margin-left: -5px;
- margin-right: -5px;
- background-color: #bbf;
- border-top: medium solid #aaf;
- border-bottom: medium solid #aaf;
- }
-
- .backlinktop a, .backlinkbottom a {
- text-decoration: none;
- color: #77f;
- background-color: #fff;
- border: medium solid #22f;
- }
- .backlinkbottom { margin-bottom: 0; padding-bottom: 0; }
- .backlinktop { margin-top: 0; padding-top: 0; }
-
- body.contentspage {
- color: #000;
- background-color: #fff;
- }
-
- body.contentspage h1 {
- color: #22f;
- margin-left: 1em;
- margin-right: 1em;
- text-indent: -.9em;
- font-family: Tahoma, Verdana, Helvetica, Arial, sans-serif;
- font-weight: normal;
- border-top: medium solid #000;
- border-bottom: medium solid #000;
- text-align: center;
- }
-
- dl.superindex > dt {
- font-family: Tahoma, Verdana, Helvetica, Arial, sans-serif;
- font-weight: normal;
- font-size: 90%;
- margin-top: .45em;
- /* margin-bottom: -.15em; */
- }
- dl.superindex > dd {
- word-spacing: .6em; /* most important rule here! */
- }
- dl.superindex > a:link {
- text-decoration: none;
- color: #000;
- }
-
- .contentsfooty {
- border-top: medium solid #666;
- font-size: 90%;
- }
-
-}
diff --git a/docs/sigextract.pl b/docs/sigextract.pl
deleted file mode 100755
index cc6f8bb..0000000
--- a/docs/sigextract.pl
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-
-my $file = shift // 'allsigs.txt';
-
-open my $fh, $file or die "couldn't open $file: $!";
-my $sigs = {};
-
-while (my $line = <$fh>) {
- chomp $line;
- if ($line =~ m/"(\w+(?:\s+\w+)*)"/) {
- #print "Found signal: $1\n";
- $sigs->{$1}++;
- }
-}
-
-close $fh;
-
-my @signals = keys %$sigs;
-
-print join("\n", sort @signals);
-print "\n";
diff --git a/docs/siglist.txt b/docs/siglist.txt
deleted file mode 100644
index 96c418a..0000000
--- a/docs/siglist.txt
+++ /dev/null
@@ -1,12255 +0,0 @@
-Found For
-start of defs
-Found For
-end of defs
-Module: Core
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 112
- },
- [
- 'C',
- {},
- '"gui exit"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 114
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 116
- },
- [
- 'I',
- {},
- 'None'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 120
- },
- [
- 'C',
- {},
- '"gui dialog"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 122
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 124
- },
- 'string ',
- [
- 'C',
- {},
- '$type'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 126
- },
- 'string ',
- [
- 'C',
- {},
- '$text'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 130
- },
- [
- 'C',
- {},
- '"send command"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 132
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 134
- },
- [
- 'C',
- {},
- 'string $command'
- ],
- ','
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 136
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ],
- ','
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 138
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 142
- },
- 'This is sent when a command is entered via the GUI, or by scripts via ',
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::command'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::command'
- ],
- '.'
- ]
- ];
-File: chat-protocols.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 152
- },
- [
- 'C',
- {},
- '"chat protocol created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 154
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 156
- },
- 'CHAT_PROTOCOL_REC ',
- [
- 'C',
- {},
- '$protocol'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 160
- },
- [
- 'C',
- {},
- '"chat protocol updated"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 162
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 164
- },
- 'CHAT_PROTOCOL_REC ',
- [
- 'C',
- {},
- '$protocol'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 168
- },
- [
- 'C',
- {},
- '"chat protocol destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 170
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 172
- },
- 'CHAT_PROTOCOL_REC ',
- [
- 'C',
- {},
- '$protocol'
- ]
- ]
- ]
- ];
-File: channels.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 182
- },
- [
- 'C',
- {},
- '"channel created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 184
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 186
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 188
- },
- 'int ',
- [
- 'C',
- {},
- '$automatic'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 192
- },
- [
- 'C',
- {},
- '"channel destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 194
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 196
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ]
- ]
- ];
-File: chatnets.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 206
- },
- [
- 'C',
- {},
- '"chatnet created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 208
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 210
- },
- 'CHATNET_REC ',
- [
- 'C',
- {},
- '$chatnet'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 214
- },
- [
- 'C',
- {},
- '"chatnet destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 216
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 218
- },
- 'CHATNET_REC ',
- [
- 'C',
- {},
- '$chatnet'
- ]
- ]
- ]
- ];
-File: commands.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 228
- },
- [
- 'C',
- {},
- '"commandlist new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 230
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 232
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Command'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Command'
- ],
- ' ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 236
- },
- [
- 'C',
- {},
- '"commandlist remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 238
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 240
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Command'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Command'
- ],
- ' ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 244
- },
- [
- 'C',
- {},
- '"error command"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 246
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 248
- },
- 'int ',
- [
- 'C',
- {},
- '$err'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 250
- },
- 'string ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 254
- },
- [
- 'C',
- {},
- '"send command"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 256
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 258
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 260
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 262
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$witem'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 266
- },
- [
- 'C',
- {},
- '"send text"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 268
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 270
- },
- 'string ',
- [
- 'C',
- {},
- '$line'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 272
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 274
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$witem'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 278
- },
- [
- 'C',
- {},
- '"command "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 280
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 282
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 284
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 286
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$witem'
- ]
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 290
- },
- [
- 'B',
- {},
- 'TODO: check this "cmd" out?'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 292
- },
- [
- 'C',
- {},
- '"default command"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 294
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 296
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 298
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 300
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$witem'
- ]
- ]
- ]
- ];
-File: ignore.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 310
- },
- [
- 'C',
- {},
- '"ignore created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 312
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 314
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Ignore'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Ignore'
- ],
- ' ',
- [
- 'C',
- {},
- '$ignore'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 318
- },
- [
- 'C',
- {},
- '"ignore destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 320
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 322
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Ignore'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Ignore'
- ],
- ' ',
- [
- 'C',
- {},
- '$ignore'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 326
- },
- [
- 'C',
- {},
- '"ignore changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 328
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 330
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Ignore'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Ignore'
- ],
- ' ',
- [
- 'C',
- {},
- '$ignore'
- ]
- ]
- ]
- ];
-File: log.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 340
- },
- [
- 'C',
- {},
- '"log new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 342
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 344
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 348
- },
- [
- 'C',
- {},
- '"log remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 350
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 352
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 356
- },
- [
- 'C',
- {},
- '"log create failed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 358
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 360
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 364
- },
- [
- 'C',
- {},
- '"log locked"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 366
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 368
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 372
- },
- [
- 'C',
- {},
- '"log started"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 374
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 376
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 380
- },
- [
- 'C',
- {},
- '"log stopped"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 382
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 384
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 388
- },
- [
- 'C',
- {},
- '"log rotated"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 390
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 392
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 396
- },
- [
- 'C',
- {},
- '"log written"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 398
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 400
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 402
- },
- 'string ',
- [
- 'C',
- {},
- '$line'
- ]
- ]
- ]
- ];
-File: modules.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 414
- },
- [
- 'C',
- {},
- '"module loaded"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 416
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 418
- },
- 'MODULE_REC ',
- [
- 'C',
- {},
- '$module'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 420
- },
- 'MODULE_FILE_REC ',
- [
- 'C',
- {},
- '$module_file'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 424
- },
- [
- 'C',
- {},
- '"module unloaded"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 426
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 428
- },
- 'MODULE_REC ',
- [
- 'C',
- {},
- '$module'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 430
- },
- 'MODULE_FILE_REC ',
- [
- 'C',
- {},
- '$module_file'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 434
- },
- [
- 'C',
- {},
- '"module error"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 436
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 438
- },
- 'int ',
- [
- 'C',
- {},
- '$error'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 440
- },
- 'string ',
- [
- 'C',
- {},
- '$text'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 442
- },
- 'string ',
- [
- 'C',
- {},
- '$root_module'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 444
- },
- 'string ',
- [
- 'C',
- {},
- '$sub_module'
- ]
- ]
- ]
- ];
-File: nicklist.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 454
- },
- [
- 'C',
- {},
- '"nicklist new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 456
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 458
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 460
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 464
- },
- [
- 'C',
- {},
- '"nicklist remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 466
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 468
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 470
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 474
- },
- [
- 'C',
- {},
- '"nicklist changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 476
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 478
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 480
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 482
- },
- 'string ',
- [
- 'C',
- {},
- '$old_nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 486
- },
- [
- 'C',
- {},
- '"nicklist host changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 488
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 490
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 492
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 496
- },
- [
- 'C',
- {},
- '"nicklist gone changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 498
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 500
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 502
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 506
- },
- [
- 'C',
- {},
- '"nicklist serverop changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 508
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 510
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 512
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ]
- ];
-File: pidwait.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 522
- },
- [
- 'C',
- {},
- '"pidwait"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 524
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 526
- },
- 'int ',
- [
- 'C',
- {},
- '$pid'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 528
- },
- 'int ',
- [
- 'C',
- {},
- '$status'
- ]
- ]
- ]
- ];
-File: queries.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 538
- },
- [
- 'C',
- {},
- '"query created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 540
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 542
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Query'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Query'
- ],
- ' ',
- [
- 'C',
- {},
- '$query'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 544
- },
- 'int ',
- [
- 'C',
- {},
- '$automatic'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 548
- },
- [
- 'C',
- {},
- '"query destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 550
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 552
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Query'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Query'
- ],
- ' ',
- [
- 'C',
- {},
- '$query'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 556
- },
- [
- 'C',
- {},
- '"query nick changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 558
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 560
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Query'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Query'
- ],
- ' ',
- [
- 'C',
- {},
- '$query'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 562
- },
- 'string ',
- [
- 'C',
- {},
- '$original_nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 566
- },
- [
- 'C',
- {},
- '"window item name changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 568
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 570
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$witem'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 574
- },
- [
- 'C',
- {},
- '"query address changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 576
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 578
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Query'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Query'
- ],
- ' ',
- [
- 'C',
- {},
- '$query'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 582
- },
- [
- 'C',
- {},
- '"query server changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 584
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 586
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Query'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Query'
- ],
- ' ',
- [
- 'C',
- {},
- '$query'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 588
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ]
- ];
-File: rawlog.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 599
- },
- [
- 'C',
- {},
- '"rawlog"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 601
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 603
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Rawlog'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Rawlog'
- ],
- ' ',
- [
- 'C',
- {},
- '$raw_log'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 605
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ]
- ];
-File: server.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 615
- },
- [
- 'C',
- {},
- '"server looking"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 617
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 619
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 623
- },
- [
- 'C',
- {},
- '"server connected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 625
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 627
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 632
- },
- [
- 'C',
- {},
- '"server connecting"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 634
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 636
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 638
- },
- 'ulongptr ',
- [
- 'C',
- {},
- '$ip'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 642
- },
- [
- 'C',
- {},
- '"server connect failed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 644
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 646
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 650
- },
- [
- 'C',
- {},
- '"server disconnected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 652
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 654
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 658
- },
- [
- 'C',
- {},
- '"server quit"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 660
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 662
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 664
- },
- 'string ',
- [
- 'C',
- {},
- '$message'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 668
- },
- [
- 'C',
- {},
- '"server sendmsg"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 670
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 672
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 674
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 676
- },
- 'string ',
- [
- 'C',
- {},
- '$message'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 678
- },
- 'int ',
- [
- 'C',
- {},
- '$target_type'
- ]
- ]
- ]
- ];
-File: settings.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 688
- },
- [
- 'C',
- {},
- '"setup changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 690
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 692
- },
- [
- 'I',
- {},
- 'None'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 696
- },
- [
- 'C',
- {},
- '"setup reread"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 698
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 700
- },
- 'string ',
- [
- 'C',
- {},
- '$fname'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 704
- },
- [
- 'C',
- {},
- '"setup saved"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 706
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 708
- },
- 'string ',
- [
- 'C',
- {},
- '$fname'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 710
- },
- 'int ',
- [
- 'C',
- {},
- '$autosaved'
- ]
- ]
- ]
- ];
-Module: IRC Core
-File: bans.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 722
- },
- [
- 'C',
- {},
- '"ban type changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 724
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 726
- },
- 'string ',
- [
- 'C',
- {},
- '$bantype'
- ]
- ]
- ]
- ];
-File: channels
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 738
- },
- [
- 'C',
- {},
- '"channel joined"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 740
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 742
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 746
- },
- [
- 'C',
- {},
- '"channel wholist"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 748
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 750
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 754
- },
- [
- 'C',
- {},
- '"channel sync"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 756
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 758
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 762
- },
- [
- 'C',
- {},
- '"channel topic changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 764
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 766
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ]
- ]
- ];
-File: ctcp.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 776
- },
- [
- 'C',
- {},
- '"ctcp msg"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 778
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 780
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 782
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 784
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 786
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 788
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 792
- },
- [
- 'C',
- {},
- '"ctcp msg "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 794
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 796
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 798
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 800
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 802
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 804
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 808
- },
- [
- 'C',
- {},
- '"default ctcp msg"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 810
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 812
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 814
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 816
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 818
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 820
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 824
- },
- [
- 'C',
- {},
- '"ctcp reply"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 826
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 828
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 830
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 832
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 834
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 836
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 840
- },
- [
- 'C',
- {},
- '"ctcp reply "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 842
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 844
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 846
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 848
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 850
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 852
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 856
- },
- [
- 'C',
- {},
- '"default ctcp reply"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 858
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 860
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 862
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 864
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 866
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 868
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 872
- },
- [
- 'C',
- {},
- '"ctcp action"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 874
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 876
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 878
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 880
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 882
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 884
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ]
- ];
-File: irc-log.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 894
- },
- [
- 'C',
- {},
- '"awaylog show"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 896
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 898
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 900
- },
- 'int ',
- [
- 'C',
- {},
- '$away_msgs'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 902
- },
- 'int ',
- [
- 'C',
- {},
- '$filepos'
- ]
- ]
- ]
- ];
-File: irc-nicklist.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 912
- },
- [
- 'C',
- {},
- '"server nick changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 914
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 916
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ]
- ];
-File: irc-servers.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 926
- },
- [
- 'C',
- {},
- '"event connected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 928
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 930
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ]
- ];
-File: irc.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 940
- },
- [
- 'C',
- {},
- '"server event"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 942
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 944
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 946
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 948
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 950
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 954
- },
- [
- 'C',
- {},
- '"event "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 956
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 958
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 960
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 962
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 964
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 968
- },
- [
- 'C',
- {},
- '"default event"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 970
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 972
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 974
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 976
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 978
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 982
- },
- [
- 'C',
- {},
- '"whois default event"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 984
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 986
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 988
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 990
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 992
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 996
- },
- [
- 'C',
- {},
- '"server incoming"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 998
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1000
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1002
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1006
- },
- [
- 'C',
- {},
- '"redir "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1008
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1010
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1012
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1014
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1016
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_addr'
- ]
- ]
- ]
- ];
-File: lag.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1026
- },
- [
- 'C',
- {},
- '"server lag"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1028
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1030
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1034
- },
- [
- 'C',
- {},
- '"server lag disconnect"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1036
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1038
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ]
- ];
-File: massjoin.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1048
- },
- [
- 'C',
- {},
- '"massjoin"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1050
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1052
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1054
- },
- 'List of ',
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '@nicks'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1056
- },
- [
- 'B',
- {},
- 'TODO: Check this is actually a perl list (array)'
- ]
- ]
- ]
- ];
-File: mode-lists.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1066
- },
- [
- 'C',
- {},
- '"ban new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1068
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1070
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1072
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Ban'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Ban'
- ],
- ' ',
- [
- 'C',
- {},
- '$ban'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1076
- },
- [
- 'C',
- {},
- '"ban remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1078
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1080
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1082
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Ban'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Ban'
- ],
- ' ',
- [
- 'C',
- {},
- '$ban'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1084
- },
- 'string ',
- [
- 'C',
- {},
- '$set_by'
- ]
- ]
- ]
- ];
-File: modes.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1094
- },
- [
- 'C',
- {},
- '"channel mode changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1096
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1098
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1100
- },
- 'string ',
- [
- 'C',
- {},
- '$set_by'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1104
- },
- [
- 'C',
- {},
- '"nick mode changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1106
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1108
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1110
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1112
- },
- 'string ',
- [
- 'C',
- {},
- '$set_by'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1114
- },
- 'string ',
- [
- 'C',
- {},
- '$mode'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1116
- },
- 'string ',
- [
- 'C',
- {},
- '$type'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1120
- },
- [
- 'C',
- {},
- '"user mode changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1122
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1124
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1126
- },
- 'string ',
- [
- 'C',
- {},
- '$old_mode'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1130
- },
- [
- 'C',
- {},
- '"away mode changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1132
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1134
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ]
- ];
-File: netsplit.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1144
- },
- [
- 'C',
- {},
- '"netsplit server new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1146
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1148
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1150
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Netsplitserver'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Netsplitserver'
- ],
- ' ',
- [
- 'C',
- {},
- '$netsplit_server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1154
- },
- [
- 'C',
- {},
- '"netsplit server remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1156
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1158
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1160
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Netsplitserver'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Netsplitserver'
- ],
- ' ',
- [
- 'C',
- {},
- '$netsplit_server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1164
- },
- [
- 'C',
- {},
- '"netsplit new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1166
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1168
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Netsplit'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Netsplit'
- ],
- ' ',
- [
- 'C',
- {},
- '$netsplit'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1172
- },
- [
- 'C',
- {},
- '"netsplit remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1174
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1176
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Netsplit'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Netsplit'
- ],
- ' ',
- [
- 'C',
- {},
- '$netsplit'
- ]
- ]
- ]
- ];
-Module: IRC Modules
-File: dcc*.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1189
- },
- [
- 'C',
- {},
- '"dcc ctcp "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1191
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1193
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1195
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1199
- },
- [
- 'C',
- {},
- '"default dcc ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1201
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1203
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1205
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1209
- },
- [
- 'C',
- {},
- '"dcc unknown ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1211
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1213
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1215
- },
- 'string ',
- [
- 'C',
- {},
- '$sender'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1217
- },
- 'string ',
- [
- 'C',
- {},
- '$send_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1221
- },
- [
- 'C',
- {},
- '"dcc reply "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1223
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1225
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1227
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1231
- },
- [
- 'C',
- {},
- '"default dcc reply"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1233
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1235
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1237
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1241
- },
- [
- 'C',
- {},
- '"dcc unknown reply"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1243
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1245
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1247
- },
- 'string ',
- [
- 'C',
- {},
- '$sender'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1249
- },
- 'string ',
- [
- 'C',
- {},
- '$send_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1253
- },
- [
- 'C',
- {},
- '"dcc chat message"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1255
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1257
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1259
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1263
- },
- [
- 'C',
- {},
- '"dcc created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1265
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1267
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1271
- },
- [
- 'C',
- {},
- '"dcc destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1273
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1275
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1279
- },
- [
- 'C',
- {},
- '"dcc connected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1281
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1283
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1287
- },
- [
- 'C',
- {},
- '"dcc rejecting"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1289
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1291
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1295
- },
- [
- 'C',
- {},
- '"dcc closed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1297
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1299
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1303
- },
- [
- 'C',
- {},
- '"dcc request"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1305
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1307
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1309
- },
- 'string ',
- [
- 'C',
- {},
- '$send_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1313
- },
- [
- 'C',
- {},
- '"dcc request send"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1315
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1317
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1321
- },
- [
- 'C',
- {},
- '"dcc chat message"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1323
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1325
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1327
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1331
- },
- [
- 'C',
- {},
- '"dcc transfer update"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1333
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1335
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1339
- },
- [
- 'C',
- {},
- '"dcc get receive"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1341
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1343
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1347
- },
- [
- 'C',
- {},
- '"dcc error connect"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1349
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1351
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1355
- },
- [
- 'C',
- {},
- '"dcc error file create"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1357
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1359
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1361
- },
- 'string ',
- [
- 'C',
- {},
- '$filename'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1365
- },
- [
- 'C',
- {},
- '"dcc error file open"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1367
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1369
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1371
- },
- 'string ',
- [
- 'C',
- {},
- '$filename'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1373
- },
- 'int ',
- [
- 'C',
- {},
- '$errno'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1377
- },
- [
- 'C',
- {},
- '"dcc error get not found"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1379
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1381
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1385
- },
- [
- 'C',
- {},
- '"dcc error send exists"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1387
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1389
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1391
- },
- 'string ',
- [
- 'C',
- {},
- '$filename'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1395
- },
- [
- 'C',
- {},
- '"dcc error unknown type"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1397
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1399
- },
- 'string ',
- [
- 'C',
- {},
- '$type'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1403
- },
- [
- 'C',
- {},
- '"dcc error close not found"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1405
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1407
- },
- 'string ',
- [
- 'C',
- {},
- '$type'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1409
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1411
- },
- 'string ',
- [
- 'C',
- {},
- '$filename'
- ]
- ]
- ]
- ];
-File: autoignore.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1421
- },
- [
- 'C',
- {},
- '"autoignore new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1423
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1425
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1427
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Autoignore'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Autoignore'
- ],
- ' ',
- [
- 'C',
- {},
- '$autoignore'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1431
- },
- [
- 'C',
- {},
- '"autoignore remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1433
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1435
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1437
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Autoignore'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Autoignore'
- ],
- ' ',
- [
- 'C',
- {},
- '$autoignore'
- ]
- ]
- ]
- ];
-File: flood.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1447
- },
- [
- 'C',
- {},
- '"flood"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1449
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1451
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1453
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1455
- },
- 'string ',
- [
- 'C',
- {},
- '$host'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1457
- },
- 'int ',
- [
- 'C',
- {},
- '$level'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1459
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ]
- ];
-File: notifylist.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1469
- },
- [
- 'C',
- {},
- '"notifylist new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1471
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1473
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Notifylist'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Notifylist'
- ],
- ' ',
- [
- 'C',
- {},
- '$notify_list'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1477
- },
- [
- 'C',
- {},
- '"notifylist remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1479
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1481
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Notifylist'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Notifylist'
- ],
- ' ',
- [
- 'C',
- {},
- '$notify_list'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1485
- },
- [
- 'C',
- {},
- '"notifylist joined"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1487
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1489
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1491
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1493
- },
- 'string ',
- [
- 'C',
- {},
- '$user'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1495
- },
- 'string ',
- [
- 'C',
- {},
- '$host'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1497
- },
- 'string ',
- [
- 'C',
- {},
- '$real_name'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1499
- },
- 'string ',
- [
- 'C',
- {},
- '$away_message'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1503
- },
- [
- 'C',
- {},
- '"notifylist away changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1505
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1507
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1509
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1511
- },
- 'string ',
- [
- 'C',
- {},
- '$user'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1513
- },
- 'string ',
- [
- 'C',
- {},
- '$host'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1515
- },
- 'string ',
- [
- 'C',
- {},
- '$real_name'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1517
- },
- 'string ',
- [
- 'C',
- {},
- '$away_message'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1521
- },
- [
- 'C',
- {},
- '"notifylist left"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1523
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1525
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1527
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1529
- },
- 'string ',
- [
- 'C',
- {},
- '$user'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1531
- },
- 'string ',
- [
- 'C',
- {},
- '$host'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1533
- },
- 'string ',
- [
- 'C',
- {},
- '$real_name'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1535
- },
- 'string ',
- [
- 'C',
- {},
- '$away_message'
- ]
- ]
- ]
- ];
-File: proxy/listen.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1545
- },
- [
- 'C',
- {},
- '"proxy client connected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1547
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1549
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Client'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Client'
- ],
- ' ',
- [
- 'C',
- {},
- '$client'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1553
- },
- [
- 'C',
- {},
- '"proxy client disconnected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1555
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1557
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Client'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Client'
- ],
- ' ',
- [
- 'C',
- {},
- '$client'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1561
- },
- [
- 'C',
- {},
- '"proxy client command"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1563
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1565
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Client'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Client'
- ],
- ' ',
- [
- 'C',
- {},
- '$client'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1567
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1569
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1573
- },
- [
- 'C',
- {},
- '"proxy client dump"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1575
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1577
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Client'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Client'
- ],
- ' ',
- [
- 'C',
- {},
- '$client'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1579
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ]
- ];
-Module: Display (FE) Common
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1591
- },
- [
- 'C',
- {},
- '"gui print text"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1593
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1595
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1597
- },
- 'int ',
- [
- 'C',
- {},
- '$fg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1599
- },
- 'int ',
- [
- 'C',
- {},
- '$bg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1601
- },
- 'int ',
- [
- 'C',
- {},
- '$flags'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1603
- },
- 'string ',
- [
- 'C',
- {},
- '$text'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1605
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::TextDest'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::TextDest'
- ],
- ' ',
- [
- 'C',
- {},
- '$text_dest'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1609
- },
- [
- 'C',
- {},
- '"gui print text finished"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1611
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1613
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1617
- },
- '(Can be used to determine when all ',
- [
- 'C',
- {},
- '"gui print text"'
- ],
- 's are sent (not required))'
- ]
- ];
-File: completion.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1628
- },
- [
- 'C',
- {},
- '"complete word"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1630
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1632
- },
- 'arrayref of strings ',
- [
- 'C',
- {},
- '$strings_ref'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1634
- },
- 'An arrayref which can be modified to add additional completion candidates.'
- ],
- [
- 'Para',
- {
- 'start_line' => 1636
- },
- 'For example:'
- ],
- [
- 'Verbatim',
- {
- 'xml:space' => 'preserve',
- 'start_line' => 1638
- },
- ' push @$strings_ref, "another_candidate";'
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1640
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1642
- },
- 'string ',
- [
- 'C',
- {},
- '$word'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1644
- },
- 'The prefix of the word currently being typed.'
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1646
- },
- 'string ',
- [
- 'C',
- {},
- '$linestart'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1648
- },
- 'The contents of the input line up to (but not including) the current word prefix ',
- [
- 'C',
- {},
- '$word'
- ],
- '.'
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1651
- },
- 'int ',
- [
- 'C',
- {},
- '$want_space'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1653
- },
- 'A scalar reference which can be set to indicate if tab completion of these candidates should be appended with a space.'
- ]
- ]
- ];
-File: fe-common-core.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1664
- },
- [
- 'C',
- {},
- '"irssi init read settings"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1666
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1668
- },
- [
- 'I',
- {},
- 'None'
- ]
- ]
- ]
- ];
-File: fe-exec.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1678
- },
- [
- 'C',
- {},
- '"exec new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1680
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1682
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Process'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Process'
- ],
- ' ',
- [
- 'C',
- {},
- '$process'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1686
- },
- [
- 'C',
- {},
- '"exec remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1688
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1690
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Process'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Process'
- ],
- ' ',
- [
- 'C',
- {},
- '$process'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1692
- },
- 'int ',
- [
- 'C',
- {},
- '$status'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1696
- },
- [
- 'C',
- {},
- '"exec input"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1698
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1700
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Process'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Process'
- ],
- ' ',
- [
- 'C',
- {},
- '$process'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1702
- },
- 'string ',
- [
- 'C',
- {},
- '$text'
- ]
- ]
- ]
- ];
-File: fe-messages.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1712
- },
- [
- 'C',
- {},
- '"message public"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1714
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1716
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1718
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1720
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1722
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1724
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1728
- },
- [
- 'C',
- {},
- '"message private"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1730
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1732
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1734
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1736
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1738
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1742
- },
- [
- 'C',
- {},
- '"message own_public"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1744
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1746
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1748
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1750
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1754
- },
- [
- 'C',
- {},
- '"message own_private"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1756
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1758
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1760
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1762
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1764
- },
- 'string ',
- [
- 'C',
- {},
- '$original_target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1768
- },
- [
- 'C',
- {},
- '"message join"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1770
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1772
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1774
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1776
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1778
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1782
- },
- [
- 'C',
- {},
- '"message part"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1784
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1786
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1788
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1790
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1792
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1794
- },
- 'string ',
- [
- 'C',
- {},
- '$reason'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1798
- },
- [
- 'C',
- {},
- '"message quit"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1800
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1802
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1804
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1806
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1808
- },
- 'string ',
- [
- 'C',
- {},
- '$reason'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1812
- },
- [
- 'C',
- {},
- '"message kick"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1814
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1816
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1818
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1820
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1822
- },
- 'string ',
- [
- 'C',
- {},
- '$kicker'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1824
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1826
- },
- 'string ',
- [
- 'C',
- {},
- '$reason'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1830
- },
- [
- 'C',
- {},
- '"message nick"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1832
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1834
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1836
- },
- 'string ',
- [
- 'C',
- {},
- '$new_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1838
- },
- 'string ',
- [
- 'C',
- {},
- '$old_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1840
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1844
- },
- [
- 'C',
- {},
- '"message own_nick"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1846
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1848
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1850
- },
- 'string ',
- [
- 'C',
- {},
- '$new_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1852
- },
- 'string ',
- [
- 'C',
- {},
- '$old_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1854
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1858
- },
- [
- 'C',
- {},
- '"message invite"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1860
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1862
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1864
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1866
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1868
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1872
- },
- [
- 'C',
- {},
- '"message topic"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1874
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1876
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1878
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1880
- },
- 'string ',
- [
- 'C',
- {},
- '$topic'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1882
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1884
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ]
- ];
-File: keyboard.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1894
- },
- [
- 'C',
- {},
- '"keyinfo created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1896
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1898
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Keyinfo'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Keyinfo'
- ],
- ' ',
- [
- 'C',
- {},
- '$key_info'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1902
- },
- [
- 'C',
- {},
- '"keyinfo destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1904
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1906
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Keyinfo'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Keyinfo'
- ],
- ' ',
- [
- 'C',
- {},
- '$key_info'
- ]
- ]
- ]
- ];
-File: printtext.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1916
- },
- [
- 'C',
- {},
- '"print text"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1918
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1920
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::TextDest'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::TextDest'
- ],
- ' ',
- [
- 'C',
- {},
- '$text_dest'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1922
- },
- 'string ',
- [
- 'C',
- {},
- '$text'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1924
- },
- 'string ',
- [
- 'C',
- {},
- '$stripped_text'
- ]
- ]
- ]
- ];
-File: themes.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1934
- },
- [
- 'C',
- {},
- '"theme created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1936
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1938
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Theme'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Theme'
- ],
- ' ',
- [
- 'C',
- {},
- '$theme'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1942
- },
- [
- 'C',
- {},
- '"theme destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1944
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1946
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Theme'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Theme'
- ],
- ' ',
- [
- 'C',
- {},
- '$theme'
- ]
- ]
- ]
- ];
-File: window-activity.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1956
- },
- [
- 'C',
- {},
- '"window hilight"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1958
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1960
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1964
- },
- [
- 'C',
- {},
- '"window dehilight"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1966
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1968
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1972
- },
- [
- 'C',
- {},
- '"window activity"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1974
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1976
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1978
- },
- 'int ',
- [
- 'C',
- {},
- '$old_level'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1982
- },
- [
- 'C',
- {},
- '"window item hilight"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1984
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1986
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1990
- },
- [
- 'C',
- {},
- '"window item activity"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1992
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1994
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1996
- },
- 'int ',
- [
- 'C',
- {},
- '$old_level'
- ]
- ]
- ]
- ];
-File: window-items.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2006
- },
- [
- 'C',
- {},
- '"window item new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2008
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2010
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2012
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2016
- },
- [
- 'C',
- {},
- '"window item remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2018
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2020
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2022
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2026
- },
- [
- 'C',
- {},
- '"window item moved"'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 2028
- },
- [
- 'B',
- {},
- 'TODO: Check ordering of arguments from/to here'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2030
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2032
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_from'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2034
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2036
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_to'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2040
- },
- [
- 'C',
- {},
- '"window item changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2042
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2044
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2046
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2050
- },
- [
- 'C',
- {},
- '"window item server changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2052
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2054
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2056
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ]
- ];
-File: windows.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2066
- },
- [
- 'C',
- {},
- '"window created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2068
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2070
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2074
- },
- [
- 'C',
- {},
- '"window destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2076
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2078
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2082
- },
- [
- 'C',
- {},
- '"window changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2084
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2086
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2088
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$old_window'
- ]
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 2092
- },
- [
- 'B',
- {},
- 'TODO: does this fire if you dont\' change windows? (eg: send a switch commandf for the window you\'re already on)'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2095
- },
- [
- 'C',
- {},
- '"window changed automatic"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2097
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2099
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2103
- },
- [
- 'C',
- {},
- '"window server changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2105
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2107
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2109
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2113
- },
- [
- 'C',
- {},
- '"window refnum changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2115
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2117
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2119
- },
- 'int ',
- [
- 'C',
- {},
- '$old_refnum'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2123
- },
- [
- 'C',
- {},
- '"window name changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2125
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2127
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2131
- },
- [
- 'C',
- {},
- '"window history changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2133
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2135
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2137
- },
- 'string ',
- [
- 'C',
- {},
- '$old_name'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2141
- },
- [
- 'C',
- {},
- '"window level changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2143
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2145
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ]
- ];
-Module: Display (FE) IRC
-File: fe-events.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2157
- },
- [
- 'C',
- {},
- '"default event numeric"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2159
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2161
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2163
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2165
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2167
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ]
- ];
-File: fe-irc-messages.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2177
- },
- [
- 'C',
- {},
- '"message irc op_public"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2179
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2181
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2183
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2185
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2187
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2189
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2193
- },
- [
- 'C',
- {},
- '"message irc own_wall"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2195
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2197
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2199
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2201
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2205
- },
- [
- 'C',
- {},
- '"message irc own_action"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2207
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2209
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2211
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2213
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2217
- },
- [
- 'C',
- {},
- '"message irc action"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2219
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2221
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2223
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2225
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2227
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2229
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2233
- },
- [
- 'C',
- {},
- '"message irc own_notice"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2235
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2237
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2239
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2241
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2245
- },
- [
- 'C',
- {},
- '"message irc notice"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2247
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2249
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2251
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2253
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2255
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2257
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2261
- },
- [
- 'C',
- {},
- '"message irc own_ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2263
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2265
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2267
- },
- 'string ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2269
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2271
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2275
- },
- [
- 'C',
- {},
- '"message irc ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2277
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2279
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2281
- },
- 'string ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2283
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2285
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2287
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2289
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ]
- ];
-File: fe-modes.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2299
- },
- [
- 'C',
- {},
- '"message irc mode"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2301
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2303
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2305
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2307
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2309
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2311
- },
- 'string ',
- [
- 'C',
- {},
- '$mode'
- ]
- ]
- ]
- ];
-File: dcc/fe-dcc-chat-messages.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2321
- },
- [
- 'C',
- {},
- '"message dcc own"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2323
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2325
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2327
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2331
- },
- [
- 'C',
- {},
- '"message dcc own_action"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2333
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2335
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2337
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2341
- },
- [
- 'C',
- {},
- '"message dcc own_ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2343
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2345
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2347
- },
- 'string ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2349
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2353
- },
- [
- 'C',
- {},
- '"message dcc"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2355
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2357
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2359
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2363
- },
- [
- 'C',
- {},
- '"message dcc action"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2365
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2367
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2369
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2373
- },
- [
- 'C',
- {},
- '"message dcc ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2375
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2377
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2379
- },
- 'string ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2381
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ]
- ];
-Module: Display (FE) Text
-File: gui-readline.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2393
- },
- [
- 'C',
- {},
- '"gui key pressed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2395
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2397
- },
- 'int ',
- [
- 'C',
- {},
- '$key'
- ]
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 2401
- },
- 'Notes:'
- ],
- [
- 'Para',
- {
- 'start_line' => 2403
- },
- 'Ordinary keys ',
- [
- 'C',
- {},
- 'a-zA-Z'
- ],
- ' are their ordinal (ascii) equivalents.'
- ],
- [
- 'Para',
- {
- 'start_line' => 2405
- },
- 'Ctrl-key begins at 1 (',
- [
- 'C',
- {},
- 'C-a'
- ],
- '), but skips 13?, ',
- [
- 'C',
- {},
- 'C-j'
- ],
- ' and ',
- [
- 'C',
- {},
- 'C-m'
- ],
- ' both give the same as ',
- [
- 'C',
- {},
- 'RET'
- ],
- ' (10). Tab and ',
- [
- 'C',
- {},
- 'C-i'
- ],
- ' are equivalent (9). ',
- [
- 'C',
- {},
- 'C-o'
- ],
- ' does not appear to send an observable sequence.'
- ],
- [
- 'Para',
- {
- 'start_line' => 2409
- },
- [
- 'C',
- {},
- 'BS'
- ],
- ' sends 127.'
- ],
- [
- 'Para',
- {
- 'start_line' => 2411
- },
- [
- 'C',
- {},
- 'meta-',
- '<',
- 'key',
- '>'
- ],
- ' sends a 27 (ESC) followed by the original key value.'
- ],
- [
- 'Para',
- {
- 'start_line' => 2413
- },
- 'Arrow keys send usual meta-stuff (',
- [
- 'C',
- {},
- '\\e[',
- [
- 'I',
- {},
- 'ABCD'
- ]
- ],
- ').'
- ],
- [
- 'Para',
- {
- 'start_line' => 2415
- },
- [
- 'B',
- {},
- 'TODO: Turn this into some sort of list'
- ]
- ]
- ];
-File: gui-printtext.c
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2423
- },
- [
- 'C',
- {},
- '"beep"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2425
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2427
- },
- [
- 'I',
- {},
- 'None'
- ]
- ]
- ]
- ];
-Module: Perl Scripting
-Signal list
-$VAR1 = [
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2437
- },
- [
- 'C',
- {},
- '"script error"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2439
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2441
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Script'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Script'
- ],
- ' ',
- [
- 'C',
- {},
- '$script'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2443
- },
- 'string ',
- [
- 'C',
- {},
- '$error_msg'
- ]
- ]
- ]
- ];
diff --git a/docs/signals.txt b/docs/signals.txt
deleted file mode 100644
index 27138e6..0000000
--- a/docs/signals.txt
+++ /dev/null
@@ -1,257 +0,0 @@
-core
-----
-
-* Requires to work properly:
-
- "gui exit"
- "gui dialog", char *type, char *text
- "send command", char *command, SERVER_REC, WI_ITEM_REC
-
-* Provides signals:
-
-
-
-IRC core
---------
-
-* Provides signals:
-
-bans.c:
- "ban type changed", char *bantype
-
-channels, nicklist:
- "channel joined", CHANNEL_REC
- "channel wholist", CHANNEL_REC
- "channel sync", CHANNEL_REC
-
- "channel topic changed", CHANNEL_REC
-
-ctcp.c:
-
- "ctcp msg", SERVER_REC, char *args, char *nick, char *addr, char *target
- "ctcp msg "<cmd>, SERVER_REC, char *args, char *nick, char *addr, char *target
- "default ctcp msg", SERVER_REC, char *args, char *nick, char *addr, char *target
- "ctcp reply", SERVER_REC, char *args, char *nick, char *addr, char *target
- "ctcp reply "<cmd>, SERVER_REC, char *args, char *nick, char *addr, char *target
- "default ctcp reply", SERVER_REC, char *args, char *nick, char *addr, char *target
- "ctcp action", SERVER_REC, char *args, char *nick, char *addr, char *target
-
-irc-log.c:
- "awaylog show", LOG_REC, int away_msgs, int filepos
-
-irc-nicklist.c:
- "server nick changed", SERVER_REC
-
-irc-servers.c:
- "event connected", SERVER_REC
-
-irc.c:
-
- "server event", SERVER_REC, char *data, char *sender_nick, char *sender_address
- "event "<cmd>, SERVER_REC, char *args, char *sender_nick, char *sender_address
- "default event", SERVER_REC, char *data, char *sender_nick, char *sender_address
- "whois default event", SERVER_REC, char *args, char *sender_nick, char *sender_address
-
- "server incoming", SERVER_REC, char *data
-
-(for perl parser..)
- "redir "<cmd>, SERVER_REC, char *args, char *sender_nick, char *sender_address
-
-lag.c:
- "server lag", SERVER_REC
- "server lag disconnect", SERVER_REC
-
-massjoin.c:
- "massjoin", CHANNEL_REC, GSList of NICK_RECs
-
-mode-lists.c:
- "ban new", CHANNEL_REC, BAN_REC
- "ban remove", CHANNEL_REC, BAN_REC, char *setby
-
-modes.c:
- "channel mode changed", CHANNEL_REC, char *setby
- "nick mode changed", CHANNEL_REC, NICK_REC, char *setby, char *mode, char *type
- "user mode changed", SERVER_REC, char *old
- "away mode changed", SERVER_REC
-
-netsplit.c:
- "netsplit server new", SERVER_REC, NETSPLIT_SERVER_REC
- "netsplit server remove", SERVER_REC, NETSPLIT_SERVER_REC
- "netsplit new", NETSPLIT_REC
- "netsplit remove", NETSPLIT_REC
-
-IRC modules
------------
-
-* 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 request", DCC_REC, char *sendaddr
- "dcc request send", DCC_REC
- "dcc chat message", DCC_REC, char *msg
- "dcc transfer update", DCC_REC
- "dcc get receive", DCC_REC
- "dcc error connect", DCC_REC
- "dcc error file create", DCC_REC, char *filename
- "dcc error file open", char *nick, char *filename, int errno
- "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
-
-autoignore.c:
-
- "autoignore new", SERVER_REC, AUTOIGNORE_REC
- "autoignore remove", SERVER_REC, AUTOIGNORE_REC
-
-flood.c:
-
- "flood", SERVER_REC, char *nick, char *host, int level, char *target
-
-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 left", SERVER_REC, char *nick, char *user, char *host, char *realname, char *awaymsg
-
-proxy/listen.c:
-
- "proxy client connected", CLIENT_REC
- "proxy client disconnected", CLIENT_REC
- "proxy client command", CLIENT_REC, char *args, char *data
- "proxy client dump", CLIENT_REC, char *data
-
-FE common
----------
-
-* Requires to work properly:
-
- "gui print text", WINDOW_REC, int fg, int bg, int flags, char *text, TEXT_DEST_REC
-
-(Can be used to determine when all "gui print text"s are sent (not required))
- "gui print text finished", WINDOW_REC
-
-* Provides signals:
-
-completion.c:
- "complete word", GList * of char*, WINDOW_REC, char *word, char *linestart, int *want_space
-
-fe-common-core.c:
- "irssi init read settings"
-
-fe-exec.c:
- "exec new", PROCESS_REC
- "exec remove", PROCESS_REC, int status
- "exec input", PROCESS_REC, char *text
-
-fe-messages.c:
- "message public", SERVER_REC, char *msg, char *nick, char *address, char *target
- "message private", SERVER_REC, char *msg, char *nick, char *address
- "message own_public", SERVER_REC, char *msg, char *target
- "message own_private", SERVER_REC, char *msg, char *target, char *orig_target
- "message join", SERVER_REC, char *channel, char *nick, char *address
- "message part", SERVER_REC, char *channel, char *nick, char *address, char *reason
- "message quit", SERVER_REC, char *nick, char *address, char *reason
- "message kick", SERVER_REC, char *channel, char *nick, char *kicker, char *address, char *reason
- "message nick", SERVER_REC, char *newnick, char *oldnick, char *address
- "message own_nick", SERVER_REC, char *newnick, char *oldnick, char *address
- "message invite", SERVER_REC, char *channel, char *nick, char *address
- "message topic", SERVER_REC, char *channel, char *topic, char *nick, char *address
-
-keyboard.c:
- "keyinfo created", KEYINFO_REC
- "keyinfo destroyed", KEYINFO_REC
-
-printtext.c:
- "print text", TEXT_DEST_REC *dest, char *text, char *stripped
-
-themes.c:
- "theme created", THEME_REC
- "theme destroyed", THEME_REC
-
-window-activity.c:
- "window hilight", WINDOW_REC
- "window dehilight", WINDOW_REC
- "window activity", WINDOW_REC, int old_level
- "window item hilight", WI_ITEM_REC
- "window item activity", WI_ITEM_REC, int old_level
-
-window-items.c:
- "window item new", WINDOW_REC, WI_ITEM_REC
- "window item remove", WINDOW_REC, WI_ITEM_REC
- "window item moved", WINDOW_REC, WI_ITEM_REC, WINDOW_REC
- "window item changed", WINDOW_REC, WI_ITEM_REC
- "window item server changed", WINDOW_REC, WI_ITEM_REC
-
-windows.c:
- "window created", WINDOW_REC
- "window destroyed", WINDOW_REC
- "window changed", WINDOW_REC, WINDOW_REC old
- "window changed automatic", WINDOW_REC
- "window server changed", WINDOW_REC, SERVER_REC
- "window refnum changed", WINDOW_REC, int old
- "window name changed", WINDOW_REC
- "window history changed", WINDOW_REC, char *oldname
- "window level changed", WINDOW_REC
-
-FE IRC
-------
-
-fe-events.c:
- "default event numeric", SERVER_REC, char *data, char *nick, char *address
-
-fe-irc-messages.c:
- "message irc op_public", SERVER_REC, char *msg, char *nick, char *address, char *target
- "message irc own_wall", SERVER_REC, char *msg, char *target
- "message irc own_action", SERVER_REC, char *msg, char *target
- "message irc action", SERVER_REC, char *msg, char *nick, char *address, char *target
- "message irc own_notice", SERVER_REC, char *msg, char *target
- "message irc notice", SERVER_REC, char *msg, char *nick, char *address, char *target
- "message irc own_ctcp", SERVER_REC, char *cmd, char *data, char *target
- "message irc ctcp", SERVER_REC, char *cmd, char *data, char *nick, char *address, char *target
-
-fe-modes.c:
- "message irc mode", SERVER_REC, char *channel, char *nick, char *addr, char *mode
-
-dcc/fe-dcc-chat-messages.c:
- "message dcc own", DCC_REC *dcc, char *msg
- "message dcc own_action", DCC_REC *dcc, char *msg
- "message dcc own_ctcp", DCC_REC *dcc, char *cmd, char *data
- "message dcc", DCC_REC *dcc, char *msg
- "message dcc action", DCC_REC *dcc, char *msg
- "message dcc ctcp", DCC_REC *dcc, char *cmd, char *data
-
-Text FE
--------
-
-gui-readline.c:
- "gui key pressed", int key
-
-gui-printtext.c:
- "beep"
-
-Perl
-----
-
-"script error", PERL_SCRIPT_REC, char *errormsg
-
-
-All the content of this site is copyright © 2000-2010 The Irssi project.
diff --git a/docs/sigtree.pl b/docs/sigtree.pl
deleted file mode 100644
index 14ef6ff..0000000
--- a/docs/sigtree.pl
+++ /dev/null
@@ -1,13918 +0,0 @@
-$VAR1 = [
- 'Document',
- {
- 'start_line' => 3
- },
- [
- 'head1',
- {
- 'start_line' => 3
- },
- 'NAME'
- ],
- [
- 'Para',
- {
- 'start_line' => 5
- },
- 'Irssi Signal Documentation'
- ],
- [
- 'head1',
- {
- 'start_line' => 7
- },
- 'DESCRIPTION'
- ],
- [
- 'Para',
- {
- 'start_line' => 9
- },
- 'Perl POD documentation based on the doc/signals.txt documentation supplied with Irssi.'
- ],
- [
- 'head1',
- {
- 'start_line' => 12
- },
- 'USING SIGNALS'
- ],
- [
- 'Para',
- {
- 'start_line' => 14
- },
- 'See ',
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi'
- ], 'Pod::Simple::LinkSection' ),
- 'section' => bless( [
- '',
- {},
- 'Signals'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- '"',
- 'Signals',
- '" in ',
- 'Irssi'
- ]
- ],
- [
- 'for',
- {
- '~really' => '=begin',
- 'target' => 'irssi_signal_types',
- '~ignore' => 0,
- 'target_matching' => 'irssi_signal_types',
- 'start_line' => 97,
- '~resolve' => 0
- },
- [
- 'Data',
- {
- 'xml:space' => 'preserve',
- 'start_line' => 18
- },
- 'START OF SIGNAL TYPES'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 20
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 22
- },
- [
- 'C',
- {},
- 'GList \\* of ([^,]*)'
- ],
- ' ',
- [
- 'C',
- {},
- 'glistptr_$1'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 24
- },
- [
- 'C',
- {},
- 'GSList \\* of (\\w+)s'
- ],
- ' ',
- [
- 'C',
- {},
- 'gslist_$1'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 26
- },
- [
- 'C',
- {},
- 'char \\*'
- ],
- ' ',
- [
- 'C',
- {},
- 'string'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 28
- },
- [
- 'C',
- {},
- 'ulong \\*'
- ],
- ' ',
- [
- 'C',
- {},
- 'ulongptr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 30
- },
- [
- 'C',
- {},
- 'int \\*'
- ],
- ' ',
- [
- 'C',
- {},
- 'intptr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 32
- },
- [
- 'C',
- {},
- 'int'
- ],
- ' ',
- [
- 'C',
- {},
- 'int'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 36
- },
- [
- 'C',
- {},
- 'CHATNET_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'iobject'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 38
- },
- [
- 'C',
- {},
- 'SERVER_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'iobject'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 40
- },
- [
- 'C',
- {},
- 'RECONNECT_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'iobject'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 42
- },
- [
- 'C',
- {},
- 'CHANNEL_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'iobject'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 44
- },
- [
- 'C',
- {},
- 'QUERY_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'iobject'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 46
- },
- [
- 'C',
- {},
- 'COMMAND_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'iobject'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 48
- },
- [
- 'C',
- {},
- 'NICK_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'iobject'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 50
- },
- [
- 'C',
- {},
- 'LOG_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Log'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 52
- },
- [
- 'C',
- {},
- 'RAWLOG_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Rawlog'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 54
- },
- [
- 'C',
- {},
- 'IGNORE_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Ignore'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 56
- },
- [
- 'C',
- {},
- 'MODULE_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Module'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 59
- },
- [
- 'C',
- {},
- 'BAN_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Irc::Ban'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 61
- },
- [
- 'C',
- {},
- 'NETSPLIT_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Irc::Netsplit'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 63
- },
- [
- 'C',
- {},
- 'NETSPLIT_SERVER__REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Irc::Netsplitserver'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 66
- },
- [
- 'C',
- {},
- 'DCC_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'siobject'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 68
- },
- [
- 'C',
- {},
- 'AUTOIGNORE_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Irc::Autoignore'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 70
- },
- [
- 'C',
- {},
- 'AUTOIGNORE_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Irc::Autoignore'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 72
- },
- [
- 'C',
- {},
- 'NOTIFYLIST_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Irc::Notifylist'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 74
- },
- [
- 'C',
- {},
- 'CLIENT_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Irc::Client'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 77
- },
- [
- 'C',
- {},
- 'THEME_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::UI::Theme'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 79
- },
- [
- 'C',
- {},
- 'KEYINFO_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::UI::Keyinfo'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 81
- },
- [
- 'C',
- {},
- 'PROCESS_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::UI::Process'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 83
- },
- [
- 'C',
- {},
- 'TEXT_DEST_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::UI::TextDest'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 85
- },
- [
- 'C',
- {},
- 'WINDOW_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::UI::Window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 87
- },
- [
- 'C',
- {},
- 'WI_ITEM_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'iobject'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 91
- },
- [
- 'C',
- {},
- 'PERL_SCRIPT_REC'
- ],
- ' ',
- [
- 'C',
- {},
- 'Irssi::Script'
- ]
- ]
- ],
- [
- 'Data',
- {
- 'xml:space' => 'preserve',
- 'start_line' => 95
- },
- 'END OF SIGNAL TYPES'
- ]
- ],
- [
- 'head1',
- {
- 'start_line' => 99
- },
- 'SIGNAL DEFINITIONS'
- ],
- [
- 'Para',
- {
- 'start_line' => 101
- },
- 'The following signals are categorised as in the original documentation, but have been revised to note Perl variable types and class names.'
- ],
- [
- 'Para',
- {
- 'start_line' => 104
- },
- 'Arguments are passed to signal handlers in the usual way, via ',
- [
- 'C',
- {},
- '@_'
- ],
- '.'
- ],
- [
- 'for',
- {
- 'target' => 'irssi_signal_defs',
- '~really' => '=for',
- '~ignore' => 0,
- 'target_matching' => 'irssi_signal_defs',
- 'start_line' => 106,
- '~resolve' => 0
- },
- [
- 'Data',
- {
- 'xml:space' => 'preserve',
- 'start_line' => 106
- },
- 'START OF SIGNAL DEFINITIONS'
- ]
- ],
- [
- 'head2',
- {
- 'start_line' => 108
- },
- 'Core'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 110
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 112
- },
- [
- 'C',
- {},
- '"gui exit"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 114
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 116
- },
- [
- 'I',
- {},
- 'None'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 120
- },
- [
- 'C',
- {},
- '"gui dialog"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 122
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 124
- },
- 'string ',
- [
- 'C',
- {},
- '$type'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 126
- },
- 'string ',
- [
- 'C',
- {},
- '$text'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 130
- },
- [
- 'C',
- {},
- '"send command"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 132
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 134
- },
- [
- 'C',
- {},
- 'string $command'
- ],
- ','
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 136
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ],
- ','
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 138
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 142
- },
- 'This is sent when a command is entered via the GUI, or by scripts via ',
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::command'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::command'
- ],
- '.'
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 146
- },
- [
- 'F',
- {},
- 'chat-protocols.c'
- ],
- ':'
- ],
- [
- 'Para',
- {
- 'start_line' => 148
- },
- [
- 'B',
- {},
- 'TODO: What are CHAT_PROTOCOL_REC types?'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 150
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 152
- },
- [
- 'C',
- {},
- '"chat protocol created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 154
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 156
- },
- 'CHAT_PROTOCOL_REC ',
- [
- 'C',
- {},
- '$protocol'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 160
- },
- [
- 'C',
- {},
- '"chat protocol updated"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 162
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 164
- },
- 'CHAT_PROTOCOL_REC ',
- [
- 'C',
- {},
- '$protocol'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 168
- },
- [
- 'C',
- {},
- '"chat protocol destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 170
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 172
- },
- 'CHAT_PROTOCOL_REC ',
- [
- 'C',
- {},
- '$protocol'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 178
- },
- [
- 'F',
- {},
- 'channels.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 180
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 182
- },
- [
- 'C',
- {},
- '"channel created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 184
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 186
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 188
- },
- 'int ',
- [
- 'C',
- {},
- '$automatic'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 192
- },
- [
- 'C',
- {},
- '"channel destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 194
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 196
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 202
- },
- [
- 'F',
- {},
- 'chatnets.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 204
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 206
- },
- [
- 'C',
- {},
- '"chatnet created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 208
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 210
- },
- 'CHATNET_REC ',
- [
- 'C',
- {},
- '$chatnet'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 214
- },
- [
- 'C',
- {},
- '"chatnet destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 216
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 218
- },
- 'CHATNET_REC ',
- [
- 'C',
- {},
- '$chatnet'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 224
- },
- [
- 'F',
- {},
- 'commands.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 226
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 228
- },
- [
- 'C',
- {},
- '"commandlist new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 230
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 232
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Command'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Command'
- ],
- ' ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 236
- },
- [
- 'C',
- {},
- '"commandlist remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 238
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 240
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Command'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Command'
- ],
- ' ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 244
- },
- [
- 'C',
- {},
- '"error command"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 246
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 248
- },
- 'int ',
- [
- 'C',
- {},
- '$err'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 250
- },
- 'string ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 254
- },
- [
- 'C',
- {},
- '"send command"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 256
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 258
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 260
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 262
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$witem'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 266
- },
- [
- 'C',
- {},
- '"send text"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 268
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 270
- },
- 'string ',
- [
- 'C',
- {},
- '$line'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 272
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 274
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$witem'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 278
- },
- [
- 'C',
- {},
- '"command "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 280
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 282
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 284
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 286
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$witem'
- ]
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 290
- },
- [
- 'B',
- {},
- 'TODO: check this "cmd" out?'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 292
- },
- [
- 'C',
- {},
- '"default command"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 294
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 296
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 298
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 300
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$witem'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 306
- },
- [
- 'F',
- {},
- 'ignore.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 308
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 310
- },
- [
- 'C',
- {},
- '"ignore created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 312
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 314
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Ignore'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Ignore'
- ],
- ' ',
- [
- 'C',
- {},
- '$ignore'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 318
- },
- [
- 'C',
- {},
- '"ignore destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 320
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 322
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Ignore'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Ignore'
- ],
- ' ',
- [
- 'C',
- {},
- '$ignore'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 326
- },
- [
- 'C',
- {},
- '"ignore changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 328
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 330
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Ignore'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Ignore'
- ],
- ' ',
- [
- 'C',
- {},
- '$ignore'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 336
- },
- [
- 'F',
- {},
- 'log.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 338
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 340
- },
- [
- 'C',
- {},
- '"log new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 342
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 344
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 348
- },
- [
- 'C',
- {},
- '"log remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 350
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 352
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 356
- },
- [
- 'C',
- {},
- '"log create failed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 358
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 360
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 364
- },
- [
- 'C',
- {},
- '"log locked"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 366
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 368
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 372
- },
- [
- 'C',
- {},
- '"log started"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 374
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 376
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 380
- },
- [
- 'C',
- {},
- '"log stopped"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 382
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 384
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 388
- },
- [
- 'C',
- {},
- '"log rotated"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 390
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 392
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 396
- },
- [
- 'C',
- {},
- '"log written"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 398
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 400
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 402
- },
- 'string ',
- [
- 'C',
- {},
- '$line'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 408
- },
- [
- 'F',
- {},
- 'modules.c'
- ],
- ':'
- ],
- [
- 'Para',
- {
- 'start_line' => 410
- },
- [
- 'B',
- {},
- 'TODO: what are these types?'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 412
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 414
- },
- [
- 'C',
- {},
- '"module loaded"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 416
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 418
- },
- 'MODULE_REC ',
- [
- 'C',
- {},
- '$module'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 420
- },
- 'MODULE_FILE_REC ',
- [
- 'C',
- {},
- '$module_file'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 424
- },
- [
- 'C',
- {},
- '"module unloaded"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 426
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 428
- },
- 'MODULE_REC ',
- [
- 'C',
- {},
- '$module'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 430
- },
- 'MODULE_FILE_REC ',
- [
- 'C',
- {},
- '$module_file'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 434
- },
- [
- 'C',
- {},
- '"module error"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 436
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 438
- },
- 'int ',
- [
- 'C',
- {},
- '$error'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 440
- },
- 'string ',
- [
- 'C',
- {},
- '$text'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 442
- },
- 'string ',
- [
- 'C',
- {},
- '$root_module'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 444
- },
- 'string ',
- [
- 'C',
- {},
- '$sub_module'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 450
- },
- [
- 'F',
- {},
- 'nicklist.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 452
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 454
- },
- [
- 'C',
- {},
- '"nicklist new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 456
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 458
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 460
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 464
- },
- [
- 'C',
- {},
- '"nicklist remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 466
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 468
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 470
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 474
- },
- [
- 'C',
- {},
- '"nicklist changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 476
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 478
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 480
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 482
- },
- 'string ',
- [
- 'C',
- {},
- '$old_nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 486
- },
- [
- 'C',
- {},
- '"nicklist host changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 488
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 490
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 492
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 496
- },
- [
- 'C',
- {},
- '"nicklist gone changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 498
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 500
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 502
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 506
- },
- [
- 'C',
- {},
- '"nicklist serverop changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 508
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 510
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 512
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 518
- },
- [
- 'F',
- {},
- 'pidwait.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 520
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 522
- },
- [
- 'C',
- {},
- '"pidwait"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 524
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 526
- },
- 'int ',
- [
- 'C',
- {},
- '$pid'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 528
- },
- 'int ',
- [
- 'C',
- {},
- '$status'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 534
- },
- [
- 'F',
- {},
- 'queries.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 536
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 538
- },
- [
- 'C',
- {},
- '"query created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 540
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 542
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Query'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Query'
- ],
- ' ',
- [
- 'C',
- {},
- '$query'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 544
- },
- 'int ',
- [
- 'C',
- {},
- '$automatic'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 548
- },
- [
- 'C',
- {},
- '"query destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 550
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 552
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Query'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Query'
- ],
- ' ',
- [
- 'C',
- {},
- '$query'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 556
- },
- [
- 'C',
- {},
- '"query nick changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 558
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 560
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Query'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Query'
- ],
- ' ',
- [
- 'C',
- {},
- '$query'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 562
- },
- 'string ',
- [
- 'C',
- {},
- '$original_nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 566
- },
- [
- 'C',
- {},
- '"window item name changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 568
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 570
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$witem'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 574
- },
- [
- 'C',
- {},
- '"query address changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 576
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 578
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Query'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Query'
- ],
- ' ',
- [
- 'C',
- {},
- '$query'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 582
- },
- [
- 'C',
- {},
- '"query server changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 584
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 586
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Query'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Query'
- ],
- ' ',
- [
- 'C',
- {},
- '$query'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 588
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 595
- },
- [
- 'F',
- {},
- 'rawlog.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 597
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 599
- },
- [
- 'C',
- {},
- '"rawlog"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 601
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 603
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Rawlog'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Rawlog'
- ],
- ' ',
- [
- 'C',
- {},
- '$raw_log'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 605
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 611
- },
- [
- 'F',
- {},
- 'server.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 613
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 615
- },
- [
- 'C',
- {},
- '"server looking"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 617
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 619
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 623
- },
- [
- 'C',
- {},
- '"server connected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 625
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 627
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 632
- },
- [
- 'C',
- {},
- '"server connecting"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 634
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 636
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 638
- },
- 'ulongptr ',
- [
- 'C',
- {},
- '$ip'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 642
- },
- [
- 'C',
- {},
- '"server connect failed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 644
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 646
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 650
- },
- [
- 'C',
- {},
- '"server disconnected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 652
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 654
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 658
- },
- [
- 'C',
- {},
- '"server quit"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 660
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 662
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 664
- },
- 'string ',
- [
- 'C',
- {},
- '$message'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 668
- },
- [
- 'C',
- {},
- '"server sendmsg"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 670
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 672
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 674
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 676
- },
- 'string ',
- [
- 'C',
- {},
- '$message'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 678
- },
- 'int ',
- [
- 'C',
- {},
- '$target_type'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 684
- },
- [
- 'F',
- {},
- 'settings.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 686
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 688
- },
- [
- 'C',
- {},
- '"setup changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 690
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 692
- },
- [
- 'I',
- {},
- 'None'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 696
- },
- [
- 'C',
- {},
- '"setup reread"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 698
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 700
- },
- 'string ',
- [
- 'C',
- {},
- '$fname'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 704
- },
- [
- 'C',
- {},
- '"setup saved"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 706
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 708
- },
- 'string ',
- [
- 'C',
- {},
- '$fname'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 710
- },
- 'int ',
- [
- 'C',
- {},
- '$autosaved'
- ]
- ]
- ]
- ],
- [
- 'head2',
- {
- 'start_line' => 716
- },
- 'IRC Core'
- ],
- [
- 'head3',
- {
- 'start_line' => 718
- },
- [
- 'F',
- {},
- 'bans.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 720
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 722
- },
- [
- 'C',
- {},
- '"ban type changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 724
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 726
- },
- 'string ',
- [
- 'C',
- {},
- '$bantype'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 732
- },
- [
- 'F',
- {},
- 'channels'
- ],
- ', ',
- [
- 'F',
- {},
- 'nicklist'
- ],
- ':'
- ],
- [
- 'Para',
- {
- 'start_line' => 734
- },
- [
- 'B',
- {},
- 'TODO: are these actual files? .c?'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 736
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 738
- },
- [
- 'C',
- {},
- '"channel joined"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 740
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 742
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 746
- },
- [
- 'C',
- {},
- '"channel wholist"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 748
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 750
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 754
- },
- [
- 'C',
- {},
- '"channel sync"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 756
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 758
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 762
- },
- [
- 'C',
- {},
- '"channel topic changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 764
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 766
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 772
- },
- [
- 'F',
- {},
- 'ctcp.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 774
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 776
- },
- [
- 'C',
- {},
- '"ctcp msg"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 778
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 780
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 782
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 784
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 786
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 788
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 792
- },
- [
- 'C',
- {},
- '"ctcp msg "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 794
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 796
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 798
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 800
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 802
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 804
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 808
- },
- [
- 'C',
- {},
- '"default ctcp msg"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 810
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 812
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 814
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 816
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 818
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 820
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 824
- },
- [
- 'C',
- {},
- '"ctcp reply"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 826
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 828
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 830
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 832
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 834
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 836
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 840
- },
- [
- 'C',
- {},
- '"ctcp reply "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 842
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 844
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 846
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 848
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 850
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 852
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 856
- },
- [
- 'C',
- {},
- '"default ctcp reply"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 858
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 860
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 862
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 864
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 866
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 868
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 872
- },
- [
- 'C',
- {},
- '"ctcp action"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 874
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 876
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 878
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 880
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 882
- },
- 'string ',
- [
- 'C',
- {},
- '$addr'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 884
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 890
- },
- [
- 'F',
- {},
- 'irc-log.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 892
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 894
- },
- [
- 'C',
- {},
- '"awaylog show"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 896
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 898
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Log'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Log'
- ],
- ' ',
- [
- 'C',
- {},
- '$log'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 900
- },
- 'int ',
- [
- 'C',
- {},
- '$away_msgs'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 902
- },
- 'int ',
- [
- 'C',
- {},
- '$filepos'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 908
- },
- [
- 'F',
- {},
- 'irc-nicklist.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 910
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 912
- },
- [
- 'C',
- {},
- '"server nick changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 914
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 916
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 922
- },
- [
- 'F',
- {},
- 'irc-servers.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 924
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 926
- },
- [
- 'C',
- {},
- '"event connected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 928
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 930
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 936
- },
- [
- 'F',
- {},
- 'irc.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 938
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 940
- },
- [
- 'C',
- {},
- '"server event"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 942
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 944
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 946
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 948
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 950
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 954
- },
- [
- 'C',
- {},
- '"event "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 956
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 958
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 960
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 962
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 964
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 968
- },
- [
- 'C',
- {},
- '"default event"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 970
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 972
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 974
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 976
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 978
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 982
- },
- [
- 'C',
- {},
- '"whois default event"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 984
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 986
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 988
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 990
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 992
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 996
- },
- [
- 'C',
- {},
- '"server incoming"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 998
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1000
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1002
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1006
- },
- [
- 'C',
- {},
- '"redir "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1008
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1010
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1012
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1014
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1016
- },
- 'string ',
- [
- 'C',
- {},
- '$sender_addr'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1022
- },
- [
- 'F',
- {},
- 'lag.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1024
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1026
- },
- [
- 'C',
- {},
- '"server lag"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1028
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1030
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1034
- },
- [
- 'C',
- {},
- '"server lag disconnect"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1036
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1038
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1044
- },
- [
- 'F',
- {},
- 'massjoin.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1046
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1048
- },
- [
- 'C',
- {},
- '"massjoin"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1050
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1052
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1054
- },
- 'List of ',
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '@nicks'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1056
- },
- [
- 'B',
- {},
- 'TODO: Check this is actually a perl list (array)'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1062
- },
- [
- 'F',
- {},
- 'mode-lists.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1064
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1066
- },
- [
- 'C',
- {},
- '"ban new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1068
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1070
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1072
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Ban'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Ban'
- ],
- ' ',
- [
- 'C',
- {},
- '$ban'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1076
- },
- [
- 'C',
- {},
- '"ban remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1078
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1080
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1082
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Ban'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Ban'
- ],
- ' ',
- [
- 'C',
- {},
- '$ban'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1084
- },
- 'string ',
- [
- 'C',
- {},
- '$set_by'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1090
- },
- [
- 'F',
- {},
- 'modes.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1092
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1094
- },
- [
- 'C',
- {},
- '"channel mode changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1096
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1098
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1100
- },
- 'string ',
- [
- 'C',
- {},
- '$set_by'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1104
- },
- [
- 'C',
- {},
- '"nick mode changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1106
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1108
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Channel'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Channel'
- ],
- ' ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1110
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Nick'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Nick'
- ],
- ' ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1112
- },
- 'string ',
- [
- 'C',
- {},
- '$set_by'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1114
- },
- 'string ',
- [
- 'C',
- {},
- '$mode'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1116
- },
- 'string ',
- [
- 'C',
- {},
- '$type'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1120
- },
- [
- 'C',
- {},
- '"user mode changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1122
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1124
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1126
- },
- 'string ',
- [
- 'C',
- {},
- '$old_mode'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1130
- },
- [
- 'C',
- {},
- '"away mode changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1132
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1134
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1140
- },
- [
- 'F',
- {},
- 'netsplit.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1142
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1144
- },
- [
- 'C',
- {},
- '"netsplit server new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1146
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1148
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1150
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Netsplitserver'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Netsplitserver'
- ],
- ' ',
- [
- 'C',
- {},
- '$netsplit_server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1154
- },
- [
- 'C',
- {},
- '"netsplit server remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1156
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1158
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1160
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Netsplitserver'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Netsplitserver'
- ],
- ' ',
- [
- 'C',
- {},
- '$netsplit_server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1164
- },
- [
- 'C',
- {},
- '"netsplit new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1166
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1168
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Netsplit'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Netsplit'
- ],
- ' ',
- [
- 'C',
- {},
- '$netsplit'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1172
- },
- [
- 'C',
- {},
- '"netsplit remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1174
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1176
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Netsplit'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Netsplit'
- ],
- ' ',
- [
- 'C',
- {},
- '$netsplit'
- ]
- ]
- ]
- ],
- [
- 'head2',
- {
- 'start_line' => 1182
- },
- 'IRC Modules'
- ],
- [
- 'head3',
- {
- 'start_line' => 1185
- },
- [
- 'F',
- {},
- 'dcc*.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1187
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1189
- },
- [
- 'C',
- {},
- '"dcc ctcp "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1191
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1193
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1195
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1199
- },
- [
- 'C',
- {},
- '"default dcc ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1201
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1203
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1205
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1209
- },
- [
- 'C',
- {},
- '"dcc unknown ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1211
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1213
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1215
- },
- 'string ',
- [
- 'C',
- {},
- '$sender'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1217
- },
- 'string ',
- [
- 'C',
- {},
- '$send_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1221
- },
- [
- 'C',
- {},
- '"dcc reply "<cmd'
- ],
- '>'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1223
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1225
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1227
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1231
- },
- [
- 'C',
- {},
- '"default dcc reply"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1233
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1235
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1237
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1241
- },
- [
- 'C',
- {},
- '"dcc unknown reply"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1243
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1245
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1247
- },
- 'string ',
- [
- 'C',
- {},
- '$sender'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1249
- },
- 'string ',
- [
- 'C',
- {},
- '$send_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1253
- },
- [
- 'C',
- {},
- '"dcc chat message"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1255
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1257
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1259
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1263
- },
- [
- 'C',
- {},
- '"dcc created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1265
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1267
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1271
- },
- [
- 'C',
- {},
- '"dcc destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1273
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1275
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1279
- },
- [
- 'C',
- {},
- '"dcc connected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1281
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1283
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1287
- },
- [
- 'C',
- {},
- '"dcc rejecting"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1289
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1291
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1295
- },
- [
- 'C',
- {},
- '"dcc closed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1297
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1299
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1303
- },
- [
- 'C',
- {},
- '"dcc request"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1305
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1307
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1309
- },
- 'string ',
- [
- 'C',
- {},
- '$send_addr'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1313
- },
- [
- 'C',
- {},
- '"dcc request send"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1315
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1317
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1321
- },
- [
- 'C',
- {},
- '"dcc chat message"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1323
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1325
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1327
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1331
- },
- [
- 'C',
- {},
- '"dcc transfer update"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1333
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1335
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1339
- },
- [
- 'C',
- {},
- '"dcc get receive"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1341
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1343
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1347
- },
- [
- 'C',
- {},
- '"dcc error connect"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1349
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1351
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1355
- },
- [
- 'C',
- {},
- '"dcc error file create"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1357
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1359
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1361
- },
- 'string ',
- [
- 'C',
- {},
- '$filename'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1365
- },
- [
- 'C',
- {},
- '"dcc error file open"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1367
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1369
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1371
- },
- 'string ',
- [
- 'C',
- {},
- '$filename'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1373
- },
- 'int ',
- [
- 'C',
- {},
- '$errno'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1377
- },
- [
- 'C',
- {},
- '"dcc error get not found"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1379
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1381
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1385
- },
- [
- 'C',
- {},
- '"dcc error send exists"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1387
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1389
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1391
- },
- 'string ',
- [
- 'C',
- {},
- '$filename'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1395
- },
- [
- 'C',
- {},
- '"dcc error unknown type"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1397
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1399
- },
- 'string ',
- [
- 'C',
- {},
- '$type'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1403
- },
- [
- 'C',
- {},
- '"dcc error close not found"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1405
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1407
- },
- 'string ',
- [
- 'C',
- {},
- '$type'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1409
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1411
- },
- 'string ',
- [
- 'C',
- {},
- '$filename'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1417
- },
- [
- 'F',
- {},
- 'autoignore.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1419
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1421
- },
- [
- 'C',
- {},
- '"autoignore new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1423
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1425
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1427
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Autoignore'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Autoignore'
- ],
- ' ',
- [
- 'C',
- {},
- '$autoignore'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1431
- },
- [
- 'C',
- {},
- '"autoignore remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1433
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1435
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1437
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Autoignore'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Autoignore'
- ],
- ' ',
- [
- 'C',
- {},
- '$autoignore'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1443
- },
- [
- 'F',
- {},
- 'flood.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1445
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1447
- },
- [
- 'C',
- {},
- '"flood"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1449
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1451
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1453
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1455
- },
- 'string ',
- [
- 'C',
- {},
- '$host'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1457
- },
- 'int ',
- [
- 'C',
- {},
- '$level'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1459
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1465
- },
- [
- 'F',
- {},
- 'notifylist.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1467
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1469
- },
- [
- 'C',
- {},
- '"notifylist new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1471
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1473
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Notifylist'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Notifylist'
- ],
- ' ',
- [
- 'C',
- {},
- '$notify_list'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1477
- },
- [
- 'C',
- {},
- '"notifylist remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1479
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1481
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Notifylist'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Notifylist'
- ],
- ' ',
- [
- 'C',
- {},
- '$notify_list'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1485
- },
- [
- 'C',
- {},
- '"notifylist joined"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1487
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1489
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1491
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1493
- },
- 'string ',
- [
- 'C',
- {},
- '$user'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1495
- },
- 'string ',
- [
- 'C',
- {},
- '$host'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1497
- },
- 'string ',
- [
- 'C',
- {},
- '$real_name'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1499
- },
- 'string ',
- [
- 'C',
- {},
- '$away_message'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1503
- },
- [
- 'C',
- {},
- '"notifylist away changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1505
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1507
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1509
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1511
- },
- 'string ',
- [
- 'C',
- {},
- '$user'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1513
- },
- 'string ',
- [
- 'C',
- {},
- '$host'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1515
- },
- 'string ',
- [
- 'C',
- {},
- '$real_name'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1517
- },
- 'string ',
- [
- 'C',
- {},
- '$away_message'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1521
- },
- [
- 'C',
- {},
- '"notifylist left"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1523
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1525
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1527
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1529
- },
- 'string ',
- [
- 'C',
- {},
- '$user'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1531
- },
- 'string ',
- [
- 'C',
- {},
- '$host'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1533
- },
- 'string ',
- [
- 'C',
- {},
- '$real_name'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1535
- },
- 'string ',
- [
- 'C',
- {},
- '$away_message'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1541
- },
- [
- 'F',
- {},
- 'proxy/listen.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1543
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1545
- },
- [
- 'C',
- {},
- '"proxy client connected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1547
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1549
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Client'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Client'
- ],
- ' ',
- [
- 'C',
- {},
- '$client'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1553
- },
- [
- 'C',
- {},
- '"proxy client disconnected"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1555
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1557
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Client'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Client'
- ],
- ' ',
- [
- 'C',
- {},
- '$client'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1561
- },
- [
- 'C',
- {},
- '"proxy client command"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1563
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1565
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Client'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Client'
- ],
- ' ',
- [
- 'C',
- {},
- '$client'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1567
- },
- 'string ',
- [
- 'C',
- {},
- '$args'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1569
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1573
- },
- [
- 'C',
- {},
- '"proxy client dump"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1575
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1577
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Irc::Client'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Irc::Client'
- ],
- ' ',
- [
- 'C',
- {},
- '$client'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1579
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ]
- ],
- [
- 'head2',
- {
- 'start_line' => 1585
- },
- 'Display (FE) Common'
- ],
- [
- 'Para',
- {
- 'start_line' => 1587
- },
- [
- 'B',
- {},
- 'Requires to work properly:'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1589
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1591
- },
- [
- 'C',
- {},
- '"gui print text"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1593
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1595
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1597
- },
- 'int ',
- [
- 'C',
- {},
- '$fg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1599
- },
- 'int ',
- [
- 'C',
- {},
- '$bg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1601
- },
- 'int ',
- [
- 'C',
- {},
- '$flags'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1603
- },
- 'string ',
- [
- 'C',
- {},
- '$text'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1605
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::TextDest'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::TextDest'
- ],
- ' ',
- [
- 'C',
- {},
- '$text_dest'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1609
- },
- [
- 'C',
- {},
- '"gui print text finished"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1611
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1613
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1617
- },
- '(Can be used to determine when all ',
- [
- 'C',
- {},
- '"gui print text"'
- ],
- 's are sent (not required))'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1622
- },
- [
- 'B',
- {},
- 'Provides signals:'
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1624
- },
- [
- 'F',
- {},
- 'completion.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1626
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1628
- },
- [
- 'C',
- {},
- '"complete word"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1630
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1632
- },
- 'arrayref of strings ',
- [
- 'C',
- {},
- '$strings_ref'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1634
- },
- 'An arrayref which can be modified to add additional completion candidates.'
- ],
- [
- 'Para',
- {
- 'start_line' => 1636
- },
- 'For example:'
- ],
- [
- 'Verbatim',
- {
- 'xml:space' => 'preserve',
- 'start_line' => 1638
- },
- ' push @$strings_ref, "another_candidate";'
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1640
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1642
- },
- 'string ',
- [
- 'C',
- {},
- '$word'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1644
- },
- 'The prefix of the word currently being typed.'
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1646
- },
- 'string ',
- [
- 'C',
- {},
- '$linestart'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1648
- },
- 'The contents of the input line up to (but not including) the current word prefix ',
- [
- 'C',
- {},
- '$word'
- ],
- '.'
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1651
- },
- 'int ',
- [
- 'C',
- {},
- '$want_space'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 1653
- },
- 'A scalar reference which can be set to indicate if tab completion of these candidates should be appended with a space.'
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1660
- },
- [
- 'F',
- {},
- 'fe-common-core.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1662
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1664
- },
- [
- 'C',
- {},
- '"irssi init read settings"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1666
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1668
- },
- [
- 'I',
- {},
- 'None'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1674
- },
- [
- 'F',
- {},
- 'fe-exec.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1676
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1678
- },
- [
- 'C',
- {},
- '"exec new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1680
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1682
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Process'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Process'
- ],
- ' ',
- [
- 'C',
- {},
- '$process'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1686
- },
- [
- 'C',
- {},
- '"exec remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1688
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1690
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Process'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Process'
- ],
- ' ',
- [
- 'C',
- {},
- '$process'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1692
- },
- 'int ',
- [
- 'C',
- {},
- '$status'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1696
- },
- [
- 'C',
- {},
- '"exec input"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1698
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1700
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Process'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Process'
- ],
- ' ',
- [
- 'C',
- {},
- '$process'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1702
- },
- 'string ',
- [
- 'C',
- {},
- '$text'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1708
- },
- [
- 'F',
- {},
- 'fe-messages.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1710
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1712
- },
- [
- 'C',
- {},
- '"message public"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1714
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1716
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1718
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1720
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1722
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1724
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1728
- },
- [
- 'C',
- {},
- '"message private"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1730
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1732
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1734
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1736
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1738
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1742
- },
- [
- 'C',
- {},
- '"message own_public"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1744
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1746
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1748
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1750
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1754
- },
- [
- 'C',
- {},
- '"message own_private"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1756
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1758
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1760
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1762
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1764
- },
- 'string ',
- [
- 'C',
- {},
- '$original_target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1768
- },
- [
- 'C',
- {},
- '"message join"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1770
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1772
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1774
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1776
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1778
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1782
- },
- [
- 'C',
- {},
- '"message part"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1784
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1786
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1788
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1790
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1792
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1794
- },
- 'string ',
- [
- 'C',
- {},
- '$reason'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1798
- },
- [
- 'C',
- {},
- '"message quit"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1800
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1802
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1804
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1806
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1808
- },
- 'string ',
- [
- 'C',
- {},
- '$reason'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1812
- },
- [
- 'C',
- {},
- '"message kick"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1814
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1816
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1818
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1820
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1822
- },
- 'string ',
- [
- 'C',
- {},
- '$kicker'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1824
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1826
- },
- 'string ',
- [
- 'C',
- {},
- '$reason'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1830
- },
- [
- 'C',
- {},
- '"message nick"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1832
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1834
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1836
- },
- 'string ',
- [
- 'C',
- {},
- '$new_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1838
- },
- 'string ',
- [
- 'C',
- {},
- '$old_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1840
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1844
- },
- [
- 'C',
- {},
- '"message own_nick"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1846
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1848
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1850
- },
- 'string ',
- [
- 'C',
- {},
- '$new_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1852
- },
- 'string ',
- [
- 'C',
- {},
- '$old_nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1854
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1858
- },
- [
- 'C',
- {},
- '"message invite"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1860
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1862
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1864
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1866
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1868
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1872
- },
- [
- 'C',
- {},
- '"message topic"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1874
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1876
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1878
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1880
- },
- 'string ',
- [
- 'C',
- {},
- '$topic'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1882
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1884
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1890
- },
- [
- 'F',
- {},
- 'keyboard.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1892
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1894
- },
- [
- 'C',
- {},
- '"keyinfo created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1896
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1898
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Keyinfo'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Keyinfo'
- ],
- ' ',
- [
- 'C',
- {},
- '$key_info'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1902
- },
- [
- 'C',
- {},
- '"keyinfo destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1904
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1906
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Keyinfo'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Keyinfo'
- ],
- ' ',
- [
- 'C',
- {},
- '$key_info'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1912
- },
- [
- 'F',
- {},
- 'printtext.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1914
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1916
- },
- [
- 'C',
- {},
- '"print text"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1918
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1920
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::TextDest'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::TextDest'
- ],
- ' ',
- [
- 'C',
- {},
- '$text_dest'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1922
- },
- 'string ',
- [
- 'C',
- {},
- '$text'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1924
- },
- 'string ',
- [
- 'C',
- {},
- '$stripped_text'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1930
- },
- [
- 'F',
- {},
- 'themes.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1932
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1934
- },
- [
- 'C',
- {},
- '"theme created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1936
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1938
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Theme'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Theme'
- ],
- ' ',
- [
- 'C',
- {},
- '$theme'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1942
- },
- [
- 'C',
- {},
- '"theme destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1944
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1946
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Theme'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Theme'
- ],
- ' ',
- [
- 'C',
- {},
- '$theme'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 1952
- },
- [
- 'F',
- {},
- 'window-activity.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1954
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1956
- },
- [
- 'C',
- {},
- '"window hilight"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1958
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1960
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1964
- },
- [
- 'C',
- {},
- '"window dehilight"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1966
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1968
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1972
- },
- [
- 'C',
- {},
- '"window activity"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1974
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1976
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1978
- },
- 'int ',
- [
- 'C',
- {},
- '$old_level'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1982
- },
- [
- 'C',
- {},
- '"window item hilight"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1984
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1986
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1990
- },
- [
- 'C',
- {},
- '"window item activity"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 1992
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1994
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 1996
- },
- 'int ',
- [
- 'C',
- {},
- '$old_level'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 2002
- },
- [
- 'F',
- {},
- 'window-items.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2004
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2006
- },
- [
- 'C',
- {},
- '"window item new"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2008
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2010
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2012
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2016
- },
- [
- 'C',
- {},
- '"window item remove"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2018
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2020
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2022
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2026
- },
- [
- 'C',
- {},
- '"window item moved"'
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 2028
- },
- [
- 'B',
- {},
- 'TODO: Check ordering of arguments from/to here'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2030
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2032
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_from'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2034
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2036
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_to'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2040
- },
- [
- 'C',
- {},
- '"window item changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2042
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2044
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2046
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2050
- },
- [
- 'C',
- {},
- '"window item server changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2052
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2054
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2056
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Windowitem'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Windowitem'
- ],
- ' ',
- [
- 'C',
- {},
- '$window_item'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 2062
- },
- [
- 'F',
- {},
- 'windows.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2064
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2066
- },
- [
- 'C',
- {},
- '"window created"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2068
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2070
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2074
- },
- [
- 'C',
- {},
- '"window destroyed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2076
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2078
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2082
- },
- [
- 'C',
- {},
- '"window changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2084
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2086
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2088
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$old_window'
- ]
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 2092
- },
- [
- 'B',
- {},
- 'TODO: does this fire if you dont\' change windows? (eg: send a switch commandf for the window you\'re already on)'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2095
- },
- [
- 'C',
- {},
- '"window changed automatic"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2097
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2099
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2103
- },
- [
- 'C',
- {},
- '"window server changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2105
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2107
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2109
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2113
- },
- [
- 'C',
- {},
- '"window refnum changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2115
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2117
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2119
- },
- 'int ',
- [
- 'C',
- {},
- '$old_refnum'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2123
- },
- [
- 'C',
- {},
- '"window name changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2125
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2127
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2131
- },
- [
- 'C',
- {},
- '"window history changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2133
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2135
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2137
- },
- 'string ',
- [
- 'C',
- {},
- '$old_name'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2141
- },
- [
- 'C',
- {},
- '"window level changed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2143
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2145
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::UI::Window'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::UI::Window'
- ],
- ' ',
- [
- 'C',
- {},
- '$window'
- ]
- ]
- ]
- ],
- [
- 'head2',
- {
- 'start_line' => 2151
- },
- 'Display (FE) IRC'
- ],
- [
- 'head3',
- {
- 'start_line' => 2153
- },
- [
- 'F',
- {},
- 'fe-events.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2155
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2157
- },
- [
- 'C',
- {},
- '"default event numeric"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2159
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2161
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2163
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2165
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2167
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 2173
- },
- [
- 'F',
- {},
- 'fe-irc-messages.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2175
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2177
- },
- [
- 'C',
- {},
- '"message irc op_public"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2179
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2181
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2183
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2185
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2187
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2189
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2193
- },
- [
- 'C',
- {},
- '"message irc own_wall"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2195
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2197
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2199
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2201
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2205
- },
- [
- 'C',
- {},
- '"message irc own_action"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2207
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2209
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2211
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2213
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2217
- },
- [
- 'C',
- {},
- '"message irc action"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2219
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2221
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2223
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2225
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2227
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2229
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2233
- },
- [
- 'C',
- {},
- '"message irc own_notice"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2235
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2237
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2239
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2241
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2245
- },
- [
- 'C',
- {},
- '"message irc notice"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2247
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2249
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2251
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2253
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2255
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2257
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2261
- },
- [
- 'C',
- {},
- '"message irc own_ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2263
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2265
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2267
- },
- 'string ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2269
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2271
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2275
- },
- [
- 'C',
- {},
- '"message irc ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2277
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2279
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2281
- },
- 'string ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2283
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2285
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2287
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2289
- },
- 'string ',
- [
- 'C',
- {},
- '$target'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 2295
- },
- [
- 'F',
- {},
- 'fe-modes.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2297
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2299
- },
- [
- 'C',
- {},
- '"message irc mode"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2301
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2303
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Server'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Server'
- ],
- ' ',
- [
- 'C',
- {},
- '$server'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2305
- },
- 'string ',
- [
- 'C',
- {},
- '$channel'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2307
- },
- 'string ',
- [
- 'C',
- {},
- '$nick'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2309
- },
- 'string ',
- [
- 'C',
- {},
- '$address'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2311
- },
- 'string ',
- [
- 'C',
- {},
- '$mode'
- ]
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 2317
- },
- [
- 'F',
- {},
- 'dcc/fe-dcc-chat-messages.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2319
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2321
- },
- [
- 'C',
- {},
- '"message dcc own"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2323
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2325
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2327
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2331
- },
- [
- 'C',
- {},
- '"message dcc own_action"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2333
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2335
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2337
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2341
- },
- [
- 'C',
- {},
- '"message dcc own_ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2343
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2345
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2347
- },
- 'string ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2349
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2353
- },
- [
- 'C',
- {},
- '"message dcc"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2355
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2357
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2359
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2363
- },
- [
- 'C',
- {},
- '"message dcc action"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2365
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2367
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2369
- },
- 'string ',
- [
- 'C',
- {},
- '$msg'
- ]
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2373
- },
- [
- 'C',
- {},
- '"message dcc ctcp"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2375
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2377
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Dcc'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Dcc'
- ],
- ' ',
- [
- 'C',
- {},
- '$dcc'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2379
- },
- 'string ',
- [
- 'C',
- {},
- '$cmd'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2381
- },
- 'string ',
- [
- 'C',
- {},
- '$data'
- ]
- ]
- ]
- ],
- [
- 'head2',
- {
- 'start_line' => 2387
- },
- 'Display (FE) Text'
- ],
- [
- 'head3',
- {
- 'start_line' => 2389
- },
- [
- 'F',
- {},
- 'gui-readline.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 2391
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2393
- },
- [
- 'C',
- {},
- '"gui key pressed"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2395
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2397
- },
- 'int ',
- [
- 'C',
- {},
- '$key'
- ]
- ]
- ],
- [
- 'Para',
- {
- 'start_line' => 2401
- },
- 'Notes:'
- ],
- [
- 'Para',
- {
- 'start_line' => 2403
- },
- 'Ordinary keys ',
- [
- 'C',
- {},
- 'a-zA-Z'
- ],
- ' are their ordinal (ascii) equivalents.'
- ],
- [
- 'Para',
- {
- 'start_line' => 2405
- },
- 'Ctrl-key begins at 1 (',
- [
- 'C',
- {},
- 'C-a'
- ],
- '), but skips 13?, ',
- [
- 'C',
- {},
- 'C-j'
- ],
- ' and ',
- [
- 'C',
- {},
- 'C-m'
- ],
- ' both give the same as ',
- [
- 'C',
- {},
- 'RET'
- ],
- ' (10). Tab and ',
- [
- 'C',
- {},
- 'C-i'
- ],
- ' are equivalent (9). ',
- [
- 'C',
- {},
- 'C-o'
- ],
- ' does not appear to send an observable sequence.'
- ],
- [
- 'Para',
- {
- 'start_line' => 2409
- },
- [
- 'C',
- {},
- 'BS'
- ],
- ' sends 127.'
- ],
- [
- 'Para',
- {
- 'start_line' => 2411
- },
- [
- 'C',
- {},
- 'meta-',
- '<',
- 'key',
- '>'
- ],
- ' sends a 27 (ESC) followed by the original key value.'
- ],
- [
- 'Para',
- {
- 'start_line' => 2413
- },
- 'Arrow keys send usual meta-stuff (',
- [
- 'C',
- {},
- '\\e[',
- [
- 'I',
- {},
- 'ABCD'
- ]
- ],
- ').'
- ],
- [
- 'Para',
- {
- 'start_line' => 2415
- },
- [
- 'B',
- {},
- 'TODO: Turn this into some sort of list'
- ]
- ]
- ],
- [
- 'head3',
- {
- 'start_line' => 2419
- },
- [
- 'F',
- {},
- 'gui-printtext.c'
- ],
- ':'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 2421
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2423
- },
- [
- 'C',
- {},
- '"beep"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2425
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2427
- },
- [
- 'I',
- {},
- 'None'
- ]
- ]
- ]
- ],
- [
- 'head2',
- {
- 'start_line' => 2433
- },
- 'Perl Scripting'
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => '4',
- 'start_line' => 2435
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2437
- },
- [
- 'C',
- {},
- '"script error"'
- ]
- ],
- [
- 'over-text',
- {
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => 2439
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2441
- },
- [
- 'L',
- {
- 'to' => bless( [
- '',
- {},
- 'Irssi::Script'
- ], 'Pod::Simple::LinkSection' ),
- 'type' => 'pod',
- 'content-implicit' => 'yes'
- },
- 'Irssi::Script'
- ],
- ' ',
- [
- 'C',
- {},
- '$script'
- ]
- ],
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => 2443
- },
- 'string ',
- [
- 'C',
- {},
- '$error_msg'
- ]
- ]
- ]
- ],
- [
- 'for',
- {
- 'target' => 'irssi_signal_defs',
- '~really' => '=for',
- '~ignore' => 0,
- 'target_matching' => 'irssi_signal_defs',
- 'start_line' => 2449,
- '~resolve' => 0
- },
- [
- 'Data',
- {
- 'xml:space' => 'preserve',
- 'start_line' => 2449
- },
- 'END OF SIGNAL DEFINITIONS'
- ]
- ],
- [
- 'head1',
- {
- 'start_line' => 2451
- },
- 'SIGNAL AUTO-GENERATION'
- ],
- [
- 'Para',
- {
- 'start_line' => 2453
- },
- 'This file is used to auto-generate the signal definitions used by Irssi, and hence must be edited in order to add new signals.'
- ],
- [
- 'head2',
- {
- 'start_line' => 2456
- },
- 'Format'
- ],
- [
- 'head1',
- {
- 'errata' => 1,
- 'start_line' => -321
- },
- 'POD ERRORS'
- ],
- [
- 'Para',
- {
- 'errata' => 1,
- 'start_line' => -321,
- '~cooked' => 1
- },
- 'Hey! ',
- [
- 'B',
- {},
- 'The above document had some coding errors, which are explained below:'
- ]
- ],
- [
- 'over-text',
- {
- 'errata' => 1,
- '~type' => 'text',
- 'indent' => 4,
- 'start_line' => -321
- },
- [
- 'item-text',
- {
- '~type' => 'text',
- 'start_line' => -321
- },
- 'Around line 2092:'
- ],
- [
- 'Para',
- {
- 'start_line' => -321,
- '~cooked' => 1
- },
- 'Unterminated B<...> sequence'
- ]
- ]
- ];
diff --git a/docs/xsfuncs.txt b/docs/xsfuncs.txt
deleted file mode 100644
index 1573f42..0000000
--- a/docs/xsfuncs.txt
+++ /dev/null
@@ -1,347 +0,0 @@
-
-Irssi::Channel::destroy
-Irssi::Channel::nick_find
-Irssi::Channel::nick_find_mask
-Irssi::Channel::nick_insert
-Irssi::Channel::nick_remove
-Irssi::Channel::nicks
-
-Irssi::EXPAND_FLAG_IGNORE_EMPTY
-Irssi::EXPAND_FLAG_IGNORE_REPLACES
-Irssi::EXPAND_FLAG_RECURSIVE_MASK
-Irssi::INPUT_READ
-Irssi::INPUT_WRITE
-Irssi::IRSSI_GUI_GNOME
-Irssi::IRSSI_GUI_GTK
-Irssi::IRSSI_GUI_KDE
-Irssi::IRSSI_GUI_NONE
-Irssi::IRSSI_GUI_QT
-Irssi::IRSSI_GUI_TEXT
-
-Irssi::Ignore::add_rec
-Irssi::Ignore::update_rec
-
-Irssi::Irc::Channel::ban_get_mask
-Irssi::Irc::Channel::banlist_add
-Irssi::Irc::Channel::banlist_remove
-Irssi::Irc::Channel::bans
-Irssi::Irc::Channel::nick_insert
-
-Irssi::Irc::Dcc::close
-Irssi::Irc::Dcc::destroy
-Irssi::Irc::Dcc::init_rec
-Irssi::Irc::Dcc::reject
-
-Irssi::Irc::MASK_DOMAIN
-Irssi::Irc::MASK_HOST
-Irssi::Irc::MASK_NICK
-Irssi::Irc::MASK_USER
-
-Irssi::Irc::Notifylist::ircnets_match
-
-Irssi::Irc::Server::ctcp_send_reply
-Irssi::Irc::Server::get_channels
-Irssi::Irc::Server::isupport
-Irssi::Irc::Server::netsplit_find
-Irssi::Irc::Server::netsplit_find_channel
-Irssi::Irc::Server::notifylist_ison_server
-Irssi::Irc::Server::query_create
-Irssi::Irc::Server::redirect_event
-Irssi::Irc::Server::redirect_get_signal
-Irssi::Irc::Server::redirect_peek_signal
-Irssi::Irc::Server::redirect_register
-Irssi::Irc::Server::send_raw
-Irssi::Irc::Server::send_raw_first
-Irssi::Irc::Server::send_raw_now
-Irssi::Irc::Server::send_raw_split
-
-Irssi::Irc::dcc_chat_find_id
-Irssi::Irc::dcc_chat_send
-Irssi::Irc::dcc_ctcp_message
-Irssi::Irc::dcc_find_request
-Irssi::Irc::dcc_find_request_latest
-Irssi::Irc::dcc_get_download_path
-Irssi::Irc::dcc_register_type
-Irssi::Irc::dcc_str2type
-Irssi::Irc::dcc_type2str
-Irssi::Irc::dcc_unregister_type
-Irssi::Irc::dccs
-Irssi::Irc::deinit
-Irssi::Irc::get_mask
-Irssi::Irc::init
-Irssi::Irc::modes_join
-Irssi::Irc::notifies
-Irssi::Irc::notifylist_add
-Irssi::Irc::notifylist_find
-Irssi::Irc::notifylist_ison
-Irssi::Irc::notifylist_remove
-
-Irssi::Log::close
-Irssi::Log::item_add
-Irssi::Log::item_destroy
-Irssi::Log::item_find
-Irssi::Log::start_logging
-Irssi::Log::stop_logging
-Irssi::Log::update
-Irssi::Log::write_rec
-
-Irssi::MSGLEVEL_ACTIONS
-Irssi::MSGLEVEL_ALL
-Irssi::MSGLEVEL_CLIENTCRAP
-Irssi::MSGLEVEL_CLIENTERROR
-Irssi::MSGLEVEL_CLIENTNOTICE
-Irssi::MSGLEVEL_CRAP
-Irssi::MSGLEVEL_CTCPS
-Irssi::MSGLEVEL_DCC
-Irssi::MSGLEVEL_DCCMSGS
-Irssi::MSGLEVEL_HILIGHT
-Irssi::MSGLEVEL_INVITES
-Irssi::MSGLEVEL_JOINS
-Irssi::MSGLEVEL_KICKS
-Irssi::MSGLEVEL_LASTLOG
-Irssi::MSGLEVEL_MODES
-Irssi::MSGLEVEL_MSGS
-Irssi::MSGLEVEL_NEVER
-Irssi::MSGLEVEL_NICKS
-Irssi::MSGLEVEL_NOHILIGHT
-Irssi::MSGLEVEL_NOTICES
-Irssi::MSGLEVEL_NO_ACT
-Irssi::MSGLEVEL_PARTS
-Irssi::MSGLEVEL_PUBLIC
-Irssi::MSGLEVEL_QUITS
-Irssi::MSGLEVEL_SNOTES
-Irssi::MSGLEVEL_TOPICS
-Irssi::MSGLEVEL_WALLOPS
-
-Irssi::Query::change_server
-Irssi::Query::destroy
-
-Irssi::Rawlog::close
-Irssi::Rawlog::destroy
-Irssi::Rawlog::get_lines
-Irssi::Rawlog::input
-Irssi::Rawlog::open
-Irssi::Rawlog::output
-Irssi::Rawlog::redirect
-Irssi::Rawlog::save
-
-Irssi::SIGNAL_PRIORITY_DEFAULT
-Irssi::SIGNAL_PRIORITY_HIGH
-Irssi::SIGNAL_PRIORITY_LOW
-
-Irssi::Server::channel_find
-Irssi::Server::channels
-Irssi::Server::channels_join
-Irssi::Server::command
-Irssi::Server::disconnect
-Irssi::Server::format_create_dest
-Irssi::Server::get_nick_flags
-Irssi::Server::ignore_check
-Irssi::Server::ischannel
-Irssi::Server::isnickflag
-Irssi::Server::mask_match
-Irssi::Server::mask_match_address
-Irssi::Server::masks_match
-Irssi::Server::nicks_get_same
-Irssi::Server::parse_special
-Irssi::Server::print
-Irssi::Server::printformat
-Irssi::Server::queries
-Irssi::Server::query_find
-Irssi::Server::ref
-Irssi::Server::send_message
-Irssi::Server::unref
-Irssi::Server::window_find_closest
-Irssi::Server::window_find_item
-Irssi::Server::window_find_level
-Irssi::Server::window_item_find
-
-Irssi::TextUI::Line::get_text
-Irssi::TextUI::Line::next
-Irssi::TextUI::Line::prev
-
-Irssi::TextUI::StatusbarItem::default_handler
-
-Irssi::TextUI::TextBufferView::clear
-Irssi::TextUI::TextBufferView::get_bookmark
-Irssi::TextUI::TextBufferView::get_line_cache
-Irssi::TextUI::TextBufferView::get_lines
-Irssi::TextUI::TextBufferView::redraw
-Irssi::TextUI::TextBufferView::remove_all_lines
-Irssi::TextUI::TextBufferView::remove_line
-Irssi::TextUI::TextBufferView::scroll
-Irssi::TextUI::TextBufferView::scroll_line
-Irssi::TextUI::TextBufferView::set_bookmark
-Irssi::TextUI::TextBufferView::set_bookmark_bottom
-Irssi::TextUI::TextBufferView::set_default_indent
-Irssi::TextUI::TextBufferView::set_scroll
-
-Irssi::TextUI::deinit
-Irssi::TextUI::init
-
-Irssi::UI::Server::gui_printtext_after
-Irssi::UI::Server::term_refresh_freeze
-Irssi::UI::Server::term_refresh_thaw
-
-Irssi::UI::TextDest::print
-
-Irssi::UI::Theme::format_expand
-Irssi::UI::Theme::get_format
-
-Irssi::UI::Window::activity
-Irssi::UI::Window::change_server
-Irssi::UI::Window::command
-Irssi::UI::Window::destroy
-Irssi::UI::Window::format_get_text
-Irssi::UI::Window::get_active_name
-Irssi::UI::Window::get_history_lines
-Irssi::UI::Window::gui_printtext_after
-Irssi::UI::Window::item_add
-Irssi::UI::Window::item_destroy
-Irssi::UI::Window::item_find
-Irssi::UI::Window::item_next
-Irssi::UI::Window::item_prev
-Irssi::UI::Window::item_remove
-Irssi::UI::Window::items
-Irssi::UI::Window::last_line_insert
-Irssi::UI::Window::print
-Irssi::UI::Window::print_after
-Irssi::UI::Window::printformat
-Irssi::UI::Window::set_active
-Irssi::UI::Window::set_history
-Irssi::UI::Window::set_level
-Irssi::UI::Window::set_name
-Irssi::UI::Window::set_refnum
-Irssi::UI::Window::view
-
-Irssi::UI::deinit
-Irssi::UI::init
-Irssi::UI::processes
-
-Irssi::Window::format_create_dest
-
-Irssi::Windowitem::activity
-Irssi::Windowitem::change_server
-Irssi::Windowitem::command
-Irssi::Windowitem::get_dcc
-Irssi::Windowitem::is_active
-Irssi::Windowitem::parse_special
-Irssi::Windowitem::print
-Irssi::Windowitem::printformat
-Irssi::Windowitem::set_active
-Irssi::Windowitem::window
-Irssi::Windowitem::window_create
-
-Irssi::abstracts_register
-Irssi::active_server
-Irssi::active_win
-Irssi::bits2level
-Irssi::channel_find
-Irssi::channels
-Irssi::chatnet_find
-Irssi::chatnets
-Irssi::combine_level
-Irssi::command
-Irssi::command_bind
-Irssi::command_bind_first
-Irssi::command_bind_last
-Irssi::command_parse_options
-Irssi::command_runsub
-Irssi::command_set_options
-Irssi::command_unbind
-Irssi::commands
-Irssi::ctcp_register
-Irssi::ctcp_unregister
-Irssi::current_theme
-Irssi::deinit
-Irssi::expando_create
-Irssi::expando_destroy
-Irssi::format_create_dest
-Irssi::format_get_length
-Irssi::format_real_length
-Irssi::get_gui
-Irssi::get_irssi_binary
-Irssi::get_irssi_config
-Irssi::get_irssi_dir
-Irssi::gui_input_get_pos
-Irssi::gui_input_set
-Irssi::gui_input_set_pos
-Irssi::gui_printtext
-Irssi::ignore_check
-Irssi::ignores
-Irssi::init
-Irssi::input_add
-Irssi::input_remove
-Irssi::level2bits
-Irssi::log_create_rec
-Irssi::log_find
-Irssi::logs
-Irssi::mask_match
-Irssi::mask_match_address
-Irssi::masks_match
-Irssi::parse_special
-Irssi::pidwait_add
-Irssi::pidwait_remove
-Irssi::print
-Irssi::printformat
-Irssi::queries
-Irssi::query_find
-Irssi::rawlog_create
-Irssi::rawlog_set_size
-Irssi::reconnects
-Irssi::server_create_conn
-Irssi::server_find_chatnet
-Irssi::server_find_tag
-Irssi::servers
-Irssi::settings_add_bool
-Irssi::settings_add_int
-Irssi::settings_add_level
-Irssi::settings_add_size
-Irssi::settings_add_str
-Irssi::settings_add_time
-Irssi::settings_get_bool
-Irssi::settings_get_int
-Irssi::settings_get_level
-Irssi::settings_get_size
-Irssi::settings_get_str
-Irssi::settings_get_time
-Irssi::settings_remove
-Irssi::settings_set_bool
-Irssi::settings_set_int
-Irssi::settings_set_level
-Irssi::settings_set_size
-Irssi::settings_set_str
-Irssi::settings_set_time
-Irssi::signal_add
-Irssi::signal_add_first
-Irssi::signal_add_last
-Irssi::signal_add_priority
-Irssi::signal_continue
-Irssi::signal_emit
-Irssi::signal_get_emitted
-Irssi::signal_get_emitted_id
-Irssi::signal_register
-Irssi::signal_remove
-Irssi::signal_stop
-Irssi::signal_stop_by_name
-Irssi::statusbar_item_register
-Irssi::statusbar_item_unregister
-Irssi::statusbar_items_redraw
-Irssi::statusbars_recreate_items
-Irssi::strip_codes
-Irssi::theme_register
-Irssi::themes_reload
-Irssi::timeout_add
-Irssi::timeout_add_once
-Irssi::timeout_remove
-Irssi::version
-Irssi::window_find_closest
-Irssi::window_find_item
-Irssi::window_find_level
-Irssi::window_find_name
-Irssi::window_find_refnum
-Irssi::window_item_find
-Irssi::window_refnum_next
-Irssi::window_refnum_prev
-Irssi::windows
-Irssi::windows_refnum_last
diff --git a/docs/xsfuncs_args.txt b/docs/xsfuncs_args.txt
deleted file mode 100644
index 60883c6..0000000
--- a/docs/xsfuncs_args.txt
+++ /dev/null
@@ -1,320 +0,0 @@
-Irssi::Channel::destroy(Irssi::Channel $channel)
-Irssi::Channel::nick_find(Irssi::Channel $channel, string $nick)
-Irssi::Channel::nick_find_mask(Irssi::Channel $channel, string $mask)
-Irssi::Channel::nick_insert(Irssi::Channel $channel, Irssi::Nick $nick)
-Irssi::Channel::nick_remove(Irssi::Channel $channel, Irssi::Nick $nick)
-Irssi::Channel::nicks(Irssi::Channel $channel)
-Irssi::EXPAND_FLAG_IGNORE_EMPTY()
-Irssi::EXPAND_FLAG_IGNORE_REPLACES()
-Irssi::EXPAND_FLAG_RECURSIVE_MASK()
-Irssi::INPUT_READ()
-Irssi::INPUT_WRITE()
-Irssi::IRSSI_GUI_GNOME()
-Irssi::IRSSI_GUI_GTK()
-Irssi::IRSSI_GUI_KDE()
-Irssi::IRSSI_GUI_NONE()
-Irssi::IRSSI_GUI_QT()
-Irssi::IRSSI_GUI_TEXT()
-Irssi::Ignore::add_rec(Irssi::Ignore $rec)
-Irssi::Ignore::update_rec(Irssi::Ignore $rec)
-Irssi::Irc::Channel::ban_get_mask(Irssi::Irc::Channel $channel, string $nick, int $ban_type)
-Irssi::Irc::Channel::banlist_add(Irssi::Irc::Channel $channel, string $ban, string $nick, time_t $time)
-Irssi::Irc::Channel::banlist_remove(Irssi::Irc::Channel $channel, string $ban, string $nick)
-Irssi::Irc::Channel::bans(Irssi::Irc::Channel $channel)
-Irssi::Irc::Channel::nick_insert(Irssi::Irc::Channel $channel, string $nick, int $op, int $halfop, int $voice, int $send_massjoin)
-Irssi::Irc::Dcc::close(Irssi::Irc::Dcc $dcc)
-Irssi::Irc::Dcc::destroy(Irssi::Irc::Dcc $dcc)
-Irssi::Irc::Dcc::init_rec(Irssi::Irc::Dcc $dcc, Irssi::Irc::Server $server, Irssi::Irc::Dcc::Chat $chat, string $nick, string $arg)
-Irssi::Irc::Dcc::reject(Irssi::Irc::Dcc $dcc, Irssi::Irc::Server $server)
-Irssi::Irc::MASK_DOMAIN()
-Irssi::Irc::MASK_HOST()
-Irssi::Irc::MASK_NICK()
-Irssi::Irc::MASK_USER()
-Irssi::Irc::Notifylist::ircnets_match(Irssi::Irc::Notifylist $rec, string $ircnet)
-Irssi::Irc::Server::ctcp_send_reply(Irssi::Irc::Server $server, string $data)
-Irssi::Irc::Server::get_channels(Irssi::Irc::Server $server)
-Irssi::Irc::Server::isupport(Irssi::Irc::Server $server, string $name)
-Irssi::Irc::Server::netsplit_find(Irssi::Irc::Server $server, string $nick, string $address)
-Irssi::Irc::Server::netsplit_find_channel(Irssi::Irc::Server $server, string $nick, string $address, string $channel)
-Irssi::Irc::Server::notifylist_ison_server(Irssi::Irc::Server $server, string $nick)
-Irssi::Irc::Server::query_create(string $server_tag, string $nick, int $automatic)
-Irssi::Irc::Server::redirect_event(Irssi::Irc::Server $server, string $command, int $count, string $arg, int $remote, string $failure_signal, SVptr $signals)
-Irssi::Irc::Server::redirect_get_signal(Irssi::Irc::Server $server, string $prefix, string $event, string $args)
-Irssi::Irc::Server::redirect_peek_signal(Irssi::Irc::Server $server, string $prefix, string $event, string $args)
-Irssi::Irc::Server::redirect_register(string $command, int $remote, int $timeout, SVptr $start, SVptr $stop, SVptr $opt)
-Irssi::Irc::Server::send_raw(Irssi::Irc::Server $server, string $cmd)
-Irssi::Irc::Server::send_raw_first(Irssi::Irc::Server $server, string $cmd)
-Irssi::Irc::Server::send_raw_now(Irssi::Irc::Server $server, string $cmd)
-Irssi::Irc::Server::send_raw_split(Irssi::Irc::Server $server, string $cmd, int $nickarg, int $max_nicks)
-Irssi::Irc::dcc_chat_find_id(string $id)
-Irssi::Irc::dcc_chat_send(Irssi::Irc::Dcc::Chat $dcc, string $data)
-Irssi::Irc::dcc_ctcp_message(Irssi::Irc::Server $server, string $target, Irssi::Irc::Dcc::Chat $chat, int $notice, string $msg)
-Irssi::Irc::dcc_find_request(int $type, string $nick, string $arg)
-Irssi::Irc::dcc_find_request_latest(int $type)
-Irssi::Irc::dcc_get_download_path(string $fname)
-Irssi::Irc::dcc_register_type(string $type)
-Irssi::Irc::dcc_str2type(string $str)
-Irssi::Irc::dcc_type2str(int $type)
-Irssi::Irc::dcc_unregister_type(string $type)
-Irssi::Irc::dccs()
-Irssi::Irc::deinit()
-Irssi::Irc::get_mask(string $nick, string $address, int $flags)
-Irssi::Irc::init()
-Irssi::Irc::modes_join(Irssi::Irc::Server $server, string $old, string $mode, int $channel)
-Irssi::Irc::notifies()
-Irssi::Irc::notifylist_add(string $mask, string $ircnets, int $away_check, int $idle_check_time)
-Irssi::Irc::notifylist_find(string $mask, string $ircnet)
-Irssi::Irc::notifylist_ison(string $nick, string $serverlist)
-Irssi::Irc::notifylist_remove(string $mask)
-Irssi::Log::close(Irssi::Log $log)
-Irssi::Log::item_add(Irssi::Log $log, int $type, string $name, string $servertag)
-Irssi::Log::item_destroy(Irssi::Log $log, Irssi::Logitem $item)
-Irssi::Log::item_find(Irssi::Log $log, int $type, string $item, string $servertag)
-Irssi::Log::start_logging(Irssi::Log $log)
-Irssi::Log::stop_logging(Irssi::Log $log)
-Irssi::Log::update(Irssi::Log $log)
-Irssi::Log::write_rec(Irssi::Log $log, string $str, int $level)
-Irssi::MSGLEVEL_ACTIONS()
-Irssi::MSGLEVEL_ALL()
-Irssi::MSGLEVEL_CLIENTCRAP()
-Irssi::MSGLEVEL_CLIENTERROR()
-Irssi::MSGLEVEL_CLIENTNOTICE()
-Irssi::MSGLEVEL_CRAP()
-Irssi::MSGLEVEL_CTCPS()
-Irssi::MSGLEVEL_DCC()
-Irssi::MSGLEVEL_DCCMSGS()
-Irssi::MSGLEVEL_HILIGHT()
-Irssi::MSGLEVEL_INVITES()
-Irssi::MSGLEVEL_JOINS()
-Irssi::MSGLEVEL_KICKS()
-Irssi::MSGLEVEL_LASTLOG()
-Irssi::MSGLEVEL_MODES()
-Irssi::MSGLEVEL_MSGS()
-Irssi::MSGLEVEL_NEVER()
-Irssi::MSGLEVEL_NICKS()
-Irssi::MSGLEVEL_NOHILIGHT()
-Irssi::MSGLEVEL_NOTICES()
-Irssi::MSGLEVEL_NO_ACT()
-Irssi::MSGLEVEL_PARTS()
-Irssi::MSGLEVEL_PUBLIC()
-Irssi::MSGLEVEL_QUITS()
-Irssi::MSGLEVEL_SNOTES()
-Irssi::MSGLEVEL_TOPICS()
-Irssi::MSGLEVEL_WALLOPS()
-Irssi::Query::change_server(Irssi::Query $query, Irssi::Server $server)
-Irssi::Query::destroy(Irssi::Query $query)
-Irssi::Rawlog::close(Irssi::Rawlog $rawlog)
-Irssi::Rawlog::destroy(Irssi::Rawlog $rawlog)
-Irssi::Rawlog::get_lines(Irssi::Rawlog $rawlog)
-Irssi::Rawlog::input(Irssi::Rawlog $rawlog, string $str)
-Irssi::Rawlog::open(Irssi::Rawlog $rawlog, string $fname)
-Irssi::Rawlog::output(Irssi::Rawlog $rawlog, string $str)
-Irssi::Rawlog::redirect(Irssi::Rawlog $rawlog, string $str)
-Irssi::Rawlog::save(Irssi::Rawlog $rawlog, string $fname)
-Irssi::SIGNAL_PRIORITY_DEFAULT()
-Irssi::SIGNAL_PRIORITY_HIGH()
-Irssi::SIGNAL_PRIORITY_LOW()
-Irssi::Server::channel_find(Irssi::Server $server, string $name)
-Irssi::Server::channels(Irssi::Server $server)
-Irssi::Server::channels_join(Irssi::Server $server, string $channels, int $automatic)
-Irssi::Server::command(Irssi::Server $server, string $cmd)
-Irssi::Server::disconnect(Irssi::Server $server)
-Irssi::Server::format_create_dest(Irssi::Server $server, string $target, int $level, Irssi::UI::Window $window)
-Irssi::Server::get_nick_flags(Irssi::Server $server)
-Irssi::Server::ignore_check(Irssi::Server $server, string $nick, string $host, string $channel, string $text, int $level)
-Irssi::Server::ischannel(Irssi::Server $server, string $data)
-Irssi::Server::isnickflag(Irssi::Server $server, char $flag)
-Irssi::Server::mask_match(Irssi::Server $server, string $mask, string $nick, string $user, string $host)
-Irssi::Server::mask_match_address(Irssi::Server $server, string $mask, string $nick, string $address)
-Irssi::Server::masks_match(Irssi::Server $server, string $masks, string $nick, string $address)
-Irssi::Server::nicks_get_same(Irssi::Server $server, string $nick)
-Irssi::Server::parse_special(Irssi::Server $server, string $cmd, string $data, int $flags)
-Irssi::Server::print(Irssi::Server $server, string $channel, string $str, int $level)
-Irssi::Server::printformat(Irssi::Server $server, string $target, int $level, string $format, ...)
-Irssi::Server::queries(Irssi::Server $server)
-Irssi::Server::query_find(Irssi::Server $server, string $nick)
-Irssi::Server::ref(Irssi::Server $server)
-Irssi::Server::send_message(Irssi::Server $server, string $target, string $msg, int $target_type)
-Irssi::Server::unref(Irssi::Server $server)
-Irssi::Server::window_find_closest(Irssi::Server $server, string $name, int $level)
-Irssi::Server::window_find_item(Irssi::Server $server, string $name)
-Irssi::Server::window_find_level(Irssi::Server $server, int $level)
-Irssi::Server::window_item_find(Irssi::Server $server, string $name)
-Irssi::TextUI::Line::get_text(Irssi::TextUI::Line $line, int $coloring)
-Irssi::TextUI::Line::next(Irssi::TextUI::Line $line)
-Irssi::TextUI::Line::prev(Irssi::TextUI::Line $line)
-Irssi::TextUI::StatusbarItem::default_handler(Irssi::TextUI::StatusbarItem $item, int $get_size_only, string $str, string $data, int $escape_vars)
-Irssi::TextUI::TextBufferView::clear(Irssi::TextUI::TextBufferView $view)
-Irssi::TextUI::TextBufferView::get_bookmark(Irssi::TextUI::TextBufferView $view, string $name)
-Irssi::TextUI::TextBufferView::get_line_cache(Irssi::TextUI::TextBufferView $view, Irssi::TextUI::Line $line)
-Irssi::TextUI::TextBufferView::get_lines(Irssi::TextUI::TextBufferView $view)
-Irssi::TextUI::TextBufferView::redraw(Irssi::TextUI::TextBufferView $view)
-Irssi::TextUI::TextBufferView::remove_all_lines(Irssi::TextUI::TextBufferView $view)
-Irssi::TextUI::TextBufferView::remove_line(Irssi::TextUI::TextBufferView $view, Irssi::TextUI::Line $line)
-Irssi::TextUI::TextBufferView::scroll(Irssi::TextUI::TextBufferView $view, int $lines)
-Irssi::TextUI::TextBufferView::scroll_line(Irssi::TextUI::TextBufferView $view, Irssi::TextUI::Line $line)
-Irssi::TextUI::TextBufferView::set_bookmark(Irssi::TextUI::TextBufferView $view, string $name, Irssi::TextUI::Line $line)
-Irssi::TextUI::TextBufferView::set_bookmark_bottom(Irssi::TextUI::TextBufferView $view, string $name)
-Irssi::TextUI::TextBufferView::set_default_indent(Irssi::TextUI::TextBufferView $view, int $default_indent, int $longword_noindent)
-Irssi::TextUI::TextBufferView::set_scroll(Irssi::TextUI::TextBufferView $view, int $scroll)
-Irssi::TextUI::deinit()
-Irssi::TextUI::init()
-Irssi::UI::Server::gui_printtext_after(Irssi::Server $server, string $target, Irssi::TextUI::Line $prev, int $level, string $str)
-Irssi::UI::Server::term_refresh_freeze()
-Irssi::UI::Server::term_refresh_thaw()
-Irssi::UI::TextDest::print(Irssi::UI::TextDest $dest, string $str)
-Irssi::UI::Theme::format_expand(Irssi::UI::Theme $theme, string $format, int $flags)
-Irssi::UI::Theme::get_format(Irssi::UI::Theme $theme, string $module, string $tag)
-Irssi::UI::Window::activity(Irssi::UI::Window $window, int $data_level, string $hilight_color)
-Irssi::UI::Window::change_server(Irssi::UI::Window $window, Irssi::Server $server)
-Irssi::UI::Window::command(Irssi::UI::Window $window, string $cmd)
-Irssi::UI::Window::destroy(Irssi::UI::Window $window)
-Irssi::UI::Window::format_get_text(Irssi::UI::Window $window, string $module, Irssi::Server $server, string $target, int $formatnum, ...)
-Irssi::UI::Window::get_active_name(Irssi::UI::Window $window)
-Irssi::UI::Window::get_history_lines(Irssi::UI::Window $window)
-Irssi::UI::Window::gui_printtext_after(Irssi::UI::Window $window, Irssi::TextUI::Line $prev, int $level, string $str)
-Irssi::UI::Window::item_add(Irssi::UI::Window $window, Irssi::Windowitem $item, int $automatic)
-Irssi::UI::Window::item_destroy(Irssi::Windowitem $item)
-Irssi::UI::Window::item_find(Irssi::UI::Window $window, Irssi::Server $server, string $name)
-Irssi::UI::Window::item_next(Irssi::UI::Window $window)
-Irssi::UI::Window::item_prev(Irssi::UI::Window $window)
-Irssi::UI::Window::item_remove(Irssi::Windowitem $item)
-Irssi::UI::Window::items(Irssi::UI::Window $window)
-Irssi::UI::Window::last_line_insert(Irssi::UI::Window $window)
-Irssi::UI::Window::print(Irssi::UI::Window $window, string $str, int $level)
-Irssi::UI::Window::print_after(Irssi::UI::Window $window, Irssi::TextUI::Line $prev, int $level, string $str)
-Irssi::UI::Window::printformat(Irssi::UI::Window $window, int $level, string $format, ...)
-Irssi::UI::Window::set_active(Irssi::UI::Window $window)
-Irssi::UI::Window::set_history(Irssi::UI::Window $window, string $name)
-Irssi::UI::Window::set_level(Irssi::UI::Window $window, int $level)
-Irssi::UI::Window::set_name(Irssi::UI::Window $window, string $name)
-Irssi::UI::Window::set_refnum(Irssi::UI::Window $window, int $refnum)
-Irssi::UI::Window::view(Irssi::UI::Window $window)
-Irssi::UI::deinit()
-Irssi::UI::init()
-Irssi::UI::processes()
-Irssi::Window::format_create_dest(Irssi::UI::Window $window, int $level)
-Irssi::Windowitem::activity(Irssi::Windowitem $item, int $data_level, string $hilight_color)
-Irssi::Windowitem::change_server(Irssi::Windowitem $item, Irssi::Server $server)
-Irssi::Windowitem::command(Irssi::Windowitem $item, string $cmd)
-Irssi::Windowitem::get_dcc(Irssi::Windowitem $item)
-Irssi::Windowitem::is_active(Irssi::Windowitem $item)
-Irssi::Windowitem::parse_special(Irssi::Windowitem $item, string $cmd, string $data, int $flags)
-Irssi::Windowitem::print(Irssi::Windowitem $item, string $str, int $level)
-Irssi::Windowitem::printformat(Irssi::Windowitem $item, int $level, string $format, ...)
-Irssi::Windowitem::set_active(Irssi::Windowitem $item)
-Irssi::Windowitem::window(Irssi::Windowitem $item)
-Irssi::Windowitem::window_create(Irssi::Windowitem $item, int $automatic)
-Irssi::abstracts_register(SVptr $abstracts)
-Irssi::active_server()
-Irssi::active_win()
-Irssi::bits2level(int $bits)
-Irssi::channel_find(string $channel)
-Irssi::channels()
-Irssi::chatnet_find(string $name)
-Irssi::chatnets()
-Irssi::combine_level(int $level, string $str)
-Irssi::command(string $cmd)
-Irssi::command_bind(...)
-Irssi::command_bind_first(...)
-Irssi::command_bind_last(...)
-Irssi::command_parse_options(string $cmd, string $data)
-Irssi::command_runsub(string $cmd, string $data, Irssi::Server $server, Irssi::Windowitem $item)
-Irssi::command_set_options(string $cmd, string $options)
-Irssi::command_unbind(string $cmd, SVptr $func)
-Irssi::commands()
-Irssi::ctcp_register(string $name)
-Irssi::ctcp_unregister(string $name)
-Irssi::current_theme()
-Irssi::deinit()
-Irssi::expando_create(string $key, SVptr $func, SVptr $signals)
-Irssi::expando_destroy(string $name)
-Irssi::format_create_dest(string $target, int $level, Irssi::UI::Window $window)
-Irssi::format_get_length(string $str)
-Irssi::format_real_length(string $str, int $len)
-Irssi::get_gui()
-Irssi::get_irssi_binary()
-Irssi::get_irssi_config()
-Irssi::get_irssi_dir()
-Irssi::gui_input_get_pos()
-Irssi::gui_input_set(string $str)
-Irssi::gui_input_set_pos(int $pos)
-Irssi::gui_printtext(int $xpos, int $ypos, string $str)
-Irssi::ignore_check(string $nick, string $host, string $channel, string $text, int $level)
-Irssi::ignores()
-Irssi::init()
-Irssi::input_add(int $source, int $condition, SVptr $func, SVptr $data)
-Irssi::input_remove(int $tag)
-Irssi::level2bits(string $str)
-Irssi::log_create_rec(string $fname, int $level)
-Irssi::log_find(string $fname)
-Irssi::logs()
-Irssi::mask_match(string $mask, string $nick, string $user, string $host)
-Irssi::mask_match_address(string $mask, string $nick, string $address)
-Irssi::masks_match(string $masks, string $nick, string $address)
-Irssi::parse_special(string $cmd, string $data, int $flags)
-Irssi::pidwait_add(int $pid)
-Irssi::pidwait_remove(int $pid)
-Irssi::print(string $str, int $level)
-Irssi::printformat(int $level, string $format, ...)
-Irssi::queries()
-Irssi::query_find(string $nick)
-Irssi::rawlog_create()
-Irssi::rawlog_set_size(int $lines)
-Irssi::reconnects()
-Irssi::server_create_conn(int $chat_type, string $dest, int $port, string $chatnet, string $password, string $nick)
-Irssi::server_find_chatnet(string $chatnet)
-Irssi::server_find_tag(string $tag)
-Irssi::servers()
-Irssi::settings_add_bool(string $section, string $key, int $def)
-Irssi::settings_add_int(string $section, string $key, int $def)
-Irssi::settings_add_level(string $section, string $key, string $def)
-Irssi::settings_add_size(string $section, string $key, string $def)
-Irssi::settings_add_str(string $section, string $key, string $def)
-Irssi::settings_add_time(string $section, string $key, string $def)
-Irssi::settings_get_bool(string $key)
-Irssi::settings_get_int(string $key)
-Irssi::settings_get_level(string $key)
-Irssi::settings_get_size(string $key)
-Irssi::settings_get_str(string $key)
-Irssi::settings_get_time(string $key)
-Irssi::settings_remove(string $key)
-Irssi::settings_set_bool(string $key, int $value)
-Irssi::settings_set_int(string $key, int $value)
-Irssi::settings_set_level(string $key, string $value)
-Irssi::settings_set_size(string $key, string $value)
-Irssi::settings_set_str(string $key, string $value)
-Irssi::settings_set_time(string $key, string $value)
-Irssi::signal_add(...)
-Irssi::signal_add_first(...)
-Irssi::signal_add_last(...)
-Irssi::signal_add_priority(...)
-Irssi::signal_continue(...)
-Irssi::signal_emit(string $signal, ...)
-Irssi::signal_get_emitted()
-Irssi::signal_get_emitted_id()
-Irssi::signal_register(...)
-Irssi::signal_remove(string $signal, SVptr $func)
-Irssi::signal_stop()
-Irssi::signal_stop_by_name(string $signal)
-Irssi::statusbar_item_register(string $name, string $value, string $func)
-Irssi::statusbar_item_unregister(string $name)
-Irssi::statusbar_items_redraw(string $name)
-Irssi::statusbars_recreate_items()
-Irssi::strip_codes(string $input)
-Irssi::theme_register(SVptr $formats)
-Irssi::themes_reload()
-Irssi::timeout_add(int $msecs, SVptr $func, SVptr $data)
-Irssi::timeout_add_once(int $msecs, SVptr $func, SVptr $data)
-Irssi::timeout_remove(int $tag)
-Irssi::version()
-Irssi::window_find_closest(string $name, int $level)
-Irssi::window_find_item(string $name)
-Irssi::window_find_level(int $level)
-Irssi::window_find_name(string $name)
-Irssi::window_find_refnum(int $refnum)
-Irssi::window_item_find(string $name)
-Irssi::window_refnum_next(int $refnum, int $wrap)
-Irssi::window_refnum_prev(int $refnum, int $wrap)
-Irssi::windows()
-Irssi::windows_refnum_last()
diff --git a/feature-tests/augment_inputline.pl b/feature-tests/augment_inputline.pl
index 577f756..97a129e 100644
--- a/feature-tests/augment_inputline.pl
+++ b/feature-tests/augment_inputline.pl
@@ -1,3 +1,12 @@
+=pod
+
+=head1 NAME
+
+test
+
+=cut
+
+
use strict;
use Irssi;
use Irssi::TextUI; # for sbar_items_redraw
diff --git a/feature-tests/bindings.pl b/feature-tests/bindings.pl
new file mode 100644
index 0000000..ece220d
--- /dev/null
+++ b/feature-tests/bindings.pl
@@ -0,0 +1,114 @@
+use strict;
+use warnings;
+
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => '',
+ description => '',
+ licence => q(GNU GPLv2 or later),
+
+ );
+
+# code taken from adv_windowlist
+
+my $keymap;
+
+sub STATE_HEADER () { 0 }
+sub STATE_BODY () { 1 }
+sub STATE_END () { 2 }
+my $parse_state = STATE_HEADER;
+
+my $binding_formats = {};
+
+init();
+
+sub init {
+
+ $keymap = {};
+
+ Irssi::command_bind('showbinds', 'cmd_showbinds');
+ Irssi::signal_add('command bind' => 'watch_keymap');
+
+ $binding_formats = get_binding_formats();
+
+ capture_bind_data();
+}
+
+sub get_binding_formats {
+ my $theme = Irssi::current_theme();
+ my @keys = qw/bind_header bind_list bind_command_list
+ bind_footer bind_unknown_id/;
+
+ my $ret = {};
+ foreach my $key (@keys) {
+ my $tmp = $theme->get_format('fe-common/core', $key);
+ #$tmp =~ s/%/%%/g; # escape colour codes?
+ $ret->{$key} = $tmp;
+ }
+ return $ret;
+}
+
+sub cmd_showbinds {
+ my ($args, @rest) = @_;
+
+ my $win = Irssi::active_win();
+ $win->print("Change window bindings:", Irssi::MSGLEVEL_CLIENTCRAP);
+ for my $w (sort keys %$keymap) {
+ my $x = $keymap->{$w};
+ $win->print("$w ==> $x", Irssi::MSGLEVEL_CLIENTCRAP);
+ }
+ $win->print("Done showing window bindings:", Irssi::MSGLEVEL_CLIENTCRAP);
+
+}
+
+sub sig_print_text {
+ my ($text_dest, $str, $str_stripped) = @_;
+
+ return unless $text_dest->{level} == Irssi::MSGLEVEL_CLIENTCRAP;
+ return unless $text_dest->{target} eq '';
+ return unless not defined $text_dest->{server};
+
+ # if ($parse_state = STATE_HEADER) {
+ # if ($str =~ m/\Q$binding_formats->{bind_header}\E/) {
+ # $parse_state = STATE_BODY;
+ # }
+ # } elsif ($parse_state = STATE_BODY) {
+ print "Data is: $str_stripped";
+ if ($str_stripped =~ m/^.*?(\S{,20})\s+(\S+)\s+(\S+)/) {
+ $keymap->{$1} = "$2, $3";
+ print "Parsed $1 as $2, $3";
+ }
+ Irssi::signal_stop();
+ # } elsif ($str =~ m/$binding_formats->{bind_footer}\E/) {
+ # $parse_state = STATE_END;
+ # }
+ # }
+}
+
+
+sub capture_bind_data {
+ Irssi::signal_remove('command bind' => 'watch_keymap');
+ Irssi::signal_add_first('print text' => 'sig_print_text');
+ Irssi::command('bind'); # stolen from grep
+ Irssi::signal_remove('print text' => 'sig_print_text');
+
+}
+
+
+# watch keymap changes
+sub watch_keymap {
+ Irssi::timeout_add_once(1000, 'capture_bind_data', undef);
+}
+
+
+
diff --git a/feature-tests/colour_test.pl b/feature-tests/colour_test.pl
new file mode 100644
index 0000000..875b63c
--- /dev/null
+++ b/feature-tests/colour_test.pl
@@ -0,0 +1,16 @@
+use strict;
+use warnings;
+
+
+use Irssi;
+
+my @colors = (0..255);
+my @names = qw/black red green yellow blue magenta cyan white/;
+#my @bnames = map { "bold_$_" } @names;
+
+#@names = (@names, @bnames);
+
+foreach my $c (@colors) {
+ my $n = $names[$c] // $c;
+ Irssi::print("\%$c This is bg color $n\%n");
+}
diff --git a/feature-tests/easy_exec.pl b/feature-tests/easy_exec.pl
index 669a00b..d342516 100644
--- a/feature-tests/easy_exec.pl
+++ b/feature-tests/easy_exec.pl
@@ -2,7 +2,7 @@ use strict;
use warnings;
# export everything.
-use Irssi; #(@Irssi::EXPORT_OK);
+use Irssi;
use Irssi::Irc;
use Irssi::TextUI;
@@ -18,33 +18,38 @@ our %IRSSI = (
license => 'Public Domain',
);
-#Irssi::signal_add_first 'command script exec', \&better_exec;
-Irssi::command_bind('script exec', \&better_exec);
-
-sub better_exec {
- my ($args, $serv, $witem) = @_;
- # todo: handle permanent arg?
- my $perm = 0;
- print "Args: $args";
- if ($args =~ s/^\s*-permanent\s*(.*)$/$1/) {
- $perm = 1;
- }
- print "Args now: $args";
-
-# eval $args;
- my $str = "//script exec " .
- ($perm ? '-permanent' : '')
- . 'use Irssi (@Irssi::EXPORT_OK); ' . $args;
- print "Running: $str";
-
-# Irssi::command($str);
- Irssi::signal_continue($str, @_[1..$#_]);
-}
+# TODO: make this more tab-complete friendly
+init();
+
+sub init {
+ Irssi::command('/alias se script exec use Data::Dumper\;'
+ .' use Irssi (@Irssi::EXPORT_OK)\; $0-');
+ Irssi::command('/alias sep script exec -permanent '
+ . 'use Data::Dumper\; use Irssi (@Irssi::EXPORT_OK)\; $0-');
-sub Dump {
- print Dumper(\@_);
+ Irssi::signal_add_last ('complete word', 'sig_complete_word');
}
-sub test() {
- print "This is a test";
+sub sig_complete_word {
+ my ($strings, $window, $word, $linestart, $want_space) = @_;
+ # only provide these completions if the input line is otherwise empty.
+ my $cmdchars = Irssi::settings_get_str('cmdchars');
+ my $quoted = quotemeta($cmdchars);
+ #print "Linestart: $linestart";
+ return unless ($linestart =~ /^${quoted}(?:se|sep)/);
+
+ my $clean_word = $word;
+ $clean_word =~ s/^"//g;
+ $clean_word =~ s/"$//g;
+ $clean_word =~ s/->$//g;
+
+
+
+ my @expansions = @Irssi::EXPORT_OK;
+ push @$strings, grep { $_ =~ m/^\Q$clean_word\E/ } @expansions;
+ print "Sebug: " . join(", ", @$strings);
+ $$want_space = 0;
+
+
+ Irssi::signal_stop() if (@$strings);
}
diff --git a/feature-tests/exec.pl b/feature-tests/exec.pl
new file mode 100644
index 0000000..f6d6377
--- /dev/null
+++ b/feature-tests/exec.pl
@@ -0,0 +1,442 @@
+# exec.pl
+# a (currently stupid) alternative to the built-in /exec, because it's broken
+# on OSX. This thing stll needs a whole bunch of actual features, but for now,
+# you can actually run commands.
+
+# Obviously, that's pretty dangerous. Use at your own risk.
+
+# EXEC [-] [-nosh] [-out | -msg <target> | -notice <target>] [-name <name>] <cmd line>
+# EXEC -out | -window | -msg <target> | -notice <target> | -close | -<signal> %<id>
+# EXEC -in %<id> <text to send to process>
+#
+# -: Don't print "process terminated ..." message
+#
+# -nosh: Don't start command through /bin/sh
+#
+# -out: Send output to active channel/query
+#
+# -msg: Send output to specified nick/channel
+#
+# -notice: Send output to specified nick/channel as notices
+#
+# -name: Name the process so it could be accessed easier
+#
+# -window: Move the output of specified process to active window
+#
+# -close: Forcibly close (or "forget") a process that doesn't die.
+# This only removes all information from irssi concerning the
+# process, it doesn't send SIGKILL or any other signal
+# to the process.
+#
+# -<signal>: Send a signal to process. <signal> can be either numeric
+# or one of the few most common ones (hup, term, kill, ...)
+#
+# -in: Send text to standard input of the specified process
+#
+# -interactive: Creates a query-like window item. Text written to it is
+# sent to executed process, like /EXEC -in.
+#
+# Execute specified command in background. Output of process is printed to
+# active window by default, but can be also sent as messages or notices to
+# specified nick or channel.
+#
+# Processes can be accessed either by their ID or name if you named it. Process
+# identifier must always begin with '%' character, like %0 or %name.
+#
+# Once the process is started, its output can still be redirected elsewhere with
+# the -window, -msg, etc. options. You can send text to standard input of the
+# process with -in option.
+#
+# -close option shouldn't probably be used if there's a better way to kill the
+# process. It is meant to remove the processes that don't die even with
+# SIGKILL. This option just closes the pipes used to communicate with the
+# process and frees all memory it used.
+#
+# EXEC without any arguments displays the list of started processes.
+#
+
+
+
+use 5.010; # 5.10 or above, necessary to get the return value from a command.
+
+use strict;
+use warnings;
+use English '-no_match_vars';
+
+use Irssi;
+use POSIX;
+use Time::HiRes qw/sleep/;
+use IO::Handle;
+use IO::Pipe;
+use IPC::Open3;
+use Symbol 'geniosym';
+
+use Data::Dumper;
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => 'exec.pl',
+ description => '',
+ license => 'Public Domain',
+ );
+
+my @processes = ();
+sub get_processes { return @processes }
+
+# the /exec command, nothing to do with the actual command being run.
+my $command;
+my $command_options;
+
+sub get_new_id {
+ my $i = 1;
+ foreach my $proc (@processes) {
+ if ($proc->{id} != $i) {
+ next;
+ }
+ $i++;
+ }
+ return $i;
+}
+
+sub add_process {
+ #my ($pid) = @_;
+ my $id = get_new_id();
+
+ my $new = {
+ id => $id,
+ pid => 0,
+ in_tag => 0,
+ out_tag => 0,
+ err_tag => 0,
+ s_in => geniosym(), #IO::Handle->new,
+ s_err => geniosym(), #IO::Handle->new,
+ s_out => geniosym(), #IO::Handle->new,
+ cmd => '',
+ opts => {},
+ };
+
+ # $new->{s_in}->autoflush(1);
+ # $new->{s_out}->autoflush(1);
+ # $new->{s_err}->autoflush(1);
+
+ push @processes, $new;
+
+ _msg("New process item created: $id");
+ return $new;
+}
+
+sub find_process_by_id {
+ my ($id) = @_;
+ my @matches = grep { $_->{id} == $id } @processes;
+ _error("wtf, multiple id matches for $id. BUG") if @matches > 1;
+
+ return $matches[0];
+
+}
+sub find_process_by_pid {
+ my ($pid) = @_;
+ my @matches = grep { $_->{pid} == $pid } @processes;
+ _error("wtf, multiple pid matches for $pid. BUG") if @matches > 1;
+
+ return $matches[0];
+}
+
+sub remove_process {
+ my ($id, $verbose) = @_;
+ my $del_index = 0;
+ foreach my $proc (@processes) {
+ if ($id == $proc->{id}) {
+ last;
+ }
+ $del_index++;
+ }
+ print "remove: del index: $del_index";
+ if ($del_index <= $#processes) {
+ my $dead = splice(@processes, $del_index, 1, ());
+ #_msg("removing " . Dumper($dead));
+
+ Irssi::input_remove($dead->{err_tag});
+ Irssi::input_remove($dead->{out_tag});
+
+ close $dead->{s_out};
+ close $dead->{s_in};
+ close $dead->{s_err};
+
+ } else {
+ $verbose = 1;
+ if ($verbose) {
+ print "remove: No such process with ID $id";
+ }
+ }
+}
+
+sub show_current_processes {
+ if (@processes == 0) {
+ print "No processes running";
+ return;
+ }
+ foreach my $p (@processes) {
+ printf("ID: %d, PID: %d, Command: %s", $p->{id}, $p->{pid}, $p->{cmd});
+ }
+}
+
+sub parse_options {
+ my ($args) = @_;
+ my @options = Irssi::command_parse_options($command, $args);
+ if (@options) {
+ my $opt_hash = $options[0];
+ my $rest = $options[1];
+
+ $rest =~ s/^\s*(.*?)\s*$/$1/; # trim surrounding space.
+
+ #print Dumper([$opt_hash, $rest]);
+ if (length $rest) {
+ return ($opt_hash, $rest);
+ } else {
+ show_current_processes();
+ return ();
+ }
+ } else {
+ _error("Error parsing $command options");
+ return ();
+ }
+}
+
+sub schedule_cleanup {
+ my $fd = shift;
+ Irssi::timeout_add_once(100, sub { $_[0]->close }, $fd);
+}
+
+sub do_fork_and_exec {
+ my ($rec) = @_;
+
+ #Irssi::timeout_add_once(100, sub { die }, {});
+
+ return unless exists $rec->{cmd};
+ drop_privs();
+
+ _msg("Executing command " . join(", ", @{ $rec->{cmd} }));
+ my $c = join(" ", @{ $rec->{cmd} });
+ my $pid = open3($rec->{s_sin}, $rec->{s_out}, $rec->{s_err}, $c);
+
+ _msg("PID is $pid");
+ $rec->{pid} = $pid;
+
+ # _msg("Pid %s, in: %s, out: %s, err: %s, cmd: %s",
+ # $pid, $sin, $sout, $serr, $cmd);
+
+ # _msg("filenos, Pid %s, in: %s, out: %s, err: %s",
+ # $pid, $sin->fileno, $sout->fileno, $serr->fileno);
+
+ if (not defined $pid) {
+
+ _error("open3 failed: $! Aborting");
+
+ close($_) for ($rec->{s_in}, $rec->{s_err}, $rec->{s_out});
+ undef($_) for ($rec->{s_in}, $rec->{s_err}, $rec->{s_out});
+
+ return;
+ }
+
+ # parent
+ if ($pid) {
+
+# eval {
+ print "fileno is " . fileno($rec->{s_out});
+ $rec->{out_tag} = Irssi::input_add( fileno($rec->{s_out}),
+ Irssi::INPUT_READ,
+ \&child_output,
+ $rec);
+ #die unless $rec->{out_tag};
+
+ $rec->{err_tag} = Irssi::input_add(fileno($rec->{s_err}),
+ Irssi::INPUT_READ,
+ \&child_error,
+ $rec);
+ #die unless $rec->{err_tag};
+
+ # };
+
+
+ Irssi::pidwait_add($pid);
+ die "input_add failed to initialise: $@" if $@;
+ }
+}
+
+sub drop_privs {
+ my @temp = ($EUID, $EGID);
+ my $orig_uid = $UID;
+ my $orig_gid = $GID;
+ $EUID = $UID;
+ $EGID = $GID;
+ # Drop privileges
+ $UID = $orig_uid;
+ $GID = $orig_gid;
+ # Make sure privs are really gone
+ ($EUID, $EGID) = @temp;
+ die "Can't drop privileges"
+ unless $UID == $EUID && $GID eq $EGID;
+}
+
+sub child_error {
+ my $rec = shift;
+
+ my $err_fh = $rec->{s_err};
+
+ my $done = 0;
+
+ while (not $done) {
+ my $data = '';
+ _msg("Stderr: starting sysread");
+ my $bytes_read = sysread($err_fh, $data, 256);
+ if (not defined $bytes_read) {
+ _error("stderr: sysread failed:: $!");
+ $done = 1;
+ } elsif ($bytes_read == 0) {
+ _msg("stderr: sysread got EOF");
+ $done = 1;
+ } elsif ($bytes_read < 256) {
+ # that's all, folks.
+ _msg("%%_stderr:%%_ read %d bytes: %s", $bytes_read, $data);
+ } else {
+ # we maybe need to read some more
+ _msg("%%_stderr:%%_ read %d bytes: %s, maybe more", $bytes_read, $data);
+ }
+ }
+
+ _msg('removing input stderr tag');
+ Irssi::input_remove($rec->{err_tag});
+
+}
+
+sub sig_pidwait {
+ my ($pidwait, $status) = @_;
+ my @matches = grep { $_->{pid} == $pidwait } @processes;
+ foreach my $m (@matches) {
+ _msg("PID %d has terminated. Status %d (or maybe %d .... %d)",
+ $pidwait, $status, $?, ${^CHILD_ERROR_NATIVE} );
+
+ remove_process($m->{id});
+ }
+}
+
+sub child_output {
+ my $rec = shift;
+ my $out_fh = $rec->{s_out};
+
+ my $done = 0;
+
+ while (not $done) {
+ my $data = '';
+ _msg("Stdout: starting sysread");
+ my $bytes_read = sysread($out_fh, $data, 256);
+ if (not defined $bytes_read) {
+ _error("stdout: sysread failed:: $!");
+ $done = 1;
+ } elsif ($bytes_read == 0) {
+ _msg("stdout: sysread got EOF");
+ $done = 1;
+ } elsif ($bytes_read < 256) {
+ # that's all, folks.
+ _msg("%%_stdout:%%_ read %d bytes: %s", $bytes_read, $data);
+ } else {
+ # we maybe need to read some more
+ _msg("%%_stdout:%%_ read %d bytes: %s, maybe more", $bytes_read, $data);
+ }
+ }
+
+ _msg('removing input stdout tag');
+ Irssi::input_remove($rec->{out_tag});
+
+ #schedule_cleanup($stdout_reader);
+ #$stdout_reader->close;
+}
+
+sub _error {
+ my ($msg, @params) = @_;
+ my $win = Irssi::active_win();
+ my $str = sprintf($msg, @params);
+ $win->print($str, Irssi::MSGLEVEL_CLIENTERROR);
+}
+
+sub _msg {
+ my ($msg, @params) = @_;
+ my $win = Irssi::active_win();
+ my $str = sprintf($msg, @params);
+ $win->print($str, Irssi::MSGLEVEL_CLIENTCRAP);
+}
+
+sub cmd_exec {
+
+ my ($args, $server, $witem) = @_;
+ Irssi::signal_stop;
+ my @options = parse_options($args);
+
+ if (@options) {
+ my $rec = add_process();
+ my ($options, $cmd) = @options;
+
+ $cmd = [split ' ', $cmd];
+
+ if (not exists $options->{nosh}) {
+ unshift @$cmd, ("/bin/sh -c");
+ }
+
+ $rec->{opts} = $options;
+ $rec->{cmd} = $cmd;
+
+ do_fork_and_exec($rec)
+ }
+
+}
+
+sub cmd_input {
+ my ($args) = @_;
+ my $rec = $processes[0]; # HACK, make them specify.
+ if ($rec->{pid}) {
+ print "INput writing to $rec->{pid}";
+ my $fh = $rec->{s_in};
+
+ my $ret = syswrite($fh, "$args\n");
+ if (not defined $ret) {
+ print "Error writing to process $rec->{pid}: $!";
+ } else {
+ print "Wrote $ret bytes to $rec->{pid}";
+ }
+
+ } else {
+ _error("no execs are running to accept input");
+ }
+}
+
+sub exec_init {
+ $command = "exec";
+ $command_options = join ' ',
+ (
+ '!-', 'interactive', 'nosh', '+name', '+msg',
+ '+notice', 'window', 'close', '+level', 'quiet'
+ );
+
+ Irssi::command_bind($command, \&cmd_exec);
+ Irssi::command_set_options($command, $command_options);
+ Irssi::command_bind('input', \&cmd_input);
+
+ Irssi::signal_add('pidwait', \&sig_pidwait);
+}
+
+ exec_init();
+
+package Irssi::UI;
+
+{
+ no warnings 'redefine';
+
+ sub processes() {
+ return Irssi::Script::exec::get_processes();
+ }
+
+}
+
+1;
diff --git a/feature-tests/format-test.pl b/feature-tests/format-test.pl
index d8be412..7a38d9f 100644
--- a/feature-tests/format-test.pl
+++ b/feature-tests/format-test.pl
@@ -3,7 +3,7 @@ use warnings;
use Irssi;
-
+use Data::Dumper;
our $VERSION = '0.1';
our %IRSSI = (
@@ -14,13 +14,26 @@ our %IRSSI = (
license => 'Public Domain',
);
+sub actually_printformat {
+ my ($win, $level, $module, $format, @args) = @_;
+ my $ret = '';
+ {
+ # deeeeeeep black magic.
+ local *CORE::GLOBAL::caller = sub { $module };
+ $win->printformat($level, $format, @args);
+
+ $ret = Irssi::current_theme()->get_format($module, $format);
+ }
+ return $ret;
+}
+
init();
sub init {
- Irssi::command_bind('ft', \&format_test);
-}
+ my $win = Irssi::active_win();
+ my $moo = actually_printformat($win, Irssi::MSGLEVEL_CLIENTCRAP, 'fe-common/irc',
+ "kill_server", "foo", "bar", "horse", "cake");
+ print Dumper($moo);
-sub format_test {
- my ($args, $win, $server) = @_;
}
diff --git a/feature-tests/getchan.pl b/feature-tests/getchan.pl
new file mode 100644
index 0000000..7d4ee55
--- /dev/null
+++ b/feature-tests/getchan.pl
@@ -0,0 +1,165 @@
+=pod
+
+=head1 NAME
+
+template.pl
+
+=head1 DESCRIPTION
+
+A minimalist template useful for basing actual scripts on.
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+=head1 USAGE
+
+None, since it doesn't actually do anything.
+
+=head1 AUTHORS
+
+Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+=head1 TODO
+
+Use this template to make an actual script.
+
+=cut
+
+use strict;
+use warnings;
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => '',
+ description => '',
+ license => 'MIT',
+ updated => '$DATE'
+ );
+
+
+my $line_format;
+my $head_format;
+my $foot_format;
+
+my $channels = {};
+my @errors;
+my $state;
+
+sub get_format_string {
+ return Irssi::current_theme->get_format(@_);
+}
+
+
+sub get_channels {
+ # see here: https://github.com/shabble/irssi-docs/wiki/complete_themes
+ $line_format = get_format_string('fe-common/core', 'chansetup_line');
+ $head_format = get_format_string('fe-common/core', 'chansetup_header');
+ $foot_format = get_format_string('fe-common/core', 'chansetup_footer');
+
+ my $parse_line_format = "channel:\$0\tnet:\$1\tpass:\$2\tsettings:\$3";
+ Irssi::command("^FORMAT chansetup_line $parse_line_format");
+ Irssi::command("^FORMAT chansetup_header START");
+ Irssi::command("^FORMAT chansetup_footer END");
+
+ $state = 0;
+ Irssi::signal_add_first('print text', 'sig_print_text');
+ Irssi::command("CHANNEL LIST");
+ Irssi::signal_remove('print text', 'sig_print_text');
+
+}
+
+sub restore_formats {
+ Irssi::command("^FORMAT chansetup_line $line_format");
+ Irssi::command("^FORMAT chansetup_header $head_format");
+ if ($foot_format =~ m/^\s*$/) {
+ Irssi::command("^FORMAT -reset chansetup_footer");
+ } else {
+ Irssi::command("^FORMAT chansetup_footer $foot_format");
+ }
+}
+
+sub sig_print_text {
+ my ($dest, $text, $stripped) = @_;
+
+ my $entry = {};
+
+ if ($state == 0 && $text =~ m/START/) {
+ $state = 1;
+ } elsif ($state == 1) {
+ # TODO: might we get multiple lines at once?
+ if ($text =~ m/channel:([^\t]+)\tnet:([^\t]+)\tpass:([^\t]*)\tsettings:(.*)$/) {
+ $entry->{channel} = $1;
+ $entry->{network} = $2;
+ $entry->{password} = $3;
+ $entry->{settings} = $4;
+
+ my $tag = "$2/$1";
+ $channels->{$tag} = $entry;
+
+ } elsif ($text =~ m/END/) {
+ $state = 0;
+ } else {
+ push @errors, "Failed to parse: '$text'";
+ }
+ }
+ Irssi::signal_stop();
+}
+
+sub go {
+ eval {
+ get_channels();
+ };
+ if ($@) {
+ print "Error: $@. Reloading theme to restore format";
+ Irssi::themes_reload();
+ } else {
+ restore_formats();
+ }
+ if (@errors) {
+ @errors = map { s/\t/ /g } @errors;
+ print Dumper(\@errors);
+ }
+ print Dumper($channels);
+}
+
+Irssi::command_bind('getchan', \&go);
+# in fe-common/core
+#
+# chansetup_not_found = "Channel {channel $0} not found";
+# chansetup_added = "Channel {channel $0} saved";
+# chansetup_removed = "Channel {channel $0} removed";
+# chansetup_header = "%#Channel Network Password Settings";
+# chansetup_line = "%#{channel $[15]0} %|$[10]1 $[10]2 $3";
+# chansetup_footer = "";
diff --git a/feature-tests/key_sig.pl b/feature-tests/key_sig.pl
new file mode 100644
index 0000000..ef69d45
--- /dev/null
+++ b/feature-tests/key_sig.pl
@@ -0,0 +1,51 @@
+use strict;
+use warnings 'all';
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => '',
+ description => '',
+ license => 'Public Domain',
+ );
+
+my $bacon = 10;
+
+Irssi::signal_register({'key created' => [qw/Irssi::UI::Key/ ] });
+
+Irssi::signal_add('key created', \&sig_key_created);
+Irssi::signal_register({'key command' => [qw/string/]});
+Irssi::signal_add_first('key command' => \&sig_key_cmd);
+
+Irssi::signal_register({'key nothing' => [qw/string/]});
+Irssi::signal_add_first('key nothing' => \&sig_key_cmd);
+
+Irssi::signal_register({'keyboard created' => [qw/Irssi::UI::Keyboard/]});
+Irssi::signal_add_first('keyboard created' => \&sig_keyboard);
+
+sub sig_keyboard {
+ my ($data) = @_;
+ print "keyboard: " . Dumper($data);
+}
+
+sub sig_key_cmd {
+ my ($data) = @_;
+ print "key cmd: " . Dumper($data);
+
+}
+
+sub sig_key_created {
+ my @args = @_;
+
+ print "Key Created, Args: " . Dumper(\@args);
+}
+
+Irssi::command("bind meta-q /echo moo");
diff --git a/feature-tests/local_input_capture.pl b/feature-tests/local_input_capture.pl
new file mode 100644
index 0000000..847ff07
--- /dev/null
+++ b/feature-tests/local_input_capture.pl
@@ -0,0 +1,50 @@
+use strict;
+use warnings;
+
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => '',
+ description => '',
+ license => 'Public Domain',
+ );
+
+my $buffer = '';
+init();
+
+sub init {
+
+ Irssi::signal_add_first 'print text', 'sig_print_text';
+ Irssi::command 'echo Hello there';
+ Irssi::signal_remove 'print text', 'sig_print_text';
+ Irssi::command_bind 'showbuf', 'cmd_showbuf';
+}
+
+sub cmd_showbuf {
+ my ($args, $server, $win_item) = @_;
+ my $win;
+ if (defined $win_item) {
+ $win = $win_item->window();
+ } else {
+ $win = Irssi::active_win();
+ }
+
+ $win->print("buffer is: $buffer");
+ $buffer = '';
+}
+
+sub sig_print_text {
+ my ($text_dest, $str, $stripped_str) = @_;
+
+ $buffer .= $stripped_str;
+ Irssi::signal_stop;
+}
diff --git a/feature-tests/pipes.pl b/feature-tests/pipes.pl
new file mode 100644
index 0000000..50bff53
--- /dev/null
+++ b/feature-tests/pipes.pl
@@ -0,0 +1,87 @@
+use strict;
+use warnings;
+
+use Irssi;
+use POSIX;
+use Time::HiRes qw/sleep/;
+
+my $forked = 0;
+
+sub pipe_and_fork {
+ my ($read_handle, $write_handle);
+
+ pipe($read_handle, $write_handle);
+
+ my $oldfh = select($write_handle);
+ $| = 1;
+ select $oldfh;
+
+ return if $forked;
+
+ my $pid = fork();
+
+ if (not defined $pid) {
+ _error("Can't fork: Aborting");
+ close($read_handle);
+ close($write_handle);
+ return;
+ }
+
+ $forked = 1;
+
+ if ($pid > 0) { # this is the parent (Irssi)
+ close ($write_handle);
+ Irssi::pidwait_add($pid);
+ my $job = $pid;
+ my $tag;
+ my @args = ($read_handle, \$tag, $job);
+ $tag = Irssi::input_add(fileno($read_handle),
+ Irssi::INPUT_READ,
+ \&child_input,
+ \@args);
+
+ } else { # child
+ # make up some data - block if we like.
+ for (1..10) {
+ sleep rand 1;
+ print $write_handle "Some data: $_\n";
+ }
+ print $write_handle "__DONE__\n";
+ close $write_handle;
+
+ POSIX::_exit(1);
+ }
+}
+
+sub child_input {
+ my $args = shift;
+ my ($read_handle, $input_tag_ref, $job) = @$args;
+
+ my $data = <$read_handle>;
+
+ if ($data =~ m/__DONE__/) {
+ close($read_handle);
+ Irssi::input_remove($$input_tag_ref);
+ _msg("child finished");
+
+ $forked = 0;
+
+ } else {
+ _msg("Received from child: $data");
+ }
+
+}
+
+sub _error {
+ my ($msg) = @_;
+ my $win = Irssi::active_win();
+ $win->print($msg, Irssi::MSGLEVEL_CLIENTERROR);
+}
+
+sub _msg {
+ my ($msg) = @_;
+ my $win = Irssi::active_win();
+ $win->print($msg, Irssi::MSGLEVEL_CLIENTCRAP);
+}
+
+Irssi::command_bind("start_pipes", \&pipe_and_fork);
diff --git a/feature-tests/redir-input.pl b/feature-tests/redir-input.pl
index 94ca523..ed77d3c 100644
--- a/feature-tests/redir-input.pl
+++ b/feature-tests/redir-input.pl
@@ -20,11 +20,14 @@ our %IRSSI = (
Irssi::command_bind("ri", \&cmd_ri);
-
+Irssi::signal_register({ 'gui entry redirect' => [ qw/string string intptr intptr/]});
sub cmd_ri {
my ($args, $server, $witem) = @_;
my $win = Irssi::active_win();
-
+ my ($x, $y) = (0, 0);
+ Irssi::signal_emit('gui entry redirect', 'sub_blah', "bacon", $x, $y);
#my $ref = Irssi::windows_refnum_last
- $win->format_create_dest(Irssi::MSGLEVEL_ClIENTCRAP());
+# $win->format_create_dest(Irssi::MSGLEVEL_ClIENTCRAP());
}
+
+sub sub_blah { print "Moo" }
diff --git a/feature-tests/sig_unbind.pl b/feature-tests/sig_unbind.pl
new file mode 100644
index 0000000..3123182
--- /dev/null
+++ b/feature-tests/sig_unbind.pl
@@ -0,0 +1,58 @@
+use strict;
+use warnings;
+
+
+use Irssi (@Irssi::EXPORT_OK);
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => '',
+ description => '',
+ license => 'Public Domain',
+ );
+
+command_bind("dosig_r",
+ sub {
+ my $ref = \&cmd_oink;
+ _print("binding oink to $ref");
+ signal_add("command oink", $ref);
+ });
+
+command_bind("undosig_r",
+ sub {
+ my $ref = \&cmd_oink;
+
+ _print("unbinding oink from $ref");
+
+ signal_remove("command oink", $ref);
+ });
+
+command_bind("dosig_s",
+ sub {
+ signal_add("command oink", 'cmd_oink');
+ });
+
+command_bind("undosig_s",
+ sub {
+ signal_remove("command oink", 'cmd_oink');
+ });
+
+sub cmd_oink {
+ Irssi::active_win()->print("Oink:");
+}
+
+sub _print {
+ Irssi::active_win()->print($_[0]);
+}
+
+command("dosig_r");
+command("oink");
+command("undosig_r");
+command("oink");
diff --git a/feature-tests/signal_logger.pl b/feature-tests/signal_logger.pl
new file mode 100644
index 0000000..3b3b9ad
--- /dev/null
+++ b/feature-tests/signal_logger.pl
@@ -0,0 +1,170 @@
+use strict;
+use warnings;
+
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+use Time::HiRes qw/time/;
+
+use Data::Dumper;
+
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => '',
+ description => '',
+ license => 'Public Domain',
+ );
+
+my $enabled = 0;
+my $depth = 0;
+my $handlers = { };
+my @log = ();
+my @signals =
+(
+'send text',
+'send command',
+#'print text',
+#'gui print text',
+'beep',
+#'complete word',
+#'gui key pressed',
+'window changed',
+ "server add fill",
+ "server connect copy",
+ "server connect failed",
+ "server connected",
+ "server connecting",
+ "server disconnected",
+ "server event",
+ "server incoming",
+ "server lag disconnect",
+ "server lag",
+ "server looking",
+ "server nick changed",
+ "server quit",
+ "server reconnect not found",
+ "server reconnect remove",
+ "server reconnect save status",
+ "server sendmsg",
+ "server setup fill chatnet",
+ "server setup fill connect",
+ "server setup fill reconn",
+ "server setup read",
+ "server setup saved",
+ "default event",
+#'gui print text finished',
+
+);
+
+init();
+
+sub init {
+
+ @log = ();
+ $handlers = {};
+
+ Irssi::command_bind('siglog_on', \&cmd_register_all_signals);
+ Irssi::command_bind('siglog_off', \&cmd_unregister_all_signals);
+ Irssi::command_bind('siglog_dump', \&cmd_log_dump);
+ Irssi::command_bind('siglog_stats', \&cmd_log_stats);
+}
+
+sub cmd_register_all_signals {
+
+
+ Irssi::active_win->print("Starting to log all signals");
+ $enabled = 1;
+
+ foreach my $sig_name (@signals) {
+
+ my $first_func = build_init_func($sig_name);
+ my $last_func = build_end_func($sig_name);
+
+ $handlers->{$sig_name} = [ $first_func, $last_func ];
+
+ Irssi::signal_add_first($sig_name, $first_func);
+ Irssi::signal_add_last($sig_name, $last_func);
+ }
+}
+
+sub cmd_unregister_all_signals {
+
+ foreach my $sig_name (@signals) {
+
+ my ($first_func, $last_func) = @{ $handlers->{$sig_name} };
+
+ Irssi::signal_remove($sig_name, $first_func);
+ Irssi::signal_remove($sig_name, $last_func);
+ }
+ $enabled = 0;
+ Irssi::active_win->print("Signal logging disabled");
+
+}
+
+sub cmd_log_dump {
+
+ my $win = Irssi::active_win();
+ if ($enabled) {
+ cmd_unregister_all_signals();
+ $win->print("Disabled logging");
+ }
+ foreach my $lref (@log) {
+ my ($line, $indent) = @$lref;
+ my $xx = " " x $indent;
+ $win->print($xx . $line);
+ }
+}
+
+sub cmd_log_stats {
+
+ my $win = Irssi::active_win();
+ if ($enabled) {
+ cmd_unregister_all_signals();
+ $win->print("Disabled logging");
+ }
+}
+
+sub build_init_func {
+ my ($sig_name) = @_;
+
+ return sub {
+ my @args = @_;
+ my $args_str = '';
+ my $n = 0;
+
+ foreach my $arg (@args) {
+ $args_str .= "[$n] ";
+
+ if (not defined $arg) {
+ $args_str .= "undef, ";
+ next;
+ }
+
+ if (ref $arg) {
+ $args_str .= ref($arg) . ", "
+ } else {
+ $arg =~ s/^(.{20})/$1/;
+ $args_str .= "$arg, ";
+ }
+ $n++;
+ }
+ my $msg = sprintf("%f: %s - First %s", time(), $sig_name, $args_str);
+ push @log, [$msg, $depth];
+ $depth++;
+ }
+}
+
+sub build_end_func {
+ my ($sig_name) = @_;
+
+ return sub {
+ my $msg = sprintf("%f: %s - End", time(), $sig_name);
+ push @log, [$msg, $depth];
+ $depth--;
+ }
+}
+
diff --git a/feature-tests/signal_redir.pl b/feature-tests/signal_redir.pl
new file mode 100644
index 0000000..89da34c
--- /dev/null
+++ b/feature-tests/signal_redir.pl
@@ -0,0 +1,116 @@
+# mangled from cmpusers.pl (unpublished, afaik) by Bazerka <bazerka@quakenet.org>.
+# He is not to blame for any problems, contact me instead.
+
+use strict;
+use warnings;
+
+use Irssi;
+
+our $VERSION = "0.1";
+our %IRSSI =
+ (
+ authors => "shabble, Bazerka",
+ contact => 'shabble+irssi@metavore.org, shabble@#irssi/Freenode,'
+ . 'bazerka@quakenet.org',
+ name => "signal_redir",
+ description => "Demonstration showing how to redirect a remote WHOIS"
+ . "command so the results can be captured by a script.",
+ license => "BSD",
+ url => "https://github.com/shabble/irssi-scripts/",
+ changed => "Fri Apr 1 00:05:39 2011"
+ );
+
+my $running = 0; # flag to prevent overlapping requests.
+my $debug = 1;
+sub redir_init {
+ # set up event to handler mappings
+ Irssi::signal_add
+ ({
+ 'redir test_redir_whois_user' => 'event_whois_user',
+ 'redir test_redir_whois_channels' => 'event_whois_channels',
+ 'redir test_redir_whois_end' => 'event_whois_end',
+ 'redir test_redir_whois_nosuchnick' => 'event_whois_nosuchnick',
+ 'redir test_redir_whois_timeout' => 'event_whois_timeout',
+ });
+}
+
+sub request_whois {
+ my ($server, $nick) = @_;
+
+ $server->redirect_event
+ (
+ 'whois', 1, $nick, 0, # command, remote, arg, timeout
+ 'redir test_redir_whois_timeout', # error handler
+ {
+ 'event 311' => 'redir test_redir_whois_user', # event mappings
+ 'event 318' => 'redir test_redir_whois_end',
+ 'event 319' => 'redir test_redir_whois_channels',
+ 'event 401' => 'redir test_redir_whois_nosuchnick',
+ '' => 'event empty',
+ }
+ );
+ Irssi::print("Sending Command: WHOIS $nick", MSGLEVEL_CLIENTCRAP) if $debug;
+ # send the actual command directly to the server, rather than
+ # with $server->command()
+ $server->send_raw("WHOIS $nick");
+}
+
+sub event_whois_user {
+ my ($server, $data) = @_;
+ my ($nick, $user, $host) = ( split / +/, $data, 6 )[ 1, 2, 3 ];
+ Irssi::print("test_redir whois_user: $nick!$user\@$host", MSGLEVEL_CLIENTCRAP);
+}
+
+sub event_whois_channels {
+ my ($server, $data) = @_;
+ my ($nick, $channels) = ( split / +/, $data, 3 )[ 1, 2 ];
+ my $prefix = 'cowu.be'; # server name
+ my $args = "shabble"; # match criteria
+ my $event = 'event 319'; # triggering event
+ my $sig = $server->redirect_get_signal($prefix, $event, $args);
+ Irssi::print("test_redir whois_channels: $nick, $channels", MSGLEVEL_CLIENTCRAP);
+ Irssi::print("test_redir get_signal: $sig", MSGLEVEL_CLIENTCRAP);
+
+}
+
+sub event_whois_end {
+ my ($server, $data) = @_;
+ my ($nick) = ( split / +/, $data, 3 )[1];
+ Irssi::print("test_redir whois_end: $nick", MSGLEVEL_CLIENTCRAP);
+
+ return if $running == 0; # catch 318 -> 401 (nosuchnick followed by endofwhois)
+ $running = 0;
+}
+
+sub event_whois_nosuchnick {
+ my ($server, $data) = @_;
+ my $nick = ( split / +/, $data, 4)[1];
+ Irssi::active_win->print("test_redir error: no such nick $nick - aborting.",
+ MSGLEVEL_CLIENTCRAP);
+ $running = 0;
+}
+
+sub event_whois_timeout {
+ my ($server, $data) = @_;
+ Irssi::print("test_redir whois_timeout", MSGLEVEL_CLIENTCRAP);
+ $running = 0;
+}
+
+sub cmd_test_redir {
+ my ($args, $server, $witem) = @_;
+ $args = lc $args;
+ my @nicks = split /\s+/, $args;
+
+ if ($running) {
+ Irssi::active_win->print
+ ("test_redir error: a request is currently being processed "
+ . "- please try again shortly.", MSGLEVEL_CLIENTCRAP);
+ return;
+ }
+ $running = 1;
+ request_whois($server, $nicks[0]);
+}
+
+redir_init();
+Irssi::command_bind("test_redir", \&cmd_test_redir);
+
diff --git a/feature-tests/template.pl b/feature-tests/template.pl
index f3ae68a..a49d742 100644
--- a/feature-tests/template.pl
+++ b/feature-tests/template.pl
@@ -1,19 +1,69 @@
+=pod
+
+=head1 NAME
+
+template.pl
+
+=head1 DESCRIPTION
+
+A minimalist template useful for basing actual scripts on.
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+=head1 USAGE
+
+None, since it doesn't actually do anything.
+
+=head1 AUTHORS
+
+Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+=head1 TODO
+
+Use this template to make an actual script.
+
+=cut
+
use strict;
use warnings;
-
use Irssi;
use Irssi::Irc;
use Irssi::TextUI;
use Data::Dumper;
-
our $VERSION = '0.1';
our %IRSSI = (
authors => 'shabble',
contact => 'shabble+irssi@metavore.org',
name => '',
description => '',
- license => 'Public Domain',
+ license => 'MIT',
+ updated => '$DATE'
);
diff --git a/foreach-guard/foreach-guard.pl b/foreach-guard/foreach-guard.pl
new file mode 100644
index 0000000..bcebef6
--- /dev/null
+++ b/foreach-guard/foreach-guard.pl
@@ -0,0 +1,208 @@
+=pod
+
+=head1 NAME
+
+foreach-guard.pl - confirm that you really mean to send a (non-)command to all channels.
+
+=head1 DESCRIPTION
+
+
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+=head1 USAGE
+
+None, since it doesn't actually do anything.
+
+=head1 AUTHORS
+
+Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+=head1 TODO
+
+Use this template to make an actual script.
+
+=cut
+
+use strict;
+use warnings;
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => 'foreach-guard',
+ description => '',
+ license => 'MIT',
+ updated => '$DATE'
+ );
+
+my $CMD = '_foreach_safe';
+my $DEBUG = 0;
+my $cmdchars;
+my $match_cmdchars;
+my $cmd_confirm_list;
+my $txt_confirm_list;
+
+sub init {
+ Irssi::settings_add_bool('foreach_guard',
+ 'foreach_guard_debug',
+ 0);
+ Irssi::settings_add_str ('foreach_guard',
+ 'foreach_guard_confirm_commands',
+ '');
+ Irssi::settings_add_str ('foreach_guard',
+ 'foreach_guard_confirm_text',
+ '');
+
+ Irssi::theme_register([
+ 'script_loaded',
+ '%R>>%n %_Scriptinfo:%_ Loaded {hilight $0} v$1 by $2.'
+ ]);
+ Irssi::signal_add ('setup changed', \&sig_setup_changed);
+ Irssi::signal_add_first('complete word', \&sig_complete_word);
+
+ # override the default foreach with an alias pointing to our command.
+ Irssi::command("^alias foreach $CMD");
+
+ sig_setup_changed();
+
+ Irssi::command_bind($CMD, \&cmd_foreach_safe_dispatch);
+ for my $target (qw/channel query server window/) {
+ my $coderef = __PACKAGE__->can("cmd${CMD}_$target");
+ die "Cannot aquire coderef for $target" unless ref($coderef) eq 'CODE';
+ Irssi::command_bind("$CMD $target", $coderef);
+ }
+ Irssi::printformat(MSGLEVEL_CLIENTCRAP,
+ 'script_loaded', $IRSSI{name}, $VERSION, $IRSSI{authors});
+}
+
+sub sig_setup_changed {
+ $DEBUG = Irssi::settings_get_bool('foreach_guard_debug');
+ _debug("settings changed");
+ $cmdchars = Irssi::settings_get_str('cmdchars');
+ my $tmp = join('|', map { quotemeta } split('', $cmdchars));
+ _debug("tmp: $tmp");
+ $match_cmdchars = qr/^($tmp)(\S*)/;
+ _debug("Match cmdchars set to: %s", $match_cmdchars);
+
+ $cmd_confirm_check = { map { $_ => 1 } split /\s+/,
+ Irssi::settings_get_str('foreach_guard_confirm_commands') };
+
+ $txt_confirm_check = { map { $_ => 1 } split /\s+/,
+ Irssi::settings_get_str('foreach_guard_confirm_text') };
+
+}
+
+sub sig_complete_word {
+ my ($strings, $window, $word, $line_start, $want_space) = @_;
+ _debug("Tab complete called with: " . join(", ", @_));
+ return unless
+ $line_start =~ m/foreach (channel|query|server|window)/;
+
+ my $target = $1;
+ _debug("target: $1, word: $word");
+
+ if ($word =~ qr/$match_cmdchars/i) {
+ my ($cmdchar, $cmd_prefix) = ($1, $2);
+ _debug("completion char: $cmdchar, Prefix: $cmd_prefix");
+
+ my @commands
+ = grep { m/^\Q${cmdchar}${cmd_prefix}/ }
+ map { $cmdchar . $_->{cmd} } Irssi::commands;
+
+ _debug("Matching Commands: " . join(", ", @commands));
+ @$strings = @commands;
+ $$want_space = 1;
+
+ Irssi::signal_stop();
+ } else {
+ return;
+ }
+}
+
+sub cmd_foreach_safe_dispatch {
+ my ($input, $server, $witem) = @_;
+
+ if ($witem) {
+ $witem->print("W: foreach_safe called with $input");
+ } else {
+ print("foreach_safe called with $input");
+ }
+ #$data =~ s/\s+$//g; # strip trailing whitespace.
+ Irssi::command_runsub($CMD, $input, $server, $witem);
+}
+
+sub require_confirmation {
+ my ($target, $input) = @_;
+ if (_is_command($input)) {
+ return exists $cmd_confirm_check->{$target};
+ } else {
+ return exists $txt_confirm_check->{$target};
+ }
+}
+
+
+sub cmd_foreach_safe_channel {
+ my ($args, $server, $witem) = @_;
+
+}
+
+sub cmd_foreach_safe_query {
+ my ($args, $server, $witem) = @_;
+
+}
+sub cmd_foreach_safe_server {
+ my ($args, $server, $witem) = @_;
+
+}
+sub cmd_foreach_safe_window {
+ my ($args, $server, $witem) = @_;
+
+}
+
+sub _is_command {
+ my ($string) = @_;
+ return m/$match_cmdchars/;
+}
+
+sub _debug {
+ return unless $DEBUG;
+ my ($msg, @args) = @_;
+
+ my $str = sprintf("DBG: $msg", @args);
+ print($str);
+}
+
+init();
diff --git a/history-search/README.pod b/history-search/README.pod
new file mode 100644
index 0000000..830eb5f
--- /dev/null
+++ b/history-search/README.pod
@@ -0,0 +1,149 @@
+=pod
+
+=head1 NAME
+
+rl_history_search.pl
+
+=head1 DESCRIPTION
+
+Search within your typed history as you type (something like ctrl-R in bash or other
+readline-type applications.)
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+This script requires that you have first installed and loaded F<uberprompt.pl>
+
+Uberprompt can be downloaded from:
+
+L<https://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl>
+
+and follow the instructions at the top of that file or its README for installation.
+
+If uberprompt.pl is available, but not loaded, this script will make one
+attempt to load it before giving up. This eliminates the need to precisely
+arrange the startup order of your scripts.
+
+=head1 SETUP
+
+C</bind ^R /history_search_start>
+
+Where C<^R> is a key of your choice.
+
+=head1 USAGE
+
+Type C<ctrl-R> followed by your search string. The prompt line will show
+you the most recent command to match the string you've typed.
+
+B<Tip:> You can cycle through multiple matches with C<Ctrl-R> (to select older
+matches), and <Ctrl-S> (to select newer matches). Cycling off the end of the
+history list returns you to the other end again.
+
+B<NOTE:> C<Ctrl-S> may not work if you have software flow control configured for
+your terminal. It may appear to freeze irssi entirely. If this happens, it can
+be restored with C<Ctrl-Q>, but you will be unable to use the C<Ctrl-S> binding.
+You can disable flow control by running the command C<stty -ixon> in your
+terminal, or setting C<defflow off> in your F<~/.screenrc>if using GNU Screen.
+
+=head2 COMMANDS
+
+=over 4
+
+=item * C<Enter>
+
+Selects a match and terminates search mode.
+B<It will also run the currently selected command.>
+
+=item * C<Ctrl-G>
+
+Exits search mode without selecting.
+
+=item * C<E<lt>TABE<gt>>
+
+Opens a new split window, showing all matching completions. C<E<lt>EscE<gt>>
+will close the window again, as will any other action that exits history search
+mode. Possible candidates can be cycled through as normal using C<C-r> and
+C<<C-s>.
+
+=item * Any other ctrl- or meta- key
+
+This will terminate search mode, leaving the selected item in the input line.
+It will not run the command (Except for C<Ctrl-J> and C<Ctrl-M>, which are
+functionally equivalent to C<Enter>).
+
+=back
+
+=head1 AUTHORS
+
+Original script
+L<http://github.com/coekie/irssi-scripts/blob/master/history_search.pl>
+ Copyright E<copy> 2007 Wouter Coekaerts C<E<lt>coekie@irssi.orgE<gt>>
+
+
+Most of the other fancy stuff Copyright E<copy> 2011 Tom Feist
+C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+=head1 BUGS
+
+Yeah, probably.
+
+=head1 TODO
+
+=over 1
+
+=item * B<DONE> document tab behaviour
+
+=item * add keys (C-n/C-p) to scroll history list if necessary.
+
+=item * B<DONE> if list is bigger than split size, centre it so selected item is visible
+
+=item * I<INPROG> allow a mechanism to select by number from list
+
+=item * steal more of the code from ido_switcher to hilight match positions.
+
+=item * make flex matching optional (key or setting)
+
+=item * add some online help (? or C-h triggered, maybe?)
+
+=item * make temp_split stuff more generic (to be used by help, etc)
+
+=item * figure out why sometimes the split list doesn't update correctly (eg: no matches)
+
+=item * consider tracking history manually (via send command/send text)
+
+=over 4
+
+=item * Pro: we could timestamp it.
+
+=item * Con: Would involve catching up/down and all the other history selection mechanisms.
+
+=item * Compromise - tag history as it comes it (match it with data via sig handlers?)
+
+=back
+
+=item * Possibility of saving/restoring history over sessions?
+
+=back
+
+
+
+=cut
+
diff --git a/history-search/rl_history_search.pl b/history-search/rl_history_search.pl
index ca45fe5..016249d 100644
--- a/history-search/rl_history_search.pl
+++ b/history-search/rl_history_search.pl
@@ -1,79 +1,190 @@
-# Search within your typed history as you type (like ctrl-R in bash)
-#
-# INSTALL:
-#
-# This script requires that you have first installed and loaded 'uberprompt.pl'
-# Uberprompt can be downloaded from:
-#
-# http://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl
-#
-# and follow the instructions at the top of that file for installation.
-#
-# USAGE:
-#
-# * Setup: /bind ^R /history_search_start
-#
-# * Then type ctrl-R and type what you're searching for
-#
-# * You can cycle through multiple matches with ^R (older matches), and
-# ^S (newer matches)
-#
-# NOTE: Ctrl-S may not work if you have software flow control configured for
-# your terminal. It may appear to freeze irssi entirely. If this happens, it can
-# be restored with Ctrl-Q, but you will be unable to use the Ctrl-S binding.
-# You can disable flow control by running the command `stty -ixon' in your
-# terminal, or setting `defflow off' in your ~/.screenrc if using GNU Screen.
-#
-# * Hitting enter selects a match and terminates search mode.
-#
-# * You can use ^G to exit search mode without selecting.
-#
-# * Any other ctrl- or meta- key binding will terminate search mode, leaving the
-# selected item in the input line.
-#
-# Original script Copyright 2007 Wouter Coekaerts <coekie@irssi.org>
-# Heavy modifications by Shabble <shabble+irssi@metavore.org>, 2010.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+=pod
+
+=head1 NAME
+
+rl_history_search.pl
+
+=head1 DESCRIPTION
+
+Search within your typed history as you type (something like ctrl-R in bash or other
+readline-type applications.)
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+This script requires that you have first installed and loaded F<uberprompt.pl>
+
+Uberprompt can be downloaded from:
+
+L<https://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl>
+
+and follow the instructions at the top of that file or its README for installation.
+
+If uberprompt.pl is available, but not loaded, this script will make one
+attempt to load it before giving up. This eliminates the need to precisely
+arrange the startup order of your scripts.
+
+=head1 SETUP
+
+C</bind ^R /history_search_start>
+
+Where C<^R> is a key of your choice.
+
+=head1 USAGE
+
+Type C<ctrl-R> followed by your search string. The prompt line will show
+you the most recent command to match the string you've typed.
+
+B<Tip:> You can cycle through multiple matches with C<Ctrl-R> (to select older
+matches), and <Ctrl-S> (to select newer matches). Cycling off the end of the
+history list returns you to the other end again.
+
+B<NOTE:> C<Ctrl-S> may not work if you have software flow control configured for
+your terminal. It may appear to freeze irssi entirely. If this happens, it can
+be restored with C<Ctrl-Q>, but you will be unable to use the C<Ctrl-S> binding.
+You can disable flow control by running the command C<stty -ixon> in your
+terminal, or setting C<defflow off> in your F<~/.screenrc>if using GNU Screen.
+
+=head2 COMMANDS
+
+=over 4
+
+=item * C<Enter>
+
+Selects a match and terminates search mode.
+B<It will also run the currently selected command.>
+
+=item * C<Ctrl-G>
+
+Exits search mode without selecting.
+
+=item * C<E<lt>TABE<gt>>
+
+Opens a new split window, showing all matching completions. C<E<lt>EscE<gt>>
+will close the window again, as will any other action that exits history search
+mode. Possible candidates can be cycled through as normal using C<C-r> and
+C<<C-s>.
+
+=item * Any other ctrl- or meta- key
+
+This will terminate search mode, leaving the selected item in the input line.
+It will not run the command (Except for C<Ctrl-J> and C<Ctrl-M>, which are
+functionally equivalent to C<Enter>).
+
+=back
+
+=head1 AUTHORS
+
+Original script
+L<http://github.com/coekie/irssi-scripts/blob/master/history_search.pl>
+ Copyright E<copy> 2007 Wouter Coekaerts C<E<lt>coekie@irssi.orgE<gt>>
+
+
+Most of the other fancy stuff Copyright E<copy> 2011 Tom Feist
+C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+=head1 BUGS
+
+Yeah, probably.
+
+=head1 TODO
+
+=over 1
+
+=item * B<DONE> document tab behaviour
+
+=item * add keys (C-n/C-p) to scroll history list if necessary.
+
+=item * B<DONE> if list is bigger than split size, centre it so selected item is visible
+
+=item * I<INPROG> allow a mechanism to select by number from list
+
+=item * steal more of the code from ido_switcher to hilight match positions.
+
+=item * make flex matching optional (key or setting)
+
+=item * add some online help (? or C-h triggered, maybe?)
+
+=item * make temp_split stuff more generic (to be used by help, etc)
+
+=item * figure out why sometimes the split list doesn't update correctly (eg: no matches)
+
+=item * consider tracking history manually (via send command/send text)
+
+=over 4
+
+=item * Pro: we could timestamp it.
+
+=item * Con: Would involve catching up/down and all the other history selection mechanisms.
+
+=item * Compromise - tag history as it comes it (match it with data via sig handlers?)
+
+=back
+
+=item * Possibility of saving/restoring history over sessions?
+
+=back
+
+=cut
+
use strict;
+use warnings;
+
use Irssi;
use Irssi::TextUI;
use Data::Dumper;
-use vars qw($VERSION %IRSSI);
-$VERSION = '2.0';
-%IRSSI =
+our $VERSION = '2.7';
+our %IRSSI =
(
authors => 'Tom Feist, Wouter Coekaerts',
contact => 'shabble+irssi@metavore.org, shabble@#irssi/freenode',
name => 'rl_history_search',
description => 'Search within your typed history as you type'
- . ' (like ctrl-R in readline applications)',
+ . ' (like ctrl-R in readline applications)',
license => 'GPLv2 or later',
url => 'http://github.com/shabble/irssi-scripts/tree/master/history-search/',
- changed => '24/7/2010'
+ changed => '25/5/2011',
+ requires => [qw/uberprompt.pl/],
);
my $search_str = '';
my $search_active = 0;
+my $select_num_active = 0;
+my $num_buffer;
+
my @history_cache = ();
my @search_matches = ();
my $match_index = 0;
+# split info
+my $split_ref;
+my $original_win_ref;
+
+# formats
+my $list_format;
+
+my $use_flex_match = 1;
my $DEBUG_ENABLED = 0;
sub DEBUG () { $DEBUG_ENABLED }
@@ -81,13 +192,7 @@ sub DEBUG () { $DEBUG_ENABLED }
# check we have uberprompt loaded.
sub script_is_loaded {
- my $name = shift;
- print "Checking if $name is loaded" if DEBUG;
- no strict 'refs';
- my $retval = defined %{ "Irssi::Script::${name}::" };
- use strict 'refs';
-
- return $retval;
+ return exists($Irssi::Script::{$_[0] . '::'});
}
if (not script_is_loaded('uberprompt')) {
@@ -99,21 +204,23 @@ if (not script_is_loaded('uberprompt')) {
Irssi::command("script load uberprompt.pl");
unless(script_is_loaded('uberprompt')) {
- load_uberprompt_failed("File does not exist");
+ load_uberprompt_failed({name => 'uberprompt'}, "File does not exist");
}
history_init();
} else {
- history_init();
+ history_init();
}
sub load_uberprompt_failed {
- Irssi::signal_remove('script error', 'load_prompt_failed');
+ my ($script, $error_msg) = @_;
+ Irssi::signal_remove('script error', 'load_uberprompt_failed');
+ my $script_name = $script->{name};
print "Script could not be loaded. Script cannot continue. "
- . "Check you have uberprompt.pl installed in your path and "
+ . "Check you have uberprompt.pl installed in your path and "
. "try again.";
- die "Script Load Failed: " . join(" ", @_);
+ die "Script '$script_name' Load Failed: $error_msg";
}
sub history_init {
@@ -124,6 +231,7 @@ sub history_init {
Irssi::signal_add ('setup changed' => \&setup_changed);
Irssi::signal_add_first('gui key pressed' => \&handle_keypress);
+ $list_format = Irssi::theme_register([ list_format => '$*' ]);
setup_changed();
}
@@ -131,29 +239,34 @@ sub setup_changed {
$DEBUG_ENABLED = Irssi::settings_get_bool('histsearch_debug');
}
+sub temp_split_active () {
+ return defined $split_ref;
+}
sub history_search {
$search_active = 1;
$search_str = '';
- $match_index = -1;
+ $match_index = 0;
- @history_cache = Irssi::active_win()->get_history_lines();
+ my $win = Irssi::active_win;
+ @history_cache = $win->get_history_lines();
@search_matches = ();
+ $original_win_ref = $win;
+
+ update_history_matches();
update_history_prompt();
}
sub history_exit {
$search_active = 0;
- Irssi::signal_emit('change prompt', '', 'UP_INNER');
+ close_temp_split();
+ _set_prompt('');
}
sub update_history_prompt {
my $col = scalar(@search_matches) ? '%g' : '%r';
- Irssi::signal_emit('change prompt',
- ' reverse-i-search: `' . $col . $search_str
- . '%n' . "'",
- 'UP_INNER');
+ _set_prompt(' reverse-i-search: `' . $col . $search_str . '%n' . "'");
}
sub update_history_matches {
@@ -161,11 +274,18 @@ sub update_history_matches {
$match_str = $search_str unless defined $match_str;
my %unique;
- my @matches = grep { m/\Q$match_str/i } @history_cache;
+ my @matches;
+
+ if ($use_flex_match) {
+ @matches = grep { flex_match($_) >= 0 } @history_cache;
+ } else {
+ @matches = grep { m/\Q$match_str/i } @history_cache;
+ }
@search_matches = ();
# uniquify the results, whilst maintaining order.
+ # TODO: duplicates should keep teh most recent one?
foreach my $m (@matches) {
unless (exists($unique{$m})) {
# add them in reverse order.
@@ -178,6 +298,80 @@ sub update_history_matches {
join(", ", @search_matches) if DEBUG;
}
+sub flex_match {
+ my ($obj) = @_;
+
+ my $pattern = $search_str;
+ my $source = $obj; #->{name};
+
+ #_debug("Flex match: $pattern / $source");
+
+ # default to matching everything if we don't have a pattern to compare
+ # against.
+
+ return 0 unless $pattern;
+
+ my @chars = split '', lc($pattern);
+ my $ret = -1;
+ my $first = 0;
+
+ my $lc_source = lc($source);
+
+ #$obj->{hilight_field} = 'name';
+
+ foreach my $char (@chars) {
+ my $pos = index($lc_source, $char, $ret);
+ if ($pos > -1) {
+
+ # store the beginning of the match
+ #$obj->{b_pos} = $pos unless $first;
+ $first = 1;
+
+ #_debug_print("matched: $char at $pos in $source");
+ $ret = $pos + 1;
+
+ } else {
+
+ #$obj->{b_pos} = $obj->{e_pos} = -1;
+ #_debug_print "Flex returning: -1";
+
+ return -1;
+ }
+ }
+
+ #_debug_print "Flex returning: $ret";
+
+ #store the end of the match.
+ #$obj->{e_pos} = $ret;
+
+ return $ret;
+}
+
+sub enter_select_num_mode {
+ # require that the list be shown.
+ return unless temp_split_active();
+ return if $select_num_active; # TODO: should we prevent restarting?
+
+ $num_buffer = 0;
+ _set_prompt("Num select: ");
+ $select_num_active = 1;
+}
+
+sub exit_select_num_mode {
+
+ $select_num_active = 0;
+ $num_buffer = 0;
+ update_history_prompt();
+}
+
+sub history_select_num {
+ if ($num_buffer > 0 && $num_buffer <= $#search_matches) {
+ $match_index = $num_buffer;
+ my $match = get_history_match();
+ _debug("Num select: got $match");
+ }
+}
+
sub get_history_match {
return $search_matches[$match_index];
}
@@ -211,65 +405,116 @@ sub handle_keypress {
return unless $search_active;
- if ($key == 10) { # enter
+ if ($select_num_active) {
+ if ($key >= 48 and $key <= 57) { # Number key
+
+ $num_buffer = ($num_buffer * 10) + $key - 48;
+ _set_prompt("Num select: $num_buffer");
+
+ } elsif ($key == 10) { # ENTER
+
+ history_select_num();
+ update_input();
+ exit_select_num_mode();
+ history_exit();
+
+ } else { # anything else quits.
+ exit_select_num_mode();
+ }
+ Irssi::signal_stop();
+ return;
+ }
+
+ if ($key == 6) { # Ctrl-F
+ enter_select_num_mode();
+ Irssi::signal_stop();
+ return;
+ }
+
+ if ($key == 7) { # Ctrl-G
+ print "aborting search" if DEBUG;
+ history_exit();
+
+ # cancel empties the inputline.
+ Irssi::gui_input_set('');
+ Irssi::gui_input_set_pos(0);
+
+ Irssi::signal_stop();
+ return;
+ }
+ if ($key == 8) { # C-h
+ $original_win_ref->print("This would show help, "
+ . "if there was any. Coming soon!");
+ }
+
+ if ($key == 9) { # TAB
+ update_history_matches();
+ if (not temp_split_active()) {
+ create_temp_split() if @search_matches > 0;
+ } else {
+ print_current_matches();
+ }
+
+ Irssi::signal_stop();
+ return;
+ }
+ if ($key == 10) { # enter
print "selecting history and quitting" if DEBUG;
history_exit();
return;
}
- if ($key == 18) { # Ctrl-R
+ if ($key == 18) { # Ctrl-R
print "skipping to prev match" if DEBUG;
prev_match();
update_input();
update_history_prompt();
- Irssi::signal_stop(); # prevent the bind from being re-triggered.
+ print_current_matches();
+ Irssi::signal_stop(); # prevent the bind from being re-triggered.
return;
}
- if ($key == 19) { # Ctrl-S
+ if ($key == 19) { # Ctrl-S
print "skipping to next match" if DEBUG;
next_match();
update_input();
update_history_prompt();
+ print_current_matches();
Irssi::signal_stop();
return;
}
- if ($key == 7) { # Ctrl-G
- print "aborting search" if DEBUG;
- history_exit();
-
- # cancel empties the inputline.
- Irssi::gui_input_set('');
- Irssi::gui_input_set_pos(0);
+ # TODO: handle arrow-keys?
+ if ($key == 27) {
+ close_temp_split();
Irssi::signal_stop();
return;
}
- if ($key == 127) { # DEL
+ if ($key >= 32 and $key < 127) { # printable
+ $search_str .= chr($key);
- if (length $search_str) {
- $search_str = substr($search_str, 0, -1);
- print "Deleting char, now: $search_str" if DEBUG;
- }
update_history_matches();
update_history_prompt();
update_input();
+ print_current_matches();
Irssi::signal_stop();
return;
}
- # TODO: handle esc- sequences and arrow-keys?
-
- if ($key >= 32) { # printable
- $search_str .= chr($key);
+ if ($key == 127) { # DEL
+ if (length $search_str) {
+ $search_str = substr($search_str, 0, -1);
+ print "Deleting char, now: $search_str" if DEBUG;
+ }
update_history_matches();
update_history_prompt();
update_input();
+ print_current_matches();
Irssi::signal_stop();
return;
@@ -279,3 +524,134 @@ sub handle_keypress {
history_exit();
#Irssi::signal_stop();
}
+
+sub create_temp_split {
+
+ Irssi::signal_add_first('window created', 'sig_win_created');
+ Irssi::command('window new split');
+ Irssi::signal_remove('window created', 'sig_win_created');
+}
+
+sub close_temp_split {
+
+ if (temp_split_active()) {
+ Irssi::command("window close $split_ref->{refnum}");
+ undef $split_ref;
+ }
+
+ # restore original window focus
+ if (Irssi::active_win()->{refnum} != $original_win_ref->{refnum}) {
+ $original_win_ref->set_active();
+ }
+}
+
+sub sig_win_created {
+ my ($win) = @_;
+ $split_ref = $win;
+ # printing directly from this handler causes irssi to segfault.
+ Irssi::timeout_add_once(10, \&print_current_matches, {});
+}
+
+sub print_current_matches {
+
+ return unless temp_split_active();
+
+ my $num_matches = scalar(@search_matches);
+ #return unless $num_matches > 0;
+
+ # for some woefully unobvious reason, we need to refetch
+ # the window reference in order for its attribute hash
+ # to be regenerated.
+ my $s_win = Irssi::window_find_refnum($split_ref->{refnum});
+
+ my $split_height = $s_win->{height};
+
+ $s_win->command("^scrollback clear");
+
+ # disable timestamps to ensure a clean window.
+ my $orig_ts_level = Irssi::parse_special('$timestamp_level');
+ $s_win->command("^set timestamp_level $orig_ts_level -CLIENTCRAP");
+
+
+ $original_win_ref->print("Num matches: $num_matches, height: $split_height")
+ if DEBUG;
+
+ # print header
+ # TODO: make this a format?
+ $s_win->print('%_Current history matches. Press <esc> to close.%_',
+ MSGLEVEL_CLIENTCRAP | MSGLEVEL_NEVER);
+
+ if ($num_matches == 0) {
+ $s_win->print('(No Matches)', MSGLEVEL_CLIENTCRAP | MSGLEVEL_NEVER);
+ return;
+ }
+ $split_height -= 2; # account for header line;
+
+ my $hist_entry = get_history_match();
+
+ my ($start, $end);
+
+ if ($num_matches > $split_height) {
+ # we have too many matches to fit in the window. decide on a new
+ # start and end point.
+
+ my $half_height = int ($split_height / 2);
+
+ # initial start pos is in the middle of the screen.
+ $start = $match_index >= $half_height
+ ? $match_index - $half_height
+ : 0;
+ # and ends with the max number of matches we can fit
+ $end = $start + $split_height > $num_matches - 1
+ ? $num_matches - 1
+ : $start + $split_height;
+
+ # readjust start if the screen isn't filled.
+ if ($end - $start < $split_height) {
+ $start = $end - $split_height;
+ }
+
+ _debug("sh: $split_height, hh: $half_height, "
+ . "mi: $match_index, start: $start, end: $end");
+ } else {
+ $start = 0;
+ $end = $#search_matches;
+ }
+
+ foreach my $i ($start..$end) {
+ my $j = $num_matches - $i;
+ my $entry = $search_matches[$i];
+
+ my $hilight = $hist_entry eq $entry
+ ? '%g'
+ : '';
+ $hilight = Irssi::parse_special($hilight);
+ my $str = sprintf("%s%-6d %s%%n", $hilight, $j, $entry);
+ $s_win->print($str, MSGLEVEL_CLIENTCRAP|MSGLEVEL_NEVER);
+ }
+
+ # restore timestamp settings.
+ $s_win->command("^set timestamp_level $orig_ts_level");
+}
+
+sub print_help {
+
+}
+
+sub _print_to_active {
+ my ($msg, @args) = @_;
+ my $str = sprintf($msg, @args);
+ $original_win_ref->print($str,MSGLEVEL_CLIENTCRAP | MSGLEVEL_NEVER);
+}
+
+sub _debug {
+ return unless DEBUG;
+ my ($msg, @args) = @_;
+ my $str = sprintf($msg, @args);
+ $original_win_ref->print($str, MSGLEVEL_CLIENTCRAP | MSGLEVEL_NEVER);
+}
+sub _set_prompt {
+ my ($str) = @_;
+ $str = ' ' . $str if length $str;
+ Irssi::signal_emit('change prompt', $str, 'UP_INNER');
+}
diff --git a/ido-mode/README.pod b/ido-mode/README.pod
new file mode 100644
index 0000000..62f7190
--- /dev/null
+++ b/ido-mode/README.pod
@@ -0,0 +1,247 @@
+=pod
+
+=head1 NAME
+
+ido_switcher.pl
+
+=head1 DESCRIPTION
+
+Search and select windows similar to ido-mode for emacs
+
+=head1 INSTALLATION
+
+This script requires that you have first installed and loaded F<uberprompt.pl>
+
+Uberprompt can be downloaded from:
+
+L<https://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl>
+
+and follow the instructions at the top of that file or its README for installation.
+
+If uberprompt.pl is available, but not loaded, this script will make one
+attempt to load it before giving up. This eliminates the need to precisely
+arrange the startup order of your scripts.
+
+=head2 SETUP
+
+C</bind ^G /ido_switch_start [options]>
+
+Where C<^G> is a key of your choice.
+
+=head2 USAGE
+
+C<C-g> (or whatever you've set the above bind to), enters IDO window switching mode.
+You can then type either a search string, or use one of the additional key-bindings
+to change the behaviour of the search. C<C-h> provides online help regarding
+the possible interactive options.
+
+=head3 EXTENDED USAGE:
+
+It is possible to pass arguments to the C</ido_switch_start> command, which
+correspond to some of the interactively settable parameters listed below.
+
+The following options are available:
+
+=over 4
+
+=item C<-channels>
+
+Search through only channels.
+
+=item C<-queries>
+
+Search through only queries.
+
+=item C<-all>
+
+search both queries and channels (Default).
+
+=item C<-active>
+
+Lmit search to only window items with activity.
+
+=item C<-exact>
+
+Enable exact-substring matching
+
+=item C<-flex>
+
+Enable flex-string matching
+
+=back
+
+I<If neither of C<-exact> or C<-flex> are given, the default is the value of
+C</set ido_use_flex>>
+
+=head4 EXAMPLE
+
+=over 2
+
+=item C</bind ^G /ido_switch_start -channels>
+
+=item C</bind ^F /ido_switch_start -queries -active>
+
+=back
+
+B<NOTE:> When entering window switching mode, the contents of your input line will
+be saved and cleared, to avoid visual clutter whilst using the switching
+interface. It will be restored once you exit the mode using either C<C-g>, C<Esc>,
+or C<RET>.
+
+=head3 INTERACTIVE COMMANDS
+
+The following key-bindings are available only once the mode has been
+activated:
+
+=over 4
+
+=item C<C-g>
+
+ Exit the mode without changing windows.
+
+=item C<Esc>
+
+Exit, as above.
+
+=item C<C-s>
+
+Rotate the list of window candidates forward by one item
+
+=item C<C-r>
+
+Rotate the list of window candidates backward by one item
+
+=item C<C-e>
+
+Toggle 'Active windows only' filter
+
+=item C<C-f>
+
+Switch between 'Flex' and 'Exact' matching.
+
+=item C<C-d>
+
+Select a network or server to filter candidates by
+
+=item C<C-u>
+
+Clear the current search string
+
+=item C<C-q>
+
+Cycle between showing only queries, channels, or all.
+
+=item C<C-SPC>
+
+Filter candidates by current search string, and then reset
+the search string
+
+=item C<RET>
+
+Select the current head of the candidate list (the green one)
+
+=item C<SPC>
+
+Select the current head of the list, without exiting the
+switching mode. The head is then moved one place to the right,
+allowing one to cycle through channels by repeatedly pressing space.
+
+=item C<TAB>
+
+B<[currently in development]> displays all possible completions
+at the bottom of the current window.
+
+=item I<All other keys> (C<a-z, A-Z>, etc)
+
+Add that character to the current search string.
+
+=back
+
+=head3 USAGE NOTES
+
+=over 4
+
+=item *
+
+Using C-e (show actives), followed by repeatedly pressing space will cycle
+through all your currently active windows.
+
+=item *
+
+If you enter a search string fragment, and realise that more than one candidate
+is still presented, rather than delete the whole string and modify it, you
+can use C-SPC to 'lock' the current matching candidates, but allow you to
+search through those matches alone.
+
+=back
+
+=head1 AUTHORS
+
+Based originally on L<window_switcher.pl|http://scripts.irssi.org/scripts/window_switcher.pl> script Copyright 2007 Wouter Coekaerts
+C<E<lt>coekie@irssi.orgE<gt>>.
+
+Primary functionality Copyright 2010-2011 Tom Feist
+C<E<lt>shabble+irssi@metavore.orgE<gt>>.
+
+=head1 LICENCE
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+=head1 BUGS:
+
+=over 4
+
+=item B<FIXED> Sometimes selecting a channel with the same name on a different
+ network will take you to the wrong channel.
+
+=back
+
+=head1 TODO
+
+=over 4
+
+=item B<DONE> C-g - cancel
+
+=item B<DONE> C-spc - narrow
+
+=item B<DONE> flex matching (on by default, but optional)
+
+=item TODO server/network narrowing
+
+=item B<DONE> colourised output (via uberprompt)
+
+=item B<DONE> C-r / C-s rotate matches
+
+=item B<DONE> toggle queries/channels
+
+=item B<DONE> remove inputline content, restore it afterwards.
+
+=item TODO tab - display all possibilities in window (clean up afterwards)
+how exactly will this work?
+
+=item B<DONE> sort by recent activity/recently used windows (separate commands?)
+
+=item B<TODO> need to be able to switch ordering of active ones (numerical, or most
+recently active, priority to PMs/hilights, etc?)
+
+=item B<DONE> should space auto-move forward to next window for easy stepping
+ through sequential/active windows?
+
+=back
+
+
+
+=cut
+
diff --git a/ido-mode/ido_switcher.pl b/ido-mode/ido_switcher.pl
index 5576b32..021764a 100644
--- a/ido-mode/ido_switcher.pl
+++ b/ido-mode/ido_switcher.pl
@@ -1,87 +1,258 @@
-# Search and select windows similar to ido-mode for emacs
-#
-# INSTALL:
-#
-# This script requires that you have first installed and loaded 'uberprompt.pl'
-# Uberprompt can be downloaded from:
-#
-# http://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl
-#
-# and follow the instructions at the top of that file for installation.
-#
-# SETUP:
-#
-# * Setup: /bind ^G /ido_switch_start
-#
-# * Then type ctrl-G and type what you're searching for
-#
-# USAGE:
-#
-# C-g (or whatever you've set the above bind to), enters window switching mode.
-#
-# NB: When entering window switching mode, the contents of your input line will
-# be saved and cleared, to avoid visual clutter whilst using the switching
-# interface. It will be restored once you exit the mode using either C-g, Esc,
-# or RET.
-
-# The following key-bindings are available only once the mode has been
-# activated:
-#
-# * C-g - cancel out of the mode without changing windows.
-# * Esc - cancel out, as above.
-# * C-s - rotate the list of window candidates forward by 1
-# * C-r - rotate the list of window candidates backward by 1
-# * C-e - Toggle 'Active windows only' filter
-# * C-f - Switch between 'Flex' and 'Exact' matching.
-# * C-d - Select a network or server to filter candidates by
-# * C-u - Clear the current search string
-# * C-q - Cycle between showing only queries, channels, or all.
-# * C-SPC - Filter candidates by current search string, and then reset
-# the search string
-# * RET - Select the current head of the candidate list (the green one)
-# * SPC - Select the current head of the list, without exiting the
-# switching mode. The head is then moved one place to the right,
-# allowing one to cycle through channels by repeatedly pressing space.
-# * TAB - [currently in development] displays all possible completions
-# at the bottom of the current window.
-# * All other keys (a-z, A-Z, etc) - Add that character to the current search
-# string.
-#
-# USAGE NOTES:
-#
-# * Using C-e (show actives), followed by repeatedly pressing space will cycle
-# through all your currently active windows.
-#
-# * If you enter a search string fragment, and realise that more than one candidate
-# is still presented, rather than delete the whole string and modify it, you can
-# use C-SPC to 'lock' the current matching candidates, but allow you to search
-# through those matches alone.
-#
-# Based in part on window_switcher.pl script Copyright 2007 Wouter Coekaerts
-# <coekie@irssi.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+=pod
+
+=head1 NAME
+
+ido_switcher.pl
+
+=head1 DESCRIPTION
+
+Search and select windows similar to ido-mode for emacs
+
+=head1 INSTALLATION
+
+This script requires that you have first installed and loaded F<uberprompt.pl>
+
+Uberprompt can be downloaded from:
+
+L<https://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl>
+
+and follow the instructions at the top of that file or its README for installation.
+
+If uberprompt.pl is available, but not loaded, this script will make one
+attempt to load it before giving up. This eliminates the need to precisely
+arrange the startup order of your scripts.
+
+=head2 SETUP
+
+C</bind ^G /ido_switch_start [options]>
+
+Where C<^G> is a key of your choice.
+
+=head2 USAGE
+
+C<C-g> (or whatever you've set the above bind to), enters IDO window switching mode.
+You can then type either a search string, or use one of the additional key-bindings
+to change the behaviour of the search. C<C-h> provides online help regarding
+the possible interactive options.
+
+=head3 EXTENDED USAGE:
+
+It is possible to pass arguments to the C</ido_switch_start> command, which
+correspond to some of the interactively settable parameters listed below.
+
+The following options are available:
+
+=over 4
+
+=item C<-channels>
+
+Search through only channels.
+
+=item C<-queries>
+
+Search through only queries.
+
+=item C<-all>
+
+search both queries and channels (Default).
+
+=item C<-active>
+
+Lmit search to only window items with activity.
+
+=item C<-exact>
+
+Enable exact-substring matching
+
+=item C<-flex>
+
+Enable flex-string matching
+
+=back
+
+I<If neither of C<-exact> or C<-flex> are given, the default is the value of
+C</set ido_use_flex>>
+
+=head4 EXAMPLE
+
+=over 2
+
+=item C</bind ^G /ido_switch_start -channels>
+
+=item C</bind ^F /ido_switch_start -queries -active>
+
+=back
+
+B<NOTE:> When entering window switching mode, the contents of your input line will
+be saved and cleared, to avoid visual clutter whilst using the switching
+interface. It will be restored once you exit the mode using either C<C-g>, C<Esc>,
+or C<RET>.
+
+=head3 INTERACTIVE COMMANDS
+
+The following key-bindings are available only once the mode has been
+activated:
+
+=over 4
+
+=item C<C-g>
+
+ Exit the mode without changing windows.
+
+=item C<Esc>
+
+Exit, as above.
+
+=item C<C-s>
+
+Rotate the list of window candidates forward by one item
+
+=item C<C-r>
+
+Rotate the list of window candidates backward by one item
+
+=item C<C-e>
+
+Toggle 'Active windows only' filter
+
+=item C<C-f>
+
+Switch between 'Flex' and 'Exact' matching.
+
+=item C<C-d>
+
+Select a network or server to filter candidates by
+
+=item C<C-u>
+
+Clear the current search string
+
+=item C<C-q>
+
+Cycle between showing only queries, channels, or all.
+
+=item C<C-SPC>
+
+Filter candidates by current search string, and then reset
+the search string
+
+=item C<RET>
+
+Select the current head of the candidate list (the green one)
+
+=item C<SPC>
+
+Select the current head of the list, without exiting the
+switching mode. The head is then moved one place to the right,
+allowing one to cycle through channels by repeatedly pressing space.
+
+=item C<TAB>
+
+B<[currently in development]> displays all possible completions
+at the bottom of the current window.
+
+=item I<All other keys> (C<a-z, A-Z>, etc)
+
+Add that character to the current search string.
+
+=back
+
+=head3 USAGE NOTES
+
+=over 4
+
+=item *
+
+Using C-e (show actives), followed by repeatedly pressing space will cycle
+through all your currently active windows.
+
+=item *
+
+If you enter a search string fragment, and realise that more than one candidate
+is still presented, rather than delete the whole string and modify it, you
+can use C-SPC to 'lock' the current matching candidates, but allow you to
+search through those matches alone.
+
+=back
+
+=head1 AUTHORS
+
+Based originally on L<window_switcher.pl|http://scripts.irssi.org/scripts/window_switcher.pl> script Copyright 2007 Wouter Coekaerts
+C<E<lt>coekie@irssi.orgE<gt>>.
+
+Primary functionality Copyright 2010-2011 Tom Feist
+C<E<lt>shabble+irssi@metavore.orgE<gt>>.
+
+=head1 LICENCE
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+=head1 BUGS:
+
+=over 4
+
+=item B<FIXED> Sometimes selecting a channel with the same name on a different
+ network will take you to the wrong channel.
+
+=back
+
+=head1 TODO
+
+=over 4
+
+=item B<DONE> C-g - cancel
+
+=item B<DONE> C-spc - narrow
+
+=item B<DONE> flex matching (on by default, but optional)
+
+=item TODO server/network narrowing
+
+=item B<DONE> colourised output (via uberprompt)
+
+=item B<DONE> C-r / C-s rotate matches
+
+=item B<DONE> toggle queries/channels
+
+=item B<DONE> remove inputline content, restore it afterwards.
+
+=item TODO tab - display all possibilities in window (clean up afterwards)
+how exactly will this work?
+
+=item B<DONE> sort by recent activity/recently used windows (separate commands?)
+
+=item B<TODO> need to be able to switch ordering of active ones (numerical, or most
+recently active, priority to PMs/hilights, etc?)
+
+=item B<DONE> should space auto-move forward to next window for easy stepping
+ through sequential/active windows?
+
+=back
+
+=cut
use strict;
+use warnings;
+
use Irssi;
use Irssi::TextUI;
use Data::Dumper;
-use vars qw($VERSION %IRSSI);
-$VERSION = '2.0';
-%IRSSI =
+
+our $VERSION = '2.1';
+our %IRSSI =
(
authors => 'Tom Feist, Wouter Coekaerts',
contact => 'shabble+irssi@metavore.org, shabble@#irssi/freenode',
@@ -93,22 +264,10 @@ $VERSION = '2.0';
);
-# TODO:
-# DONE C-g - cancel
-# DONE C-spc - narrow
-# DONE flex matching (on by default, but optional)
-# TODO server/network narrowing
-# DONE colourised output (via uberprompt)
-# DONE C-r / C-s rotate matches
-# DONE toggle queries/channels
-# DONE remove inputline content, restore it afterwards.
-# TODO tab - display all possibilities in window (clean up afterwards)
-# how exactly will this work?
-# DONE sort by recent activity/recently used windows (separate commands?)
-# TODO need to be able to switch ordering of active ones (numerical, or most recently
-# active, priority to PMs/hilights, etc?)
-# DONE should space auto-move forward to next window for easy stepping through
-# sequential/active windows?
+
+my $CMD_NAME = 'ido_switch_start';
+my $CMD_OPTS = '-channels -queries -all -active -exact -flex';
+
my $input_copy = '';
my $input_pos_copy = 0;
@@ -129,6 +288,7 @@ my $showing_help = 0;
my $need_clear = 0;
my $sort_ordering = "start-asc";
+my $sort_active_first = 0;
# /set configurable settings
my $ido_show_count;
@@ -152,22 +312,25 @@ sub _print {
my $win = Irssi::active_win;
my $str = join('', @_);
$need_clear = 1;
- $win->print($str, Irssi::MSGLEVEL_NEVER);
+ $win->print($str, MSGLEVEL_NEVER);
}
sub _debug_print {
return unless DEBUG;
my $win = Irssi::active_win;
my $str = join('', @_);
- $win->print($str, Irssi::MSGLEVEL_CLIENTCRAP);
+ $win->print($str, MSGLEVEL_CLIENTCRAP);
}
sub _print_clear {
return unless $need_clear;
my $win = Irssi::active_win();
- $win->command('/scrollback levelclear -level NEVER');
+ $win->command('/^scrollback levelclear -level NEVER');
}
+# TODO: use the code from rl_history_search to put this into a disposable
+# split win.
+# TODO: create formats for this.
sub display_help {
my @message =
@@ -242,15 +405,9 @@ sub print_all_matches {
#_print("Longtest name: $longest_name");
}
- sub script_is_loaded {
- my $name = shift;
- _debug_print "Checking if $name is loaded";
- no strict 'refs';
- my $retval = defined %{ "Irssi::Script::${name}::" };
- use strict 'refs';
-
- return $retval;
- }
+sub script_is_loaded {
+ return exists($Irssi::Script::{$_[0] . '::'});
+}
unless (script_is_loaded('uberprompt')) {
@@ -275,11 +432,14 @@ sub load_uberprompt_failed {
}
sub ido_switch_init {
- Irssi::settings_add_bool('ido_switch', 'ido_switch_debug', 0);
- Irssi::settings_add_bool('ido_switch', 'ido_use_flex', 1);
- Irssi::settings_add_int ('ido_switch', 'ido_show_count', 5);
+ Irssi::settings_add_bool('ido_switch', 'ido_switch_debug', 0);
+ Irssi::settings_add_bool('ido_switch', 'ido_use_flex', 1);
+ Irssi::settings_add_bool('ido_switch', 'ido_show_active_first', 1);
+ Irssi::settings_add_int ('ido_switch', 'ido_show_count', 5);
+
- Irssi::command_bind('ido_switch_start', \&ido_switch_start);
+ Irssi::command_bind($CMD_NAME, \&ido_switch_start);
+ Irssi::command_set_options($CMD_NAME, $CMD_OPTS);
Irssi::signal_add ('setup changed' => \&setup_changed);
Irssi::signal_add_first('gui key pressed' => \&handle_keypress);
@@ -288,28 +448,52 @@ sub ido_switch_init {
}
sub setup_changed {
- $DEBUG_ENABLED = Irssi::settings_get_bool('ido_switch_debug');
- $ido_show_count = Irssi::settings_get_int ('ido_show_count');
- $ido_use_flex = Irssi::settings_get_bool('ido_use_flex');
+ $DEBUG_ENABLED = Irssi::settings_get_bool('ido_switch_debug');
+ $ido_show_count = Irssi::settings_get_int ('ido_show_count');
+ $ido_use_flex = Irssi::settings_get_bool('ido_use_flex');
+ $sort_active_first = Irssi::settings_get_bool('ido_show_active_first');
}
-
sub ido_switch_start {
+
+ my ($args, $server, $witem) = @_;
+
# store copy of input line to restore later.
$input_copy = Irssi::parse_special('$L');
$input_pos_copy = Irssi::gui_input_get_pos();
Irssi::gui_input_set('');
- # set startup flags
+ my $options = {};
+ my @opts = Irssi::command_parse_options($CMD_NAME, $args);
+ if (@opts and ref($opts[0]) eq 'HASH') {
+ $options = $opts[0];
+ print "Options: " . Dumper($options);
+ }
+
+ # clear / initialise match variables.
$ido_switch_active = 1;
$search_str = '';
$match_index = 0;
- $mode_type = 'ALL';
- # refresh in case we toggled it last time.
- $ido_use_flex = Irssi::settings_get_bool('ido_use_flex');
- $active_only = 0;
+ # configure settings from provided arguments.
+
+ # use provided options first, or fall back to /setting.
+ $ido_use_flex = exists $options->{exact}
+ ? 0
+ : exists $options->{flex}
+ ? 1
+ : Irssi::settings_get_bool('ido_use_flex');
+
+ # only select active items
+ $active_only = exists $options->{active};
+
+ # what type of items to search.
+ $mode_type = exists $options->{queries}
+ ? 'QUERY'
+ : exists $options->{channels}
+ ? 'CHANNEL'
+ : 'ALL';
_debug_print "Win cache: " . join(", ", map { $_->{name} } @window_cache);
@@ -370,7 +554,12 @@ sub get_all_windows {
push @ret, { _build_win_obj($win, $item) };
}
} else {
- _debug_print "Error occurred reading info from window: $win";
+ if (not grep { $_->{num} == $win->{refnum} } @ret) {
+ my $item = { _build_win_obj($win, undef) };
+ $item->{name} = "Unknown";
+ push @ret, $item;
+ }
+ #_debug_print "Error occurred reading info from window: $win";
#_debug_print Dumper($win);
}
}
@@ -384,17 +573,24 @@ sub get_all_windows {
my $list_ref = shift;
my @ret = @$list_ref;
- @ret = sort { $a->{num} <=> $b->{num} } @ret;
+ @ret = sort { $a->{num} <=> $b->{num} } @ret;
+ if ($sort_active_first) {
+ my @active = grep { $_->{active} } @ret;
+ my @inactive = grep { not $_->{active} } @ret;
- return @ret;
+ return (@active, @inactive);
+ } else {
+ return @ret;
+ }
}
sub ido_switch_select {
- my ($selected) = @_;
+ my ($selected, $tag) = @_;
- _debug_print "Selecting window: " . $selected->{name};
+ _debug_print sprintf("Selecting window: %s (%d)",
+ $selected->{name}, $selected->{num});
- Irssi::command("WINDOW GOTO " . $selected->{name});
+ Irssi::command("WINDOW GOTO " . $selected->{num});
if ($selected->{type} ne 'WIN') {
_debug_print "Selecting window item: " . $selected->{itemname};
@@ -424,7 +620,7 @@ sub get_all_windows {
# take the top $ido_show_count entries and display them.
my $match_count = scalar @search_matches;
my $show_count = $ido_show_count;
- my $match_string = '[No match';
+ my $match_string = '[No matches]';
$show_count = $match_count if $match_count < $show_count;
@@ -486,7 +682,7 @@ sub get_all_windows {
push @indicators, 'Active' if $active_only;
push @indicators, ucfirst(lc($mode_type));
- my $flex = sprintf(' %%k[%%n%s%%k]%%n ', join ',', @indicators);
+ my $flex = sprintf(' %%b[%%n%s%%b]%%n ', join ', ', @indicators);
my $search = '';
$search = (sprintf '`%s\': ', $search_str) if length $search_str;
@@ -539,7 +735,7 @@ sub get_all_windows {
if ($mode_type ne 'ALL') {
@mode_cache = @window_cache;
- @window_cache = grep { print "Type: " . $_->{type}; $_->{type} eq $mode_type } @window_cache;
+ @window_cache = grep { $_->{type} eq $mode_type } @window_cache;
} else {
@window_cache = @mode_cache if @mode_cache;
}
@@ -718,6 +914,16 @@ sub get_all_windows {
Irssi::signal_stop();
return;
}
+ if ($key == 11) { # Ctrl-K
+ my $sel = get_window_match();
+ _debug_print("deleting entry: " . $sel->{num});
+ Irssi::command("window close " . $sel->{num});
+ _update_cache();
+ update_matches();
+ update_window_select_prompt();
+ Irssi::signal_stop();
+
+ }
if ($key == 18) { # Ctrl-R
_debug_print "skipping to prev match";
diff --git a/joinforward/joinforward.pl b/joinforward/joinforward.pl
new file mode 100644
index 0000000..1acd72a
--- /dev/null
+++ b/joinforward/joinforward.pl
@@ -0,0 +1,65 @@
+use strict;
+use warnings;
+
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => 'joinforward.pl',
+ description => '',
+ license => 'Public Domain',
+ );
+
+my $forwards;
+
+
+init();
+
+
+sub init {
+ Irssi::signal_add('event 470', 'sig_470'); # forwarding (on freenode, anhywya)
+ Irssi::signal_add('event 473', 'sig_473'); # notinvited.
+ # or better to just overload /join?
+ Irssi::command_bind('fwdlist', 'cmd_fwdlist');
+ print "Joinforward loaded";
+}
+
+sub cmd_fwdlist {
+ print "Known Forwards:";
+ foreach my $fwd (sort keys %$forwards) {
+ print "$fwd -> " . $forwards->{$fwd};
+ }
+}
+
+sub sig_470 {
+ my ($server, $args, $sender) = @_;
+ #'shibble #mac ##mac :Forwarding to another channel',
+ print "Sig 470: $args";
+ if ($args =~ m/(#.*?)\s+(#.*?)/) {
+ $forwards->{$1} = $2;
+ print "adding $1 -> $2";
+ }
+}
+
+sub sig_473 {
+ my ($server, $args, $sender) = @_;
+ print "Sig 473: $args";
+ #" shibble #mac :Cannot join channel (+i) - you must be invited',"
+ if ($server->{version} =~ m/ircd-seven/) { # assume freenode
+ if ($args =~ m/^(#.*?)\s+/) {
+ if (exists $forwards->{$1}) {
+ $server->command("join " . $forwards->{$1});
+ }
+ }
+
+
+ }
+}
diff --git a/longify/README.pod b/longify/README.pod
new file mode 100644
index 0000000..e161985
--- /dev/null
+++ b/longify/README.pod
@@ -0,0 +1,79 @@
+=pod
+
+=head1 NAME
+
+longify-urls.pl
+
+=head1 DESCRIPTION
+
+Checks channel messages for 'shortened' links, and expands them to their
+final target address.
+
+=head1 INSTALLATION
+
+=over
+
+=item * Download the modules from L<http://mauke.dyndns.org/stuff/irssi/lib/IrssiX/>
+and place them in a directory known to Perl (One of the default system locations
+for perl modules, or somewhere that is listed in the C<$PERL5LIB> environment variable).
+They should be placed in a subdirectory named C<IrssiX/> in whichever module directory
+you choose.
+
+=item * Copy the F<longify-urls.list> file into your F<~/.irssi/> directory.
+
+=item * Copy this script into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+=back
+
+=head1 USAGE
+
+Load it.
+
+B<Note:> The lookup to check if a link is shortened runs in the background, so it
+won't affect the running of Irssi, but the message containing the link is queued
+until either a response comes back, or the timeout (~2 seconds) is hit.
+
+=head1 AUTHORS
+
+Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+
+=head1 TODO
+
+=over
+
+=item * Not tested with simultaneous lookups
+
+=item * User-configurable timeout
+
+=item * deal with utf-8 (that stupid arrow site).
+
+=back
+
+
+
+=cut
+
diff --git a/longify/longify-urls.list b/longify/longify-urls.list
new file mode 100644
index 0000000..4ac705c
--- /dev/null
+++ b/longify/longify-urls.list
@@ -0,0 +1,227 @@
+tinyurl.com
+is.gd
+ur1.ca
+ping.fm
+snipurl.com
+snurl.com
+snipr.com
+sn.im
+bit.ly
+j.mp
+tr.im
+xrl.us
+twurl.nl
+x.se
+poprl.com
+url.ie
+6url.com
+yep.it
+ln-s.net
+piurl.com
+yatuc.com
+g8l.us
+icanhaz.com
+urlkiss.com
+minilien.com
+tinylink.com
+urlcut.com
+doiop.com
+smurl.com
+tighturl.com
+2tu.us
+myurl.in
+memurl.com
+redirx.com
+easyurl.net
+qurlyq.com
+dwarfurl.com
+shrinkurl.us
+starturl.com
+urlhawk.com
+canurl.com
+surl.co.uk
+lnkurl.com
+urlbrief.com
+urlborg.com
+ub0.cc
+urlvi.be
+sn.vc
+lurl.no
+hurl.ws
+twiturl.de
+spedr.com
+parv.us
+decenturl.com
+shorterlink.com
+shortlinks.co.uk
+budurl.com
+shw.me
+buk.me
+zz.gd
+0rz.tw
+lin.cr
+shink.de
+s3nt.com
+fff.to
+wipi.es
+ri.ms
+b23.ru
+zi.ma
+srs.li
+liip.to
+post.ly
+tcrn.ch
+cli.gs
+ptiturl.com
+snadr.it
+shrinkify.com
+s7y.us
+tiny.cc
+idek.net
+ff.im
+onsaas.info
+tubeurl.com
+tgr.me
+ow.ly
+a2n.eu
+azqq.com
+liltext.com
+b65.com
+cuturls.com
+goshrink.com
+atu.ca
+redirects.ca
+fhurl.com
+flingk.com
+fly2.ws
+nutshellurl.com
+notlong.com
+nanoref.com
+moourl.com
+shurl.net
+shrinkr.com
+shortenurl.com
+rubyurl.com
+url.co.uk
+xil.in
+wapurl.co.uk
+u76.org
+urlcutter.com
+fwdurl.net
+shrtnd.com
+urlpire.com
+smallr.com
+shredurl.com
+linkgap.com
+plumurl.com
+offur.com
+liurl.cn
+adjix.com
+ad.vu
+togoto.us
+a.gg
+a.nf
+go.9nl.com
+lru.jp
+kl.am
+nn.nf
+idek.net
+hex.io
+to.ly
+digg.com
+cliccami.info
+➡.ws
+➨.ws
+➯.ws
+➔.ws
+➞.ws
+➽.ws
+➹.ws
+✩.ws
+✿.ws
+❥.ws
+›.ws
+ta.gd
+cort.as
+u.nu
+r.im
+alturl.com
+chilp.it
+ewerl.com
+flq.us
+hugeurl.com
+jijr.com
+kissa.be
+l9k.net
+o-x.fr
+omf.gd
+plurl.me
+rb6.me
+rickroll.it
+shoturl.us
+srnk.net
+tiny.pl
+u.mavrev.com
+updating.me
+xrl.in
+xurl.jp
+yfrog.com
+307.to
+bacn.me
+bloat.me
+clipurl.us
+href.in
+korta.nu
+merky.de
+nanourl.se
+peaurl.com
+pnt.me
+rde.me
+reallytinyurl.com
+redir.ec
+short.ie
+short.to
+tra.kz
+twurl.cc
+url.az
+urlx.ie
+zurl.ws
+qlnk.net
+twitclicks.com
+htxt.it
+fwd4.me
+clop.in
+ln-s.ru
+sp2.ro
+eepurl.com
+twitterurl.net
+clck.ru
+atu.ca
+netnet.me
+adf.ly
+zzang.kr
+ni.to
+lu.to
+xrl.in
+virl.com
+gl.am
+klck.me
+trunc.it
+migre.me
+xzb.cc
+ulu.lu
+shar.es
+3.ly
+urli.nl
+su.pr
+goo.gl
+om.ly
+hiderefer.com
+flic.kr
+w33.us
+fwib.net
+zud.me
+7.ly
+shrt.fr
+smsh.me
+bon.no
diff --git a/longify/longify-urls.pl b/longify/longify-urls.pl
new file mode 100644
index 0000000..38e8ba8
--- /dev/null
+++ b/longify/longify-urls.pl
@@ -0,0 +1,268 @@
+=pod
+
+=head1 NAME
+
+longify-urls.pl
+
+=head1 DESCRIPTION
+
+Checks channel messages for 'shortened' links, and expands them to their
+final target address.
+
+=head1 INSTALLATION
+
+=over
+
+=item * Download the modules from L<http://mauke.dyndns.org/stuff/irssi/lib/IrssiX/>
+and place them in a directory known to Perl (One of the default system locations
+for perl modules, or somewhere that is listed in the C<$PERL5LIB> environment variable).
+They should be placed in a subdirectory named C<IrssiX/> in whichever module directory
+you choose.
+
+=item * Copy the F<longify-urls.list> file into your F<~/.irssi/> directory.
+
+=item * Copy this script into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+=back
+
+=head1 USAGE
+
+Load it.
+
+B<Note:> The lookup to check if a link is shortened runs in the background, so it
+won't affect the running of Irssi, but the message containing the link is queued
+until either a response comes back, or the timeout (~2 seconds) is hit.
+
+=head1 AUTHORS
+
+Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+
+=head1 TODO
+
+=over
+
+=item * Not tested with simultaneous lookups
+
+=item * User-configurable timeout
+
+=item * deal with utf-8 (that stupid arrow site).
+
+=back
+
+=cut
+
+use strict;
+use warnings;
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+use IrssiX::Async qw(fork_off);
+use LWP::UserAgent;
+use URI;
+use File::Spec;
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => 'longify-urls',
+ description => 'checks to see if links mentioned in public'
+ . 'channels are shortened, and, if so, expands them',
+ license => 'MIT',
+ updated => '8/7/2011'
+ );
+
+my $pending_msg_params = {};
+my $lookup_in_progress;
+my $flushing_message;
+my $domains;
+
+
+sub sig_public_message {
+ _handle_messages(@_);
+}
+
+sub sig_private_message {
+ _handle_messages(@_);
+}
+
+sub _handle_messages {
+
+ my $msg = $_[1];
+
+ if ($flushing_message) { # don't interrupt it a second time.
+ delete $pending_msg_params->{$flushing_message};
+ $flushing_message = '';
+ return;
+ }
+
+ my $url = match_uri($msg);
+
+ return unless $url;
+
+ my $uri_obj = URI->new($url);
+
+ return unless ref($uri_obj) && exists $domains->{$uri_obj->host};
+
+ $pending_msg_params->{$url} = [@_];
+ $lookup_in_progress = 1;
+ expand_url($url);
+
+ Irssi::signal_stop;
+}
+
+sub expand_url {
+ my ($url) = @_;
+ fork_off $url, \&expand_url_request, \&expand_url_callback;
+}
+
+sub expand_url_request {
+ my $url = <STDIN>;
+ chomp $url;
+
+ my $user_agent = LWP::UserAgent->new;
+ $user_agent->agent("irssi-longify-urls/0.1 ");
+ $user_agent->timeout(2); # TODO: make this a setting.
+ $user_agent->max_size(0);
+ my $request = HTTP::Request->new(GET => $url);
+ my $result = $user_agent->request($request);
+
+ print "$url\n";
+
+ if ($result->is_error) {
+ print "ERROR: " . $result->as_string . "\n";
+ return;
+ }
+
+ my @redirects = $result->redirects;
+ if (@redirects) {
+ print $redirects[-1]->header('Location') . "\n";
+ }
+}
+
+sub expand_url_callback {
+ my ($result) = @_;
+
+ chomp $result;
+ my ($orig_url, $long_url) = split /\n/, $result;
+ $long_url = '' unless $long_url;
+ $long_url =~ s/\s*(\S*)\s*/$1/;
+
+
+ my $pending_message_data = $pending_msg_params->{$orig_url};
+ my @new_signal = @$pending_message_data;
+
+ #Irssi::print("Result: orignal: $orig_url, new: $long_url");
+
+ if ($long_url && $long_url !~ /^ERROR/ && $long_url ne $orig_url) {
+ $new_signal[1] =~ s/\Q$orig_url\E/$long_url [was: $orig_url]/;
+ #print "Printing with: " . Dumper(@new_signal[1..$#new_signal]);
+ } elsif ($long_url && $long_url =~ /^ERROR/) {
+ $new_signal[1] =~ s/\Q$orig_url\E/$long_url while expanding "$orig_url"/;
+ }
+
+ $flushing_message = $orig_url;
+ Irssi::signal_emit 'message public', @new_signal;
+
+}
+
+sub match_uri {
+ my $text = shift;
+ # url matching regex taken
+ # from http://daringfireball.net/2010/07/improved_regex_for_matching_urls
+ my $regex = qr((?xi)
+\b
+( # Capture 1: entire matched URL
+ (?:
+ [a-z][\w-]+: # URL protocol and colon
+ (?:
+ /{1,3} # 1-3 slashes
+ | # or
+ [a-z0-9%] # Single letter or digit or '%'
+ # (Trying not to match e.g. "URI::Escape")
+ )
+ | # or
+ www\d{0,3}[.] # "www.", "www1.", "www2." … "www999."
+ | # or
+ [a-z0-9.\-]+[.][a-z]{2,4}/ # looks like domain name followed by a slash
+ )
+ (?: # One or more:
+ [^\s()<>]+ # Run of non-space, non-()<>
+ | # or
+ \(([^\s()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels
+ )+
+ (?: # End with:
+ \(([^\s()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels
+ | # or
+ [^\s`!()\[\]{};:'".,<>?«»“”‘’] # not a space or one of these punct chars
+ )
+));
+
+
+ if ($text =~ $regex) {
+ my $uri = $1;
+ # shorten needs the http prefix or it'll treat it as a relative link.
+ $uri = 'http://' . $uri if $uri !~ m(http://);
+ return $uri;
+ } else {
+ # no match
+ return undef;
+ }
+}
+
+sub cmd_reload {
+ my $filename = shift
+ || File::Spec->catfile(Irssi::get_irssi_dir, 'longify-urls.list');
+ $domains = {};
+ open my $fh, '<', $filename
+ or die "Couldn't open file containing shorteners list $filename: $!";
+ while (<$fh>) {
+ chomp;
+ $domains->{$_} = 1;
+ }
+ close $fh;
+ Irssi::active_win->print('%_Longify:%_ List of domains has been reloaded.');
+}
+
+sub init {
+ Irssi::signal_add_first 'message public', \&sig_public_message;
+ Irssi::signal_add_first 'message private', \&sig_private_message;
+ Irssi::signal_add 'setup changed', \&sig_setup_changed;
+ Irssi::command_bind 'longify-reload', \&cmd_reload;
+
+ cmd_reload();
+}
+
+sub sig_setup_changed {
+ # TODO: settings updating stuff goes here.
+}
+
+init();
diff --git a/modules/key_emitter/COPYING b/modules/key_emitter/COPYING
new file mode 100644
index 0000000..d511905
--- /dev/null
+++ b/modules/key_emitter/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/modules/key_emitter/Makefile b/modules/key_emitter/Makefile
new file mode 100644
index 0000000..d7e3dd5
--- /dev/null
+++ b/modules/key_emitter/Makefile
@@ -0,0 +1,57 @@
+
+### Edit these parameters ###
+
+# change this to 'find' if you're on a decent system.
+FIND = gfind # stupid OSX non-gnu defaults.
+
+# Where your irssi include files live. You might need to install an
+# 'irssi-dev' package or something like that.
+IRSSI_DIST = /opt/stow/repo/irssi-debug/include/irssi
+
+# probably $(HOME)/.irssi for most people.
+IRSSI_USER_DIR = $(HOME)/projects/tmp/test/irssi-debug
+MODULE_NAME = key_emitter
+
+### You shouldn't need to edit anything beyond this point ###
+
+LIB_NAME = lib$(MODULE_NAME).so
+CFLAGS = -Wall -O2 -Werror -g -DMODULE_NAME=\"$(MODULE_NAME)\"
+LDFLAGS = -avoid-version -module -bundle -flat_namespace -undefined suppress
+
+# When you start adding more components to your module, add them here.
+OBJECTS = key_emitter_core.o \
+ key_emitter_impl.o
+
+IRSSI_INCLUDE = -I$(IRSSI_DIST) \
+ -I$(IRSSI_DIST)/src \
+ -I$(IRSSI_DIST)/src/fe-common/core \
+ -I$(IRSSI_DIST)/src/core \
+ -I$(IRSSI_DIST)/src/fe-text \
+ -I$(IRSSI_DIST)/src/irc \
+ -I$(IRSSI_DIST)/src/irc/core \
+ -I$(IRSSI_DIST)/src/irc/dcc \
+ -I$(IRSSI_DIST)/src/irc/notifylist
+
+
+GLIB_CFLAGS = $(shell pkg-config glib-2.0 --cflags)
+
+all: $(LIB_NAME)
+
+%.o: %.c Makefile
+ $(CC) $(CFLAGS) $(GLIB_CFLAGS) $(IRSSI_INCLUDE) -I. -fPIC -c $<
+
+$(LIB_NAME): $(OBJECTS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $@
+
+install: $(LIB_NAME)
+ install $< $(IRSSI_USER_DIR)/modules
+
+clean:
+ rm -rf *~ *.o *.so core || true
+
+TAGS:
+ $(FIND) -type f -exec etags -a -o TAGS {} \;
+
+.default: all
+
+.phony: clean install TAGS
diff --git a/modules/key_emitter/README.md b/modules/key_emitter/README.md
new file mode 100644
index 0000000..6377a39
--- /dev/null
+++ b/modules/key_emitter/README.md
@@ -0,0 +1,36 @@
+## What is this?
+
+A loadable module which processes keybindings and emits easier to handle
+signals for scripting.
+
+## Usage
+
+* Edit the Makefile as per the comments at the top.
+* `make && make install`
+* Start up a spare Irssi client (no point segfaulting your main one)
+* `/load key_emitter`
+* Party in the streets.
+
+## Contributing
+
+Contributions to this project are welcome (i.e.: to demonstrate more useful
+things that a module can do)
+
+ * Patches can be submitted via e-mail, or preferably via forking
+ and sending a pull-request using GitHub. The repository for this
+ code is `git://github.com/shabble/irssi-scripts.git` and the
+ corresponding web-page is
+ [irssi-scripts/modules](https://github.com/shabble/irssi-scripts/modules).
+
+ Details of pull-requests can be found at
+ [GitHub](http://help.github.com/pull-requests/)
+
+ . Please poke me on Freenode IRC (`shabble` on `#irssi`) before
+ spending too much time on the code. Use the `git format-patch`-tool when
+ emailing patches.
+
+## Authors
+
+ * Tom Feist [shabble+irssi@metavore.org](mailto://shabble+irssi@metavore.org)
+ Chief plunderer of the modular goodness.
+
diff --git a/modules/key_emitter/key_emitter_core.c b/modules/key_emitter/key_emitter_core.c
new file mode 100644
index 0000000..196dd70
--- /dev/null
+++ b/modules/key_emitter/key_emitter_core.c
@@ -0,0 +1,34 @@
+
+/* Originally this code was part of the irssi-lua module
+ * <https://github.com/ahf/irssi-lua> and copyright as below:
+ *
+ * Copyright (c) 2009 Alexander Færøy <ahf@irssi.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <key_emitter_core.h>
+#include <key_emitter_irssi.h>
+#include <key_emitter_impl.h>
+
+void test_init() {
+ module_register(MODULE_NAME, "core");
+ print_load_message();
+}
+
+void test_deinit() {
+ print_unload_message();
+}
diff --git a/modules/key_emitter/key_emitter_core.h b/modules/key_emitter/key_emitter_core.h
new file mode 100644
index 0000000..e6210d8
--- /dev/null
+++ b/modules/key_emitter/key_emitter_core.h
@@ -0,0 +1,27 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2009 Alexander Færøy <ahf@irssi.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef GUARD_KEY_EMITTER_CORE_H
+#define GUARD_KEY_EMITTER_CORE_H 1
+
+void key_emitter_init();
+void key_emitter_deinit();
+
+#endif
diff --git a/modules/key_emitter/key_emitter_impl.c b/modules/key_emitter/key_emitter_impl.c
new file mode 100644
index 0000000..cd2055e
--- /dev/null
+++ b/modules/key_emitter/key_emitter_impl.c
@@ -0,0 +1,18 @@
+#include <key_emitter_irssi.h>
+#include <key_emitter_impl.h>
+#include <key_emitter_core.h>
+
+void print_load_message(void) {
+
+ printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ "Hello, World. xxx \"%s\"", MODULE_NAME);
+
+}
+
+void print_unload_message(void) {
+
+ printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ "Goodbye, Cruel World. ~signed \"%s\"", MODULE_NAME);
+
+}
+
diff --git a/modules/key_emitter/key_emitter_impl.h b/modules/key_emitter/key_emitter_impl.h
new file mode 100644
index 0000000..17f0148
--- /dev/null
+++ b/modules/key_emitter/key_emitter_impl.h
@@ -0,0 +1,7 @@
+#ifndef _KEY_EMITTER_IMPL_H_
+#define _KEY_EMITTER_IMPL_H_ 1
+
+void print_load_message(void);
+void print_unload_message(void);
+
+#endif /* _KEY_EMITTER_IMPL_H_ */
diff --git a/modules/key_emitter/key_emitter_irssi.h b/modules/key_emitter/key_emitter_irssi.h
new file mode 100644
index 0000000..4fd2a2e
--- /dev/null
+++ b/modules/key_emitter/key_emitter_irssi.h
@@ -0,0 +1,51 @@
+
+/*
+ * Copyright (c) 2009 Alexander Færøy <ahf@irssi.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef GUARD_TEST_IRSSI_H
+#define GUARD_TEST_IRSSI_H 1
+
+/* FIXME: bug */
+#define UOFF_T_LONG_LONG 1
+
+/* #include "config.h" */
+#include "core.h"
+#include "common.h"
+#include "modules.h"
+#include "commands.h"
+#include "settings.h"
+#include "printtext.h"
+#include "window-items.h"
+#include "window-activity.h"
+#include "levels.h"
+#include "servers.h"
+#include "chat-protocols.h"
+#include "channels.h"
+#include "queries.h"
+#include "nicklist.h"
+#include "chatnets.h"
+#include "servers-reconnect.h"
+#include "masks.h"
+#include "misc.h"
+#include "rawlog.h"
+#include "log.h"
+#include "ignore.h"
+#include "fe-exec.h"
+#include "pidwait.h"
+
+#endif
diff --git a/modules/overlays/COPYING b/modules/overlays/COPYING
new file mode 100644
index 0000000..d511905
--- /dev/null
+++ b/modules/overlays/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/modules/overlays/Makefile b/modules/overlays/Makefile
new file mode 100644
index 0000000..ba5d787
--- /dev/null
+++ b/modules/overlays/Makefile
@@ -0,0 +1,59 @@
+
+### Edit these parameters ###
+
+# change this to 'find' if you're on a decent system.
+FIND = gfind # stupid OSX non-gnu defaults.
+
+# Where your irssi include files live. You might need to install an
+# 'irssi-dev' package or something like that.
+IRSSI_DIST = /opt/stow/repo/irssi-debug/include/irssi
+
+# probably $(HOME)/.irssi for most people.
+IRSSI_USER_DIR = $(HOME)/projects/tmp/test/irssi-debug
+MODULE_NAME = overlay
+
+### You shouldn't need to edit anything beyond this point ###
+
+LIB_NAME = lib$(MODULE_NAME).so
+CFLAGS = -Wall -O2 -Werror -g -DMODULE_NAME=\"$(MODULE_NAME)\"
+LDFLAGS = -avoid-version -module -bundle -flat_namespace -undefined suppress
+
+# When you start adding more components to your module, add them here.
+OBJECTS = overlay_core.o \
+ overlay_impl.o
+
+IRSSI_INC = $(HOME)/sources/irssi-git
+
+IRSSI_INCLUDE = -I$(IRSSI_INC) \
+ -I$(IRSSI_INC)/src \
+ -I$(IRSSI_INC)/src/fe-common/core \
+ -I$(IRSSI_INC)/src/core \
+ -I$(IRSSI_INC)/src/fe-text \
+ -I$(IRSSI_INC)/src/irc \
+ -I$(IRSSI_INC)/src/irc/core \
+ -I$(IRSSI_INC)/src/irc/dcc \
+ -I$(IRSSI_INC)/src/irc/notifylist
+
+
+GLIB_CFLAGS = $(shell pkg-config glib-2.0 --cflags)
+
+all: $(LIB_NAME)
+
+%.o: %.c Makefile
+ $(CC) $(CFLAGS) $(GLIB_CFLAGS) $(IRSSI_INCLUDE) -I. -fPIC -c $<
+
+$(LIB_NAME): $(OBJECTS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $@
+
+install: $(LIB_NAME)
+ install $< $(IRSSI_USER_DIR)/modules
+
+clean:
+ rm -rf *~ *.o *.so core || true
+
+TAGS:
+ $(FIND) -type f -exec etags -a -o TAGS {} \;
+
+.default: all
+
+.phony: clean install TAGS
diff --git a/modules/overlays/README.md b/modules/overlays/README.md
new file mode 100644
index 0000000..3fdbae7
--- /dev/null
+++ b/modules/overlays/README.md
@@ -0,0 +1,10 @@
+## What is this?
+
+A thing that allows mroe direct access to windows and curses information within irssi, via various
+signals.
+
+## Authors
+
+ * Tom Feist [shabble+irssi@metavore.org](mailto://shabble+irssi@metavore.org)
+ Chief plunderer of the modular goodness.
+
diff --git a/modules/overlays/overlay_core.c b/modules/overlays/overlay_core.c
new file mode 100644
index 0000000..590a1be
--- /dev/null
+++ b/modules/overlays/overlay_core.c
@@ -0,0 +1,46 @@
+
+/* Originally this code was part of the irssi-lua module
+ * <https://github.com/ahf/irssi-lua> and copyright as below:
+ *
+ * Copyright (c) 2009 Alexander Færøy <ahf@irssi.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <overlay_core.h>
+#include <overlay_irssi.h>
+#include <overlay_impl.h>
+#include <terminfo-core.h>
+
+static void cmd_overlay(const char *data, SERVER_REC *server) {
+
+ terminfo_move(current_term->width, current_term->height);
+ //terminfo_clear();
+ print_random_message("What is going on here?");
+}
+
+void overlay_init() {
+ module_register(MODULE_NAME, "core");
+ print_load_message();
+
+ command_bind("overlay", NULL, (SIGNAL_FUNC) cmd_overlay);
+}
+
+
+void overlay_deinit() {
+ command_unbind("overlay", (SIGNAL_FUNC) cmd_overlay);
+ print_unload_message();
+}
diff --git a/modules/overlays/overlay_core.h b/modules/overlays/overlay_core.h
new file mode 100644
index 0000000..39fc743
--- /dev/null
+++ b/modules/overlays/overlay_core.h
@@ -0,0 +1,27 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2009 Alexander Færøy <ahf@irssi.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef GUARD_KEY_EMITTER_CORE_H
+#define GUARD_KEY_EMITTER_CORE_H 1
+
+void overlay_init();
+void overlay_deinit();
+
+#endif
diff --git a/modules/overlays/overlay_impl.c b/modules/overlays/overlay_impl.c
new file mode 100644
index 0000000..dbb9748
--- /dev/null
+++ b/modules/overlays/overlay_impl.c
@@ -0,0 +1,23 @@
+#include <overlay_irssi.h>
+#include <overlay_impl.h>
+#include <overlay_core.h>
+
+void print_load_message(void) {
+
+ printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ "Hello, World, ~~ \"%s\"", MODULE_NAME);
+
+}
+
+void print_random_message(char *str) {
+ printtext(NULL, NULL, MSGLEVEL_CLIENTCRAP,
+ "%s", str);
+}
+
+void print_unload_message(void) {
+
+ printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ "Goodbye, Cruel World. ~~ \"%s\"", MODULE_NAME);
+
+}
+
diff --git a/modules/overlays/overlay_impl.h b/modules/overlays/overlay_impl.h
new file mode 100644
index 0000000..9f2d6ee
--- /dev/null
+++ b/modules/overlays/overlay_impl.h
@@ -0,0 +1,9 @@
+#ifndef _OVERLAY_IMPL_H_
+#define _OVERLAY_IMPL_H_ 1
+
+void print_load_message(void);
+void print_unload_message(void);
+void print_random_message(char *str);
+
+
+#endif /* _OVERLAY_IMPL_H_ */
diff --git a/modules/overlays/overlay_irssi.h b/modules/overlays/overlay_irssi.h
new file mode 100644
index 0000000..8c80623
--- /dev/null
+++ b/modules/overlays/overlay_irssi.h
@@ -0,0 +1,52 @@
+
+/*
+ * Copyright (c) 2009 Alexander Færøy <ahf@irssi.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef GUARD_TEST_IRSSI_H
+#define GUARD_TEST_IRSSI_H 1
+
+/* FIXME: bug */
+#define UOFF_T_LONG_LONG 1
+
+/* #include "config.h" */
+
+#include "core.h"
+#include "common.h"
+#include "modules.h"
+#include "commands.h"
+#include "settings.h"
+#include "printtext.h"
+#include "window-items.h"
+#include "window-activity.h"
+#include "levels.h"
+#include "servers.h"
+#include "chat-protocols.h"
+#include "channels.h"
+#include "queries.h"
+#include "nicklist.h"
+#include "chatnets.h"
+#include "servers-reconnect.h"
+#include "masks.h"
+#include "misc.h"
+#include "rawlog.h"
+#include "log.h"
+#include "ignore.h"
+#include "fe-exec.h"
+#include "pidwait.h"
+
+#endif
diff --git a/modules/perl_plus/COPYING b/modules/perl_plus/COPYING
new file mode 100644
index 0000000..d511905
--- /dev/null
+++ b/modules/perl_plus/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/modules/perl_plus/Makefile b/modules/perl_plus/Makefile
new file mode 100644
index 0000000..1c9fa6d
--- /dev/null
+++ b/modules/perl_plus/Makefile
@@ -0,0 +1,56 @@
+### Edit these parameters ###
+
+# change this to 'find' if you're on a decent system.
+FIND = gfind # stupid OSX non-gnu defaults.
+
+# Where your irssi include files live. You might need to install an
+# 'irssi-dev' package or something like that.
+IRSSI_DIST = /opt/stow/repo/irssi-debug/include/irssi
+
+# probably $(HOME)/.irssi for most people.
+IRSSI_USER_DIR = $(HOME)/projects/tmp/test/irssi-debug
+MODULE_NAME = perl_plus
+
+### You shouldn't need to edit anything beyond this point ###
+
+LIB_NAME = lib$(MODULE_NAME).so
+CFLAGS = -Wall -O2 -Werror -g -DMODULE_NAME=\"$(MODULE_NAME)\"
+LDFLAGS = -avoid-version -module -bundle -flat_namespace -undefined suppress
+
+# When you start adding more components to your module, add them here.
+OBJECTS = perl_plus_core.o \
+ perl_plus_impl.o
+
+IRSSI_INCLUDE = -I$(IRSSI_DIST) \
+ -I$(IRSSI_DIST)/src \
+ -I$(IRSSI_DIST)/src/fe-common/core \
+ -I$(IRSSI_DIST)/src/core \
+ -I$(IRSSI_DIST)/src/fe-text \
+ -I$(IRSSI_DIST)/src/irc \
+ -I$(IRSSI_DIST)/src/irc/core \
+ -I$(IRSSI_DIST)/src/irc/dcc \
+ -I$(IRSSI_DIST)/src/irc/notifylist
+
+
+GLIB_CFLAGS = $(shell pkg-config glib-2.0 --cflags)
+
+all: $(LIB_NAME)
+
+%.o: %.c Makefile
+ $(CC) $(CFLAGS) $(GLIB_CFLAGS) $(IRSSI_INCLUDE) -I. -fPIC -c $<
+
+$(LIB_NAME): $(OBJECTS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $@
+
+install: $(LIB_NAME)
+ install $< $(IRSSI_USER_DIR)/modules
+
+clean:
+ rm -rf *~ *.o *.so core || true
+
+TAGS:
+ $(FIND) -type f -exec etags -a -o TAGS {} \;
+
+.default: all
+
+.phony: clean install TAGS
diff --git a/modules/perl_plus/README.md b/modules/perl_plus/README.md
new file mode 100644
index 0000000..99aa815
--- /dev/null
+++ b/modules/perl_plus/README.md
@@ -0,0 +1,36 @@
+## What is this?
+
+A loadable module which (I hope) is going to be able to augment the
+existing perl API with a bunch of other things.
+
+## Usage
+
+* Edit the Makefile as per the comments at the top.
+* `make && make install`
+* Start up a spare Irssi client (no point segfaulting your main one)
+* `/load perl_plus`
+* Party in the streets.
+
+## Contributing
+
+Contributions to this project are welcome (i.e.: to demonstrate more useful
+things that a module can do)
+
+ * Patches can be submitted via e-mail, or preferably via forking
+ and sending a pull-request using GitHub. The repository for this
+ code is `git://github.com/shabble/irssi-scripts.git` and the
+ corresponding web-page is
+ [irssi-scripts/modules](https://github.com/shabble/irssi-scripts/modules).
+
+ Details of pull-requests can be found at
+ [GitHub](http://help.github.com/pull-requests/)
+
+ . Please poke me on Freenode IRC (`shabble` on `#irssi`) before
+ spending too much time on the code. Use the `git format-patch`-tool when
+ emailing patches.
+
+## Authors
+
+ * Tom Feist [shabble+irssi@metavore.org](mailto://shabble+irssi@metavore.org)
+ Chief plunderer of the modular goodness.
+
diff --git a/modules/perl_plus/perl_plus_core.c b/modules/perl_plus/perl_plus_core.c
new file mode 100644
index 0000000..61b8ffc
--- /dev/null
+++ b/modules/perl_plus/perl_plus_core.c
@@ -0,0 +1,34 @@
+
+/* Originally this code was part of the irssi-lua module
+ * <https://github.com/ahf/irssi-lua> and copyright as below:
+ *
+ * Copyright (c) 2009 Alexander Færøy <ahf@irssi.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <perl_plus_core.h>
+#include <perl_plus_irssi.h>
+#include <perl_plus_impl.h>
+
+void perl_plus_init() {
+ module_register(MODULE_NAME, "core");
+ print_load_message();
+}
+
+void perl_plus_deinit() {
+ print_unload_message();
+}
diff --git a/modules/perl_plus/perl_plus_core.h b/modules/perl_plus/perl_plus_core.h
new file mode 100644
index 0000000..d5fec48
--- /dev/null
+++ b/modules/perl_plus/perl_plus_core.h
@@ -0,0 +1,27 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2009 Alexander Færøy <ahf@irssi.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef GUARD_PERL_PLUS_CORE_H
+#define GUARD_PERL_PLUS_CORE_H 1
+
+void perl_plus_init();
+void perl_plus_deinit();
+
+#endif
diff --git a/modules/perl_plus/perl_plus_impl.c b/modules/perl_plus/perl_plus_impl.c
new file mode 100644
index 0000000..b53e6f5
--- /dev/null
+++ b/modules/perl_plus/perl_plus_impl.c
@@ -0,0 +1,18 @@
+#include <perl_plus_irssi.h>
+#include <perl_plus_impl.h>
+#include <perl_plus_core.h>
+
+void print_load_message(void) {
+
+ printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ "Hello, World. xxx \"%s\"", MODULE_NAME);
+
+}
+
+void print_unload_message(void) {
+
+ printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ "Goodbye, Cruel World. ~signed \"%s\"", MODULE_NAME);
+
+}
+
diff --git a/modules/perl_plus/perl_plus_impl.h b/modules/perl_plus/perl_plus_impl.h
new file mode 100644
index 0000000..acf8923
--- /dev/null
+++ b/modules/perl_plus/perl_plus_impl.h
@@ -0,0 +1,7 @@
+#ifndef _PERL_PLUS_IMPL_H_
+#define _PERL_PLUS_IMPL_H_ 1
+
+void print_load_message(void);
+void print_unload_message(void);
+
+#endif /* _PERL_PLUS_IMPL_H_ */
diff --git a/modules/perl_plus/perl_plus_irssi.h b/modules/perl_plus/perl_plus_irssi.h
new file mode 100644
index 0000000..4fd2a2e
--- /dev/null
+++ b/modules/perl_plus/perl_plus_irssi.h
@@ -0,0 +1,51 @@
+
+/*
+ * Copyright (c) 2009 Alexander Færøy <ahf@irssi.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef GUARD_TEST_IRSSI_H
+#define GUARD_TEST_IRSSI_H 1
+
+/* FIXME: bug */
+#define UOFF_T_LONG_LONG 1
+
+/* #include "config.h" */
+#include "core.h"
+#include "common.h"
+#include "modules.h"
+#include "commands.h"
+#include "settings.h"
+#include "printtext.h"
+#include "window-items.h"
+#include "window-activity.h"
+#include "levels.h"
+#include "servers.h"
+#include "chat-protocols.h"
+#include "channels.h"
+#include "queries.h"
+#include "nicklist.h"
+#include "chatnets.h"
+#include "servers-reconnect.h"
+#include "masks.h"
+#include "misc.h"
+#include "rawlog.h"
+#include "log.h"
+#include "ignore.h"
+#include "fe-exec.h"
+#include "pidwait.h"
+
+#endif
diff --git a/modules/test/Makefile b/modules/test/Makefile
index 8ba234d..7becf66 100644
--- a/modules/test/Makefile
+++ b/modules/test/Makefile
@@ -1,14 +1,26 @@
-CFLAGS = -Wall -O2 -Werror -g
-LDFLAGS = -avoid-version -module -bundle -flat_namespace -undefined suppress
-FIND = gfind # stupid non-gnu defaults.
-OBJECTS = test_core.o \
- test_impl.o
+### Edit these parameters ###
+# change this to 'find' if you're on a decent system.
+FIND = gfind # stupid OSX non-gnu defaults.
+# Where your irssi include files live. You might need to install an
+# 'irssi-dev' package or something like that.
IRSSI_DIST = /opt/stow/repo/irssi/include/irssi
+# probably $(HOME)/.irssi for most people.
IRSSI_USER_DIR = $(HOME)/projects/tmp/test/irssi
+MODULE_NAME = test
+
+### You shouldn't need to edit anything beyond this point ###
+
+LIB_NAME = lib$(MODULE_NAME).so
+CFLAGS = -Wall -O2 -Werror -g -DMODULE_NAME=\"$(MODULE_NAME)\"
+LDFLAGS = -avoid-version -module -bundle -flat_namespace -undefined suppress
+
+# When you start adding more components to your module, add them here.
+OBJECTS = test_core.o \
+ test_impl.o
IRSSI_INCLUDE = -I$(IRSSI_DIST) \
-I$(IRSSI_DIST)/src \
@@ -23,15 +35,15 @@ IRSSI_INCLUDE = -I$(IRSSI_DIST) \
GLIB_CFLAGS = $(shell pkg-config glib-2.0 --cflags)
-all: libtest.so
+all: $(LIB_NAME)
%.o: %.c Makefile
$(CC) $(CFLAGS) $(GLIB_CFLAGS) $(IRSSI_INCLUDE) -I. -fPIC -c $<
-libtest.so: $(OBJECTS)
+$(LIB_NAME): $(OBJECTS)
$(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $@
-install: libtest.so
+install: $(LIB_NAME)
install $< $(IRSSI_USER_DIR)/modules
clean:
diff --git a/modules/test/README.md b/modules/test/README.md
index bc98767..dff9815 100644
--- a/modules/test/README.md
+++ b/modules/test/README.md
@@ -12,9 +12,18 @@ Note that modules are significantly more effort (and less portable, without
a huge amount of effort), so Perl scripts are to be preferred in call cases
where possible.
+## Usage
+
+* Edit the Makefile as per the comments at the top.
+* `make && make install`
+* Start up a spare Irssi client (no point segfaulting your main one)
+* `/load test`
+* Party in the streets.
+
## Contributing
-Contributions to this project are welcome
+Contributions to this project are welcome (i.e.: to demonstrate more useful
+things that a module can do)
* Patches can be submitted via e-mail, or preferably via forking
and sending a pull-request using GitHub. The repository for this
@@ -31,11 +40,11 @@ Contributions to this project are welcome
## Authors
- * Alexander Færøy &lt;ahf@irssi.org&gt;
+ * Alexander Færøy <ahf@irssi.org>
Original Author of irssi-lua, who did all the hard work figuring
out the module interface stuff. Also an Irssi project committer, I
believe, so that probably counts as cheating.
- * Tom Feist `&lt;shabble+irssi@metavore.org&gt;`
-
+ * Tom Feist [shabble+irssi@metavore.org](mailto://shabble+irssi@metavore.org)
+ Chief plunderer of the modular goodness.
diff --git a/modules/test/test_core.c b/modules/test/test_core.c
index 1b5d8c8..a61c0c4 100644
--- a/modules/test/test_core.c
+++ b/modules/test/test_core.c
@@ -30,4 +30,5 @@ void test_init() {
}
void test_deinit() {
+ print_unload_message();
}
diff --git a/modules/test/test_core.h b/modules/test/test_core.h
index 4119ffc..d0d594c 100644
--- a/modules/test/test_core.h
+++ b/modules/test/test_core.h
@@ -21,8 +21,6 @@
#ifndef GUARD_TEST_CORE_H
#define GUARD_TEST_CORE_H 1
-#define MODULE_NAME "test"
-
void test_init();
void test_deinit();
diff --git a/modules/test/test_impl.c b/modules/test/test_impl.c
index b086aff..4192bfd 100644
--- a/modules/test/test_impl.c
+++ b/modules/test/test_impl.c
@@ -9,3 +9,10 @@ void print_load_message(void) {
}
+void print_unload_message(void) {
+
+ printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ "Goodbye, Cruel World. ~signed \"%s\"", MODULE_NAME);
+
+}
+
diff --git a/modules/test/test_impl.h b/modules/test/test_impl.h
index bd9b185..e5bde72 100644
--- a/modules/test/test_impl.h
+++ b/modules/test/test_impl.h
@@ -1,9 +1,7 @@
#ifndef _TEST_IMPL_H_
#define _TEST_IMPL_H_ 1
-
void print_load_message(void);
-
-
+void print_unload_message(void);
#endif /* _TEST_IMPL_H_ */
diff --git a/patches/fix-cumode_space.patch b/patches/fix-cumode_space.patch
new file mode 100644
index 0000000..9d1e728
--- /dev/null
+++ b/patches/fix-cumode_space.patch
@@ -0,0 +1,32 @@
+From 35ddd45044388fe1f26e95c43ca0d8bcf30462fe Mon Sep 17 00:00:00 2001
+From: Tom Feist <shabble@metavore.org>
+Date: Sat, 19 Mar 2011 08:09:37 +0000
+Subject: [PATCH] fix bug #795 by setting free_arg parameter correctly to false where the expando
+ expansion is a static string.
+
+---
+ src/irc/core/irc-expandos.c | 8 +++++++-
+ 1 files changed, 7 insertions(+), 1 deletions(-)
+
+diff --git a/src/irc/core/irc-expandos.c b/src/irc/core/irc-expandos.c
+index 0c0da64..df692cc 100644
+--- a/src/irc/core/irc-expandos.c
++++ b/src/irc/core/irc-expandos.c
+@@ -106,7 +106,13 @@ static char *expando_cumode_space(SERVER_REC *server, void *item, int *free_ret)
+ return "";
+
+ ret = expando_cumode(server, item, free_ret);
+- return *ret == '\0' ? " " : ret;
++
++ if (*ret == '\0') {
++ free_ret = FALSE;
++ return " ";
++ } else {
++ return ret;
++ }
+ }
+
+ static void event_join(IRC_SERVER_REC *server, const char *data,
+--
+1.7.4.1
+
diff --git a/patches/fix-signal-remove-coderef.patch b/patches/fix-signal-remove-coderef.patch
new file mode 100644
index 0000000..e2ecd19
--- /dev/null
+++ b/patches/fix-signal-remove-coderef.patch
@@ -0,0 +1,22 @@
+From f1f66db22e732ca3e5d920c64c8b904e2fb92762 Mon Sep 17 00:00:00 2001
+From: Tom Feist <shabble@metavore.org>
+Date: Fri, 8 Apr 2011 20:28:41 +0100
+Subject: [PATCH] bugfix: allow Irssi::signal_remove to work properly with coderefs
+
+
+diff --git a/src/perl/perl-signals.c b/src/perl/perl-signals.c
+index a455cfd..1652d09 100644
+--- a/src/perl/perl-signals.c
++++ b/src/perl/perl-signals.c
+@@ -434,8 +434,9 @@ static void perl_signal_remove_list_one(GSList **siglist, PERL_SIGNAL_REC *rec)
+ }
+
+ #define sv_func_cmp(f1, f2) \
+- (f1 == f2 || (SvPOK(f1) && SvPOK(f2) && \
+- strcmp((char *) SvPV_nolen(f1), (char *) SvPV_nolen(f2)) == 0))
++ ((SvROK(f1) && SvROK(f2) && SvRV(f1) == SvRV(f2)) || \
++ (SvPOK(f1) && SvPOK(f2) && \
++ strcmp((char *) SvPV_nolen(f1), (char *) SvPV_nolen(f2)) == 0))
+
+ static void perl_signal_remove_list(GSList **list, SV *func)
+ {
diff --git a/patches/reduce-timeout-bound.diff b/patches/reduce-timeout-bound.diff
new file mode 100644
index 0000000..4afc541
--- /dev/null
+++ b/patches/reduce-timeout-bound.diff
@@ -0,0 +1,24 @@
+--- a/src/perl/common/Core.xs
++++ b/src/perl/common/Core.xs
+@@ -237,8 +237,8 @@ timeout_add(msecs, func, data)
+ SV *func
+ SV *data
+ CODE:
+- if (msecs < 10) {
+- croak("Irssi::timeout() : msecs must be >= 10");
++ if (msecs < 1) {
++ croak("Irssi::timeout() : msecs must be >= 1");
+ RETVAL = -1;
+ } else {
+ RETVAL = perl_timeout_add(msecs, func, data, FALSE);
+@@ -252,8 +252,8 @@ timeout_add_once(msecs, func, data)
+ SV *func
+ SV *data
+ CODE:
+- if (msecs < 10) {
+- croak("Irssi::timeout_once() : msecs must be >= 10");
++ if (msecs < 1) {
++ croak("Irssi::timeout_once() : msecs must be >= 1");
+ RETVAL = -1;
+ } else {
+ RETVAL = perl_timeout_add(msecs, func, data, TRUE);
diff --git a/patches/remove-timeout-bound.diff b/patches/remove-timeout-bound.diff
new file mode 100644
index 0000000..df872a1
--- /dev/null
+++ b/patches/remove-timeout-bound.diff
@@ -0,0 +1,30 @@
+--- a/src/perl/common/Core.xs
++++ b/src/perl/common/Core.xs
+@@ -237,12 +237,7 @@ timeout_add(msecs, func, data)
+ SV *func
+ SV *data
+ CODE:
+- if (msecs < 10) {
+- croak("Irssi::timeout() : msecs must be >= 10");
+- RETVAL = -1;
+- } else {
+- RETVAL = perl_timeout_add(msecs, func, data, FALSE);
+- }
++ RETVAL = perl_timeout_add(msecs, func, data, FALSE);
+ OUTPUT:
+ RETVAL
+
+@@ -252,12 +247,7 @@ timeout_add_once(msecs, func, data)
+ SV *func
+ SV *data
+ CODE:
+- if (msecs < 10) {
+- croak("Irssi::timeout_once() : msecs must be >= 10");
+- RETVAL = -1;
+- } else {
+- RETVAL = perl_timeout_add(msecs, func, data, TRUE);
+- }
++ RETVAL = perl_timeout_add(msecs, func, data, TRUE);
+ OUTPUT:
+ RETVAL
+
diff --git a/prompt_info/README.pod b/prompt_info/README.pod
new file mode 100644
index 0000000..d8e3b3e
--- /dev/null
+++ b/prompt_info/README.pod
@@ -0,0 +1,273 @@
+=pod
+
+=head1 NAME
+
+uberprompt.pl
+
+=head1 DESCRIPTION
+
+This script replaces the default prompt status-bar item with one capable of
+displaying additional information, under either user control or via scripts.
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+It is recommended that you make it autoload in one of the
+L<usual ways|https://github.com/shabble/irssi-docs/wiki/Guide#Autorunning_Scripts>.
+
+=head1 SETUP
+
+If you have a custom prompt format, you may need to copy it to the
+uberprompt_format setting. See below for details.
+
+=head1 USAGE
+
+Although the script is designed primarily for other scripts to set
+status information into the prompt, the following commands are available:
+
+=over 4
+
+=item * C</prompt set [-inner|-pre|-post|only] E<lt>msgE<gt>>
+
+Sets the prompt to the given argument. Any use of C<$p> in the argument will
+be replaced by the original prompt content.
+
+A parameter corresponding to the C<UP_*> constants listed below is required, in
+the format C</prompt set -inner Hello!>
+
+=item * C</prompt clear>
+
+Clears the additional data provided to the prompt.
+
+=item * C</prompt on>
+
+Eenables the uberprompt (things may get confused if this is used
+whilst the prompt is already enabled)
+
+=item * C</prompt off>
+
+Restore the original irssi prompt and prompt_empty statusbars. unloading the
+script has the same effect.
+
+=item * C</help prompt>
+
+show help for uberprompt commands
+
+=back
+
+=head1 SETTINGS
+
+=head2 UBERPROMPT FORMAT
+
+C</set uberprompt_format E<lt>formatE<gt>>
+
+The default is C<[$*$uber]>, which is the same as the default provided in
+F<default.theme>.
+
+Changing this setting will update the prompt immediately, unlike editing your theme.
+
+An additional variable available within this format is C<$uber>, which expands to
+the content of prompt data provided with the C<UP_INNER> or C</prompt set -inner>
+placement argument.
+
+For all other placement arguments, it will expand to the empty string.
+
+B<Note:> This setting completely overrides the C<prompt="...";> line in your
+.theme file, and may cause unexpected behaviour if your theme wishes to set a
+different form of prompt. It can be simply copied from the theme file into the
+above setting.
+
+=head2 OTHER SETTINGS
+
+=over 4
+
+=item * C<uberprompt_autostart>
+
+Boolean value, which determines if uberprompt should enable itself automatically
+upon loading. If Off, it must be enabled manually with C</prompt on>. Defaults to On.
+
+=item * C<uberprompt_debug>
+
+Boolean value, which determines if uberprompt should print debugging information.
+Defaults to Off, and should probably be left that way unless requested for bug-tracing
+purposes.
+
+=item * C<uberprompt_format>
+
+String value containing the format-string which uberprompt uses to display the
+prompt. Defaults to "C<[$*$uber] >", where C<$*> is the content the prompt would
+normally display, and C<$uber> is a placeholder variable for dynamic content, as
+described in the section above.
+
+=item * C<uberprompt_load_hook>
+
+String value which can contain one or more commands to be run whenever the uberprompt
+is enabled, either via autostart, or C</prompt on>. Defaults to the empty string, in
+which case no commands are run. Some examples include:
+
+C</set uberprompt_load_hook /echo prompt enabled> or
+
+C</^sbar prompt add -after input vim_mode> for those using vim_mode.pl who want
+the command status indicator on the prompt line.
+
+=item * C<uberprompt_unload_hook>
+
+String value, defaulting to the empty string, which can contain commands which
+are executed when the uberprompt is disabled, either by unloading the script,
+or by the command C</prompt off>.
+
+=item * C<uberprompt_use_replaces>
+
+Boolean value, defaults to Off. If enabled, the format string for the prompt
+will be subject to the I<replaces> section of the theme. The most obvious
+effect of this is that bracket characters C<[ ]> are displayed in a different
+colour, typically quite dark.
+
+=back
+
+B<Note:> For both C<uberprompt_*_hook> settings above, multiple commands can
+be chained together in the form C</eval /^cmd1 ; /^cmd2>. The C<^> prevents
+any output from the commands (such as error messages) being displayed.
+
+=head2 SCRIPTING USAGE
+
+The primary purpose of uberprompt is to be used by other scripts to
+display information in a way that is not possible by printing to the active
+window or using statusbar items.
+
+The content of the prompt can be set from other scripts via the C<"change prompt">
+signal.
+
+For Example:
+
+ signal_emit 'change prompt' 'some_string', UberPrompt::UP_INNER;
+
+will set the prompt to include that content, by default 'C<[$* some_string]>'
+
+The possible position arguments are the following strings:
+
+=over 4
+
+=item * C<UP_PRE> - place the provided string before the prompt - C<$string$prompt>
+
+=item * C<UP_INNER> - place the provided string inside the prompt - C<{prompt $* $string}>
+
+=item * C<UP_POST> - place the provided string after the prompt - C<$prompt$string>
+
+=item * C<UP_ONLY> - replace the prompt with the provided string - C<$string>
+
+=back
+
+All strings may use the special variable 'C<$prompt>' to include the prompt
+verbatim at that position in the string. It is probably only useful for
+the C<UP_ONLY> mode however. '$C<prompt_nt>' will include the prompt, minus any
+trailing whitespace.
+
+=head2 CHANGE NOTIFICATIONS
+
+You can also be notified when the prompt changes in response to the previous
+signal or manual C</prompt> commands via:
+
+ signal_add 'prompt changed', sub { my ($text, $len) = @_; ... do something ... };
+
+This callback will occur whenever the contents of the prompt is changed.
+
+
+=head2 NOTES FOR SCRIPT WRITERS:
+
+The following code snippet can be used within your own script as a preamble
+to ensure that uberprompt is loaded before your script to avoid
+any issues with loading order. It first checks if uberprompt is loaded, and
+if not, attempts to load it. If the load fails, the script will die
+with an error message, otherwise it will call your app_init() function.
+
+I<---- start of snippet ---->
+
+ my $DEBUG_ENABLED = 0;
+ sub DEBUG () { $DEBUG_ENABLED }
+
+ # check we have uberprompt loaded.
+
+ sub script_is_loaded {
+ return exists($Irssi::Script::{$_[0] . '::'});
+ }
+
+ if (not script_is_loaded('uberprompt')) {
+
+ print "This script requires 'uberprompt.pl' in order to work. "
+ . "Attempting to load it now...";
+
+ Irssi::signal_add('script error', 'load_uberprompt_failed');
+ Irssi::command("script load uberprompt.pl");
+
+ unless(script_is_loaded('uberprompt')) {
+ load_uberprompt_failed("File does not exist");
+ }
+ app_init();
+ } else {
+ app_init();
+ }
+
+ sub load_uberprompt_failed {
+ Irssi::signal_remove('script error', 'load_prompt_failed');
+
+ print "Script could not be loaded. Script cannot continue. "
+ . "Check you have uberprompt.pl installed in your path and "
+ . "try again.";
+
+ die "Script Load Failed: " . join(" ", @_);
+ }
+
+I<---- end of snippet ---->
+
+=head1 AUTHORS
+
+Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+=over 4
+
+=item *
+
+Resizing the terminal rapidly whilst using this script in debug mode may cause
+irssi to crash. See bug report at http://bugs.irssi.org/index.php?do=details&task_id=772 for details.
+
+=back
+
+=head1 TODO
+
+=over 4
+
+=item * report failure (somehow) to clients if hte prompt is disabled.
+
+=item * fix issue at autorun startup with sbar item doesn't exist.
+
+=back
+
+
+
+=cut
+
diff --git a/prompt_info/input_overlay.pl b/prompt_info/old/input_overlay.pl
index 7a8dd9d..9d2a42b 100644
--- a/prompt_info/input_overlay.pl
+++ b/prompt_info/old/input_overlay.pl
@@ -27,8 +27,9 @@ my @regions;
my ($term_w, $term_h) = (0, 0);
-my $key_capture = 0;
+my $overlay_active = 0;
my $prompt_len = 5;
+my $region_id = 0;
sub DEBUG () { 1 }
@@ -56,6 +57,16 @@ sub update_terminal_size {
print "Terminal detected as $term_w cols by $term_h rows" if DEBUG;
}
+sub find_region {
+ my ($pos) = @_;
+ foreach my $region (@regions) {
+ next unless $pos > $region->{start};
+ return $region if $pos <= $region->{end};
+ }
+ print "failed to find region for pos: $pos";
+ return undef;
+}
+
sub redraw_overlay {
# TODO: we can't assume the active win is the only one with overlays.
#Irssi::active_win->view->redraw();
@@ -90,55 +101,25 @@ sub intercept_keypress {
}
-sub new_region {
- my $key = shift;
- print "Creating new Region";
- my $new_region
- = {
- text => '',
- start => _pos() -1,
- style => '%_',
- open => 1,
- draw => 1,
- };
-
- insert_into_region($key, $new_region);
-
- push @regions, $new_region;
-}
-
-sub insert_into_region {
- my ($key, $region) = @_;
-
- # if ($key == 127) { # backspace
- # substr($region->{text}, -1, 1) = '';
- # } else {
- # $region->{text} .= chr $key;
- # }
- my $input = Irssi::parse_special('$L');
- my $len = _pos() - $region->{start};
-# print "Input: $input, len: $len" if DEBUG;
-
- my $str = substr($input, $region->{start} , $len);
-# print "Str: $str" if DEBUG;
- $region->{text} = $str;
-
- # printf("region [%d-%d] now contains '%s'",
- # $region->{start}, _pos(),
- # $region->{text}) if DEBUG;
-}
-
sub observe_keypress {
my $key = shift;
- if ($key_capture && $key > 31 && $key <= 127) {
+ print "Key " . chr ($key) . " pressed, pos: " . _pos();
+ if ($key > 31 && $key <= 127) {
# see if we're still appending to the last region:
#print "Observed printable key: " . chr($key) if DEBUG;
#print '';
my $latest_region = $regions[-1];
$latest_region = {} unless defined $latest_region;
- if (not $latest_region->{open}) {
- new_region($key);
+
+ my $pos = _pos();
+ my $reg = find_region($pos);
+
+ if (defined $reg) {
+ insert_into_region($key, $reg);
+ } elsif (not $latest_region->{open}) {
+ my $style = $overlay_active?'%_':'';
+ new_region($style, $key);
} else {
insert_into_region($key, $latest_region);
}
@@ -148,6 +129,7 @@ sub observe_keypress {
redraw_overlay();
}
}
+
sub init {
die "This script requires uberprompt.pl"
@@ -160,8 +142,7 @@ sub init {
Irssi::signal_add ('terminal resized', \&update_terminal_size);
Irssi::signal_add_first('gui print text finished', \&augment_redraw);
- Irssi::command_bind('region_start', \&region_toggle);
- Irssi::command('/bind ^C /region_start');
+ setup_bindings();
Irssi::signal_add('prompt changed', sub {
print "Updated prompt length: $_[1]";
@@ -173,22 +154,119 @@ sub init {
update_terminal_size();
}
+sub setup_bindings {
+
+ Irssi::command_bind('region_start', \&region_toggle);
+ Irssi::command_bind('region_clear', \&region_clear);
+ Irssi::command_bind('region_print', \&print_regions);
+
+
+ Irssi::command('/bind ^C /region_start');
+ ##Irssi::command('/bind ^D /region_clear');
+ Irssi::command('/bind ^D /region_print');
+
+}
+
+
+################################################################################
+
+sub escape_style {
+ my ($style) = @_;
+ $style =~ s/%/%%/g;
+
+ return $style;
+}
+
+sub print_regions {
+ foreach my $reg (@regions) {
+ printf("start: %d end: %d style: %s, text: \"%s\", open: %d, draw: %d",
+ $reg->{start}, $reg->{end}, escape_style($reg->{style}),
+ $reg->{text}, $reg->{open}, $reg->{draw});
+ }
+}
+
+sub new_region {
+ my ($style, $key) = @_;
+
+ my $new_id = $region_id++;
+ _debug("Creating new Region: $new_id");
+
+ my $new_region
+ = {
+ id => $region_id++,
+ text => '',
+ start => _pos(),
+ end => _pos(),
+ style => $style,
+ open => 1,
+ draw => 1,
+ };
+
+ insert_into_region($key, $new_region);
+
+ push @regions, $new_region;
+}
+
+sub delete_region {
+ my ($region) = @_;
+ my $idx = 0;
+ foreach my $i (0..$#regions) {
+ if ($regions[$i]->{id} == $region->{id}) {
+ $idx = $i;
+ last;
+ }
+ }
+ print "Deleting region: $idx";
+ splice(@regions, $idx, 1); # remove the selected region.
+}
+
+sub insert_into_region {
+ my ($key, $region) = @_;
+
+ my $pos = _pos();
+
+ if ($key == 127) { # backspace
+ substr($region->{text}, -1, 1) = '';
+ $region->{end}--;
+ if ($region->{end} <= $region->{start}) {
+ delete_region($region);
+ }
+ } else {
+ printf("text: '%s', pos: %d, offset: %d",
+ $region->{text}, $pos, $pos - $region->{start});
+ if ( $region->{end} < $pos) {
+ $region->{text} .= chr $key;
+ } else {
+ substr($region->{text}, $pos - $region->{start}, 0) = chr $key;
+ }
+ $region->{end}++;
+ }
+}
+
+sub region_clear {
+ @regions = ();
+ Irssi::signal_emit('command redraw');
+}
+
sub region_toggle {
- $key_capture = not $key_capture;
- printf("Region is %sactive", $key_capture?'':'in');
+ $overlay_active = not $overlay_active;
+ _debug("Region is %sactive", $overlay_active?'':'in');
#@regions = ();
# terminate the previous region
- my $latest_region = $regions[-1];
- if (defined $latest_region) {
- $latest_region->{open} = 0;
+
+ my $region = find_region(_pos());
+ if (defined $region) {
+ $region->{open} = 0;
+ $region->{end} = _pos();
+ debug("Region closed: %d-%d", $region->{start}, $region->{end});
}
}
sub script_is_loaded {
my $name = shift;
- print "Checking if $name is loaded" if DEBUG;
+ _debug("Checking if $name is loaded");
no strict 'refs';
- my $retval = defined %{ "Irssi::Script::${name}::" };
+ my $retval = %{ "Irssi::Script::${name}::" };
use strict 'refs';
return $retval;
@@ -198,5 +276,13 @@ sub _pos {
return Irssi::gui_input_get_pos();
}
+sub _input {
+ return Irssi::parse_special('$L');
+}
+
+sub _debug {
+ printf @_ if DEBUG();
+}
+
init();
diff --git a/prompt_info/overlays.pl b/prompt_info/old/overlays.pl
index b3299e9..b3299e9 100644
--- a/prompt_info/overlays.pl
+++ b/prompt_info/old/overlays.pl
diff --git a/prompt_info/prompt_info.pl b/prompt_info/old/prompt_info.pl
index 8ad63ba..8ad63ba 100644
--- a/prompt_info/prompt_info.pl
+++ b/prompt_info/old/prompt_info.pl
diff --git a/prompt_info/prompt_replace.pl b/prompt_info/old/prompt_replace.pl
index 30120f7..30120f7 100644
--- a/prompt_info/prompt_replace.pl
+++ b/prompt_info/old/prompt_replace.pl
diff --git a/prompt_info/visual.pl b/prompt_info/old/visual.pl
index b29875b..b29875b 100644
--- a/prompt_info/visual.pl
+++ b/prompt_info/old/visual.pl
diff --git a/prompt_info/uberprompt.pl b/prompt_info/uberprompt.pl
index c1c4a55..62bda13 100644
--- a/prompt_info/uberprompt.pl
+++ b/prompt_info/uberprompt.pl
@@ -1,123 +1,282 @@
-# This script replaces the default prompt status-bar item with one capable
-# of displaying additional information, under either user control or via
-# scripts.
-#
-# INSTALL:
-#
-# Place script in ~/.irssi/scripts/ and potentially symlink into autorun/
-# to ensure it starts at irssi startup.
-#
-# If not using autorun, manually load the script via:
-#
-# /script load uberprompt.pl
-#
-# If you have a custom prompt format, you may need to copy it to the
-# uberprompt_format setting. See below for details.
-#
-# USAGE:
-#
-# Although the script is designed primarily for other scripts to set
-# status information into the prompt, the following commands are available:
-#
-# TODO: Document positional settings.
-#
-# /prompt set - sets the prompt to the given argument. $p in the argument will
-# be replaced by the original prompt content.
-# /prompt clear - clears the additional data provided to the prompt.
-# /prompt on - enables the uberprompt (things may get confused if this is used
-# whilst the prompt is already enabled)
-# /prompt off - restore the original irssi prompt and prompt_empty statusbars.
-# unloading the script has the same effect.
-#
-# Additionally, the format for the prompt can be set via:
-#
-# UBERPROMPT FORMAT:
-#
-# /set uberprompt_format <format>
-#
-# The default is [$*], which is the same as the default provided in default.theme.
-# Changing this setting will update the prompt immediately, unlike editing your theme.
-#
-# An additional variable available within this format is '$uber', which expands to
-# the content of prompt data provided with the UP_INNER placement argument. For all
-# other placement arguments, it will expand to the empty string ''.
-#
-# NOTE: this setting completely overrides the prompt="..." line in your .theme
-# file, and may cause unexpected behaviour if your theme wishes to set a
-# different form of prompt. It can be simply copied from the theme file into
-# the above setting.
-#
-# Usage from other Scripts: signal 'change prompt' => 'string' => position
-#
-# eg:
-#
-# signal_emit 'change prompt' 'some_string', UberPrompt::UP_INNER;
-#
-# will set the prompt to include that content, by default '[$* some_string]'
-#
-# The possible position arguments are the following strings:
-#
-# UP_PRE - place the provided string before the prompt -- $string$prompt
-# UP_INNER - place the provided string inside the prompt -- {prompt $* $string}
-# UP_POST - place the provided string after the prompt -- $prompt$string
-# UP_ONLY - replace the prompt with the provided string -- $string
-#
-# All strings may use the special variable '$prompt' to include the prompt
-# verbatim at that position in the string. It is probably only useful for
-# the UP_ONLY mode however. '$prompt_nt' will include the prompt, minus any
-# trailing whitespace.
-#
-# NOTIFICATIONS:
-#
-# You can also be notified when the prompt changes in response to the previous
-# signal or manual commands via:
-#
-# signal_add 'prompt changed', sub { my ($text, $len) = @_; ... do something ... };
-#
-# Bugs:
-#
-# * Resizing the terminal rapidly whilst using this script in debug mode
-# may cause irssi to crash. See bug report at
-# http://bugs.irssi.org/index.php?do=details&task_id=772 for details.
-#
-# TODO:
-#
-# * report failure (somehow) to clients if hte prompt is disabled.
-# * fix issue at autorun startup with sbar item doesn't exist.
-#
-#
-#
-#
-# LICENCE:
-#
-# Copyright (c) 2010 Tom Feist
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
+=pod
+
+=head1 NAME
+
+uberprompt.pl
+
+=head1 DESCRIPTION
+
+This script replaces the default prompt status-bar item with one capable of
+displaying additional information, under either user control or via scripts.
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+It is recommended that you make it autoload in one of the
+L<usual ways|https://github.com/shabble/irssi-docs/wiki/Guide#Autorunning_Scripts>.
+
+=head1 SETUP
+
+If you have a custom prompt format, you may need to copy it to the
+uberprompt_format setting. See below for details.
+
+=head1 USAGE
+
+Although the script is designed primarily for other scripts to set
+status information into the prompt, the following commands are available:
+
+=over 4
+
+=item * C</prompt set [-inner|-pre|-post|only] E<lt>msgE<gt>>
+
+Sets the prompt to the given argument. Any use of C<$p> in the argument will
+be replaced by the original prompt content.
+
+A parameter corresponding to the C<UP_*> constants listed below is required, in
+the format C</prompt set -inner Hello!>
+
+=item * C</prompt clear>
+
+Clears the additional data provided to the prompt.
+
+=item * C</prompt on>
+
+Eenables the uberprompt (things may get confused if this is used
+whilst the prompt is already enabled)
+
+=item * C</prompt off>
+
+Restore the original irssi prompt and prompt_empty statusbars. unloading the
+script has the same effect.
+
+=item * C</help prompt>
+
+show help for uberprompt commands
+
+=back
+
+=head1 SETTINGS
+
+=head2 UBERPROMPT FORMAT
+
+C</set uberprompt_format E<lt>formatE<gt>>
+
+The default is C<[$*$uber]>, which is the same as the default provided in
+F<default.theme>.
+
+Changing this setting will update the prompt immediately, unlike editing your theme.
+
+An additional variable available within this format is C<$uber>, which expands to
+the content of prompt data provided with the C<UP_INNER> or C</prompt set -inner>
+placement argument.
+
+For all other placement arguments, it will expand to the empty string.
+
+B<Note:> This setting completely overrides the C<prompt="...";> line in your
+.theme file, and may cause unexpected behaviour if your theme wishes to set a
+different form of prompt. It can be simply copied from the theme file into the
+above setting.
+
+=head2 OTHER SETTINGS
+
+=over 4
+
+=item * C<uberprompt_autostart>
+
+Boolean value, which determines if uberprompt should enable itself automatically
+upon loading. If Off, it must be enabled manually with C</prompt on>. Defaults to On.
+
+=item * C<uberprompt_debug>
+
+Boolean value, which determines if uberprompt should print debugging information.
+Defaults to Off, and should probably be left that way unless requested for bug-tracing
+purposes.
+
+=item * C<uberprompt_format>
+
+String value containing the format-string which uberprompt uses to display the
+prompt. Defaults to "C<[$*$uber] >", where C<$*> is the content the prompt would
+normally display, and C<$uber> is a placeholder variable for dynamic content, as
+described in the section above.
+
+=item * C<uberprompt_load_hook>
+
+String value which can contain one or more commands to be run whenever the uberprompt
+is enabled, either via autostart, or C</prompt on>. Defaults to the empty string, in
+which case no commands are run. Some examples include:
+
+C</set uberprompt_load_hook /echo prompt enabled> or
+
+C</^sbar prompt add -after input vim_mode> for those using vim_mode.pl who want
+the command status indicator on the prompt line.
+
+=item * C<uberprompt_unload_hook>
+
+String value, defaulting to the empty string, which can contain commands which
+are executed when the uberprompt is disabled, either by unloading the script,
+or by the command C</prompt off>.
+
+=item * C<uberprompt_use_replaces>
+
+Boolean value, defaults to Off. If enabled, the format string for the prompt
+will be subject to the I<replaces> section of the theme. The most obvious
+effect of this is that bracket characters C<[ ]> are displayed in a different
+colour, typically quite dark.
+
+=back
+
+B<Note:> For both C<uberprompt_*_hook> settings above, multiple commands can
+be chained together in the form C</eval /^cmd1 ; /^cmd2>. The C<^> prevents
+any output from the commands (such as error messages) being displayed.
+
+=head2 SCRIPTING USAGE
+
+The primary purpose of uberprompt is to be used by other scripts to
+display information in a way that is not possible by printing to the active
+window or using statusbar items.
+
+The content of the prompt can be set from other scripts via the C<"change prompt">
+signal.
+
+For Example:
+
+ signal_emit 'change prompt' 'some_string', UberPrompt::UP_INNER;
+
+will set the prompt to include that content, by default 'C<[$* some_string]>'
+
+The possible position arguments are the following strings:
+
+=over 4
+
+=item * C<UP_PRE> - place the provided string before the prompt - C<$string$prompt>
+
+=item * C<UP_INNER> - place the provided string inside the prompt - C<{prompt $* $string}>
+
+=item * C<UP_POST> - place the provided string after the prompt - C<$prompt$string>
+
+=item * C<UP_ONLY> - replace the prompt with the provided string - C<$string>
+
+=back
+
+All strings may use the special variable 'C<$prompt>' to include the prompt
+verbatim at that position in the string. It is probably only useful for
+the C<UP_ONLY> mode however. '$C<prompt_nt>' will include the prompt, minus any
+trailing whitespace.
+
+=head2 CHANGE NOTIFICATIONS
+
+You can also be notified when the prompt changes in response to the previous
+signal or manual C</prompt> commands via:
+
+ signal_add 'prompt changed', sub { my ($text, $len) = @_; ... do something ... };
+
+This callback will occur whenever the contents of the prompt is changed.
+
+
+=head2 NOTES FOR SCRIPT WRITERS:
+
+The following code snippet can be used within your own script as a preamble
+to ensure that uberprompt is loaded before your script to avoid
+any issues with loading order. It first checks if uberprompt is loaded, and
+if not, attempts to load it. If the load fails, the script will die
+with an error message, otherwise it will call your app_init() function.
+
+I<---- start of snippet ---->
+
+ my $DEBUG_ENABLED = 0;
+ sub DEBUG () { $DEBUG_ENABLED }
+
+ # check we have uberprompt loaded.
+
+ sub script_is_loaded {
+ return exists($Irssi::Script::{$_[0] . '::'});
+ }
+
+ if (not script_is_loaded('uberprompt')) {
+
+ print "This script requires 'uberprompt.pl' in order to work. "
+ . "Attempting to load it now...";
+
+ Irssi::signal_add('script error', 'load_uberprompt_failed');
+ Irssi::command("script load uberprompt.pl");
+
+ unless(script_is_loaded('uberprompt')) {
+ load_uberprompt_failed("File does not exist");
+ }
+ app_init();
+ } else {
+ app_init();
+ }
+
+ sub load_uberprompt_failed {
+ Irssi::signal_remove('script error', 'load_prompt_failed');
+
+ print "Script could not be loaded. Script cannot continue. "
+ . "Check you have uberprompt.pl installed in your path and "
+ . "try again.";
+
+ die "Script Load Failed: " . join(" ", @_);
+ }
+
+I<---- end of snippet ---->
+
+=head1 AUTHORS
+
+Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+=over 4
+
+=item *
+
+Resizing the terminal rapidly whilst using this script in debug mode may cause
+irssi to crash. See bug report at http://bugs.irssi.org/index.php?do=details&task_id=772 for details.
+
+=back
+
+=head1 TODO
+
+=over 4
+
+=item * report failure (somehow) to clients if hte prompt is disabled.
+
+=item * fix issue at autorun startup with sbar item doesn't exist.
+
+=back
+
+=cut
use strict;
use warnings;
use Irssi;
-use Irssi::TextUI; # for sbar_items_redraw
+use Irssi::TextUI;
use Data::Dumper;
-{ package Irssi::Nick }
+{ package Irssi::Nick } # magic.
our $VERSION = "0.2";
our %IRSSI =
@@ -150,6 +309,8 @@ my $emit_request = 0;
my $expando_refresh_timer;
my $expando_vars = {};
+my $init_callbacks = {load => '', unload => ''};
+
pre_init();
sub pre_init {
@@ -159,10 +320,63 @@ sub pre_init {
sub prompt_subcmd_handler {
my ($data, $server, $item) = @_;
- $data =~ s/\s+$//g; # strip trailing whitespace.
+ #$data =~ s/\s+$//g; # strip trailing whitespace.
Irssi::command_runsub('prompt', $data, $server, $item);
}
+sub _error($) {
+ my ($msg) = @_;
+ Irssi::active_win->print($msg, MSGLEVEL_CLIENTERROR);
+}
+
+sub _debug_print($) {
+ return unless DEBUG;
+ my ($msg) = @_;
+ Irssi::active_win->print($msg, MSGLEVEL_CLIENTCRAP);
+}
+
+sub _print_help {
+ my ($args) = @_;
+ if ($args =~ m/^\s*prompt/i) {
+ my @help_lines =
+ (
+ "",
+ "PROMPT ON",
+ "PROMPT OFF",
+ "PROMPT CLEAR",
+ "PROMPT SET { -pre | -post | -only | -inner } <content>",
+ "",
+ "Commands for manipulating the UberPrompt.",
+ "",
+ "/PROMPT ON enables uberprompt, replacing the existing prompt ",
+ " statusbar-item",
+ "/PROMPT OFF disables it, and restores the original prompt item",
+ "/PROMPT CLEAR resets the value of any additional data set by /PROMPT SET",
+ " or a script",
+ "/PROMPT SET changes the contents of the prompt, according to the mode",
+ " and content provided.",
+ " { -inner sets the value of the \$uber psuedo-variable in the",
+ " /set uberprompt_format setting.",
+ " | -pre places the content before the current prompt string",
+ " | -post places the content after the prompt string",
+ " | -only replaces the entire prompt contents with the given string }",
+ "",
+ "See Also:",
+ '',
+ '/SET uberprompt_format -- defaults to [$*$uber]',
+ "/SET uberprompt_autostart -- determines whether /PROMPT ON is run",
+ " automatically when the script loads",
+ "/set uberprompt_use_replaces -- toggles the use of the current theme",
+ " \"replaces\" setting. Especially",
+ " noticeable on brackets \"[ ]\" ",
+ "",
+ );
+
+ Irssi::print($_, MSGLEVEL_CLIENTCRAP) for @help_lines;
+ Irssi::signal_stop;
+ }
+}
+
sub UNLOAD {
deinit();
}
@@ -171,11 +385,14 @@ sub exp_lbrace() { '{' }
sub exp_rbrace() { '}' }
sub deinit {
- Irssi::expando_destroy('brace');
+ Irssi::expando_destroy('lbrace');
+ Irssi::expando_destroy('rbrace');
+
# remove uberprompt and return the original ones.
print "Removing uberprompt and restoring original";
restore_prompt_items();
}
+
sub init {
Irssi::statusbar_item_register('uberprompt', 0, 'uberprompt_draw');
@@ -183,7 +400,11 @@ sub init {
Irssi::expando_create('lbrace', \&exp_lbrace, {});
Irssi::expando_create('rbrace', \&exp_rbrace, {});
- Irssi::settings_add_str('uberprompt', 'uberprompt_format', '[$*$uber] ');
+ Irssi::settings_add_str ('uberprompt', 'uberprompt_format', '[$*$uber] ');
+
+ Irssi::settings_add_str ('uberprompt', 'uberprompt_load_hook', '');
+ Irssi::settings_add_str ('uberprompt', 'uberprompt_unload_hook', '');
+
Irssi::settings_add_bool('uberprompt', 'uberprompt_debug', 0);
Irssi::settings_add_bool('uberprompt', 'uberprompt_autostart', 1);
Irssi::settings_add_bool('uberprompt', 'uberprompt_use_replaces', 0);
@@ -192,18 +413,17 @@ sub init {
Irssi::command_bind("prompt", \&prompt_subcmd_handler);
Irssi::command_bind('prompt on', \&replace_prompt_items);
Irssi::command_bind('prompt off', \&restore_prompt_items);
- Irssi::command_bind('prompt set',
- sub {
- my $args = shift;
- $args =~ s/^\s*(\w+)\s*(.*$)/$2/;
- my $mode = 'UP_' . uc($1);
- Irssi::signal_emit 'change prompt', $args, $mode;
- });
+ Irssi::command_bind('prompt set', \&cmd_prompt_set);
Irssi::command_bind('prompt clear',
sub {
Irssi::signal_emit 'change prompt', '$p', 'UP_POST';
});
+ my $prompt_set_args_format = "inner pre post only";
+ Irssi::command_set_options('prompt set', $prompt_set_args_format);
+
+ Irssi::command_bind('help', \&_print_help);
+
Irssi::signal_add('setup changed', \&reload_settings);
# intialise the prompt format.
@@ -239,6 +459,27 @@ sub init {
Irssi::signal_add('prompt length request', \&length_request_handler);
}
+sub cmd_prompt_set {
+ my $args = shift;
+ my @options_list = Irssi::command_parse_options "prompt set", $args;
+ if (@options_list) {
+ my ($options, $rest) = @options_list;
+
+ my @opt_modes = keys %$options;
+ if (@opt_modes != 1) {
+ _error '%_/prompt set%_ must specify exactly one mode of'
+ . ' {-inner, -only, -pre, -post}';
+ return;
+ }
+
+ my $mode = 'UP_' . uc($opt_modes[0]);
+
+ Irssi::signal_emit 'change prompt', $rest, $mode;
+ } else {
+ _error ('%_/prompt set%_ must specify a mode {-inner, -only, -pre, -post}');
+ }
+}
+
sub refresh_if_me {
my ($channel, $nick) = @_;
@@ -254,9 +495,9 @@ sub refresh_if_me {
return unless $my_chan and $my_nick;
- print "Chan: $channel->{name}, "
+ _debug_print "Chan: $channel->{name}, "
. "nick: $nick->{nick}, "
- . "me: $my_nick, chan: $my_chan" if DEBUG;
+ . "me: $my_nick, chan: $my_chan";
if ($my_chan eq $channel->{name} and $my_nick eq $nick->{nick}) {
uberprompt_refresh();
@@ -271,21 +512,24 @@ sub length_request_handler {
sub reload_settings {
- $use_replaces = Irssi::settings_get_bool('uberprompt_use_replaces');
-
+ $use_replaces = Irssi::settings_get_bool('uberprompt_use_replaces');
$DEBUG_ENABLED = Irssi::settings_get_bool('uberprompt_debug');
+ $init_callbacks = {
+ load => Irssi::settings_get_str('uberprompt_load_hook'),
+ unload => Irssi::settings_get_str('uberprompt_unload_hook'),
+ };
+
if (DEBUG) {
Irssi::signal_add 'prompt changed', 'debug_prompt_changed';
} else {
Irssi::signal_remove 'prompt changed', 'debug_prompt_changed';
}
-
my $new = Irssi::settings_get_str('uberprompt_format');
if ($prompt_format ne $new) {
- print "Updated prompt format" if DEBUG;
+ _debug_print("Updated prompt format");
$prompt_format = $new;
$prompt_format =~ s/\$uber/\$\$uber/;
Irssi::abstracts_register(['uberprompt', $prompt_format]);
@@ -296,7 +540,7 @@ sub reload_settings {
# an update timer or something, rather than just refreshing on
# every possible activity in init()
while ($prompt_format =~ m/(?<!\$)(\$[A-Za-z,.:;][a-z_]*)/g) {
- print "Detected Irssi expando variable $1" if DEBUG;
+ _debug_print("Detected Irssi expando variable $1");
my $var_name = substr $1, 1; # strip the $
$expando_vars->{$var_name} = Irssi::parse_special($1);
}
@@ -308,7 +552,7 @@ sub debug_prompt_changed {
$text =~ s/%/%%/g;
- print "DEBUG: Got $text, length: $len";
+ print "DEBUG_HANDLER: Prompt Changed to: \"$text\", length: $len";
}
sub change_prompt_handler {
@@ -317,7 +561,7 @@ sub change_prompt_handler {
# fix for people who used prompt_info and hence the signal won't
# pass the second argument.
$pos = 'UP_INNER' unless defined $pos;
- print "Got prompt change signal with: $text, $pos" if DEBUG;
+ _debug_print("Got prompt change signal with: $text, $pos");
my ($changed_text, $changed_pos);
$changed_text = defined $prompt_data ? $prompt_data ne $text : 1;
@@ -327,7 +571,7 @@ sub change_prompt_handler {
$prompt_data_pos = $pos;
if ($changed_text || $changed_pos) {
- print "Redrawing prompt" if DEBUG;
+ _debug_print("Redrawing prompt");
uberprompt_refresh();
}
}
@@ -337,8 +581,8 @@ sub _escape_prompt_special {
$str =~ s/\$/\$\$/g;
$str =~ s/\\/\\\\/g;
#$str =~ s/%/%%/g;
- $str =~ s/{/\$lbrace/g;
- $str =~ s/}/\$rbrace/g;
+ $str =~ s/{/\${lbrace}/g;
+ $str =~ s/}/\${rbrace}/g;
return $str;
}
@@ -356,7 +600,7 @@ sub uberprompt_render_prompt {
}
my $prompt = ''; # rendered content of the prompt.
- my $theme = Irssi::current_theme;
+ my $theme = Irssi::current_theme;
my $arg = $use_replaces ? 0 : Irssi::EXPAND_FLAG_IGNORE_REPLACES;
$prompt = $theme->format_expand("{uberprompt $prompt_arg}", $arg);
@@ -392,12 +636,12 @@ sub uberprompt_render_prompt {
}
}
- #print "Redrawing with: $prompt, size-only: $get_size_only" if DEBUG;
+ _debug_print("rendering with: $prompt");
if (($prompt ne $prompt_last) or $emit_request) {
- # print "Emitting prompt changed signal" if DEBUG;
+ # _debug_print("Emitting prompt changed signal");
# my $exp = Irssi::current_theme()->format_expand($text, 0);
my $ps = Irssi::parse_special($prompt);
@@ -413,7 +657,7 @@ sub uberprompt_draw {
my $prompt = uberprompt_render_prompt();
my $ret = $sb_item->default_handler($get_size_only, $prompt, '', 0);
-
+ _debug_print("redrawing with: $prompt");
return $ret;
}
@@ -423,7 +667,7 @@ sub uberprompt_refresh {
sub replace_prompt_items {
# remove existing ones.
- print "Removing original prompt" if DEBUG;
+ _debug_print("Removing original prompt");
_sbar_command('prompt', 'remove', 'prompt');
_sbar_command('prompt', 'remove', 'prompt_empty');
@@ -434,15 +678,37 @@ sub replace_prompt_items {
qw/-alignment left -before input -priority '-1'/);
_sbar_command('prompt', 'position', '100');
+
+ my $load_hook = $init_callbacks->{load};
+ if (defined $load_hook and length $load_hook) {
+ eval {
+ Irssi::command($load_hook);
+ };
+ if ($@) {
+ _error("Uberprompt user load-hook command ($load_hook) failed: $@");
+ }
+ }
+
}
sub restore_prompt_items {
_sbar_command('prompt', 'remove', 'uberprompt');
- print "Restoring original prompt" if DEBUG;
+ _debug_print("Restoring original prompt");
_sbar_command('prompt', 'reset');
+
+ my $unload_hook = $init_callbacks->{unload};
+
+ if (defined $unload_hook and length $unload_hook) {
+ eval {
+ Irssi::command($unload_hook);
+ };
+ if ($@) {
+ _error("Uberprompt user unload-hook command ($unload_hook) failed: $@");
+ }
+ }
}
sub _sbar_command {
@@ -455,7 +721,7 @@ sub _sbar_command {
my $command = sprintf 'STATUSBAR %s %s %s%s',
$bar, $cmd, $args_str, defined $item ? $item : '';
- print "Running command: $command" if DEBUG;
+ _debug_print("Running command: $command");
Irssi::command($command);
}
diff --git a/quit-notify/README.pod b/quit-notify/README.pod
new file mode 100644
index 0000000..71a37af
--- /dev/null
+++ b/quit-notify/README.pod
@@ -0,0 +1,97 @@
+=pod
+
+=head1 NAME
+
+notifyquit.pl
+
+=head1 DESCRIPTION
+
+A script intended to alert people to the fact that their conversation partners
+have quit or left the channel, especially useful in high-traffic channels, or
+where you have C<JOINS PARTS QUITS> ignored.
+
+=head1 INSTALLATION
+
+This script requires that you have first installed and loaded F<uberprompt.pl>
+
+Uberprompt can be downloaded from:
+
+L<https://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl>
+
+and follow the instructions at the top of that file or its README for installation.
+
+If uberprompt.pl is available, but not loaded, this script will make one
+attempt to load it before giving up. This eliminates the need to precisely
+arrange the startup order of your scripts.
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<notifyquit.pl>>.
+
+=head1 SETUP
+
+This script provides a single setting:
+
+C</SET notifyquit_exceptions>, which defaults to "C</^https?/ /^ftp/>"
+
+The setting is a space-separated list of regular expressions in the format
+C</EXPR/>. If the extracted nickname matches any of these patterns, it isa
+assumed to be a false-positive match, and is sent to the channel with no
+further confirmation.
+
+=head1 USAGE
+
+When responding to users in a channel in the format C<$theirnick: some message>
+(where the C<:> is not necessarily a colon, but the value of your
+C<completion_char> setting), this script will check that the nickname still
+exists in the channel, and will prompt you for confirmation if they have
+since left.
+
+It is intended for use for people who ignore C<JOINS PARTS QUITS>, etc, and
+try to respond to impatient people, or those with a bad connection.
+
+To send the message once prompted, either hit C<enter>, or C<y>. Pressing C<n>
+will abort sending, but leave the message in your input buffer just in case
+you want to keep it.
+
+=head1 AUTHORS
+
+Original Copyright E<copy> 2011 Jari Matilainen C<E<lt>vague!#irssi@freenodeE<gt>>
+
+Some extra bits
+Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+I<None known.>
+
+Please report any problems to L<https://github.com/shabble/irssi-scripts/issues/new>
+or moan about it in C<#irssi@Freenode>.
+
+=head1 TODO
+
+=over 4
+
+=item * Keep a watchlist of nicks in the channel, and only act to confirm if
+they quit shortly before/during you typing a response.
+
+keep track of the most recent departures, and upon sending, see if one of them
+is your target. If so, prompt for confirmation.
+
+So, add them on quit/kick/part, and remove them after a tiemout.
+
+=back
+
+
+
+=cut
+
diff --git a/quit-notify/notifyquit.pl b/quit-notify/notifyquit.pl
new file mode 100644
index 0000000..3958a39
--- /dev/null
+++ b/quit-notify/notifyquit.pl
@@ -0,0 +1,484 @@
+=pod
+
+=head1 NAME
+
+notifyquit.pl
+
+=head1 DESCRIPTION
+
+A script intended to alert people to the fact that their conversation partners
+have quit or left the channel, especially useful in high-traffic channels, or
+where you have C<JOINS PARTS QUITS> ignored.
+
+=head1 INSTALLATION
+
+This script requires that you have first installed and loaded F<uberprompt.pl>
+
+Uberprompt can be downloaded from:
+
+L<https://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl>
+
+and follow the instructions at the top of that file or its README for installation.
+
+If uberprompt.pl is available, but not loaded, this script will make one
+attempt to load it before giving up. This eliminates the need to precisely
+arrange the startup order of your scripts.
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<notifyquit.pl>>.
+
+=head1 SETUP
+
+This script provides a single setting:
+
+C</SET notifyquit_exceptions>, which defaults to "C</^https?/ /^ftp/>"
+
+The setting is a space-separated list of regular expressions in the format
+C</EXPR/>. If the extracted nickname matches any of these patterns, it isa
+assumed to be a false-positive match, and is sent to the channel with no
+further confirmation.
+
+=head1 USAGE
+
+When responding to users in a channel in the format C<$theirnick: some message>
+(where the C<:> is not necessarily a colon, but the value of your
+C<completion_char> setting), this script will check that the nickname still
+exists in the channel, and will prompt you for confirmation if they have
+since left.
+
+It is intended for use for people who ignore C<JOINS PARTS QUITS>, etc, and
+try to respond to impatient people, or those with a bad connection.
+
+To send the message once prompted, either hit C<enter>, or C<y>. Pressing C<n>
+will abort sending, but leave the message in your input buffer just in case
+you want to keep it.
+
+=head1 AUTHORS
+
+Original Copyright E<copy> 2011 Jari Matilainen C<E<lt>vague!#irssi@freenodeE<gt>>
+
+Some extra bits
+Copyright E<copy> 2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>>
+
+=head1 LICENCE
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+I<None known.>
+
+Please report any problems to L<https://github.com/shabble/irssi-scripts/issues/new>
+or moan about it in C<#irssi@Freenode>.
+
+=head1 TODO
+
+=over 4
+
+=item * Keep a watchlist of nicks in the channel, and only act to confirm if
+they quit shortly before/during you typing a response.
+
+keep track of the most recent departures, and upon sending, see if one of them
+is your target. If so, prompt for confirmation.
+
+So, add them on quit/kick/part, and remove them after a tiemout.
+
+=back
+
+=cut
+
+###
+#
+# Parts of the script pertaining to uberprompt borrowed from
+# shabble (shabble!#irssi/@Freenode), thanks for letting me steal from you :P
+#
+###
+
+use strict;
+use warnings;
+use Data::Dumper;
+
+our $VERSION = "0.3";
+our %IRSSI = (
+ authors => "Jari Matilainen",
+ contact => 'vague!#irssi@freenode',
+ name => "notifyquit",
+ description => "Notify if user has left the channel",
+ license => "Public Domain",
+ url => "http://vague.se"
+ );
+
+my $active = 0;
+my $permit_pending = 0;
+my $pending_input = {};
+my $verbose = 0;
+my @match_exceptions;
+my $watchlist = {};
+
+sub script_is_loaded {
+ return exists($Irssi::Script::{$_[0] . '::'});
+}
+
+if (script_is_loaded('uberprompt')) {
+ app_init();
+} else {
+ print "This script requires 'uberprompt.pl' in order to work. "
+ . "Attempting to load it now...";
+
+ Irssi::signal_add('script error', 'load_uberprompt_failed');
+ Irssi::command("script load uberprompt.pl");
+
+ unless(script_is_loaded('uberprompt')) {
+ load_uberprompt_failed("File does not exist");
+ }
+ app_init();
+}
+
+sub load_uberprompt_failed {
+ Irssi::signal_remove('script error', 'load_prompt_failed');
+
+ print "Script could not be loaded. Script cannot continue. "
+ . "Check you have uberprompt.pl installed in your scripts directory and "
+ . "try again. Otherwise, it can be fetched from: ";
+ print "https://github.com/shabble/irssi-scripts/raw/master/"
+ . "prompt_info/uberprompt.pl";
+
+ die "Script Load Failed: " . join(" ", @_);
+}
+
+sub extract_nick {
+ my ($str) = @_;
+
+ my $completion_char
+ = quotemeta(Irssi::settings_get_str("completion_char"));
+
+ # from BNF grammar at http://www.irchelp.org/irchelp/rfc/chapter2.html
+ # special := '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}'
+
+ my $pattern = qr/^( [[:alpha:]] # starts with a letter
+ (?: [[:alpha:]] # then letter
+ | \d # or number
+ | [\[\]\\`^\{\}-]) # or special char
+ *? ) # any number of times
+ $completion_char/x; # followed by completion char.
+
+ if ($str =~ m/$pattern/) {
+ return $1;
+ } else {
+ return undef;
+ }
+
+}
+
+sub check_nick_exemptions {
+ my ($nick) = @_;
+ foreach my $except (@match_exceptions) {
+ _debug("Testing nick $nick against $except");
+ if ($nick =~ $except) {
+ _debug( "Failed match $except");
+ return 0; # fail
+ }
+ }
+ _debug("match ok");
+
+ return 1;
+}
+
+sub sig_send_text {
+ my ($data, $server, $witem) = @_;
+
+ return unless($witem);
+
+ return unless ref $witem eq "HASH" && $witem->{type} eq 'CHANNEL';
+
+ # shouldn't need escaping, but it doesn't hurt to be paranoid.
+ my $target_nick = extract_nick($data);
+
+ if ($target_nick) {
+ if (check_watchlist($target_nick, $witem->{name}, $server)
+ and not $witem->nick_find($target_nick)) {
+
+ return unless check_nick_exemptions($target_nick);
+
+ if ($permit_pending) {
+ $pending_input = {};
+ $permit_pending = 0;
+ Irssi::signal_continue(@_);
+ } else {
+ return unless check_watchlist($target_nick, $witem->{name}, $server);
+ return unless check_watchlist($target_nick, '***', $server);
+
+ my $text
+ = "$target_nick isn't in this channel, send anyway? [Y/n]";
+ $pending_input
+ = {
+ text => $data,
+ server => $server,
+ win_item => $witem,
+ };
+
+ Irssi::signal_stop;
+ require_confirmation($text);
+ }
+ }
+ }
+}
+
+sub sig_gui_keypress {
+ my ($key) = @_;
+
+ return if not $active;
+
+ my $char = chr($key);
+
+ # Enter, y, or Y.
+ if ($char =~ m/^y?$/i) {
+ $permit_pending = 1;
+ Irssi::signal_stop;
+ Irssi::signal_emit('send text',
+ $pending_input->{text},
+ $pending_input->{server},
+ $pending_input->{win_item});
+ $active = 0;
+ set_prompt('');
+
+ } elsif ($char =~ m/^n?$/i or $key == 3 or $key == 7) {
+ # we support n, N, Ctrl-C, and Ctrl-G for no.
+
+ Irssi::signal_stop;
+ set_prompt('');
+
+ $permit_pending = 0;
+ $active = 0;
+ $pending_input = {};
+
+ } else {
+ Irssi::signal_stop;
+ return;
+ }
+}
+
+
+sub add_to_watchlist {
+ my ($nick, $channel, $server, $type, $opts) = @_;
+ my $tag = $server->{tag};
+ _debug("Adding $nick to $channel/$tag");
+
+ $watchlist->{$tag}->{$channel}->{$nick} = {
+ timestamp => time(),
+ type => $type,
+ options => $opts,
+ };
+}
+
+sub check_watchlist {
+ my ($nick, $channel, $server) = @_;
+ my $tag = $server->{tag};
+
+ my $check = exists ($watchlist->{$tag}->{$channel}->{$nick});
+ _debug("Check for $nick in $channel/$tag is " .( $check ? 'true' : 'false'));
+
+ # check the server-wide list if the channel-specific one fails.
+ if (not $check) {
+ $check = exists ($watchlist->{$tag}->{'***'}->{$nick});
+ _debug("Check for $nick in ***/$tag is " .( $check ? 'true' : 'false'));
+ }
+
+ return $check;
+}
+
+sub remove_from_watchlist {
+ my ($nick, $channel, $server) = @_;
+ my $tag = $server->{tag};
+
+ if (exists($watchlist->{$tag}->{$channel}->{$nick})) {
+ delete($watchlist->{$tag}->{$channel}->{$nick});
+ _debug("Deleted $nick from $channel/$tag");
+ }
+}
+
+sub cleanup_watchlist {
+ my ($channel, $server) = @_;
+ my $tag = $server->{tag};
+
+ if(!keys %{$watchlist->{$tag}->{$channel}}) {
+ delete($watchlist->{$tag}->{$channel});
+ _debug("Cleanup $channel/$tag");
+ }
+ if(!keys %{$watchlist->{$tag}}) {
+ delete($watchlist->{$tag});
+ _debug("Cleanup $tag");
+ }
+}
+
+sub start_watchlist_expire_timer {
+ my ($nick, $channel, $server, $callback) = @_;
+
+ my $tag = $server->{tag};
+ my $timeout = Irssi::settings_get_time('notifyquit_timeout');
+
+ Irssi::timeout_add_once($timeout,
+ $callback,
+ { nick => $nick,
+ channel => $channel,
+ server => $server,
+ });
+}
+
+sub sig_message_quit {
+ my ($server, $nick, $address, $reason) = @_;
+
+ my $tag = $server->{tag};
+
+ _debug( "$nick quit from $tag");
+ add_to_watchlist($nick, "***", $server, 'quit', undef);
+
+ my $quit_cb = sub {
+
+ # remove from all channels.
+ foreach my $chan (keys %{ $watchlist->{$tag} }) {
+ # if (exists $chan->{$nick}) {
+ # delete $watchlist->{$tag}->{$chan}->{$nick};
+ # }
+ remove_from_watchlist($nick, $chan, $server);
+ cleanup_watchlist($chan, $server);
+ }
+ };
+
+ start_watchlist_expire_timer($nick, '***', $server, $quit_cb);
+}
+
+sub sig_message_part {
+ my ($server, $channel, $nick, $address, $reason) = @_;
+
+ my $tag = $server->{tag};
+
+ _debug( "$nick parted from $channel/$tag");
+ add_to_watchlist($nick, $channel, $server, 'part', undef);
+ my $part_cb = sub {
+ remove_from_watchlist($nick, $channel, $server);
+ cleanup_watchlist($channel, $server);
+ };
+
+ start_watchlist_expire_timer($nick, $channel, $server, $part_cb);
+}
+
+sub sig_message_kick {
+ my ($server, $channel, $nick, $kicker, $address, $reason) = @_;
+ _debug( "$nick kicked from $channel by $kicker");
+
+ my $tag = $server->{tag};
+ add_to_watchlist($nick, $channel, $server, 'kick', undef);
+
+ my $kick_cb = sub {
+ remove_from_watchlist($nick, $channel, $server);
+ cleanup_watchlist($channel, $server);
+ };
+
+ start_watchlist_expire_timer($nick, $channel, $server, $kick_cb);
+}
+
+sub sig_message_nick {
+ my ($server, $newnick, $oldnick, $address) = @_;
+ my $tag = $server->{tag};
+
+ _debug("$oldnick changed nick to $newnick ($tag)");
+ #_debug( "Not bothering with this for now.");
+ add_to_watchlist($oldnick, '***', $server, 'nick', $newnick);
+
+ my $nick_cb = sub {
+ remove_from_watchlist($oldnick, '***', $server);
+ cleanup_watchlist('***', $server);
+ };
+
+ start_watchlist_expire_timer($oldnick, '***', $server, $nick_cb);
+}
+
+sub app_init {
+ Irssi::signal_add('setup changed' => \&sig_setup_changed);
+ Irssi::signal_add_first('message quit' => \&sig_message_quit);
+ Irssi::signal_add_first('message part' => \&sig_message_part);
+ Irssi::signal_add_first('message kick' => \&sig_message_kick);
+ Irssi::signal_add_first('message nick' => \&sig_message_nick);
+ Irssi::signal_add_first("send text" => \&sig_send_text);
+ Irssi::signal_add_first('gui key pressed' => \&sig_gui_keypress);
+ Irssi::settings_add_str($IRSSI{name}, 'notifyquit_exceptions', '/^https?/ /^ftp/');
+ Irssi::settings_add_bool($IRSSI{name}, 'notifyquit_verbose', 0);
+ Irssi::settings_add_time($IRSSI{name}, 'notifyquit_timeout', '30s');
+
+ # horrible name, but will serve.
+ Irssi::command_bind('notifyquit_show_exceptions', \&cmd_show_exceptions);
+ Irssi::command_bind('notifyquit_show_watchlist', \&cmd_show_watchlist);
+
+ sig_setup_changed();
+}
+
+sub cmd_show_exceptions {
+
+ foreach my $e (@match_exceptions) {
+ print "Exception: $e";
+ }
+}
+
+sub cmd_show_watchlist {
+ Irssi::print Dumper($watchlist);
+}
+
+sub sig_setup_changed {
+
+ my $except_str = Irssi::settings_get_str('notifyquit_exceptions');
+ $verbose = Irssi::settings_get_bool('notifyquit_verbose');
+ my @except_list = split( m{(?:^|(?<=/))\s+(?:(?=/)|$)}, $except_str);
+
+ @match_exceptions = ();
+
+ foreach my $except (@except_list) {
+
+ _debug("Exception regex str: $except");
+ $except =~ s|^/||;
+ $except =~ s|/$||;
+
+ next if $except =~ m/^\s*$/;
+
+ my $regex;
+
+ eval {
+ $regex = qr/$except/i;
+ };
+
+ if ($@ or not defined $regex) {
+ print "Regex failed to parse: \"$except\": $@";
+ } else {
+ _debug("Adding match exception: $regex");
+ push @match_exceptions, $regex;
+ }
+ }
+}
+
+
+sub require_confirmation {
+ $active = 1;
+ set_prompt(shift);
+}
+
+sub set_prompt {
+ my ($msg) = @_;
+ $msg = ': ' . $msg if length $msg;
+ Irssi::signal_emit('change prompt', $msg, 'UP_INNER');
+}
+
+sub _debug {
+
+ return unless $verbose;
+
+ my ($msg, @params) = @_;
+ my $str = sprintf($msg, @params);
+ print $str;
+
+}
diff --git a/readme_generator.pl b/readme_generator.pl
new file mode 100755
index 0000000..e93239e
--- /dev/null
+++ b/readme_generator.pl
@@ -0,0 +1,77 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+# Goal: extract the comments from the top of each script file, and
+# turn them into some sort of markdown-style README.md for github to nom on.
+#
+# Not sure how it's going to work with multiple files in a dir though. Sections?
+
+# Change of plan! Github supports POD, so we just use Pod::Select to scrape it.
+
+use File::Find;
+use File::Spec;
+use Pod::Select;
+
+use feature qw/say/;
+use Cwd;
+
+my $overwrite = $ARGV[0];
+if ($overwrite =~ m/--overwrite/) {
+ shift @ARGV; # remove it form list of dirs.
+ $overwrite = 1;
+} else {
+ $overwrite = 0;
+}
+
+my @dirs = map { File::Spec->catdir(getcwd(), $_) } @ARGV;
+
+die unless @dirs;
+
+find(\&wanted, @dirs);
+
+sub wanted {
+ my ($file, $dir, $path) = ($_, $File::Find::dir, $File::Find::name);
+ return unless $file =~ m/\.pl$/;
+ return if $file =~ m/^\./;
+
+ _err("processing file: $path");
+ create_output_file($dir, $file);
+}
+
+sub create_output_file {
+ my ($dir, $in_file) = @_;
+
+ my $parser = Pod::Select->new;
+
+ my $out_file = "README.pod";
+
+ my $in_file_path = File::Spec->catfile($dir, $in_file);
+ my $out_file_path = File::Spec->catfile($dir, $out_file);
+ my $sec_sep = '';
+
+ if (-f $out_file_path and not $overwrite) {
+ _err("$out_file_path already exists, going to append") unless $overwrite;
+ $sec_sep = "\n\n=for html <br />\n\n";
+ }
+
+ my $mode = $overwrite ? '>' : '>>';
+
+ _err("Writing to $mode $out_file_path");
+
+ open my $wfh, $mode, $out_file_path
+ or die "Couldn't open $out_file_path for $mode output: $!";
+
+ $parser->parse_from_file($in_file_path, $wfh);
+
+ print $wfh "\n\n=cut\n\n";
+
+ close $wfh;
+}
+
+sub _err {
+ my ($msg, @args) = @_;
+ my $str = sprintf($msg, @args);
+ say STDERR $str;
+}
diff --git a/scrolled-reminder/scrolled_reminder.pl b/scrolled-reminder/scrolled_reminder.pl
index 48da622..efe6630 100644
--- a/scrolled-reminder/scrolled_reminder.pl
+++ b/scrolled-reminder/scrolled_reminder.pl
@@ -82,13 +82,7 @@ our %IRSSI =
# check we have prompt_info loaded.
sub script_is_loaded {
- my $name = shift;
- print "Checking if $name is loaded" if DEBUG;
- no strict 'refs';
- my $retval = defined %{ "Irssi::Script::${name}::" };
- use strict 'refs';
-
- return $retval;
+ return exists($Irssi::Script::{$_[0] . '::'}) ;
}
unless (script_is_loaded('uberprompt')) {
diff --git a/tab_stop/tab_stop.pl b/tab_stop/tab_stop.pl
new file mode 100644
index 0000000..2774167
--- /dev/null
+++ b/tab_stop/tab_stop.pl
@@ -0,0 +1,49 @@
+# Created by Stefan "tommie" Tomanek [stefan@kann-nix.org]
+# to free the world from the evil inverted I
+#
+# 23.02.2002
+# *First release
+#
+# 01.03.200?
+# *Changed to GPL
+#
+# 24.05.2011
+# * Buggered about with by shabble.
+
+use strict;
+use warnings;
+
+use Irssi;
+
+our $VERSION = "20110524";
+our %IRSSI = (
+ authors => "Stefan 'tommie' Tomanek, shabble",
+ contact => "stefan\@pico.ruhr.de, shabble@#irssi/Freenode",
+ name => "tab_stop",
+ description => 'Replaces \t TAB characters with '
+ . 'contents of /set tabstop_replacement',
+ license => "GPLv2",
+ changed => "$VERSION",
+ );
+
+my $not_tab;
+
+sub sig_gui_print_text {
+ return unless $_[4] =~ /\t/;
+ $_[4] =~ s/\t/$not_tab/g;
+ Irssi::signal_continue(@_);
+}
+
+# create an expando $TAB which produces real tabs
+Irssi::expando_create('TAB', sub { "\t" }, { 'gui exit' => 'never' });
+
+# then rewrite them just before they're printed.
+Irssi::signal_add_first('gui print text', \&sig_gui_print_text);
+Irssi::signal_add('setup changed', \&sig_setup_changed);
+Irssi::settings_add_str('misc', 'tabstop_replacement', " ");
+
+sub sig_setup_changed {
+ $not_tab = Irssi::settings_get_str('tabstop_replacement');
+}
+
+sig_setup_changed();
diff --git a/testing/.gitignore b/testing/.gitignore
new file mode 100644
index 0000000..119fe08
--- /dev/null
+++ b/testing/.gitignore
@@ -0,0 +1,5 @@
+Makefile
+Makefile.old
+blib/
+irssi.log
+pm_to_blib
diff --git a/testing/Changes b/testing/Changes
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/testing/Changes
diff --git a/testing/MANIFEST b/testing/MANIFEST
new file mode 100644
index 0000000..1810c3e
--- /dev/null
+++ b/testing/MANIFEST
@@ -0,0 +1,13 @@
+Makefile.PL
+MANIFEST
+MANIFEST.SKIP
+README
+Changes
+
+t/001-use.t
+t/002-init.t
+
+lib/Test/Irssi.pm
+lib/Test/Irssi/Callbacks.pm
+lib/Test/Irssi/Driver.pm
+lib/Test/Irssi/Test.pm \ No newline at end of file
diff --git a/testing/MANIFEST.SKIP b/testing/MANIFEST.SKIP
new file mode 100644
index 0000000..1bfcbf3
--- /dev/null
+++ b/testing/MANIFEST.SKIP
@@ -0,0 +1,9 @@
+.*\.git.*
+pm_to_blib
+.*\.old
+.*\.bak
+.*\.swp
+blib/.*
+^Makefile$
+\d+_local_
+
diff --git a/testing/Makefile.PL b/testing/Makefile.PL
new file mode 100644
index 0000000..3312c95
--- /dev/null
+++ b/testing/Makefile.PL
@@ -0,0 +1,30 @@
+use strict;
+use warnings;
+use Cwd;
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+
+WriteMakefile(
+ NAME => 'Test::Irssi',
+ AUTHOR => 'shabble <shabble+cpan@metavore.org>',
+ VERSION_FROM => 'lib/Test/Irssi.pm', # finds $VERSION
+ ABSTRACT_FROM => 'lib/Test/Irssi.pm',
+ PL_FILES => {},
+ # LIBS => ["-L/opt/local/lib -lcprops"],
+ # INC => "-I/opt/local/include/cprops",
+ PREREQ_PM => {
+ 'Test::More' => 0,
+ 'Carp' => 0,
+ 'MooseX::Declare' => 0,
+ 'IO::File' => 0,
+ 'Term::VT102' => 0,
+ 'Term::Terminfo' => 0,
+ 'strictures' => 0,
+ 'Data::Dump' => 0,
+ },
+ dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
+ # clean => {
+ # FILES => 'CProps-Trie-* Trie.inl _Inline'
+ # },
+ );
diff --git a/testing/README b/testing/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/testing/README
diff --git a/testing/lib/Test/Irssi.pm b/testing/lib/Test/Irssi.pm
new file mode 100644
index 0000000..0db7ee0
--- /dev/null
+++ b/testing/lib/Test/Irssi.pm
@@ -0,0 +1,314 @@
+use strictures 1;
+use MooseX::Declare;
+
+our $VERSION = 0.02;
+
+class Test::Irssi {
+
+ # requires the latest pre-release POE from
+ # https://github.com/rcaputo/poe until a new release is...released.
+ use lib $ENV{HOME} . "/projects/poe/lib";
+ use POE;
+
+ use Term::VT102;
+ use Term::Terminfo;
+ use feature qw/say switch/;
+ use Data::Dump;
+ use IO::File;
+
+ use Test::Irssi::Driver;
+ use Test::Irssi::Callbacks;
+ use Test::Irssi::Test;
+
+ has 'generate_tap'
+ => (
+ is => 'rw',
+ isa => 'Bool',
+ required => 1,
+ default => 1,
+ );
+
+ has 'irssi_binary'
+ => (
+ is => 'ro',
+ isa => 'Str',
+ required => 1,
+ );
+
+ has 'irssi_homedir'
+ => (
+ is => 'ro',
+ isa => 'Str',
+ required => 1,
+ );
+
+ has 'terminal_width'
+ => (
+ is => 'ro',
+ isa => 'Int',
+ required => 1,
+ default => 80,
+ );
+
+ has 'terminal_height'
+ => (
+ is => 'ro',
+ isa => 'Int',
+ required => 1,
+ default => 24,
+ );
+
+ has 'vt'
+ => (
+ is => 'ro',
+ isa => 'Term::VT102',
+ required => 1,
+ lazy => 1,
+ builder => '_build_vt_obj',
+ );
+
+ has 'logfile'
+ => (
+ is => 'ro',
+ isa => 'Str',
+ required => 1,
+ default => 'irssi-test.log',
+ );
+
+ has '_logfile_fh'
+ => (
+ is => 'ro',
+ isa => 'IO::File',
+ required => 1,
+ lazy => 1,
+ builder => '_build_logfile_fh',
+ );
+
+ has 'driver'
+ => (
+ is => 'ro',
+ isa => 'Test::Irssi::Driver',
+ required => 1,
+ lazy => 1,
+ builder => '_build_driver_obj',
+ handles => {
+ run_headless => 'headless',
+ }
+ );
+
+ has '_callbacks'
+ => (
+ is => 'ro',
+ isa => 'Test::Irssi::Callbacks',
+ required => 1,
+ lazy => 1,
+ builder => '_build_callback_obj',
+ );
+
+ has 'pending_tests'
+ => (
+ is => 'ro',
+ isa => "ArrayRef",
+ required => 1,
+ default => sub { [] },
+ traits => [qw/Array/],
+ handles => {
+ add_pending_test => 'push',
+ next_pending_test => 'shift',
+ tests_remaining => 'count',
+ }
+ );
+
+ has 'completed_tests'
+ => (
+ is => 'ro',
+ isa => "ArrayRef",
+ required => 1,
+ default => sub { [] },
+ traits => [qw/Array/],
+ handles => {
+ add_completed_test => 'push',
+ tests_completed => 'count',
+ },
+ );
+
+ has 'active_test'
+ => (
+ is => 'rw',
+ isa => 'Test::Irssi::Test',
+ );
+
+ sub new_test {
+ my ($self, $name, @params) = @_;
+ my $new = Test::Irssi::Test->new(name => $name,
+ parent => $self,
+ @params);
+ $self->add_pending_test($new);
+ return $new;
+ }
+
+ method _build_callback_obj {
+ Test::Irssi::Callbacks->new(parent => $self);
+ }
+
+ method _build_driver_obj {
+ Test::Irssi::Driver->new(parent => $self);
+ }
+
+ method _build_vt_obj {
+ my $rows = $self->terminal_height;
+ my $cols = $self->terminal_width;
+
+ Term::VT102->new($cols, $rows);
+ }
+
+ method _build_logfile_fh {
+
+ my $logfile = $self->logfile;
+
+ my $fh = IO::File->new($logfile, 'w');
+ die "Couldn't open $logfile for writing: $!" unless defined $fh;
+ $fh->autoflush(1);
+
+ return $fh;
+ }
+
+ method _vt_setup {
+ # options
+ my $vt = $self->vt;
+
+ $vt->option_set(LINEWRAP => 1);
+ $vt->option_set(LFTOCRLF => 1);
+
+ $self->_callbacks->register_callbacks;
+
+ }
+ method screenshot {
+ my $data = '';
+ my $vt = $self->vt;
+ foreach my $row (1 .. $vt->rows) {
+ $data .= $vt->row_plaintext($row) . "\n";
+ }
+ return $data;
+ }
+
+ method complete_test {
+ # put the completed one onto the completed pile
+ my $old_test = $self->active_test;
+ $self->add_completed_test($old_test);
+
+ # TAP: print status.
+ if ($self->generate_tap) {
+ my $pass = $old_test->passed;
+ my $tap = sprintf("%s %d - %s", $pass?'ok':'not ok',
+ $self->tests_completed,
+ $old_test->description);
+ say STDOUT $tap;
+ if (not $pass) {
+ $old_test->details;
+ $self->log("-------------------");
+ $self->log($self->screenshot);
+ $self->log("-------------------");
+
+ }
+ }
+ }
+
+ method run_test {
+ # and make the next pending one active.
+ my $test = $self->next_pending_test;
+ $self->active_test($test);
+
+ # signal to the driver to start executing it.
+ $poe_kernel->post(IrssiTestDriver => execute_test => $test);
+ }
+
+ method run {
+
+ $self->driver->setup;
+ $self->_vt_setup;
+ $self->log("Driver setup complete");
+ ### Start a session to encapsulate the previous features.
+
+ # TAP: print number of tests.
+ if ($self->generate_tap) {
+ print STDOUT "1.." . $self->tests_remaining . "\n";
+ }
+
+ $poe_kernel->run();
+ }
+
+ sub apply_delay {
+ my ($self, $delay, $next_index) = @_;
+ $poe_kernel->post(IrssiTestDriver
+ => create_delay
+ => $delay, $next_index);
+ }
+
+ # TODO: pick one.
+ sub inject_text {
+ my ($self, $text) = @_;
+ $poe_kernel->post(IrssiTestDriver => got_terminal_stdin
+ => $text);
+ }
+
+ sub simulate_keystroke {
+ my ($self, $text) = @_;
+ $poe_kernel->post(IrssiTestDriver => got_terminal_stdin
+ => $text);
+
+ }
+
+ method get_topic_line {
+ return $self->vt->row_plaintext(1);
+ }
+
+ method get_prompt_line {
+ return $self->vt->row_plaintext($self->terminal_height);
+ }
+
+ method get_window_statusbar_line {
+ return $self->vt->row_plaintext($self->terminal_height() - 1);
+ }
+
+ method get_window_contents {
+ my $buf = '';
+ for (2..$self->terminal_height() - 2) {
+ $buf .= $self->vt->row_plaintext($_);
+ }
+ return $buf;
+ }
+
+ method get_cursor_position {
+ return ($self->vt->x(), $self->vt->y());
+ }
+
+ method load_script {
+ my ($script_name) = @_;
+
+ }
+
+ method summarise_test_results {
+ foreach my $test (@{$self->completed_tests}) {
+ my $name = $test->name;
+ printf("Test %s\t\t-\t%s\n", $name, $test->passed?"pass":"fail");
+ $test->details();
+ }
+ }
+
+ sub log {
+ my ($self, $msg) = @_;
+ $self->_logfile_fh->say($msg);
+ }
+
+}
+
+ __END__
+
+=head1 NAME
+
+Test::Irssi - A cunning testing system for Irssi scripts
+
+=head1 SYNOPSIS
+
+blah blah blah
diff --git a/testing/lib/Test/Irssi/Callbacks.pm b/testing/lib/Test/Irssi/Callbacks.pm
new file mode 100644
index 0000000..8321ace
--- /dev/null
+++ b/testing/lib/Test/Irssi/Callbacks.pm
@@ -0,0 +1,123 @@
+use strictures 1;
+
+package Test::Irssi::Callbacks;
+
+use Moose;
+use Data::Dump qw/dump/;
+use Data::Dumper;
+
+has 'parent'
+ => (
+ is => 'ro',
+ isa => 'Test::Irssi',
+ required => 1,
+ );
+
+sub register_callbacks {
+ my ($self) = @_;
+
+ my $vt = $self->parent->vt;
+ $self->log("Callbacks registered");
+
+ $vt->callback_set(OUTPUT => sub { $self->vt_output(@_) }, undef);
+ $vt->callback_set(ROWCHANGE => sub { $self->vt_rowchange(@_) }, undef);
+ $vt->callback_set(CLEAR => sub { $self->vt_clear(@_) }, undef);
+ $vt->callback_set(SCROLL_DOWN => sub { $self->vt_scr_up(@_) }, undef);
+ $vt->callback_set(SCROLL_UP => sub { $self->vt_scr_dn(@_) }, undef);
+ $vt->callback_set(GOTO => sub { $self->vt_goto(@_) }, undef);
+
+}
+
+sub vt_output {
+ my ($self, $vt, $cb_name, $cb_data) = @_;
+ $self->log( "OUTPUT: " . dump([@_[1..$#_]]));
+}
+
+sub vt_rowchange {
+ my $self = shift;
+ my ($vt, $cb_name, $arg1, $arg2) = @_;
+
+ $arg1 //= '?';
+ $arg2 //= '?';
+
+ $self->log( "-" x 100);
+ $self->log( "Row $arg1 changed: ");
+
+ my $bottom_line = $vt->rows();
+
+ $self->log( "-" x 100);
+ $self->log( "Window Line");
+ $self->log( "-" x 100);
+ $self->log( $vt->row_plaintext($bottom_line - 1));
+ $self->log( "-" x 100);
+ $self->log( "Prompt line");
+ $self->log( "-" x 100);
+ $self->log( $vt->row_plaintext($bottom_line));
+
+}
+
+sub vt_clear {
+ my $self = shift;
+ my ($vt, $cb_name, $arg1, $arg2) = @_;
+ $arg1 //= '?';
+ $arg2 //= '?';
+
+ $self->log( "VT Cleared");
+}
+
+sub vt_scr_dn {
+ my $self = shift;
+ my ($vt, $cb_name, $arg1, $arg2) = @_;
+ $arg1 //= '?';
+ $arg2 //= '?';
+
+ $self->log( "Scroll Down");
+}
+
+sub vt_scr_up {
+ my $self = shift;
+ my ($vt, $cb_name, $arg1, $arg2) = @_;
+ $arg1 //= '?';
+ $arg2 //= '?';
+
+ $self->log( "Scroll Up");
+}
+
+
+sub vt_goto {
+ my $self = shift;
+ my ($vt, $cb_name, $arg1, $arg2) = @_;
+ $arg1 //= '?';
+ $arg2 //= '?';
+
+ $self->log( "Goto: $arg1, $arg2");
+}
+
+sub vt_dump {
+ my ($self) = @_;
+ my $vt = $self->parent->vt;
+ my $rows = $self->parent->terminal_height;
+ my $str = '';
+ for my $y (1..$rows) {
+ $str .= $vt->row_sgrtext($y) . "\n";
+ }
+
+ return $str;
+}
+
+sub log {
+ my ($self, $msg) = @_;
+ #$self->parent->_logfile_fh->say($msg);
+}
+
+__PACKAGE__->meta->make_immutable;
+
+no Moose;
+
+
+
+# # delegate to Callbacks.
+# sub vt_dump {
+# my ($self) = @_;
+# my $cb = $self->parent->_callbacks->vt_dump();
+# }
diff --git a/testing/lib/Test/Irssi/Driver.pm b/testing/lib/Test/Irssi/Driver.pm
new file mode 100644
index 0000000..6b4e5e5
--- /dev/null
+++ b/testing/lib/Test/Irssi/Driver.pm
@@ -0,0 +1,258 @@
+use strictures 1;
+
+package Test::Irssi::Driver;
+
+use Moose;
+use lib $ENV{HOME} . "/projects/poe/lib";
+
+use POE qw( Wheel::ReadWrite Wheel::Run Filter::Stream );
+use POSIX;
+use feature qw/say/;
+use Data::Dump qw/dump/;
+
+has 'parent'
+ => (
+ is => 'ro',
+ isa => 'Test::Irssi',
+ required => 1,
+ );
+
+has 'headless'
+ => (
+ is => 'rw',
+ isa => 'Bool',
+ default => 0,
+ );
+
+sub START {
+ my ($self, $kernel, $heap) = @_[OBJECT, KERNEL, HEAP];
+
+ $kernel->alias_set("IrssiTestDriver");
+
+ $self->log("Start handler called");
+
+ $self->save_term_settings($heap);
+
+ # Set a signal handler.
+ $kernel->sig(CHLD => "got_sigchld");
+
+ $self->make_raw_terminal;
+
+ my @stdio_options =
+ (
+ InputHandle => \*STDIN,
+ OutputHandle => \*STDOUT,
+ InputEvent => "got_terminal_stdin",
+ Filter => POE::Filter::Stream->new(),
+ );
+
+ $self->log("stdio options: " . dump(@stdio_options));
+
+ # Start the terminal reader/writer.
+ $heap->{stdio} = POE::Wheel::ReadWrite->new(@stdio_options);
+
+ $self->log("Created stdio wheel");
+
+ my $rows = $self->parent->terminal_height;
+ my $cols = $self->parent->terminal_width;
+
+ my @program_options =
+ (
+ Program => $self->parent->irssi_binary,
+ ProgramArgs => ['--noconnect', '--home=' . $self->parent->irssi_homedir ],
+ Conduit => "pty",
+ Winsize => [$rows, $cols, 0, 0],
+ StdoutEvent => "got_child_stdout",
+ StdioFilter => POE::Filter::Stream->new(),
+ );
+
+ $self->log("wheel options: " . dump(@program_options));
+
+ # Start the asynchronous child process.
+ $heap->{program} = POE::Wheel::Run->new(@program_options);
+
+ $self->log("Created child run wheel");
+ $poe_kernel->yield('testing_ready');
+}
+
+sub STOP {
+ my ($self, $heap) = @_[OBJECT,HEAP];
+ $self->log("STOP called");
+ $self->restore_term_settings($heap);
+ $self->parent->_logfile_fh->close();
+
+ if (not $self->parent->generate_tap) {
+ $self->parent->summarise_test_results();
+ }
+}
+
+### Handle terminal STDIN. Send it to the background program's STDIN.
+### If the user presses ^C, then echo a little string
+
+sub terminal_stdin {
+ my ($self, $heap, $input) = @_[OBJECT, HEAP, ARG0];
+
+ if ($input =~ m/\003/g) { # C-c
+ $input = "/echo I like cakes\n";
+ } elsif ($input =~ m/\x17/g) { # C-w
+ $input = "/quit\n";
+ }
+
+ $heap->{program}->put($input);
+}
+
+### Handle STDOUT from the child program.
+sub child_stdout {
+ my ($self, $heap, $input) = @_[OBJECT, HEAP, ARG0];
+ # process via vt
+ $self->parent->vt->process($input);
+
+ if (not $self->headless) {
+ # send to terminal
+ $heap->{stdio}->put($input);
+ }
+}
+
+### Handle SIGCHLD. Shut down if the exiting child process was the
+### one we've been managing.
+
+sub shutdown {
+ my ($self, $heap, $kernel) = @_[OBJECT, HEAP, KERNEL];
+ $self->log("Shutdown called");
+ $heap->{program}->kill(15);
+ $kernel->alias_remove("IrssiTestDriver");
+}
+
+sub CHILD {
+ my ($self, $heap, $child_pid) = @_[OBJECT, HEAP, ARG1];
+ if ($child_pid == $heap->{program}->PID) {
+ delete $heap->{program};
+ delete $heap->{stdio};
+ }
+ return 0;
+}
+
+sub setup {
+ my $self = shift;
+
+ my @states =
+ (
+ object_states =>
+ [ $self =>
+ {
+ _start => 'START',
+ _stop => 'STOP',
+ got_sigchld => 'CHILD',
+
+ got_terminal_stdin => 'terminal_stdin',
+ got_child_stdout => 'child_stdout',
+
+ got_delay => 'timer_expired',
+ create_delay => 'timer_created',
+
+
+ testing_ready => 'testing_ready',
+ test_complete => 'test_complete',
+ execute_test => 'execute_test',
+
+ shutdown => 'shutdown',
+ }
+ ]
+ );
+ $self->log("creating root session");
+
+ POE::Session->create(@states);
+ $self->log("session created");
+
+}
+
+sub testing_ready {
+ my ($self) = $_[OBJECT];
+ # begin by fetching a test from the pending queue.
+ $self->log("Starting to run tests");
+ $self->log("-" x 80);
+ $self->parent->run_test;
+}
+
+sub execute_test {
+ my ($self, $heap, $kernel, $test) = @_[OBJECT,HEAP, KERNEL, ARG0];
+ # do some stuff here to evaluate it.
+
+ $test->evaluate_test;
+
+}
+
+sub test_complete {
+ my ($self, $kernel) = @_[OBJECT, KERNEL];
+
+ $self->parent->complete_test;
+
+ if ($self->parent->tests_remaining) {
+ $self->parent->run_test;
+ }
+
+ # otherwise, we're done, and can shutdown.
+ #kernel->yield('shutdown');
+
+}
+
+sub timer_created {
+ my ($self, $heap, $kernel, $duration) = @_[OBJECT, HEAP, KERNEL, ARG0];
+ $kernel->delay(got_delay => $duration);
+ $self->log("Timer created for $duration");
+}
+
+sub timer_expired {
+ my ($self, $data) = @_[OBJECT,ARG0];
+ $self->log("Timeout invoking test again.");
+ $self->parent->active_test->resume_from_timer;
+}
+
+sub save_term_settings {
+ my ($self, $heap) = @_;
+ # Save the original terminal settings so they can be restored later.
+ $heap->{stdin_tio} = POSIX::Termios->new();
+ $heap->{stdin_tio}->getattr(0);
+ $heap->{stdout_tio} = POSIX::Termios->new();
+ $heap->{stdout_tio}->getattr(1);
+ $heap->{stderr_tio} = POSIX::Termios->new();
+ $heap->{stderr_tio}->getattr(2);
+}
+
+sub restore_term_settings {
+ my ($self, $heap) = @_;
+
+ $heap->{stdin_tio}->setattr (0, TCSANOW);
+ $heap->{stdout_tio}->setattr(1, TCSANOW);
+ $heap->{stderr_tio}->setattr(2, TCSANOW);
+}
+
+sub make_raw_terminal {
+ my ($self) = @_;
+ # Put the terminal into raw input mode. Otherwise discrete
+ # keystrokes will not be read immediately.
+ my $tio = POSIX::Termios->new();
+ $tio->getattr(0);
+ my $lflag = $tio->getlflag;
+ $lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL | ICANON | IEXTEN | ISIG);
+ $tio->setlflag($lflag);
+ my $iflag = $tio->getiflag;
+ $iflag &= ~(BRKINT | INPCK | ISTRIP | IXON);
+ $tio->setiflag($iflag);
+ my $cflag = $tio->getcflag;
+ $cflag &= ~(CSIZE | PARENB);
+ $tio->setcflag($cflag);
+ $tio->setattr(0, TCSANOW);
+}
+
+sub log {
+ my ($self, $msg) = @_;
+ my $fh = $self->parent->_logfile_fh;
+ $fh->say($msg);
+}
+
+
+__PACKAGE__->meta->make_immutable;
+
+no Moose;
+
diff --git a/testing/lib/Test/Irssi/Misc.pm b/testing/lib/Test/Irssi/Misc.pm
new file mode 100644
index 0000000..a6339e0
--- /dev/null
+++ b/testing/lib/Test/Irssi/Misc.pm
@@ -0,0 +1,35 @@
+package Test::Irssi::Misc;
+use strictures 1;
+
+
+
+sub keycombo_to_code {
+ my ($key_combo) = @_;
+ my $output = '';
+ my $ctrl = 0;
+ my $meta = 0;
+ if ($key_combo =~ m/[cC](?:trl)?-(.+)/) {
+ $ctrl = 1;
+ _parse_rest($1);
+ }
+ if ($key_combo =~ m/[Mm](?:eta)?-(.+)/) {
+ $meta = 1;
+ _parse_rest($1);
+ }
+}
+
+sub _parse_key {
+ my ($rest) = @_;
+ my $special = {
+ left => '',
+ right => '',
+ up => '',
+ down => '',
+ tab => '',
+ space => '',
+ spc => '',
+ };
+}
+
+
+1;
diff --git a/testing/lib/Test/Irssi/Test.pm b/testing/lib/Test/Irssi/Test.pm
new file mode 100644
index 0000000..cd0a6f9
--- /dev/null
+++ b/testing/lib/Test/Irssi/Test.pm
@@ -0,0 +1,308 @@
+use strictures 1;
+use MooseX::Declare;
+
+class Test::Irssi::Test {
+
+ use POE;
+ use Test::Irssi;
+ use Test::Irssi::Driver;
+ use feature qw/say/;
+ use Data::Dump qw/dump/;
+
+ has 'parent'
+ => (
+ is => 'ro',
+ isa => 'Test::Irssi',
+ required => 1,
+ );
+
+ has 'name'
+ => (
+ is => 'ro',
+ isa => 'Str',
+ required => 1,
+ );
+
+ has 'description'
+ => (
+ is => 'rw',
+ isa => 'Str',
+ default => '',
+ );
+
+ has 'states'
+ => (
+ is => 'ro',
+ isa => 'ArrayRef',
+ traits => [qw/Array/],
+ default => sub { [] },
+ lazy => 1,
+ handles => {
+ add_state => 'push',
+ state_count => 'count',
+ get_state => 'get',
+ },
+ );
+
+ has 'results'
+ => (
+ is => 'ro',
+ isa => 'ArrayRef',
+ default => sub { [] },
+ );
+
+ has 'complete'
+ => (
+ is => 'rw',
+ isa => 'Bool',
+ default => 0,
+ );
+
+
+ has '_next_state'
+ => (
+ is => 'rw',
+ isa => 'Int',
+ default => 0,
+ traits => [qw/Counter/],
+ handles => {
+ _increment_state_counter => 'inc',
+ _clear_state => 'reset',
+ },
+ );
+
+ # TODO: should only be valid when complete is set.
+ sub passed {
+ my $self = shift;
+ my $pass = 0;
+ foreach my $result (@{$self->results}) {
+ $pass = $result;
+ }
+ return $pass and $self->complete;
+ }
+
+ sub failed {
+ my $self = shift;
+ return not $self->passed;
+ }
+
+
+ sub details {
+ my ($self) = shift;
+ my $state_count = $self->state_count;
+ for (0..$state_count-1) {
+ my $state = $self->states->[$_];
+ my $result = $self->results->[$_];
+ say( "#\t" . $state->{type} . " - " . $state->{desc} . " "
+ . " = " .( $result?"ok":"not ok"));
+ }
+ }
+ ############# API FUNCTIONS ##########################################
+
+
+ method add_input_sequence(Str $input) {
+ $self->add_state({type => 'command',
+ of => 'input',
+ input => $input,
+ desc => 'input'});
+
+ $self->log("Adding $input as input");
+ }
+
+ method add_delay (Num $delay) {
+ $self->add_state({type => 'command',
+ of => 'delay',
+ desc => 'delay',
+ delay => $delay });
+ $self->log("Adding $delay as delay");
+
+ }
+
+ method add_keycode(Str $code) {
+ my $input = $self->translate_keycode($code);
+ $self->add_state({type => 'command',
+ desc => 'input',
+ input => $input });
+ $self->log("Adding $input ($code) as input");
+
+ }
+ sub add_diag {
+ my ($self, $diag) = @_;
+ $self->add_state({type => 'command',
+ of => 'diag',
+ desc => $diag });
+ }
+
+ sub add_pattern_match {
+ my ($self, $pattern, $constraints, $desc) = @_;
+ $self->add_state({type => 'test',
+ of => 'pattern',
+ pattern => $pattern,
+ constraints => $constraints,
+ desc => $desc});
+
+ $self->log("Adding $pattern as output match ");
+ }
+
+ sub test_cursor_position {
+ my ($self, $x, $y, $desc) = @_;
+ $self->add_state({type => 'test',
+ of => 'cursor',
+ x => $x,
+ y => $y,
+ desc => $desc });
+ $self->log("Adding cursor [$x, $y] test ");
+
+ }
+
+ sub add_evaluation_function {
+ my ($self, $coderef, $desc) = @_;
+ $self->add_state({type => 'test',
+ of => 'function',
+ code => $coderef,
+ desc => $desc});
+ }
+
+
+ ############# END OF API FUNCTIONS ####################################
+
+
+
+ method translate_keycode(Str $code) {
+ my $seq = '';
+ if ($code =~ m/M-([a-z])/i) {
+ $seq = "\x1b" . $1;
+ } elsif ($code =~ m/C-([a-z])/i) {
+ $seq = chr ( ord(lc $1) - 64 );
+ }
+ return $seq;
+ }
+
+ method this_state {
+ return $self->_next_state - 1;
+ }
+
+ sub check_output {
+ my ($self, $data) = @_;
+
+ my ($pattern, $constraints) = ($data->{pattern}, $data->{constraints});
+
+ my $ok = 0;
+ my $line = '';
+ if ($constraints eq 'prompt') {
+ $line = $self->parent->get_prompt_line;
+ } elsif ($constraints eq 'window_sbar') {
+ $line = $self->parent->get_window_statusbar_line;
+ } elsif ($constraints eq 'window') {
+ # NOTE: not actually a line.
+ $line = $self->parent->get_window_contents;
+ } elsif ($constraints eq 'topic') {
+ $line = $self->parent->get_topic_line;
+ }
+
+ $self->log("Testing pattern against: '$line'");
+
+ if ($line =~ m/$pattern/) {
+ $self->log("Pattern $pattern passed");
+ $self->results->[$self->this_state] = 1;
+ } else {
+ $self->log("Pattern $pattern failed");
+ $self->results->[$self->this_state] = 0;;
+ }
+ }
+
+ sub get_next_state {
+ my ($self) = @_;
+ my $item = $self->get_state($self->_next_state);
+ $self->_increment_state_counter;
+
+ return $item;
+ }
+
+ sub evaluate_test {
+ my ($self) = @_;
+
+ while (my $state = $self->get_next_state) {
+
+ $self->log("Evaluating Test: " . dump($state));
+
+ my $type = $state->{type};
+
+ if ($type eq 'command') {
+ my $subtype = $state->{of};
+
+ if ($subtype eq 'diag') {
+ if ($self->parent->generate_tap) {
+ say STDOUT '#' . $state->{desc};
+ }
+ }
+ if ($subtype eq 'input') {
+ $self->parent->inject_text($state->{input});
+ $self->log("input: ". $state->{input});
+ }
+ if ($subtype eq 'delay') {
+ $self->log("inserting delay");
+ $self->parent->apply_delay($state->{delay});
+ $self->results->[$self->this_state] = 1;
+ return;
+ }
+
+ # all commands are considered to succeed.
+ $self->results->[$self->this_state] = 1;
+
+ } elsif ($type eq 'test') {
+
+ my $test_type = $state->{of};
+
+ if ($test_type eq 'pattern') {
+ my $pattern = $state->{pattern};
+ $self->check_output($state);
+ }
+ if ($test_type eq 'cursor') {
+ my ($curs_x, $curs_y) = $self->parent->get_cursor_position;
+
+ my $ret = 0;
+ if ($state->{x} == $curs_x and $state->{y} == $curs_y) {
+ $ret = 1;
+ }
+
+ $self->results->[$self->this_state] = $ret;
+
+ }
+
+ if ($test_type eq 'function') {
+ # code evaluation
+ my @args = ($self, $self->parent, $self->parent->vt);
+ my $ret = $state->{code}->(@args);
+ $ret //= 0; # ensure that undef failures are
+ # marked as such.
+ $self->results->[$self->this_state] = $ret;
+ }
+ } else {
+ # wtf?
+ }
+ }
+
+ $poe_kernel->post(IrssiTestDriver => 'test_complete');
+
+ $self->complete(1);
+
+ $self->log("Test Execution Finished");
+ }
+
+ sub resume_from_timer {
+ my ($self) = @_;
+ $self->log("Resuming after timeout");
+ $self->evaluate_test;
+ }
+ sub log {
+ my ($self, $msg) = @_;
+ $self->parent->_logfile_fh->say($msg);
+ }
+
+ sub _all { $_ || return 0 for @_; 1 }
+}
+
+
+
+ __END__
diff --git a/testing/lib/Test/Irssi/VirtualIrssi.pm b/testing/lib/Test/Irssi/VirtualIrssi.pm
new file mode 100644
index 0000000..dc3bfc7
--- /dev/null
+++ b/testing/lib/Test/Irssi/VirtualIrssi.pm
@@ -0,0 +1,32 @@
+use strictures 1;
+use MooseX::Declare;
+
+class Test::Irssi::VirtualIrssi {
+
+# class that pretends to be irssi which you can pull out various data from.
+
+
+has cursor
+ => (
+ is => 'ro',
+ writer => '_set_cursor',
+ isa => 'ArrayRef[Int]',
+ default => sub { [0, 0] },
+ );
+
+has topic_row
+ => (
+ );
+
+has window_row
+ => (
+ );
+
+has prompt_row
+ => (
+ );
+
+has window
+ => (
+ );
+}
diff --git a/testing/t/001-use.t b/testing/t/001-use.t
new file mode 100755
index 0000000..6ebbb5a
--- /dev/null
+++ b/testing/t/001-use.t
@@ -0,0 +1,27 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use Test::More;
+use Data::Dumper;
+
+BEGIN {
+ use_ok 'Test::Irssi';
+}
+
+
+my $test = new_ok 'Test::Irssi',
+ [irssi_binary => 'null', irssi_homedir => 'null'];
+
+my @methods = qw/logfile terminal_height terminal_width irssi_homedir irssi_binary/;
+can_ok($test, @methods);
+
+undef $test;
+
+done_testing;
+
+__END__
+
+
+
diff --git a/testing/t/002-init.t b/testing/t/002-init.t
new file mode 100755
index 0000000..b688f9f
--- /dev/null
+++ b/testing/t/002-init.t
@@ -0,0 +1,33 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use Test::More;
+use Data::Dumper;
+
+BEGIN {
+ use_ok 'Test::Irssi';
+}
+
+
+my $test = new_ok 'Test::Irssi',
+ [irssi_binary => "/opt/stow/repo/irssi-debug/bin/irssi",
+ irssi_homedir => $ENV{HOME} . "/projects/tmp/test/irssi-debug"];
+
+if (-f $test->logfile) {
+ ok(unlink $test->logfile, 'deleted old logfile');
+}
+
+my $drv = $test->driver;
+isa_ok($drv, 'Test::Irssi::Driver', 'driver created ok');
+
+diag "Starting POE session";
+$test->run();
+
+done_testing;
+
+__END__
+
+
+
diff --git a/testing/test-shim.pl b/testing/test-shim.pl
new file mode 100644
index 0000000..628f7af
--- /dev/null
+++ b/testing/test-shim.pl
@@ -0,0 +1,114 @@
+use strict;
+use warnings;
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+use POSIX;
+use Time::HiRes qw/sleep/;
+use JSON::Any;
+
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => 'test-shim',
+ description => '',
+ license => 'Public Domain',
+ );
+
+
+my $forked = 0;
+
+sub pipe_and_fork {
+ my ($read_handle, $write_handle);
+ pipe($read_handle, $write_handle);
+
+ my $oldfh = select($write_handle);
+ $| = 1;
+ select $oldfh;
+
+ return if $forked;
+
+ my $pid = fork();
+
+ if (not defined $pid) {
+ _error("Can't fork: Aborting");
+ close($read_handle);
+ close($write_handle);
+ return;
+ }
+
+ $forked = 1;
+
+ if ($pid > 0) { # this is the parent (Irssi)
+ close ($write_handle);
+ Irssi::pidwait_add($pid);
+ my $job = $pid;
+ my $tag;
+ my @args = ($read_handle, \$tag, $job);
+ $tag = Irssi::input_add(fileno($read_handle),
+ Irssi::INPUT_READ,
+ \&child_input,
+ \@args);
+
+ } else { # child
+ child_process($write_handle);
+ close $write_handle;
+
+ POSIX::_exit(1);
+ }
+}
+sub _cleanup_child {
+ my ($read_handle, $input_tag_ref) = @_;
+ close $read_handle;
+ Irssi::input_remove($$input_tag_ref);
+ _msg("child finished");
+ $forked = 0;
+}
+sub child_input {
+ my $args = shift;
+ my ($read_handle, $input_tag_ref, $job) = @$args;
+
+ my $input = <$read_handle>;
+ my $data = JSON::Any::jsonToObj($input);
+ if (ref $data ne 'HASH') {
+ _error("Invalid data received: $input");
+ _cleanup_child($read_handle, $input_tag_ref);
+ }
+
+ if (exists $data->{connection}) {
+ if ($data->{connection} eq 'close') {
+ _cleanup_child($read_handle, $input_tag_ref);
+ }
+ } else {
+ parent_process_response($data);
+ }
+}
+
+sub parent_process_response {
+ my ($data) = @_;
+}
+
+
+sub child_process {
+ my ($handle) = @_;
+
+}
+
+sub _error {
+ my ($msg) = @_;
+ my $win = Irssi::active_win();
+ $win->print($msg, Irssi::MSGLEVEL_CLIENTERROR);
+}
+
+sub _msg {
+ my ($msg) = @_;
+ my $win = Irssi::active_win();
+ $win->print($msg, Irssi::MSGLEVEL_CLIENTCRAP);
+}
+
+Irssi::command_bind("start_pipes", \&pipe_and_fork);
diff --git a/testing/test.pl b/testing/test.pl
new file mode 100755
index 0000000..bf01530
--- /dev/null
+++ b/testing/test.pl
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use feature qw/say/;
+#use lib 'blib/lib';
+
+use TAP::Harness;
+my $harness = TAP::Harness->new({ verbosity => 1,
+ lib => 'blib/lib',
+ color => 1,
+ });
+
+my @tests = glob($ARGV[0]);
+say "Tests: " . join (", ", @tests);
+$harness->runtests(@tests);
diff --git a/testing/tests/001-basic.t b/testing/tests/001-basic.t
new file mode 100755
index 0000000..60578d8
--- /dev/null
+++ b/testing/tests/001-basic.t
@@ -0,0 +1,50 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use feature qw/say/;
+use Test::Irssi;
+
+my $tester = Test::Irssi->new
+ (irssi_binary => "/opt/stow/repo/irssi-debug/bin/irssi",
+ irssi_homedir => $ENV{HOME} . "/projects/tmp/test/irssi-debug");
+
+if (exists $ENV{IRSSI_TEST_HEADLESS} and $ENV{IRSSI_TEST_NOHEADLESS} == 1) {
+ $tester->run_headless(0);
+ $tester->generate_tap(0);
+} else {
+ $tester->run_headless(1);
+ $tester->generate_tap(1);
+}
+
+my $test = $tester->new_test('test1');
+$test->description("simple echo tests");
+
+$test->add_input_sequence("/echo Hello cats\n");
+$test->add_delay(1);
+$test->add_input_sequence("/echo Hello Again\n");
+$test->add_input_sequence("this is a long test");
+$test->add_delay(0.5);
+$test->add_pattern_match(qr/long/, 'prompt', 'prompt contains long');
+$test->add_delay(1);
+
+$test->add_pattern_match(qr/this is a .*? test/, 'prompt', 'prompt matches');
+
+my $test2 = $tester->new_test('test2');
+$test2->description("cursor movement and deletion");
+
+$test2->add_delay(1);
+$test2->add_input_sequence("\x01");
+$test2->add_delay(0.1);
+$test2->add_input_sequence("\x0b");
+$test2->add_delay(0.1);
+$test2->add_input_sequence("/clear\n");
+$test2->add_delay(0.1);
+$test2->add_input_sequence("/echo moo\n");
+
+my $quit = $tester->new_test('quit');
+$quit->description('quitting');
+$quit->add_input_sequence("/quit\n");
+
+$tester->run;
diff --git a/testing/tests/002-cursor-test.t b/testing/tests/002-cursor-test.t
new file mode 100755
index 0000000..eb35170
--- /dev/null
+++ b/testing/tests/002-cursor-test.t
@@ -0,0 +1,29 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use feature qw/say/;
+use Test::Irssi;
+
+my $tester = Test::Irssi->new
+ (irssi_binary => "/opt/stow/repo/irssi-debug/bin/irssi",
+ irssi_homedir => $ENV{HOME} . "/projects/tmp/test/irssi-debug");
+
+if (exists $ENV{IRSSI_TEST_HEADLESS} and $ENV{IRSSI_TEST_NOHEADLESS} == 1) {
+ $tester->run_headless(0);
+ $tester->generate_tap(0);
+} else {
+ $tester->run_headless(1);
+ $tester->generate_tap(1);
+}
+
+my $test = $tester->new_test('test1');
+$test->description("simple echo tests");
+$test->add_diag("Testing 123");
+
+my $quit = $tester->new_test('quit');
+$quit->description('quitting');
+$quit->add_input_sequence("/quit\n");
+
+$tester->run;
diff --git a/tinyurl-tabcomplete/README.pod b/tinyurl-tabcomplete/README.pod
new file mode 100644
index 0000000..f29ace0
--- /dev/null
+++ b/tinyurl-tabcomplete/README.pod
@@ -0,0 +1,56 @@
+=pod
+
+=head1 NAME
+
+complete-tiny-url.pl
+
+=head1 DESCRIPTION
+
+Shortens web links from your Irssi input field by pressing tab directly after
+them.
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD complete-tiny-url.pl>. You may wish to have it autoload in one of the
+L<usual ways|https://github.com/shabble/irssi-docs/wiki/Guide#Autorunning_Scripts>.
+
+=head1 USAGE
+
+Type or paste a URL into your input field, then immediately following the last
+character of it, press the C<E<lt>TABE<gt>> key. After a few seconds, the
+URL will be replaced with an appropriate L<http://tinyurl.com/> address.
+
+=head1 AUTHORS
+
+Copyright E<copy> 2010-2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>> and
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+None Known. Please report any at
+L<https://github.com/shabble/irssi-scripts/issues/new>
+
+
+
+=cut
+
diff --git a/tinyurl-tabcomplete/complete-tiny-url.pl b/tinyurl-tabcomplete/complete-tiny-url.pl
index 79d1161..b2d448f 100644
--- a/tinyurl-tabcomplete/complete-tiny-url.pl
+++ b/tinyurl-tabcomplete/complete-tiny-url.pl
@@ -1,17 +1,72 @@
+=pod
+
+=head1 NAME
+
+complete-tiny-url.pl
+
+=head1 DESCRIPTION
+
+Shortens web links from your Irssi input field by pressing tab directly after
+them.
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD complete-tiny-url.pl>. You may wish to have it autoload in one of the
+L<usual ways|https://github.com/shabble/irssi-docs/wiki/Guide#Autorunning_Scripts>.
+
+=head1 USAGE
+
+Type or paste a URL into your input field, then immediately following the last
+character of it, press the C<E<lt>TABE<gt>> key. After a few seconds, the
+URL will be replaced with an appropriate L<http://tinyurl.com/> address.
+
+=head1 AUTHORS
+
+Copyright E<copy> 2010-2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>> and
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+None Known. Please report any at
+L<https://github.com/shabble/irssi-scripts/issues/new>
+
+=cut
+
+
use strict;
-use vars qw($VERSION %IRSSI);
+use warnings;
use Irssi;
use WWW::Shorten::TinyURL;
-$VERSION = '1.0';
-%IRSSI = (
+our $VERSION = '1.0';
+our %IRSSI = (
authors => 'Shabble',
contact => 'shabble+irssi /at/ metavore /dot/ org',
name => 'Shorten URLs using Tab',
description => 'Hitting Tab after typing/pasting a long URL will replace it with'
. ' its tinyURL.com equivalent',
- license => 'WTFPL',
+ license => 'MIT',
);
sub do_complete {
diff --git a/undo/kill-ring.pl b/undo/kill-ring.pl
new file mode 100644
index 0000000..c3600a6
--- /dev/null
+++ b/undo/kill-ring.pl
@@ -0,0 +1,129 @@
+# DOCUMENTATION:
+#
+#
+#
+#
+# LICENCE:
+#
+# Copyright (c) 2011 Tom Feist <shabble+irssi@metavore.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+
+use strict;
+use warnings;
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => 'kill-ring',
+ description => 'keeps track of changes to the cutbuffer'
+ . ' and allows you to cycle through them',
+ license => 'MIT',
+ updated => '$DATE'
+ );
+
+my @cut_buf_history;
+
+sub cut_buffer_init {
+ Irssi::signal_add_first('gui key pressed' => \&sig_cmd_undo);
+ Irssi::command_bind('cut_buf_cycle' => \&cmd_cut_buf_cycle);
+}
+
+sub add_to_history {
+ my ($str) = @_;
+
+ return unless defined $str;
+
+ my $head = $cut_buf_history[-1];
+
+ if (defined $head and $str ne $head) {
+ push @cut_buf_history, $str;
+ } elsif (not defined $head) {
+ push @cut_buf_history, $str;
+ }
+
+ # enforce maximum size
+ # TODO: make this a setting?
+
+ if (@cut_buf_history > 100) {
+ shift @cut_buf_history;
+ }
+}
+
+sub cmd_cut_buf_cycle {
+ print '%_Cut buffer contains:%_';
+ foreach my $buf (@cut_buf_history) {
+ print "$buf"
+ }
+}
+
+sub sig_cmd_undo {
+ my ($key) = @_;
+ add_to_history(_cut_buf());
+}
+
+sub _cut_buf {
+ return Irssi::parse_special('$U', 0, 0);
+}
+
+sub _input {
+ my ($data) = @_;
+
+ my $current_data = Irssi::parse_special('$L', 0, 0);
+
+ # TODO: set this back up.
+
+ # if ($settings->{utf8}->{value}) {
+ # $current_data = decode_utf8($current_data);
+ # }
+
+ if (defined $data) {
+ # if ($settings->{utf8}->{value}) {
+ # Irssi::gui_input_set(encode_utf8($data));
+ # } else {
+ Irssi::gui_input_set($data);
+ #}
+ } else {
+ $data = $current_data;
+ }
+
+ return $data;
+}
+
+sub _input_pos {
+ my ($pos) = @_;
+ my $cur_pos = Irssi::gui_input_get_pos();
+ if (defined $pos) {
+ Irssi::gui_input_set_pos($pos) if $pos != $cur_pos;
+ } else {
+ $pos = $cur_pos;
+ }
+
+ return $pos;
+}
+
+cut_buffer_init();
diff --git a/undo/undo.pl b/undo/undo.pl
new file mode 100644
index 0000000..5daa16e
--- /dev/null
+++ b/undo/undo.pl
@@ -0,0 +1,134 @@
+# LICENCE:
+#
+# Copyright (c) 2011 Tom Feist <shabble+irssi@metavore.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+
+# TODO: attempt to create an undo function for short-term history in
+# the input-bar.
+
+use strict;
+use warnings;
+
+use Irssi;
+use Irssi::Irc;
+use Irssi::TextUI;
+
+use Data::Dumper;
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => '',
+ description => '',
+ license => 'MIT',
+ );
+
+my @undo_list;
+
+sub undo_init {
+ Irssi::signal_add_first('gui key pressed' => \&sig_cmd_undo);}
+}
+
+sub add_to_undo {
+ my ($str, $pos) = @_;
+
+ return unless defined $str and defined $pos;
+
+ my $undo_head = $undo_list[-1];
+
+ if (ref $undo_head) {
+ if ($str ne $undo_head->{str} && $pos != $undo_head->{pos}) {
+ push @undo_list, { str => $str, pos => $pos };
+ }
+ } else {
+ push @undo_list, { str => $str, pos => $pos };
+ }
+
+ # enforce maximum size
+ # TODO: make this a setting?
+
+ if (@undo_list > 100) {
+ shift @undo_list;
+ }
+}
+
+sub sig_cmd_undo {
+ my ($key) = @_;
+
+ if ($key == 10) {
+ @undo_list = ();
+ return;
+ } elsif ($key != 28) {
+ add_to_undo(_input(), _input_pos());
+ return;
+ }
+
+ Irssi::signal_stop();
+
+ my $prev_state = pop @undo_list;
+
+ if (not defined $prev_state) {
+ print "No further undo";
+ return;
+ }
+
+ _input($prev_state->{str});
+ _input_pos($prev_state->{pos});
+}
+
+sub _input {
+ my ($data) = @_;
+
+ my $current_data = Irssi::parse_special('$L', 0, 0);
+
+ # TODO: set this back up.
+
+ # if ($settings->{utf8}->{value}) {
+ # $current_data = decode_utf8($current_data);
+ # }
+
+ if (defined $data) {
+ # if ($settings->{utf8}->{value}) {
+ # Irssi::gui_input_set(encode_utf8($data));
+ # } else {
+ Irssi::gui_input_set($data);
+ #}
+ } else {
+ $data = $current_data;
+ }
+
+ return $data;
+}
+
+sub _input_pos {
+ my ($pos) = @_;
+ my $cur_pos = Irssi::gui_input_get_pos();
+ if (defined $pos) {
+ Irssi::gui_input_set_pos($pos) if $pos != $cur_pos;
+ } else {
+ $pos = $cur_pos;
+ }
+
+ return $pos;
+}
+
+undo_init();
diff --git a/vim-mode/README.pod b/vim-mode/README.pod
new file mode 100644
index 0000000..83962ff
--- /dev/null
+++ b/vim-mode/README.pod
@@ -0,0 +1,584 @@
+=pod
+
+=head1 NAME
+
+vim_mode.pl
+
+=head1 DESCRIPTION
+
+An Irssi script to emulate some of the vi(m) features for the Irssi inputline.
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD vim_mode.pl>. You may wish to have it autoload in one of the
+L<usual ways|https://github.com/shabble/irssi-docs/wiki/Guide#Autorunning_Scripts>.
+
+=head2 DEPENDENCIES
+
+For proper :ex mode support, vim-mode requires the installation of F<uberprompt.pl>
+Uberprompt can be downloaded from:
+
+L<https://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl>
+
+and follow the instructions at the top of that file for installation.
+
+If you don't need Ex-mode, you can run vim_mode.pl without the
+uberprompt.pl script, but it is strongly recommended that you use it.
+
+=head3 Irssi requirements
+
+0.8.12 and above should work fine. However the following features are
+disabled in irssi < 0.8.13:
+
+=over 4
+
+=item * C<j> C<k> (only with count, they work fine without count in older versions)
+
+=item * C<gg>, C<G>
+
+=back
+
+It is intended to work with at Irssi 0.8.12 and later versions. However some
+features are disabled in older versions (see below for details).
+
+Perl >= 5.8.1 is recommended for UTF-8 support (which can be disabled if
+necessary). Please report bugs in older versions as well, we'll try to fix
+them. Later versions of Perl are also faster, which is probably beneficial
+to a script of this size and complexity.
+
+=head2 SETUP
+
+Vim Mode provides certain feedback to the user, such as the currently active
+mode (command, insert, ex), and if switching buffers, which buffer(s) currently
+match the search terms.
+
+There are two ways to go about displaying this information, as described in
+the following sections:
+
+=head3 Statusbar Items
+
+Run the following command to add a statusbar item that shows which mode
+you're in.
+
+C</statusbar window add vim_mode>
+
+And the following to let C<:b [str]> display a list of channels matching your
+search string.
+
+C</statusbar window add vim_windows>
+
+B<Note:> Remember to C</save> after adding these statusbar items to make them
+permanent.
+
+B<Note:> If you would rather have these statusbar items on your prompt
+line rather than thte window statusbar, please follow these steps.
+
+For technical reasons, I<uberprompt> must occasionally call C</statusbar prompt
+reset>, which will remove or deactivate any manually added items on the prompt
+statusbar. To get around this, uberprompt provides two command hooks,
+C<uberprompt_load_hook> and C<uberprompt_unload_hook>. Both of these settings
+can contain one (or more, using C</EVAL>) commands to be executed when the prompt
+is enabled and disabled, respectively.
+
+See the L<uberprompt documentation|https://github.com/shabble/irssi-scripts/blob/master/prompt_info/README.pod> for further details.
+
+For I<right-aligned> items (that is, after the input field:
+
+=over 4
+
+=item 1 C</alias vm_add /^statusbar prompt add -after input -alignment right vim_mode>
+
+=item 2 C</alias vm_del /^statusbar prompt remove vim_mode>
+
+=item 3 C</set uberprompt_load_hook /^vm_add>
+
+=item 4 C</set uberprompt_unload_hook /^vm_del>
+
+=back
+
+For I<left-aligned> items (before the prompt):
+
+=over 4
+
+=item 1 C</alias vm_add /^statusbar prompt add -before prompt -alignment left vim_mode>
+
+=item 2 C</alias vm_del /^statusbar prompt remove vim_mode>
+
+=item 3 C</set uberprompt_load_hook /^vm_add>
+
+=item 4 C</set uberprompt_unload_hook /^vm_del>
+
+=back
+
+If you wish to add both C<vim_mode> and C<vim_windows> items, replace steps 1 and 2
+above with the following (right-aligned):
+
+=over 4
+
+=item 1 C</alias vm_add /^eval /^statusbar prompt add -after input -alightment right vim_mode ; /^statusbar prompt add -after input -alignment right vim_windows>
+
+=item 2 C</alias vm_del /^eval /^statusbar prompt remove vim_mode ; /^statusbar prompt remove vim_windows>
+
+=back
+
+and then complete stages 3 and 4 as above. Replace the C<-after> and C<-alignment>
+to suit your location preferences.
+
+B<Note:> It is also possible to place the items between the prompt and input field,
+by specifying C<-after prompt> or C<-before input> as appropriate.
+
+=head3 Expando Variables
+
+Vim mode augments the existing Irssi expando (automatic variables) with two
+additional ones: C<$vim_cmd_mode> and C<$vim_wins>.
+
+C<$vim_cmd_mode> is the equivalent of the C<vim_mode> statusbar item, and
+C<$vim_wins> is the counterpart of C<vim_windows>.
+
+They can be added to your theme, or inserted into your uberprompt using
+a command such as:
+
+"C</set uberprompt_format [$vim_cmd_mode] $*$uber] >"
+
+=head3 FILE-BASED CONFIGURATION
+
+Additionally to the irssi settings described in L<settings|/SETTINGS>, vim_mode
+can be configured through an external configuration file named "vim_moderc"
+located in F<~/.irssi/vim_moderc>. If available it's loaded on startup and every
+supported ex-command is run. Its syntax is similar to "vimrc". To (re)load it
+while vim_mode is running use C<:so[urce]>.
+
+Currently Supported ex-commands:
+
+=over 4
+
+=item * C<:map>
+
+=back
+
+=head1 USAGE
+
+The following section is divided into the different modes as supported by Vim itself:
+
+=head2 COMMAND MODE
+
+It supports most commonly used command mode features:
+
+=over 2
+
+=item * Insert/Command mode.
+
+C<Esc> and C<Ctrl-C> enter command mode. C</set vim_mode_cmd_seq j> allows
+to use C<jj> as Escape (any other character can be used as well).
+
+=item * Cursor motion:
+
+C<h l 0 ^ $ E<lt>SpaceE<gt> E<lt>BSE<gt> f t F T>
+
+=item * History motion:
+
+C<j k gg G> C<gg> moves to the oldest (first) history line. C<G> without a
+count moves to the current input line, with a count it goes to the I<count-th>
+history line (1 is the oldest).
+
+=item * Cursor word motion:
+
+C<w b ge e W gE B E>
+
+=item * Word objects (only the following work yet):
+
+C<aw aW>
+
+=item * Yank and paste:
+
+ C<y p P>
+
+=item * Change and delete:
+
+C<c d>
+
+=item * Delete at cursor:
+
+C<x X>
+
+=item * Replace at cursor:
+
+C<r>
+
+=item * Insert mode:
+
+C<i a I A>
+
+=item * Switch case:
+
+C<~>
+
+=item * Repeat change:
+
+C<.>
+
+=item * Repeat
+
+C<ftFT: ; ,>
+
+=item * Registers:
+
+C<"a-"z "" "0 "* "+ "_> (black hole)
+
+=item * Line-wise shortcuts:
+
+C<dd cc yy>
+
+=item * Shortcuts:
+
+C<s S C D>
+
+=item * Scroll the scrollback buffer:
+
+C<Ctrl-E Ctrl-D Ctrl-Y Ctrl-U Ctrl-F Ctrl-B>
+
+=item * Switch to last active window:
+
+C<Ctrl-6/Ctrl-^>
+
+=item * Switch split windows:
+
+<Ctrl-W j Ctrl-W k>
+
+=item * Undo/Redo:
+
+C<u Ctrl-R>
+
+=back
+
+Counts and combinations work as well, e.g. C<d5fx> or C<3iabcE<lt>escE<gt>>. Counts also work with mapped ex-commands (see below), e.g. if you map C<gb> to do C<:bn>, then C<2gb> will switch to the second next buffer. Repeat also supports counts.
+
+=head3 REGISTERS
+
+=over 4
+
+=item * Appending to register with C<"A-"Z>
+
+=item * C<""> is the default yank/delete register.
+
+=item * C<"0> contains the last yank (if no register was specified).
+
+=item * The special registers C<"* "+> both contain irssi's internal cut-buffer.
+
+=back
+
+=head2 INSERT MODE
+
+The following insert mode mappings are supported:
+
+=over 4
+
+=item * Insert register content: Ctrl-R x (where x is the register to insert)
+
+=back
+
+=head2 EX-MODE
+
+Ex-mode (activated by C<:> in command mode) supports the following commands:
+
+=over 4
+
+=item * Command History:
+
+C<E<lt>uparrowE<gt>> - cycle backwards through history
+
+C<E<lt>downarrowE<gt>> - cycle forwards through history
+
+C<:eh> - show ex history
+
+=item * Switching buffers:
+
+C<:[N]b [N]> - switch to channel number
+
+C<:b#> - switch to last channel
+
+C<:b> E<lt>partial-channel-nameE<gt>
+
+C<:b> <partial-server>/<partial-channel>
+
+C<:buffer {args}> (same as C<:b>)
+
+C<:[N]bn[ext] [N]> - switch to next window
+
+C<:[N]bp[rev] [N]> - switch to previous window
+
+=item * Close window:
+
+C<:[N]bd[elete] [N]>
+
+=item * Display windows:
+
+C<:ls>, C<:buffers>
+
+=item * Display registers:
+
+C<:reg[isters] {args}>, C<:di[splay] {args}>
+
+=item * Display undolist:
+
+C<:undol[ist]> (mostly used for debugging)
+
+=item * Source files:
+
+C<:so[urce]> - only sources vim_moderc at the moment,
+ F<{file}> not supported
+
+=item * Mappings:
+
+C<:map> - display custom mappings
+
+=item * Saving mappings:
+
+C<:mkv[imrc][!]> - like in Vim, but [file] not supported
+
+=item * Substitution:
+
+C<:s///> - I<i> and I<g> are supported as flags, only C<///> can be used as
+eparator, and it uses Perl regex syntax instead of Vim syntax.
+
+=item * Settings:
+
+C<:se[t]> - display all options
+
+C<:se[t] {option}> - display all matching options
+
+C<:se[t] {option} {value}> - change option to value
+
+=back
+
+=head3 MAPPINGS
+
+=head4 Commands
+
+=over 4
+
+=item * C<:map {lhs}> - display mappings starting with {lhs}
+
+=item * C<:map {lhs} {rhs}> - add mapping
+
+=item * C<:unm[ap] {lhs}> - remove custom mapping
+
+=back
+
+=head4 Parameters
+
+I<{lhs}> is the key combination to be mapped, I<{rhs}> the target. The
+C<E<lt>E<gt>> notation is used
+
+(e.g. C<E<lt>C-FE<gt>> is I<Ctrl-F>), case is ignored.
+ Supported C<E<lt>E<gt>> keys are:
+
+=over 4
+
+=item * C<E<lt>C-AE<gt>> - C<E<lt>C-ZE<gt>>,
+
+=item * C<E<lt>C-^E<gt>>, C<E<lt>C-6E<gt>>
+
+=item * C<E<lt>SpaceE<gt>>
+
+=item * C<E<lt>CRE<gt>> - Enter
+
+=item * C<E<lt>BSE<gt>> - Backspace
+
+=item * C<E<lt>NopE<gt>> - No-op (Do Nothing).
+
+=back
+
+Mapping ex-mode and irssi commands is supported. When mapping ex-mode commands
+the trailing C<E<lt>CrE<gt>> is not necessary. Only default mappings can be used
+in I<{rhs}>.
+
+Examples:
+
+=over 4
+
+=item * C<:map w W> - to remap w to work like W
+
+=item * C<:map gb :bnext> - to map gb to call :bnext
+
+=item * C<:map gB :bprev>
+
+=item * C<:map g1 :b 1> - to map g1 to switch to buffer 1
+
+=item * C<:map gb :b> - to map gb to :b, 1gb switches to buffer 1, 5gb to 5
+
+=item * C<:map E<lt>C-LE<gt> /clear> - map Ctrl-L to irssi command /clear
+
+=item * C<:map E<lt>C-GE<gt> /window goto 1>
+
+=item * C<:map E<lt>C-EE<gt> <Nop>> - disable E<lt>C-EE<gt>, it does nothing now
+
+=item * C<:unmap E<lt>C-EE<gt>> - restore default behavior of C<E<lt>C-EE<gt>>
+after disabling it
+
+=back
+
+Note that you must use C</> for irssi commands (like C</clear>), the current value
+of Irssi's cmdchars does B<not> work! This is necessary do differentiate between
+ex-commands and irssi commands.
+
+=head2 SETTINGS
+
+The settings are stored as irssi settings and can be set using C</set> as usual
+(prepend C<vim_mode_> to setting name) or using the C<:set> ex-command. The
+following settings are available:
+
+=over 4
+
+=item * utf8 - Support UTF-8 characters, boolean, default on
+
+=item * debug - Enable debug output, boolean, default off
+
+=item * cmd_seq - Char that when double-pressed simulates C<E<lt>EscE<gt>>, string, default '' (disabled)
+
+=item * start_cmd - Start every line in command mode, boolean, default off
+
+=item * max_undo_lines - Sze of the undo buffer. Integer, default 50 items.
+
+=item * ex_history_size - Number of items stored in the ex-mode history. Integer, default 100.
+
+=item * prompt_leading_space - Ddetermines whether ex mode prepends a space to the displayed input. Boolean, default on
+
+=back
+
+In contrast to irssi's settings, C<:set> accepts 0 and 1 as values for boolean
+settings, but only vim_mode's settings can be set/displayed.
+
+Examples:
+
+ :set cmd_seq=j # set cmd_seq to j
+ :set cmd_seq= # disable cmd_seq
+ :set debug=on # enable debug
+ :set debug=off # disable debug
+
+=head1 SUPPORT
+
+Any behavior different from Vim (unless explicitly documented) should be
+considered a bug and reported.
+
+B<NOTE:> This script is still under heavy development, and there may be bugs.
+Please submit reproducible sequences to the bug-tracker at:
+L<http://github.com/shabble/irssi-scripts/issues/new>
+
+or contact rudi_s or shabble on irc.freenode.net (#irssi and #irssi_vim)
+
+=head1 AUTHORS
+
+Copyright E<copy> 2010-2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>> and
+
+Copyright E<copy> 2010-2011 Simon Ruderich C<E<lt>simon@ruderich.orgE<gt>>
+
+=head1 THANKS
+
+Particular thanks go to
+
+=over 4
+
+=item * estragib: a lot of testing and many bug reports and feature requests
+
+=item * iaj: testing
+
+=item * tmr: explaining how various bits of vim work
+
+=back
+
+as well as the rest of C<#irssi> and C<#irssi_vim> on Freenode IRC.
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+=over 4
+
+=item *
+
+count before register doesn't work: e.g. 3"ap doesn't work, but "a3p does
+
+=item *
+
+mapping an incomplete ex-command doesn't open the ex-mode with the partial
+command (e.g. C<:map gb :b> causes an error instead of opening the ex-mode and
+displaying C<:bE<lt>cursorE<gt>>)
+
+=item *
+
+ undo/redo cursor positions are mostly wrong
+
+=back
+
+=head1 TODO
+
+=over 4
+
+=item *
+
+History:
+
+=over 4
+
+=item *
+
+ C< * /,?,n,N> to search through history (like rl_history_search.pl)
+
+=back
+
+=item *
+
+Window switching (C<:b>)
+
+=over 4
+
+=item *
+
+Tab completion of window(-item) names
+
+=item *
+
+non-sequential matches(?)
+
+=back
+
+=back
+
+See also the TODO file at
+L<github|https://github.com/shabble/irssi-scripts/blob/master/vim-mode/TODO> for
+many many more things.
+
+=head2 WONTFIX
+
+Things we're not ever likely to do:
+
+=over 4
+
+=item * Macros
+
+=back
+
+
+
+=cut
+
diff --git a/vim-mode/input.txt b/vim-mode/input.txt
new file mode 100644
index 0000000..790060a
--- /dev/null
+++ b/vim-mode/input.txt
@@ -0,0 +1,58 @@
+How the input system for vim_mode should work.
+=============================================
+
+* insert mode mappings
+* normal (command) mode mappings
+* timeout for ambiguous mappings
+** but support for no timeout for some mappings (like Ctrl-R in insert mode)
+* maybe 'timeout' and 'ttimeout' settings (and 'timeoutlen' and 'ttimeoutlen')
+* partial commands/mappings (like :map a :b a which inserts ex mode and
+* displays :b a there without running any command)
+* support for mappings entering insert mode: :map gX itexthere<esc> (also without esc!)
+** (.) (repeat) for all (most) commands
+* more general command order: 3"ap doesn't work but "a3p does
+* arbitrary mappings, like 3dwjjihi<esc>10G (at the moment even :map Y y$ doesn't work)
+* support to disable mappings temporarily (:set paste, 'pastetoggle')
+* (better) support multiple bindings for the same action (especially <BS> and <C-H>)
+* unmapping of internal mappings (for example <C-C> to <Nop> as it's also used for colors in irssi)
+* better approach to detecting single ESC push (compared to F-keys or meta-* keys)
+
+We base the input model on a simple state machine.
+It can exist in any of 4 (5) states:
+ - insert mode
+ - insert escape mode
+ a transitional mode to distingush that we've received an escape char.
+ - command mode
+ - ex mode
+ - visual mode (can be mostly ignored for now, until I sort my overlays stuff
+ out)
+
+to swap between these modes, there are various bindings available.
+The most challenging is going from insert -> command. Typically this is done
+by a single push of the <esc> key, but C-c and <jj> are both alternatives that
+people use.
+
+The single entrypoint we have into the input system is detecting keystrokes.
+when a 'gui key pressed' signal is fired, we can receive, process and interrupt
+it such that it never gets passed to irssi proper.
+
+in order to detect single <esc> presses from their meta comrades, we operate
+as the following:
+
+if (key == 27) {
+ mode = insert_escape
+ add_timeout(short, check_escape_buffer)
+} elsif (mode == insert_escape) {
+ insert(key, escape_buffer)
+} else {
+ # do nothing
+}
+
+sub check_escape_buffer {
+# when the timeout fires, we can assume that only meta-keys would be fast enough
+# to insert additional characters into the buffer. In which case, we replay
+# them and clear the buffer.
+ mode = insert_mode;
+# if the buffer is otherwise empty, we have received a single escape press.
+ mode = command_mode;
+}
diff --git a/vim-mode/irssi/config b/vim-mode/irssi/config
new file mode 100644
index 0000000..d0b0805
--- /dev/null
+++ b/vim-mode/irssi/config
@@ -0,0 +1,38 @@
+# Minimal default irssi configuration file - with vim-mode statusbars.
+
+
+servers = ( );
+
+chatnets = { };
+
+channels = ( );
+
+aliases = { };
+
+statusbar = {
+ default = {
+ window = {
+ items = {
+ barstart = { priority = "100"; };
+ time = { };
+ user = { };
+ window = { };
+ window_empty = { };
+ lag = { priority = "-1"; };
+ act = { priority = "10"; };
+ more = { priority = "-1"; alignment = "right"; };
+ barend = { priority = "100"; alignment = "right"; };
+ vim_mode = { };
+ vim_windows = { };
+ };
+ };
+
+ prompt = {
+ items = {
+ uberprompt = { priority = "-1"; };
+ input = { priority = "10"; };
+ };
+ position = "100";
+ };
+ };
+};
diff --git a/vim-mode/irssi/scripts/autorun/uberprompt.pl b/vim-mode/irssi/scripts/autorun/uberprompt.pl
new file mode 120000
index 0000000..3d4d97a
--- /dev/null
+++ b/vim-mode/irssi/scripts/autorun/uberprompt.pl
@@ -0,0 +1 @@
+../../../../prompt_info/uberprompt.pl \ No newline at end of file
diff --git a/vim-mode/irssi/scripts/autorun/vim_mode.pl b/vim-mode/irssi/scripts/autorun/vim_mode.pl
new file mode 120000
index 0000000..ed78131
--- /dev/null
+++ b/vim-mode/irssi/scripts/autorun/vim_mode.pl
@@ -0,0 +1 @@
+../../../../vim-mode/vim_mode.pl \ No newline at end of file
diff --git a/vim-mode/tests.pl b/vim-mode/tests.pl
new file mode 100644
index 0000000..9007171
--- /dev/null
+++ b/vim-mode/tests.pl
@@ -0,0 +1,171 @@
+#!/usr/bin/env perl
+
+# Must be run in a 80x24 terminal unless a fixed POE is released.
+
+
+use strict;
+use warnings;
+
+use lib '../testing/blib/lib';
+
+use Test::Irssi;
+
+# Mode constants: C(ommand), I(nsert).
+sub C () { 0 }
+sub I () { 1 }
+
+
+sub statusbar_mode {
+ my ($test, $mode) = @_;
+
+ $test->add_pattern_match(qr/^ \[\d{2}:\d{2}\] \[\] \[1\] \[$mode\]\s+$/,
+ 'window_sbar', "[$mode] in vim-mode statusbar");
+}
+sub cursor_position {
+ my ($test, $position) = @_;
+
+ $test->test_cursor_position($position, 24, "Checking cursor position");
+}
+
+sub check {
+ my ($test, $input, $mode, $position, $delay) = @_;
+
+ if (defined $input) {
+ $test->add_input_sequence($input);
+ if (not defined $delay) {
+ $delay = 0.1;
+ $delay += 0.4 if $input =~ /\e/; # esc needs a longer delay
+ }
+ $test->add_delay($delay);
+ }
+
+ cursor_position($test, $position);
+ if ($mode == C) {
+ statusbar_mode($test, 'Command');
+ } elsif ($mode == I) {
+ statusbar_mode($test, 'Insert');
+ } else {
+ die "Wrong mode: $mode";
+ }
+}
+
+my $tester = Test::Irssi->new
+ (irssi_binary => "irssi",
+ irssi_homedir => "./irssi/");
+
+
+$tester->run_headless(1);
+$tester->generate_tap(1);
+
+my $test = $tester->new_test('insert-command-mode');
+$test->description("switching between insert and command mode");
+# Make sure irssi is finished - not entirely sure why this is necessary.
+$test->add_delay(2);
+
+# We start in insert mode.
+check $test, undef, I, 12 + 0;
+check $test, "\e", C, 12 + 0;
+check $test, 'i', I, 12 + 0;
+
+# Quit irssi, necessary to terminate the test.
+#$test->add_input_sequence("\n/quit\n");
+
+
+# FIXME: multiple tests don't work
+#$test = $tester->new_test('basic-movement');
+#$test->description('basic movement');
+#$test->add_delay(2);
+
+my $test_string =
+ 'Test $tring. with a 4711, words , w.r#s42 etc. and more123! ..';
+
+check $test, $test_string, I, 12 + length $test_string;
+check $test, "\e", C, 12 + 64;
+
+# h l
+check $test, "0", C, 12 + 0;
+check $test, "l", C, 12 + 1;
+check $test, "l", C, 12 + 2;
+check $test, "l", C, 12 + 3;
+check $test, "l", C, 12 + 4;
+check $test, "l", C, 12 + 5;
+check $test, "l", C, 12 + 6;
+check $test, "l", C, 12 + 7;
+check $test, "h", C, 12 + 6;
+check $test, "h", C, 12 + 5;
+check $test, "h", C, 12 + 4;
+check $test, "h", C, 12 + 3;
+check $test, "h", C, 12 + 2;
+check $test, "10l", C, 12 + 12;
+check $test, "7l", C, 12 + 19;
+check $test, "3l", C, 12 + 22;
+check $test, "3h", C, 12 + 19;
+check $test, "50l", C, 12 + 64;
+check $test, "10l", C, 12 + 64;
+check $test, "24h", C, 12 + 40;
+check $test, "100h", C, 12 + 0;
+
+# 0 ^ $
+check $test, "I \e", C, 12 + 4; # insert test string for ^
+check $test, "0", C, 12 + 0;
+check $test, "^", C, 12 + 5;
+check $test, "3^", C, 12 + 5;
+check $test, "12^", C, 12 + 5;
+check $test, "\$", C, 12 + 46;
+check $test, "05x", C, 12 + 0; # remove test string for ^
+
+# <Space> <BS>
+check $test, "0", C, 12 + 0;
+check $test, " ", C, 12 + 1;
+check $test, " ", C, 12 + 2;
+check $test, " ", C, 12 + 3;
+check $test, " ", C, 12 + 4;
+check $test, " ", C, 12 + 5;
+check $test, " ", C, 12 + 6;
+check $test, " ", C, 12 + 7;
+check $test, " ", C, 12 + 8;
+check $test, "5 ", C, 12 + 13;
+check $test, "2 ", C, 12 + 15;
+check $test, "10 ", C, 12 + 25;
+check $test, "30 ", C, 12 + 55;
+check $test, "20 ", C, 12 + 64;
+check $test, "10 ", C, 12 + 64;
+check $test, " ", C, 12 + 64;
+check $test, "\x7f", C, 12 + 63;
+check $test, "\x7f", C, 12 + 62;
+check $test, "\x7f", C, 12 + 61;
+check $test, "\x7f", C, 12 + 60;
+check $test, "1\x7f", C, 12 + 59;
+check $test, "3\x7f", C, 12 + 56;
+check $test, "5\x7f", C, 12 + 51;
+check $test, "10\x7f", C, 12 + 41;
+check $test, "50\x7f", C, 12 + 0;
+check $test, "\x7f", C, 12 + 0;
+check $test, "5\x7f", C, 12 + 0;
+
+# f t
+check $test, "0", C, 12 + 0;
+check $test, "fe", C, 12 + 1;
+check $test, "fs", C, 12 + 2;
+check $test, "ft", C, 12 + 3;
+check $test, "f ", C, 12 + 4;
+check $test, "2f ", C, 12 + 17;
+check $test, "5f,", C, 12 + 17;
+check $test, "2f,", C, 12 + 32;
+check $test, "tw", C, 12 + 33;
+check $test, "t ", C, 12 + 40;
+check $test, "t ", C, 12 + 40;
+check $test, "t ", C, 12 + 40;
+check $test, "2t ", C, 12 + 41;
+check $test, "2t ", C, 12 + 46;
+check $test, "3t ", C, 12 + 48;
+check $test, "t!", C, 12 + 60;
+check $test, "t ", C, 12 + 61;
+check $test, "t.", C, 12 + 62;
+check $test, "t.", C, 12 + 62;
+check $test, "5t.", C, 12 + 62;
+check $test, "\$", C, 12 + 64;
+
+$test->add_input_sequence("\n/quit\n");
+
+$tester->run;
diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl
index 7d898ab..dd83f8a 100644
--- a/vim-mode/vim_mode.pl
+++ b/vim-mode/vim_mode.pl
@@ -1,238 +1,589 @@
-# A script to emulate some of the vi(m) features for the Irssi inputline.
-#
-# It should work fine with at least 0.8.12 and later versions. However some
-# features are disabled in older versions (see below for details). Perl >=
-# 5.8.1 is recommended for UTF-8 support (which can be disabled if necessary).
-# Please report bugs in older versions as well, we'll try to fix them.
-#
-# Any behavior different from Vim (unless explicitly documented) should be
-# considered a bug and reported.
-#
-# NOTE: This script is still under heavy development, and there may be bugs.
-# Please submit reproducible sequences to the bug-tracker at:
-# http://github.com/shabble/irssi-scripts/issues
-#
-# or contact rudi_s or shabble on irc.freenode.net (#irssi and #irssi_vim)
-#
-#
-# Features:
-#
-# It supports most commonly used command mode features:
-#
-# * Insert/Command mode. Escape and Ctrl-C enter command mode.
-# /set vim_mode_cmd_seq j allows to use jj as Escape (any other character
-# can be used as well).
-# * Cursor motion: h l 0 ^ $ <Space> <BS> f t F T
-# * History motion: j k gg G
-# gg moves to the oldest (first) history line.
-# G without a count moves to the current input line, with a count it goes to
-# the count-th history line (1 is the oldest).
-# * Cursor word motion: w b ge e W gE B E
-# * Word objects (only the following work yet): aw aW
-# * Yank and paste: y p P
-# * Change and delete: c d
-# * Delete at cursor: x X
-# * Replace at cursor: r
-# * Insert mode: i a I A
-# * Switch case: ~
-# * Repeat change: .
-# * Repeat ftFT: ; ,
-# * Registers: "a-"z "" "0 "* "+ "_ (black hole)
-# Appending to register with "A-"Z
-# "" is the default yank/delete register.
-# "0 contains the last yank (if no register was specified).
-# The special registers "* "+ contain both irssi's cut-buffer.
-# * Line-wise shortcuts: dd cc yy
-# * Shortcuts: s S C D
-# * Scroll the scrollback buffer: Ctrl-E Ctrl-D Ctrl-Y Ctrl-U Ctrl-F Ctrl-B
-# * Switch to last active window: Ctrl-6/Ctrl-^
-# * Switch split windows: Ctrl-W j Ctrl-W k
-# * Undo/Redo: u Ctrl-R
-#
-# Counts and combinations work as well, e.g. d5fx or 3iabc<esc>. Counts also
-# work with mapped ex-commands (see below), e.g. if you map gb to do :bn, then
-# 2gb will switch to the second next buffer.
-# Repeat also supports counts.
-#
-# The following insert mode mappings are supported:
-#
-# * Insert register content: Ctrl-R x (where x is the register to insert)
-#
-# Ex-mode supports (activated by : in command mode) the following commands:
-#
-# * Switching buffers: :[N]b [N] - switch to channel number
-# :b# - switch to last channel
-# :b <partial-channel-name>
-# :b <partial-server>/<partial-channel>
-# :buffer {args} (same as :b)
-# :[N]bn[ext] [N] - switch to next window
-# :[N]bp[rev] [N] - switch to previous window
-# * Close window: :[N]bd[elete] [N]
-# * Display windows: :ls :buffers
-# * Display registers: :reg[isters] {args} :di[splay] {args}
-# * Display undolist: :undol[ist] (mostly used for debugging)
-# * Source files :so[urce] - only sources vim_moderc at the moment,
-# {file} not supported
-# * Mappings: :map - display custom mappings
-# :map {lhs} - display mappings starting with {lhs}
-# :map {lhs} {rhs} - add mapping
-# :unm[ap] {lhs} - remove custom mapping
-# * Save mappings: :mkv[imrc][!] - like in Vim, but [file] not supported
-# * Substitute: :s/// - i and g are supported as flags, only /// can be
-# used as separator, uses Perl regex instead of
-# Vim regex
-# * Settings: :se[t] - display all options
-# :se[t] {option} - display all matching options
-# :se[t] {option} {value} - change option to value
-#
-#
-# Mappings:
-#
-# {lhs} is the key combination to be mapped, {rhs} the target. The <> notation
-# is used (e.g. <C-F> is Ctrl-F), case is ignored. Supported <> keys:
-# <C-A>-<C-Z>, <C-^>, <C-6>, <Space>, <CR>, <BS>, <Nop>. Mapping ex-mode and
-# irssi commands is supported. When mapping ex-mode commands the trailing <Cr>
-# is not necessary. Only default mappings can be used in {rhs}.
-# Examples:
-# :map w W - to remap w to work like W
-# :map gb :bnext - to map gb to call :bnext
-# :map gB :bprev
-# :map g1 :b 1 - to map g1 to switch to buffer 1
-# :map gb :b - to map gb to :b, 1gb switches to buffer 1, 5gb to 5
-# :map <C-L> /clear - map Ctrl-L to irssi command /clear
-# :map <C-G> /window goto 1
-# :map <C-E> <Nop> - disable <C-E>, it does nothing now
-# :unmap <C-E> - restore default behavior of <C-E> after disabling it
-#
-# Note that you must use / for irssi commands (like /clear), the current value
-# of cmdchars does _not_ work! This is necessary do differentiate between
-# ex-commands and irssi commands.
-#
-#
-# Settings:
-#
-# The settings are stored as irssi settings and can be set using /set as usual
-# (prepend vim_mode_ to setting name) or using the :set ex-command. The
-# following settings are available:
-#
-# * utf8: support UTF-8 characters, boolean, default on
-# * debug: enable debug output, boolean, default off
-# * cmd_seq: char that when double-pressed simulates <esc>, string, default ''
-# * start_cmd: start every line in command mode, boolean, default off
-#
-# In contrast to irssi's settings, :set accepts 0 and 1 as values for boolean
-# settings, but only vim_mode's settings can be set/displayed.
-# Examples:
-# :set cmd_seq=j # set cmd_seq to j
-# :set cmd_seq= # disable cmd_seq
-# :set debug=on # enable debug
-# :set debug=off # disable debug
-#
-#
-# The following statusbar items are available:
-#
-# * vim_mode: displays current mode
-# * vim_windows: displays windows selected with :b
-#
-#
-# Configuration
-#
-# Additionally to the irssi settings described above vim_mode can be
-# configured through an external configuration file named "vim_moderc" located
-# in ~/.irssi/vim_moderc. If available it's loaded on startup and every
-# supported ex-command is run. It's syntax is similar to "vimrc". To (re)load
-# it while vim_mode is running use :so[urce].
-#
-# Supported ex-commands:
-#
-# * :map
-#
-#
-# Installation:
-#
-# As always copy the script into .irssi/scripts and load it with
-# /script load # vim_mode.pl
-#
-# Use the following command to get a statusbar item that shows which mode
-# you're in.
-#
-# /statusbar window add vim_mode
-#
-# And the following to let :b name display a list of matching channels
-#
-# /statusbar window add vim_windows
-#
-#
-# Dependencies:
-#
-# For proper :ex mode support, requires the installation of uberprompt.pl
-# Uberprompt can be downloaded from:
-#
-# http://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl
-#
-# and follow the instructions at the top of that file for installation.
-#
-# If you don't need Ex-mode, you can run vim_mode.pl without the
-# uberprompt.pl script, but it is recommended.
-#
-#
-# Irssi requirements:
-#
-# 0.8.12 and above should work fine. However the following features are
-# disabled in irssi < 0.8.13:
-#
-# * j k (only with count, they work fine without count in older versions)
-# * gg G
-#
-#
-# Known bugs:
-#
-# * count before register doesn't work: e.g. 3"ap doesn't work, but "a3p does
-# * mapping an incomplete ex-command doesn't open the ex-mode with the partial
-# command (e.g. :map gb :b causes an error instead of opening the ex-mode
-# and displaying :b<cursor>)
-# * undo/redo positions are mostly wrong
-#
-#
-# TODO:
-# * History:
-# * /,?,n,N to search through history (like history_search.pl)
-# * Window switching (:b)
-# * Tab completion of window(-item) names
-# * non-sequential matches(?)
-#
-# WONTFIX - things we're not ever likely to do
-# * Macros
-#
-# THANKS:
-#
-# * estragib: a lot of testing and many bug reports and feature requests
-# * iaj: testing
-#
-# LICENCE:
-#
-# Copyright (c) 2010 Tom Feist & Simon Ruderich
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-#
-# Have fun!
+=pod
+
+=head1 NAME
+
+vim_mode.pl
+
+=head1 DESCRIPTION
+
+An Irssi script to emulate some of the vi(m) features for the Irssi inputline.
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD vim_mode.pl>. You may wish to have it autoload in one of the
+L<usual ways|https://github.com/shabble/irssi-docs/wiki/Guide#Autorunning_Scripts>.
+
+=head2 DEPENDENCIES
+
+For proper :ex mode support, vim-mode requires the installation of F<uberprompt.pl>
+Uberprompt can be downloaded from:
+
+L<https://github.com/shabble/irssi-scripts/raw/master/prompt_info/uberprompt.pl>
+
+and follow the instructions at the top of that file for installation.
+
+If you don't need Ex-mode, you can run vim_mode.pl without the
+uberprompt.pl script, but it is strongly recommended that you use it.
+
+=head3 Irssi requirements
+
+0.8.12 and above should work fine. However the following features are
+disabled in irssi < 0.8.13:
+
+=over 4
+
+=item * C<j> C<k> (only with count, they work fine without count in older versions)
+
+=item * C<gg>, C<G>
+
+=back
+
+It is intended to work with at Irssi 0.8.12 and later versions. However some
+features are disabled in older versions (see below for details).
+
+Perl >= 5.8.1 is recommended for UTF-8 support (which can be disabled if
+necessary). Please report bugs in older versions as well, we'll try to fix
+them. Later versions of Perl are also faster, which is probably beneficial
+to a script of this size and complexity.
+
+=head2 SETUP
+
+Vim Mode provides certain feedback to the user, such as the currently active
+mode (command, insert, ex), and if switching buffers, which buffer(s) currently
+match the search terms.
+
+There are two ways to go about displaying this information, as described in
+the following sections:
+
+=head3 Statusbar Items
+
+Run the following command to add a statusbar item that shows which mode
+you're in.
+
+C</statusbar window add vim_mode>
+
+And the following to let C<:b [str]> display a list of channels matching your
+search string.
+
+C</statusbar window add vim_windows>
+
+B<Note:> Remember to C</save> after adding these statusbar items to make them
+permanent.
+
+B<Note:> If you would rather have these statusbar items on your prompt
+line rather than thte window statusbar, please follow these steps.
+
+For technical reasons, I<uberprompt> must occasionally call C</statusbar prompt
+reset>, which will remove or deactivate any manually added items on the prompt
+statusbar. To get around this, uberprompt provides two command hooks,
+C<uberprompt_load_hook> and C<uberprompt_unload_hook>. Both of these settings
+can contain one (or more, using C</EVAL>) commands to be executed when the prompt
+is enabled and disabled, respectively.
+
+See the L<uberprompt documentation|https://github.com/shabble/irssi-scripts/blob/master/prompt_info/README.pod> for further details.
+
+For I<right-aligned> items (that is, after the input field:
+
+=over 4
+
+=item 1 C</alias vm_add /^statusbar prompt add -after input -alignment right vim_mode>
+
+=item 2 C</alias vm_del /^statusbar prompt remove vim_mode>
+
+=item 3 C</set uberprompt_load_hook /^vm_add>
+
+=item 4 C</set uberprompt_unload_hook /^vm_del>
+
+=back
+
+For I<left-aligned> items (before the prompt):
+
+=over 4
+
+=item 1 C</alias vm_add /^statusbar prompt add -before prompt -alignment left vim_mode>
+
+=item 2 C</alias vm_del /^statusbar prompt remove vim_mode>
+
+=item 3 C</set uberprompt_load_hook /^vm_add>
+
+=item 4 C</set uberprompt_unload_hook /^vm_del>
+
+=back
+
+If you wish to add both C<vim_mode> and C<vim_windows> items, replace steps 1 and 2
+above with the following (right-aligned):
+
+=over 4
+
+=item 1 C</alias vm_add /^eval /^statusbar prompt add -after input -alightment right vim_mode ; /^statusbar prompt add -after input -alignment right vim_windows>
+
+=item 2 C</alias vm_del /^eval /^statusbar prompt remove vim_mode ; /^statusbar prompt remove vim_windows>
+
+=back
+
+and then complete stages 3 and 4 as above. Replace the C<-after> and C<-alignment>
+to suit your location preferences.
+
+B<Note:> It is also possible to place the items between the prompt and input field,
+by specifying C<-after prompt> or C<-before input> as appropriate.
+
+=head3 Expando Variables
+
+Vim mode augments the existing Irssi expando (automatic variables) with two
+additional ones: C<$vim_cmd_mode> and C<$vim_wins>.
+
+C<$vim_cmd_mode> is the equivalent of the C<vim_mode> statusbar item, and
+C<$vim_wins> is the counterpart of C<vim_windows>.
+
+They can be added to your theme, or inserted into your uberprompt using
+a command such as:
+
+"C</set uberprompt_format [$vim_cmd_mode] $*$uber] >"
+
+=head3 FILE-BASED CONFIGURATION
+
+Additionally to the irssi settings described in L<settings|/SETTINGS>, vim_mode
+can be configured through an external configuration file named "vim_moderc"
+located in F<~/.irssi/vim_moderc>. If available it's loaded on startup and every
+supported ex-command is run. Its syntax is similar to "vimrc". To (re)load it
+while vim_mode is running use C<:so[urce]>.
+
+Currently Supported ex-commands:
+
+=over 4
+
+=item * C<:map>
+
+=back
+
+=head1 USAGE
+
+The following section is divided into the different modes as supported by Vim itself:
+
+=head2 COMMAND MODE
+
+It supports most commonly used command mode features:
+
+=over 2
+
+=item * Insert/Command mode.
+
+C<Esc> and C<Ctrl-C> enter command mode. C</set vim_mode_cmd_seq j> allows
+to use C<jj> as Escape (any other character can be used as well).
+
+=item * Cursor motion:
+
+C<h l 0 ^ $ E<lt>SpaceE<gt> E<lt>BSE<gt> f t F T>
+
+=item * History motion:
+
+C<j k gg G> C<gg> moves to the oldest (first) history line. C<G> without a
+count moves to the current input line, with a count it goes to the I<count-th>
+history line (1 is the oldest).
+
+=item * Cursor word motion:
+
+C<w b ge e W gE B E>
+
+=item * Word objects (only the following work yet):
+
+C<aw aW>
+
+=item * Yank and paste:
+
+ C<y p P>
+
+=item * Change and delete:
+
+C<c d>
+
+=item * Delete at cursor:
+
+C<x X>
+
+=item * Replace at cursor:
+
+C<r>
+
+=item * Insert mode:
+
+C<i a I A>
+
+=item * Switch case:
+
+C<~>
+
+=item * Repeat change:
+
+C<.>
+
+=item * Repeat
+
+C<ftFT: ; ,>
+
+=item * Registers:
+
+C<"a-"z "" "0 "* "+ "_> (black hole)
+
+=item * Line-wise shortcuts:
+
+C<dd cc yy>
+
+=item * Shortcuts:
+
+C<s S C D>
+
+=item * Scroll the scrollback buffer:
+
+C<Ctrl-E Ctrl-D Ctrl-Y Ctrl-U Ctrl-F Ctrl-B>
+
+=item * Switch to last active window:
+
+C<Ctrl-6/Ctrl-^>
+
+=item * Switch split windows:
+
+<Ctrl-W j Ctrl-W k>
+
+=item * Undo/Redo:
+
+C<u Ctrl-R>
+
+=back
+
+Counts and combinations work as well, e.g. C<d5fx> or C<3iabcE<lt>escE<gt>>. Counts also work with mapped ex-commands (see below), e.g. if you map C<gb> to do C<:bn>, then C<2gb> will switch to the second next buffer. Repeat also supports counts.
+
+=head3 REGISTERS
+
+=over 4
+
+=item * Appending to register with C<"A-"Z>
+
+=item * C<""> is the default yank/delete register.
+
+=item * C<"0> contains the last yank (if no register was specified).
+
+=item * The special registers C<"* "+> both contain irssi's internal cut-buffer.
+
+=back
+
+=head2 INSERT MODE
+
+The following insert mode mappings are supported:
+
+=over 4
+
+=item * Insert register content: Ctrl-R x (where x is the register to insert)
+
+=back
+
+=head2 EX-MODE
+
+Ex-mode (activated by C<:> in command mode) supports the following commands:
+
+=over 4
+
+=item * Command History:
+
+C<E<lt>uparrowE<gt>> - cycle backwards through history
+
+C<E<lt>downarrowE<gt>> - cycle forwards through history
+
+C<:eh> - show ex history
+
+=item * Switching buffers:
+
+C<:[N]b [N]> - switch to channel number
+
+C<:b#> - switch to last channel
+
+C<:b> E<lt>partial-channel-nameE<gt>
+
+C<:b> <partial-server>/<partial-channel>
+
+C<:buffer {args}> (same as C<:b>)
+
+C<:[N]bn[ext] [N]> - switch to next window
+
+C<:[N]bp[rev] [N]> - switch to previous window
+
+=item * Close window:
+
+C<:[N]bd[elete] [N]>
+
+=item * Display windows:
+
+C<:ls>, C<:buffers>
+
+=item * Display registers:
+
+C<:reg[isters] {args}>, C<:di[splay] {args}>
+
+=item * Display undolist:
+
+C<:undol[ist]> (mostly used for debugging)
+
+=item * Source files:
+
+C<:so[urce]> - only sources vim_moderc at the moment,
+ F<{file}> not supported
+
+=item * Mappings:
+
+C<:map> - display custom mappings
+
+=item * Saving mappings:
+
+C<:mkv[imrc][!]> - like in Vim, but [file] not supported
+
+=item * Substitution:
+
+C<:s///> - I<i> and I<g> are supported as flags, only C<///> can be used as
+eparator, and it uses Perl regex syntax instead of Vim syntax.
+
+=item * Settings:
+
+C<:se[t]> - display all options
+
+C<:se[t] {option}> - display all matching options
+
+C<:se[t] {option} {value}> - change option to value
+
+=back
+
+=head3 MAPPINGS
+
+=head4 Commands
+
+=over 4
+
+=item * C<:map {lhs}> - display mappings starting with {lhs}
+
+=item * C<:map {lhs} {rhs}> - add mapping
+
+=item * C<:unm[ap] {lhs}> - remove custom mapping
+
+=back
+
+=head4 Parameters
+
+I<{lhs}> is the key combination to be mapped, I<{rhs}> the target. The
+C<E<lt>E<gt>> notation is used
+
+(e.g. C<E<lt>C-FE<gt>> is I<Ctrl-F>), case is ignored.
+ Supported C<E<lt>E<gt>> keys are:
+
+=over 4
+
+=item * C<E<lt>C-AE<gt>> - C<E<lt>C-ZE<gt>>,
+
+=item * C<E<lt>C-^E<gt>>, C<E<lt>C-6E<gt>>
+
+=item * C<E<lt>SpaceE<gt>>
+
+=item * C<E<lt>CRE<gt>> - Enter
+
+=item * C<E<lt>BSE<gt>> - Backspace
+
+=item * C<E<lt>NopE<gt>> - No-op (Do Nothing).
+
+=back
+
+Mapping ex-mode and irssi commands is supported. When mapping ex-mode commands
+the trailing C<E<lt>CrE<gt>> is not necessary. Only default mappings can be used
+in I<{rhs}>.
+
+Examples:
+
+=over 4
+
+=item * C<:map w W> - to remap w to work like W
+
+=item * C<:map gb :bnext> - to map gb to call :bnext
+
+=item * C<:map gB :bprev>
+
+=item * C<:map g1 :b 1> - to map g1 to switch to buffer 1
+
+=item * C<:map gb :b> - to map gb to :b, 1gb switches to buffer 1, 5gb to 5
+
+=item * C<:map E<lt>C-LE<gt> /clear> - map Ctrl-L to irssi command /clear
+
+=item * C<:map E<lt>C-GE<gt> /window goto 1>
+
+=item * C<:map E<lt>C-EE<gt> <Nop>> - disable E<lt>C-EE<gt>, it does nothing now
+
+=item * C<:unmap E<lt>C-EE<gt>> - restore default behavior of C<E<lt>C-EE<gt>>
+after disabling it
+
+=back
+
+Note that you must use C</> for irssi commands (like C</clear>), the current value
+of Irssi's cmdchars does B<not> work! This is necessary do differentiate between
+ex-commands and irssi commands.
+
+=head2 SETTINGS
+
+The settings are stored as irssi settings and can be set using C</set> as usual
+(prepend C<vim_mode_> to setting name) or using the C<:set> ex-command. The
+following settings are available:
+
+=over 4
+
+=item * utf8 - Support UTF-8 characters, boolean, default on
+
+=item * debug - Enable debug output, boolean, default off
+
+=item * cmd_seq - Char that when double-pressed simulates C<E<lt>EscE<gt>>, string, default '' (disabled)
+
+=item * start_cmd - Start every line in command mode, boolean, default off
+
+=item * max_undo_lines - Sze of the undo buffer. Integer, default 50 items.
+
+=item * ex_history_size - Number of items stored in the ex-mode history. Integer, default 100.
+
+=item * prompt_leading_space - Ddetermines whether ex mode prepends a space to the displayed input. Boolean, default on
+
+=back
+
+In contrast to irssi's settings, C<:set> accepts 0 and 1 as values for boolean
+settings, but only vim_mode's settings can be set/displayed.
+
+Examples:
+
+ :set cmd_seq=j # set cmd_seq to j
+ :set cmd_seq= # disable cmd_seq
+ :set debug=on # enable debug
+ :set debug=off # disable debug
+
+=head1 SUPPORT
+
+Any behavior different from Vim (unless explicitly documented) should be
+considered a bug and reported.
+
+B<NOTE:> This script is still under heavy development, and there may be bugs.
+Please submit reproducible sequences to the bug-tracker at:
+L<http://github.com/shabble/irssi-scripts/issues/new>
+
+or contact rudi_s or shabble on irc.freenode.net (#irssi and #irssi_vim)
+
+=head1 AUTHORS
+
+Copyright E<copy> 2010-2011 Tom Feist C<E<lt>shabble+irssi@metavore.orgE<gt>> and
+
+Copyright E<copy> 2010-2011 Simon Ruderich C<E<lt>simon@ruderich.orgE<gt>>
+
+=head1 THANKS
+
+Particular thanks go to
+
+=over 4
+
+=item * estragib: a lot of testing and many bug reports and feature requests
+
+=item * iaj: testing
+
+=item * tmr: explaining how various bits of vim work
+
+=back
+
+as well as the rest of C<#irssi> and C<#irssi_vim> on Freenode IRC.
+
+=head1 LICENCE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=head1 BUGS
+
+=over 4
+
+=item *
+
+count before register doesn't work: e.g. 3"ap doesn't work, but "a3p does
+
+=item *
+
+mapping an incomplete ex-command doesn't open the ex-mode with the partial
+command (e.g. C<:map gb :b> causes an error instead of opening the ex-mode and
+displaying C<:bE<lt>cursorE<gt>>)
+
+=item *
+
+ undo/redo cursor positions are mostly wrong
+
+=back
+
+=head1 TODO
+
+=over 4
+
+=item *
+
+Make sure the input line is empty when entering ex mode. Stuff hanging around
+just looks silly.
+
+=item *
+
+History:
+
+=over 4
+
+=item *
+
+ C< * /,?,n,N> to search through history (like rl_history_search.pl)
+
+=back
+
+=item *
+
+Window switching (C<:b>)
+
+=over 4
+
+=item *
+
+Tab completion of window(-item) names
+
+=item *
+
+non-sequential matches(?)
+
+=back
+
+=back
+
+See also the TODO file at
+L<github|https://github.com/shabble/irssi-scripts/blob/master/vim-mode/TODO> for
+many many more things.
+
+=head2 WONTFIX
+
+Things we're not ever likely to do:
+
+=over 4
+
+=item * Macros
+
+=back
+
+=cut
use strict;
use warnings;
@@ -245,9 +596,9 @@ use Irssi::TextUI; # for sbar_items_redraw
use Irssi::Irc; # necessary for 0.8.14
-use vars qw($VERSION %IRSSI);
-$VERSION = "1.0.1";
-%IRSSI =
+
+our $VERSION = "1.0.2";
+our %IRSSI =
(
authors => "Tom Feist (shabble), Simon Ruderich (rudi_s)",
contact => 'shabble+irssi@metavore.org, '
@@ -267,24 +618,24 @@ sub M_CMD () { 1 }
# insert mode
sub M_INS () { 0 }
# extended mode (after a :?)
-sub M_EX () { 2 }
+sub M_EX () { 2 }
# operator command
-sub C_OPERATOR () { 0 }
+sub C_OPERATOR () { 0 }
# normal command, no special handling necessary
-sub C_NORMAL () { 1 }
+sub C_NORMAL () { 1 }
# command taking another key as argument
-sub C_NEEDSKEY () { 2 }
+sub C_NEEDSKEY () { 2 }
# text-object command (i a)
sub C_TEXTOBJECT () { 3 }
# commands entering insert mode
-sub C_INSERT () { 4 }
+sub C_INSERT () { 4 }
# ex-mode commands
-sub C_EX () { 5 }
+sub C_EX () { 5 }
# irssi commands
-sub C_IRSSI () { 6 }
+sub C_IRSSI () { 6 }
# does nothing
-sub C_NOP () { 7 }
+sub C_NOP () { 7 }
# setting types, match irssi types as they are stored as irssi settings
sub S_BOOL () { 0 }
@@ -312,17 +663,18 @@ my $commands
# arrow like movement
h => { char => 'h', func => \&cmd_h, type => C_NORMAL },
l => { char => 'l', func => \&cmd_l, type => C_NORMAL },
+ "\x08" => { char => '<BS>', func => \&cmd_h, type => C_NORMAL },
"\x7F" => { char => '<BS>', func => \&cmd_h, type => C_NORMAL },
' ' => { char => '<Space>', func => \&cmd_l, type => C_NORMAL },
# history movement
- j => { char => 'j', func => \&cmd_j, type => C_NORMAL,
- no_operator => 1 },
- k => { char => 'k', func => \&cmd_k, type => C_NORMAL,
- no_operator => 1 },
- gg => { char => 'gg', func => \&cmd_gg, type => C_NORMAL,
- no_operator => 1 },
- G => { char => 'G', func => \&cmd_G, type => C_NORMAL,
- needs_count => 1, no_operator => 1 },
+ j => { char => 'j', func => \&cmd_j, type => C_NORMAL,
+ no_operator => 1 },
+ k => { char => 'k', func => \&cmd_k, type => C_NORMAL,
+ no_operator => 1 },
+ gg => { char => 'gg', func => \&cmd_gg, type => C_NORMAL,
+ no_operator => 1 },
+ G => { char => 'G', func => \&cmd_G, type => C_NORMAL,
+ needs_count => 1, no_operator => 1 },
# char movement, take an additional parameter and use $movement
f => { char => 'f', func => \&cmd_f, type => C_NEEDSKEY,
selection_needs_move_right => 1 },
@@ -345,11 +697,11 @@ my $commands
gE => { char => 'gE', func => \&cmd_gE, type => C_NORMAL,
selection_needs_move_right => 1 },
# text-objects, leading _ means can't be mapped!
- _i => { char => 'i', func => \&cmd__i, type => C_TEXTOBJECT },
- _a => { char => 'a', func => \&cmd__a, type => C_TEXTOBJECT },
+ _i => { char => 'i', func => \&cmd__i, type => C_TEXTOBJECT },
+ _a => { char => 'a', func => \&cmd__a, type => C_TEXTOBJECT },
# line movement
- '0' => { char => '0', func => \&cmd_0, type => C_NORMAL },
- '^' => { char => '^', func => \&cmd_caret, type => C_NORMAL },
+ '0' => { char => '0', func => \&cmd_0, type => C_NORMAL },
+ '^' => { char => '^', func => \&cmd_caret, type => C_NORMAL },
'$' => { char => '$', func => \&cmd_dollar, type => C_NORMAL },
# delete chars
x => { char => 'x', func => \&cmd_x, type => C_NORMAL,
@@ -423,6 +775,16 @@ my $commands
# All available commands in Ex-Mode.
my $commands_ex
= {
+ # arrow keys - not actually used, see handle_input_buffer()
+ # TODO: make these work.
+ "\e[A" => { char => ':exprev', func => \&ex_history_back,
+ type => C_EX },
+ "\e[B" => { char => ':exnext', func => \&ex_history_fwd,
+ type => C_EX },
+
+ # normal Ex mode commands.
+ eh => { char => ':exhist', func => \&ex_history_show,
+ type => C_EX },
s => { char => ':s', func => \&ex_substitute,
type => C_EX },
bnext => { char => ':bnext', func => \&ex_bnext,
@@ -499,11 +861,16 @@ my $commands_ex
# default command mode mappings
my $maps = {};
-# Add all default mappings.
-foreach my $char (keys %$commands) {
- next if $char =~ /^_/; # skip private commands (text-objects for now)
- add_map($char, $commands->{$char});
-}
+# current imap still pending (first character entered)
+my $imap = undef;
+
+# maps for insert mode
+my $imaps
+ = {
+ # CTRL-R, insert register
+ "\x12" => { map => undef, func => \&insert_ctrl_r },
+ };
+
# GLOBAL VARIABLES
@@ -520,8 +887,15 @@ my $settings
start_cmd => { type => S_BOOL, value => 0 },
# not used yet
max_undo_lines => { type => S_INT, value => 50 },
+ # size of history buffer for Ex mode.
+ ex_history_size => { type => S_INT, value => 100 },
# prompt_leading_space
prompt_leading_space => { type => S_BOOL, value => 1 },
+ # <Leader> value for prepending to commands.
+ map_leader => { type => S_STR, value => '\\' },
+ # timeout for keys following esc. In milliseconds.
+ esc_buf_timeout => { type => S_INT, value => 10 },
+
};
sub DEBUG { $settings->{debug}->{value} }
@@ -541,6 +915,10 @@ my $should_ignore = 0;
# ex mode buffer
my @ex_buf;
+# ex mode history storage.
+my @ex_history;
+my $ex_history_index = 0;
+
# we are waiting for another mapped key (e.g. g pressed, but there are
# multiple mappings like gg gE etc.)
my $pending_map = undef;
@@ -582,19 +960,6 @@ my $registers
'*' => '', # same
'_' => '', # black hole register, always empty
};
-foreach my $char ('a' .. 'z') {
- $registers->{$char} = '';
-}
-
-# current imap still pending (first character entered)
-my $imap = undef;
-
-# maps for insert mode
-my $imaps
- = {
- # CTRL-R, insert register
- "\x12" => { map => undef, func => \&insert_ctrl_r },
- };
# index into the history list (for j,k)
my $history_index = undef;
@@ -615,24 +980,20 @@ my $completion_active = 0;
my $completion_string = '';
sub script_is_loaded {
- my $name = shift;
- print "Checking if $name is loaded" if DEBUG;
- no strict 'refs';
- my $retval = defined %{ "Irssi::Script::${name}::" };
- use strict 'refs';
-
- return $retval;
+ return exists($Irssi::Script::{shift(@_) . '::'});
}
-vim_mode_init();
+
# INSERT MODE COMMANDS
sub insert_ctrl_r {
my ($key) = @_;
-
+ _debug("ctrl-r called");
my $char = chr($key);
+ _debug("ctrl-r called with $char");
+
return if not defined $registers->{$char} or $registers->{$char} eq '';
my $pos = _insert_at_position($registers->{$char}, 1, _input_pos());
@@ -1640,6 +2001,10 @@ sub cmd_ex_command {
return _warn("Ex-mode $1$2 doesn't exist!");
}
+ # add this item to the ex mode history
+ ex_history_add($arg_str);
+ $ex_history_index = 0; # and reset the history position.
+
my $count = $1;
if ($count eq '') {
$count = undef;
@@ -1990,6 +2355,8 @@ sub ex_map {
my $cmd = $map->{cmd};
if (defined $cmd) {
next if $map->{char} eq $cmd->{char}; # skip default mappings
+ # FIXME: Hack so <C-H> doesn't show up as mapped to <BS>.
+ next if $map->{char} eq '<C-H>' and $cmd->{char} eq '<BS>';
next if $map->{char} !~ /^\Q$search\E/; # skip non-matches
$active_window->print(sprintf "%-15s %s", $map->{char},
$cmd->{char});
@@ -2022,6 +2389,7 @@ sub _parse_mapping {
my ($string) = @_;
$string =~ s/<([^>]+)>/_parse_mapping_bracket($1)/ge;
+ _debug("Parse mapping: $string");
if (index($string, '<invalid>') != -1) {
return undef;
}
@@ -2047,6 +2415,8 @@ sub _parse_mapping_bracket {
# <BS>
} elsif ($string eq 'bs') {
$string = chr(127);
+ } elsif ($string eq 'leader') {
+ $string = $settings->{map_leader}->{value};
# Invalid char, return special string to recognize the error.
} else {
$string = '<invalid>';
@@ -2056,6 +2426,14 @@ sub _parse_mapping_bracket {
sub _parse_mapping_reverse {
my ($string) = @_;
+ if (not defined $string) {
+ _warn("Unable to reverse-map command: " . join('', @ex_buf));
+ return;
+ }
+
+ my $escaped_leader = quotemeta($settings->{map_leader}->{value});
+ $string =~ s/$escaped_leader/<Leader>/g;
+
# Convert char to <char-name>.
$string =~ s/ /<Space>/g;
$string =~ s/\n/<CR>/g;
@@ -2070,6 +2448,9 @@ sub _parse_mapping_reverse {
sub _parse_partial_command_reverse {
my ($string) = @_;
+ my $escaped_leader = quotemeta($settings->{map_leader}->{value});
+ $string =~ s/$escaped_leader/<Leader>/g;
+
# Convert Ctrl-X to ^X.
$string =~ s/([\x01-\x1A])/"^" . chr(ord($1) + 64)/ge;
# Convert Ctrl-6 and Ctrl-^ to <C-^>.
@@ -2227,9 +2608,9 @@ sub _matching_windows {
# STATUS ITEMS
-# vi mode status item.
-sub vim_mode_cb {
- my ($sb_item, $get_size_only) = @_;
+#TODO: give these things better names.
+sub vim_mode_cmd {
+
my $mode_str = '';
if ($mode == M_INS) {
$mode_str = 'Insert';
@@ -2238,7 +2619,7 @@ sub vim_mode_cb {
} else {
$mode_str = '%_Command%_';
if ($register ne '"' or $numeric_prefix or $operator or $movement or
- $pending_map) {
+ $pending_map) {
my $partial = '';
if ($register ne '"') {
$partial .= '"' . $register;
@@ -2260,13 +2641,10 @@ sub vim_mode_cb {
$mode_str .= " ($partial)";
}
}
- $sb_item->default_handler($get_size_only, "{sb $mode_str}", '', 0);
+ return $mode_str;
}
-# :b window list item.
-sub b_windows_cb {
- my ($sb_item, $get_size_only) = @_;
-
+sub vim_wins_data {
my $windows = '';
# A little code duplication of cmd_ex_command(), but \s+ instead of \s* so
@@ -2286,6 +2664,31 @@ sub b_windows_cb {
}
}
}
+ return $windows;
+}
+
+sub vim_exp_mode {
+ my ($server, $witem, $arg) = @_;
+ return vim_mode_cmd();
+}
+
+sub vim_exp_wins {
+ my ($server, $witem, $arg) = @_;
+ return vim_wins_data();
+}
+
+# vi mode status item.
+sub vim_mode_cb {
+ my ($sb_item, $get_size_only) = @_;
+ my $mode_str = vim_mode_cmd();
+ $sb_item->default_handler($get_size_only, "{sb $mode_str}", '', 0);
+}
+
+# :b window list item.
+sub b_windows_cb {
+ my ($sb_item, $get_size_only) = @_;
+
+ my $windows = vim_wins_data();
$sb_item->default_handler($get_size_only, "{sb $windows}", '', 0);
}
@@ -2306,11 +2709,17 @@ sub got_key {
# NOTE: this timeout might be too low on laggy systems, but
# it comes at the cost of keystroke latency for things that
# contain escape sequences (arrow keys, etc)
+ my $esc_buf_timeout = $settings->{esc_buf_timeout}->{value};
+
$input_buf_timer
- = Irssi::timeout_add_once(10, \&handle_input_buffer, undef);
+ = Irssi::timeout_add_once($esc_buf_timeout,
+ \&handle_input_buffer, undef);
+
print "Buffer Timer tag: $input_buf_timer" if DEBUG;
+
} elsif ($mode == M_INS) {
- if ($key == 3) { # Ctrl-C enter command mode
+
+ if ($key == 3) { # Ctrl-C enters command mode
_update_mode(M_CMD);
_stop();
return;
@@ -2347,9 +2756,9 @@ sub got_key {
_stop();
return;
- # Pressing delete resets insert mode repetition.
+ # Pressing delete resets insert mode repetition (8 = BS, 127 = DEL).
# TODO: maybe allow it
- } elsif ($key == 127) {
+ } elsif ($key == 8 || $key == 127) {
@insert_buf = ();
# All other entered characters need to be stored to allow repeat of
# insert mode. Ignore delete and control characters.
@@ -2370,6 +2779,13 @@ sub got_key {
Irssi::statusbar_items_redraw("vim_mode");
} elsif ($mode == M_EX) {
+
+ if ($key == 3) { # C-c cancels Ex mdoe as well.
+ _update_mode(M_CMD);
+ _stop();
+ return;
+ }
+
handle_command_ex($key);
}
}
@@ -2389,20 +2805,33 @@ sub handle_input_buffer {
_update_mode(M_CMD);
} else {
- # we need to identify what we got, and either replay it
- # or pass it off to the command handler.
- # if ($mode == M_CMD) {
- # # command
- # my $key_str = join '', map { chr } @input_buf;
- # if ($key_str =~ m/^\e\[([ABCD])/) {
- # print "Arrow key: $1" if DEBUG;
- # } else {
- # print "Dunno what that is." if DEBUG;
- # }
- # } else {
- # _emulate_keystrokes(@input_buf);
- # }
- _emulate_keystrokes(@input_buf);
+ # we have more than a single esc, implying an escape sequence
+ # (meta-* or esc-*)
+
+ # currently, we only extract escape sequences if:
+ # a) we're in ex mode
+ # b) they're arrow keys (for history control)
+
+ if ($mode == M_EX) {
+ # ex mode
+ my $key_str = join '', map { chr } @input_buf;
+ if ($key_str =~ m/^\e\[([ABCD])/) {
+ my $arrow = $1;
+ _debug( "Arrow key: $arrow");
+ if ($arrow eq 'A') { # up
+ ex_history_back();
+ } elsif ($arrow eq 'B') { # down
+ ex_history_fwd();
+ } else {
+ $arrow =~ s/C/right/;
+ $arrow =~ s/D/left/;
+ _debug("Arrow key $arrow not supported");
+ }
+ }
+ } else {
+ # otherwise, we just forward them to irssi.
+ _emulate_keystrokes(@input_buf);
+ }
# Clear insert buffer, pressing "special" keys (like arrow keys)
# resets it.
@@ -2414,7 +2843,7 @@ sub handle_input_buffer {
}
sub flush_input_buffer {
- Irssi::timeout_remove($input_buf_timer);
+ Irssi::timeout_remove($input_buf_timer) if defined $input_buf_timer;
$input_buf_timer = undef;
# see what we've collected.
print "Input buffer flushed" if DEBUG;
@@ -2537,13 +2966,7 @@ sub handle_command_cmd {
} elsif ($cmd->{type} == C_IRSSI) {
print "Processing irssi-command: $map->{char} ($cmd->{char})" if DEBUG;
- # TODO: fix me more better (general server/win/none context?)
- my $server = Irssi::active_server;
- if (defined $server) {
- $server->command($cmd->{func});
- } else {
- Irssi::command($cmd->{func});
- }
+ _command_with_context($cmd->{func});
$numeric_prefix = undef;
return 1; # call _stop();
@@ -2743,10 +3166,10 @@ sub handle_command_cmd {
sub handle_command_ex {
my ($key) = @_;
- # DEL key - remove last character
- if ($key == 127) {
+ # BS key (8) or DEL key (127) - remove last character.
+ if ($key == 8 || $key == 127) {
print "Delete" if DEBUG;
- if (scalar @ex_buf > 0) {
+ if (@ex_buf > 0) {
pop @ex_buf;
_set_prompt(':' . join '', @ex_buf);
# Backspacing over : exits ex-mode.
@@ -2764,14 +3187,21 @@ sub handle_command_ex {
print "Tab pressed" if DEBUG;
print "Ex buf contains: " . join('', @ex_buf) if DEBUG;
@tab_candidates = _tab_complete(join('', @ex_buf), [keys %$commands_ex]);
-
+ _debug("Candidates: " . join(", ", @tab_candidates));
+ if (@tab_candidates == 1) {
+ @ex_buf = ( split('', $tab_candidates[0]), ' ');
+ _set_prompt(':' . join '', @ex_buf);
+ }
# Ignore control characters for now.
- } elsif ($key < 32) {
+ } elsif ($key > 0 && $key < 32) {
# TODO: use them later, e.g. completion
# Append entered key
} else {
- push @ex_buf, chr $key;
+ if ($key != -1) {
+ # check we're not called from an ex_history_* function
+ push @ex_buf, chr $key;
+ }
_set_prompt(':' . join '', @ex_buf);
}
@@ -2794,15 +3224,32 @@ sub _tab_complete {
sub vim_mode_init {
Irssi::signal_add_first 'gui key pressed' => \&got_key;
- Irssi::signal_add 'setup changed' => \&setup_changed;
- Irssi::statusbar_item_register ('vim_mode', 0, 'vim_mode_cb');
+ Irssi::statusbar_item_register ('vim_mode', 0, 'vim_mode_cb');
Irssi::statusbar_item_register ('vim_windows', 0, 'b_windows_cb');
+ Irssi::expando_create('vim_cmd_mode' => \&vim_exp_mode, {});
+ Irssi::expando_create('vim_wins' => \&vim_exp_wins, {});
+
+
# Register all available settings.
foreach my $name (keys %$settings) {
_setting_register($name);
}
+ foreach my $char ('a' .. 'z') {
+ $registers->{$char} = '';
+ }
+
+ setup_changed();
+
+ Irssi::signal_add 'setup changed' => \&setup_changed;
+
+ # Add all default mappings.
+ foreach my $char (keys %$commands) {
+ next if $char =~ /^_/; # skip private commands (text-objects for now)
+ add_map($char, $commands->{$char});
+ }
+
# Load the vim_moderc file if it exists.
ex_source('source');
@@ -2811,6 +3258,8 @@ sub vim_mode_init {
if ($settings->{start_cmd}->{value}) {
_update_mode(M_CMD);
+ } else {
+ _update_mode(M_INS);
}
}
@@ -2995,7 +3444,7 @@ sub delete_map {
}
push @add, $keys;
- # Restore default keybindings in case we :unmaped a <Nop> or a remapped
+ # Restore default keybindings in case we :unmapped a <Nop> or a remapped
# key.
foreach my $key (@add) {
if (exists $commands->{$key}) {
@@ -3129,6 +3578,8 @@ sub _update_mode {
}
Irssi::statusbar_items_redraw("vim_mode");
+ Irssi::statusbar_items_redraw ('uberprompt');
+
}
sub _set_prompt {
@@ -3206,3 +3657,105 @@ sub _warn {
print '%_vim_mode: ', $warning, '%_';
}
+
+sub _debug {
+ return unless DEBUG;
+
+ my ($format, @args) = @_;
+ my $str = sprintf($format, @args);
+ print $str;
+}
+
+sub _command_with_context {
+ my ($command) = @_;
+ my $context;
+ my $window = Irssi::active_win;
+ if (defined $window) {
+ my $witem = $window->{active};
+ if (defined $witem and ref($witem) eq 'Irssi::Windowitem') {
+ $context = $witem;
+ } else {
+ $context = $window;
+ }
+ } else {
+ my $server = Irssi::active_server;
+ if (defined $server) {
+ $context = $server;
+ }
+ }
+ if (defined $context) {
+ print "Command $command Using context: " . ref($context) if DEBUG;
+ $context->command($command);
+ } else {
+ print "Command $command has no context" if DEBUG;
+ Irssi::command($command);
+ }
+}
+
+sub ex_history_add {
+ my ($line) = @_;
+
+ # check it's not an exact dupe of the previous history line
+
+ my $last_hist = $ex_history[$ex_history_index];
+ $last_hist = '' unless defined $last_hist;
+
+ return if $last_hist eq $line;
+
+ _debug("Adding $line to ex command history");
+
+ # add it to the history
+ unshift @ex_history, $line;
+
+ if ($settings->{ex_history_size}->{value} < @ex_history) {
+ pop @ex_history; # junk the last entry if we've hit the max.
+ }
+}
+
+sub ex_history_fwd {
+
+ my $hist_max = $#ex_history;
+ $ex_history_index++;
+ if ($ex_history_index > $hist_max) {
+ $ex_history_index = 0;
+ _debug("ex history hit top, wrapping to 0");
+ }
+
+ my $line = $ex_history[$ex_history_index];
+ $line = '' if not defined $line;
+
+ _debug("Ex history line: $line");
+
+ @ex_buf = split '', $line;
+ handle_command_ex(-1);
+}
+
+sub ex_history_back {
+ my $hist_max = $#ex_history;
+ $ex_history_index--;
+ if ($ex_history_index == -1) {
+ $ex_history_index = $hist_max;
+ _debug("ex history hit bottom, wrapping to $hist_max");
+
+ }
+
+ my $line = $ex_history[$ex_history_index];
+ $line = '' if not defined $line;
+
+ _debug("Ex history line: $line");
+ @ex_buf = split '', $line;
+ handle_command_ex(-1);
+
+}
+
+sub ex_history_show {
+ my $win = Irssi::active_win();
+ $win->print("Ex command history:");
+ for my $i (0 .. $#ex_history) {
+ my $flag = $i == $ex_history_index
+ ? ' <'
+ : '';
+ $win->print("$i " . $ex_history[$i] . $flag);
+ }
+}
+vim_mode_init();