diff options
Diffstat (limited to '')
| -rw-r--r-- | feature-tests/history-restore.pl | 186 | ||||
| -rw-r--r-- | feature-tests/ixtest.pl | 69 | ||||
| -rw-r--r-- | feature-tests/rejoin-unban.pl | 83 | ||||
| -rw-r--r-- | feature-tests/scriptwatcher.pl | 82 | ||||
| -rw-r--r-- | fixery/now_playing_mpd.pl | 205 | ||||
| -rw-r--r-- | growl-notify/iterm_growl_activity.pl | 94 | 
6 files changed, 719 insertions, 0 deletions
diff --git a/feature-tests/history-restore.pl b/feature-tests/history-restore.pl new file mode 100644 index 0000000..453508a --- /dev/null +++ b/feature-tests/history-restore.pl @@ -0,0 +1,186 @@ +=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        => 'history-restore', +              description => '', +              license     => 'MIT', +              updated     => '$DATE' +             ); + +my @fake_history; +#  = ( "test", "test2", "test3" ); + +push @fake_history, "Test Entry $_" for (1..100); + +my $buf; +my @hist_queue = (); + +sub init { +    Irssi::theme_register +        ([ +          verbatim      => '[$*]', +          script_loaded => 'Loaded script {hilight $0} v$1', +         ]); + +    # definitely not an int for last param. +    #Irssi::signal_register({'key down' => [qw/string string int/] }); +    Irssi::command_bind('dohist',   \&cmd_dohist); +    Irssi::command_bind('showhist', \&cmd_showhist); + + +    Irssi::printformat(Irssi::MSGLEVEL_CLIENTCRAP, 'script_loaded', +                       $IRSSI{name}, $VERSION); + + +} + +sub win { +    return $_[0] || Irssi::active_win(); +} + + +sub do_next { +    if (length $buf) { +        my $char = substr($buf, 0, 1, ''); +        _key($char); +        do_next(); + +        #Irssi::timeout_add_once(10, +        #                        sub { +        #                        }, ''); +    } else { +        $buf = shift @hist_queue; +        _down(); +        if ($buf) { +            do_next(); +        } else { +            print "Queue empty"; +            Irssi::timeout_add_once(100, +                                    sub { +                                        print "Done"; +                                        Irssi::command("/showhist"); +                                    }, ''); + +        } +    } +} + +sub cmd_dohist { +    my ($args, $server, $witem) = @_; + +    print "Inserting fake history..."; +    @hist_queue = @fake_history; +    do_next(); + + +} + +sub _key { +    Irssi::signal_emit('gui key pressed', ord($_[0])); +} +sub _down { +    _key($_) for ("\e", "[", "B"); +} + +sub cmd_showhist { +    my ($args, $server, $witem) = @_; +    #print "Args: " . Dumper(\@_); +    dump_history(win($witem)); +} + +sub dump_history { +    my ($win) = @_; +    my @history = $win->get_history_lines(); +    my $i = 0; + +    print "---------HISTORY-----------"; + +    for (@history) { +        $i++; +        printf("%02d: %s", $i, $_); +    } +    print "---------------------------"; +} + +init(); + + +    # my $m = 0; +    # for my $entry (@fake_history) { +    #     my $n = 0; +    #     $m++; +    #     for my $char (split '', $entry) { +    #         $n++; +    #         Irssi::timeout_add_once(100 * $n * $m, +    #                                 sub { print "$char of $entry scheduled at " +    #                                         . (100 * $n * $m); +    #                                       _key($char) +    #                                   }, ''); +    #     } +    #     Irssi::timeout_add_once(100 * $n * $m, +    #                             sub { print "Down scheduled at " +    #                                     . (100 * $n * $m); +    #                                   _down(); +    #                               }, ''); +    # } diff --git a/feature-tests/ixtest.pl b/feature-tests/ixtest.pl new file mode 100644 index 0000000..a49d742 --- /dev/null +++ b/feature-tests/ixtest.pl @@ -0,0 +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     => 'MIT', +              updated     => '$DATE' +             ); diff --git a/feature-tests/rejoin-unban.pl b/feature-tests/rejoin-unban.pl new file mode 100644 index 0000000..ea43220 --- /dev/null +++ b/feature-tests/rejoin-unban.pl @@ -0,0 +1,83 @@ + +use strict; +use warnings; + +use Data::Dumper; + +# not sure of hte original source author, but probably based on +# autorejoin.pl: http://scripts.irssi.org/html/autorejoin.pl.html + +our $VERSION = '0.1'; +our %IRSSI = ( +              authors     => 'shabble, dunno original source', +              contact     => 'shabble+irssi@metavore.org', +              name        => '', +              description => '', +              license     => 'GPLv2', +              updated     => '$DATE' +             ); + + +use Irssi; +use Irssi::Irc; + + +sub event_rejoin_kick  { +    my ($server, $data) = @_; +    my ($channel, $nick) = split(/ +/, $data); + +    return if ($server->{nick} ne $nick); + +    my $chanrec = $server->channel_find($channel); +    my $password = $chanrec->{key} if ($chanrec); + +    Irssi::print "Rejoining $channel..."; + +    $server->send_raw("JOIN $channel $password"); +} + +sub event_rejoin_unban { +    my ($server, $data, $nick, $address) = @_; +    my ($target, $text) = $data =~ /^(\S*)\s:(.*)/; + +    if ($text =~ m/(\w+) has been unbanned from (#?\w+)/) { +        my ($nick, $channel) = ($1, $2); +        my $chanrec = $server->channel_find($channel); +        my $password = $chanrec->{key} if ($chanrec); + +        Irssi::print "Rejoining $channel..."; +        $server->command("JOIN $channel $password"); +    } +} + +sub event_unban { +    my ($server, $data) = @_; +    my ($nick, $channel) = split(/ +/, $data); + +    Irssi::print "Attempting unban on $channel..."; +    $server->send_raw("PRIVMSG ChanServ unban $channel"); +} + +sub sig_msg_kick { +    my ($server, $channel, $victim, $kicker, $addr, $reason) = @_; + +} + +sub sig_msg_notice { +    my ($server, $msg, $nick, $addr, $target) = @_; + +} + +sub sig_event_joinfail_banned { + +} + +sub init { + +    Irssi::signal_add('message kick',   'sig_msg_kick'); +    Irssi::signal_add('message notice', 'sig_msg_notice'); +    Irssi::signal_add('event 474',      'sig_event_joinfail_banned'); + +} + +init(); diff --git a/feature-tests/scriptwatcher.pl b/feature-tests/scriptwatcher.pl new file mode 100644 index 0000000..9d92cb8 --- /dev/null +++ b/feature-tests/scriptwatcher.pl @@ -0,0 +1,82 @@ +=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 + +What the hell is this script for? + +=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' +             ); +Irssi::signal_register({ 'script error' => ['Irssi::Script', 'string'] }); +Irssi::signal_add_first 'script error', \&sig_script_error; + +sub sig_script_error { +    my ($script, $msg) = @_; + +    $script //= 'nothing'; +    $msg //= 'empty'; +    print "Script is: " . Dumper($script); +    print "Message is: $msg"; + +     +} diff --git a/fixery/now_playing_mpd.pl b/fixery/now_playing_mpd.pl new file mode 100644 index 0000000..c80a7c3 --- /dev/null +++ b/fixery/now_playing_mpd.pl @@ -0,0 +1,205 @@ +# MPD Now-Playing Script for irssi +# Copyright (C) 2005 Erik Scharwaechter +# <diozaka@gmx.de> +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 2 +# as published by the Free Software Foundation. +# +# 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. +# +# The full version of the license can be found at +# http://www.gnu.org/copyleft/gpl.html. +# +# +####################################################################### +# I'd like to thank Bumby <bumby@evilninja.org> for his impc script,  # +# which helped me a lot with making this script.                      # +####################################################################### +# Type "/np help" for a help page!                                    # +####################################################################### +# TODO:                                                               # +#  - add more format directives                                       # +####################################################################### +# CHANGELOG:                                                          # +#  0.4: First official release                                        # +####################################################################### + +use strict; +#use IO::Socket; +use Irssi; +use IrssiX::Async qw(fork_off); +use Audio::MPD; +#use Storable; +use JSON::Any; +use Data::Dumper; + +our $VERSION = "0.5"; +our %IRSSI = ( +          name        => 'mpd', +          authors     => 'Erik Scharwaechter', +          contact     => 'diozaka@gmx.de', +          license     => 'GPLv2', +          description => 'print the song you are listening to', +         ); + +sub _to_json { +    my $data = shift; +    # add terminal newline to ensure flushing without having to mess +    # with autoflush on all pipes. +    return JSON::Any->new->objToJson($data) . "\n"; +} + +sub _from_json { +    my $json = shift; +    return JSON::Any->new->jsonToObj($json); +} + +sub _freeze_witem { +    my ($witem) = @_; +    my $win_item_ref; + +    if (defined $witem) { +        $win_item_ref = { server_tag => $witem->window->{servertag}, +                          win_refnum => $witem->window->{refnum}, +                          item_name  => $witem->{name} }; + +    } else { +        # make this more better (find status window) +        $win_item_ref = { server_tag => undef, +                          win_refnum => 1, +                          item_name  => '' }; + +    } + +    return $win_item_ref; +} + +sub _thaw_witem { +    my ($frozen_witem) = @_; + +    my $witem; +    my ($server_tag, $win_refnum, $witem_name) +      = map { $frozen_witem->{$_} } qw/server_tag win_refnum item_name/; + +    my $server = Irssi::server_find_tag($server_tag); +    my $win    = Irssi::window_find_refnum($win_refnum); + +    if ($win) { +        $witem = $win->item_find($server, $witem_name); +    } else { +        Irssi::print("Failed to find window item from params: tag: $server_tag, " +                     . "refnum: $win_refnum, item_name: $witem_name"); +    } +    return $witem; +} + +sub cmd_now_playing { +    my ($data, $server, $witem) = @_; + +    if($data =~ /^help/i){ +        cmd_now_playing_help(); +        return; +    } + +    my $host    = Irssi::settings_get_str('mpd_port')    || 'localhost'; +    my $port    = Irssi::settings_get_str('mpd_host')    || 6060; +    my $pass    = Irssi::settings_get_str('mpd_pass')    || ''; +    my $timeout = Irssi::settings_get_str('mpd_timeout') || 5; + + +    my $mpd_options = { win      => _freeze_witem($witem), +                        host     => $host, +                        port     => $port, +                        password => $pass }; + +    my $json_data = _to_json($mpd_options); +    fork_off($json_data, \&now_playing_request, \&now_playing_callback); +} + +sub now_playing_request { +    my (@input) = <STDIN>; +    my $json_data = join('', @input); + +    my $data = _from_json($json_data); +    #my $win = delete $data->{win}; + +#    my $mpd = Audio::MPD->new(%options); + +#    my $am_playing = $mpd->current->as_string; +#    my %x; +#    if (defined $am_playing) { +    #     %x = ( result => $am_playing, win => $win ); + +    # } else { +    #     %x = ( result => '__ERROR__', win => $win ); +    # } +    # my %x = (result => "foo", win => undef); +    # my $r = Storable::freeze(\%x); +    #print $r; + +    my $response = { status  => 1, +                     message => "Foo", +                     win     => $data->{win}, +                   }; + +    my $json_data = _to_json($response); +    print $json_data; +} + +sub now_playing_callback { +    my ($json_data) = @_; +    #chomp $result; +    #my $data = Storable::thaw($frozen_data); +    my $data = _from_json($json_data); +    print "received data: " . Dumper($data); +    my $witem = _thaw_witem($data->{win}); +    print "Witem: " . Dumper($witem); +    if ($witem) { +        $witem->print("Moo!"); +    } +    # unless ($deserialised->{result} eq "__ERROR__") { +    #     my $output_message = "/me is playing: " . $deserialised->{result}; +    #     my $witem = $deserialised->{win}; + +    #     if ($witem && ($witem->{type} eq "CHANNEL" || +    #                    $witem->{type} eq "QUERY")) { +    #         #$witem->command($output_message); +    #         $witem->print("Printing: $output_message"); +    #     } +    # } else { +    #     print "Now Playing MPD: Unable to do thingie (Got ERROR from child)"; +    # } + +} + +sub cmd_now_playing_help { +   print ' + MPD Now-Playing Script +======================== + +by Erik Scharwaechter (diozaka@gmx.de) + +Variables: +  mpd_host     (137.224.241.20) +  mpd_port     (6600) +  mpd_timeout  (5) + +Usage: +  /np          Print the song you are listening to +  /np help     Print this text +'; +} + + +Irssi::settings_add_str('mpd', 'mpd_host', '137.224.241.20'); +Irssi::settings_add_str('mpd', 'mpd_port', '6600'); +Irssi::settings_add_str('mpd', 'mpd_timeout', '5'); +Irssi::settings_add_str('mpd', 'mpd_pass', ''); + +Irssi::command_bind('np'      => \&cmd_now_playing); +Irssi::command_bind('np help' => \&cmd_now_playing_help); + diff --git a/growl-notify/iterm_growl_activity.pl b/growl-notify/iterm_growl_activity.pl new file mode 100644 index 0000000..3311fa3 --- /dev/null +++ b/growl-notify/iterm_growl_activity.pl @@ -0,0 +1,94 @@ +=pod + +=head1 NAME + +iterm_growl_activity.pl + +=head1 DESCRIPTION + +A script that combines Irssi activity notifications with the Growl notification +system. + +=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 + +=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        => 'iterm_growl_activity', +              description => 'generate growl notifications via iterm2 magical ' +                           . 'escape sequences if the window is not active', +              license     => 'MIT', +              updated     => '$DATE' +             ); + +sub init { +    Irssi::theme_register +        ([ +          verbatim      => '[$*]', +          script_loaded => 'Loaded script {hilight $0} v$1', +         ]); +    Irssi::printformat(Irssi::MSGLEVEL_CLIENTCRAP, +                       'script_loaded', $IRSSI{name}, $VERSION); + + +} + +sub iterm_toggle_term_focus { +    # ensure we handle the commands. + +    Irssi::command('bind meta-O nothing inactive'); +    Irssi::command('bind meta-I nothing inactive'); + +    my ($enable) = @_; +    print STDERR "\e[?1004" . ($enable ? 'h' : 'l'); +} + + +init();  | 
