diff options
author | richo <richo@psych0tik.net> | 2011-07-18 03:36:40 +0000 |
---|---|---|
committer | richo <richo@psych0tik.net> | 2011-07-18 03:36:40 +0000 |
commit | e4b9ea15d7abdae8211d18737fa54933f3faf57b (patch) | |
tree | fda4cc23faebfd1f130578b39fe161fe4c0ba1f8 | |
parent | Added goodnicks from richoH/richos-irssi (diff) | |
parent | Only attempt join if channel exists (diff) | |
download | irssi-scripts-e4b9ea15d7abdae8211d18737fa54933f3faf57b.tar.gz irssi-scripts-e4b9ea15d7abdae8211d18737fa54933f3faf57b.zip |
Merge branch 'master' into richoH-dev
Diffstat (limited to '')
165 files changed, 10982 insertions, 36816 deletions
@@ -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 @@ -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", - " © 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 <ahf@irssi.org> + * 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 `<shabble+irssi@metavore.org>` - + * 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', \®ion_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', \®ion_toggle); + Irssi::command_bind('region_clear', \®ion_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(); |