diff options
| author | Tom Feist <shabble@metavore.org> | 2011-01-18 00:16:07 +0000 | 
|---|---|---|
| committer | Tom Feist <shabble@metavore.org> | 2011-01-18 00:16:07 +0000 | 
| commit | 9f7242b130829edb2f47fdd8327b5130ac7c276b (patch) | |
| tree | a55b5aad2c88c8ac42eee1bde71d02e97e13c44f | |
| parent | ido-mode/ido_switcher: added C-k to close windows without exiting mode (diff) | |
| download | irssi-scripts-9f7242b130829edb2f47fdd8327b5130ac7c276b.tar.gz irssi-scripts-9f7242b130829edb2f47fdd8327b5130ac7c276b.zip | |
signal_logger: an test to determine how signals are fired, and if they are
nested.
| -rw-r--r-- | feature-tests/signal_logger.pl | 170 | 
1 files changed, 170 insertions, 0 deletions
| 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--; +    } +} + | 
