aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--feature-tests/error.pl16
-rw-r--r--feature-tests/history-restore.pl186
-rw-r--r--feature-tests/incomplete.pl108
-rw-r--r--feature-tests/ixtest.pl69
-rw-r--r--feature-tests/key_sig.pl26
-rw-r--r--feature-tests/lowlight.pl80
-rw-r--r--feature-tests/rejoin-unban.pl83
-rw-r--r--feature-tests/scriptwatcher.pl82
-rw-r--r--feature-tests/template.pl32
-rw-r--r--fixery/awayproxy.pl22
-rw-r--r--fixery/now_playing_mpd.pl205
-rw-r--r--flood-detect/flood_detect.pl151
-rw-r--r--growl-notify/growl_notify.pl106
-rw-r--r--growl-notify/iterm_growl_activity.pl94
-rw-r--r--history-search/rl_history_search.pl3
-rw-r--r--longify/longify-urls.pl85
-rw-r--r--molly-guard/molly_guard.pl (renamed from foreach-guard/foreach-guard.pl)67
-rw-r--r--random/ignore-autovoice.pl88
18 files changed, 1463 insertions, 40 deletions
diff --git a/feature-tests/error.pl b/feature-tests/error.pl
new file mode 100644
index 0000000..5507910
--- /dev/null
+++ b/feature-tests/error.pl
@@ -0,0 +1,16 @@
+use Irssi;
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => '',
+ description => '',
+ license => 'MIT',
+ updated => '$DATE'
+ );
+
+Irssi::timeout_add_once(1000, 'die_horribly', undef);
+
+sub die_horribly {
+ die "Oh noes, I broke!";
+}
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/incomplete.pl b/feature-tests/incomplete.pl
new file mode 100644
index 0000000..022aebe
--- /dev/null
+++ b/feature-tests/incomplete.pl
@@ -0,0 +1,108 @@
+=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 $completions = {
+ 'horse' => ['horsie', 0],
+ 'pig' => ['piggy', 1],
+ 'fruit bat' => ['multi word string?', 1],
+ 'what' => ['stop that', 0],
+
+ }
+
+sub init {
+ Irssi::settings_add_str('incomplete', 'incomplete_database',
+ Irssi::get_irssi_dir() . '/incomplete.db');
+
+
+ Irssi::signal_add_first 'complete word', \&sig_complete_word;
+}
+
+sub sig_complete_word {
+ my ($completions, $win, $word, $prefix, $want_space) = @_;
+
+ my $str = $prefix . $word;
+ foreach my $candidate (keys %$completions) {
+ if ($str =~ m/\Q$candidate\E\s*$/) {
+
+ }
+ }
+ $$want_space = 0;
+
+}
+
+
+sub load_db {
+
+}
+
+sub save_db {
+
+}
+init();
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/key_sig.pl b/feature-tests/key_sig.pl
index ef69d45..3da50ac 100644
--- a/feature-tests/key_sig.pl
+++ b/feature-tests/key_sig.pl
@@ -25,12 +25,22 @@ 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 key' => [qw/string/]});
+Irssi::signal_add_first('key key' => \&sig_key_key);
+
Irssi::signal_register({'key nothing' => [qw/string/]});
-Irssi::signal_add_first('key nothing' => \&sig_key_cmd);
+Irssi::signal_add_first('key nothing' => \&sig_key_nothing);
Irssi::signal_register({'keyboard created' => [qw/Irssi::UI::Keyboard/]});
Irssi::signal_add_first('keyboard created' => \&sig_keyboard);
+Irssi::signal_register({'key bacon' => [qw/string int int/]});
+Irssi::signal_add_first('key bacon' => \&sig_key_bacon);
+
+sub sig_key_bacon {
+ print "baconkey: " . Dumper(\@_);
+}
+
sub sig_keyboard {
my ($data) = @_;
print "keyboard: " . Dumper($data);
@@ -42,10 +52,22 @@ sub sig_key_cmd {
}
+sub sig_key_nothing {
+ my ($data) = @_;
+ print "key nothing: " . Dumper($data);
+
+}
+
+sub sig_key_key {
+ my ($data) = @_;
+ print "key key: " . Dumper($data);
+
+}
+
sub sig_key_created {
my @args = @_;
print "Key Created, Args: " . Dumper(\@args);
}
-Irssi::command("bind meta-q /echo moo");
+Irssi::command("bind meta-q key bacon");
diff --git a/feature-tests/lowlight.pl b/feature-tests/lowlight.pl
new file mode 100644
index 0000000..1bad477
--- /dev/null
+++ b/feature-tests/lowlight.pl
@@ -0,0 +1,80 @@
+=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'
+ );
+
+
+Irssi::signal_add_first 'print text', \&sig_print_text;
+#Irssi::signal_add '',
+
+
+sub sig_print_text {
+ my ($dest, $text, $stripped_text) = @_;
+
+ Irssi::signal_continue($dest, $text, $stripped_text);
+}
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/feature-tests/template.pl b/feature-tests/template.pl
index a49d742..a5f59fa 100644
--- a/feature-tests/template.pl
+++ b/feature-tests/template.pl
@@ -67,3 +67,35 @@ our %IRSSI = (
license => 'MIT',
updated => '$DATE'
);
+
+my $NAME = $IRSSI{name};
+my $DEBUG = 0;
+
+sub DEBUG () { $DEBUG }
+
+sub _debug_print {
+ my ($msg) = @_;
+ Irssi::active_window()->print($msg);
+}
+
+sub sig_setup_changed {
+ $DEBUG = Irssi::settings_get_bool($NAME . '_debug');
+ _debug_print($NAME . ': debug enabled') if $DEBUG;
+}
+
+sub init {
+ Irssi::theme_register
+ ([
+ verbatim => '[$*]',
+ script_loaded => 'Loaded script {hilight $0} v$1',
+ ]);
+ Irssi::settings_add_bool($NAME, $NAME . '_debug', 0);
+ Irssi::signal_add('setup changed', \&sig_setup_changed);
+
+ sig_setup_changed();
+
+ Irssi::printformat(Irssi::MSGLEVEL_CLIENTCRAP,
+ 'script_loaded', $NAME, $VERSION);
+}
+
+init();
diff --git a/fixery/awayproxy.pl b/fixery/awayproxy.pl
index b60eff4..d0b33dd 100644
--- a/fixery/awayproxy.pl
+++ b/fixery/awayproxy.pl
@@ -9,7 +9,7 @@
## Other hand if you dont use irssi-proxy you still have a good reason to
## use this if you want to forward messages that come to you while
## you are away to email box.
-## This is usefull for forwarding messages to an SMS-gateway ;)
+## This is useful for forwarding messages to an SMS-gateway ;)
##
## btw.. if you find any bugs or have any ideas for development of this
## script dont hesitate to send msg to BCOW@IrcNET
@@ -311,7 +311,19 @@ sub msg_pri {
}
}
-Irssi::signal_add_last('proxy client connected', \&client_connect);
-Irssi::signal_add_last('proxy client disconnected', \&client_disconnect);
-Irssi::signal_add_last('message public', \&msg_pub);
-Irssi::signal_add_last('message private', \&msg_pri);
+sub init {
+
+ Irssi::settings_add_string('awayproxy', 'awayproxy_send_mode', MODE_EMAIL);
+
+ Irssi::signal_add_last('proxy client connected', \&sig_client_connect);
+ Irssi::signal_add_last('proxy client disconnected', \&sig_client_disconnect);
+ Irssi::signal_add_last('message public', \&sig_msg_public);
+ Irssi::signal_add_last('message private', \&sig_msg_private);
+ Irssi::signal_add('setup changed', \&sig_setup_changed);
+
+ sig_setup_changed();
+}
+
+sub sig_setup_changed {
+ # load values from settings.
+}
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/flood-detect/flood_detect.pl b/flood-detect/flood_detect.pl
new file mode 100644
index 0000000..d2eeb95
--- /dev/null
+++ b/flood-detect/flood_detect.pl
@@ -0,0 +1,151 @@
+=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 => 'flood-detect',
+ description => '',
+ license => 'MIT',
+ updated => '$DATE'
+ );
+
+
+my $NAME = $IRSSI{name};
+my $DEBUG = 0;
+
+my $activity;
+
+sub DEBUG () { $DEBUG }
+
+sub setup_changed {
+ $DEBUG = Irssi::settings_get_bool($NAME . '_debug');
+}
+
+sub DEBUG () { $DEBUG }
+
+sub _debug_print {
+ my ($msg) = @_;
+ Irssi::active_window()->print($msg);
+}
+
+sub sig_setup_changed {
+ $DEBUG = Irssi::settings_get_bool($NAME . '_debug');
+ _debug_print($NAME . ': debug enabled') if $DEBUG;
+}
+
+sub init {
+ Irssi::theme_register
+ ([
+ verbatim => '[$*]',
+ script_loaded => 'Loaded script {hilight $0} v$1',
+ ]);
+ Irssi::settings_add_bool($NAME, $NAME . '_debug', 0);
+ Irssi::signal_add('setup changed', \&sig_setup_changed);
+
+ Irssi::settings_add_int($NAME, 'flood_detect_lines', 10);
+ Irssi::settings_add_int($NAME, 'flood_detect_period', 10);
+ Irssi::settings_add_str($NAME, 'flood_detected_action', '/echo $N is flooding!');
+
+ sig_setup_changed();
+
+ Irssi::printformat(Irssi::MSGLEVEL_CLIENTCRAP,
+ 'script_loaded', $NAME, $VERSION);
+}
+
+init();
+
+sub update_activity {
+ my ($nick, $channel, $server) = @_;
+}
+
+sub prune_activity_list {
+}
+
+sub apply_flood_action {
+
+ my ($channel, $nick, $nick_addr) = @_;
+
+ my $action_setting = Irssi::settings_get_str('flood_detected_action');
+
+ my @actions = split /\s*;\s*/, $action_setting;
+
+ foreach my $action (@actions) {
+
+ my $processed_action = $action;
+
+ if ($action =~ m/suppress/i) {
+ return 0;
+ } elsif ($action =~ m/kick/i) {
+ $processed_action = "/KICK $target $nick";
+ } else {
+ $processed_action =~ s/\$nick/$nick/;
+ $processed_action =~ s/\$channel/$channel/;
+ $processed_action =~ s/\$host/$nick_addr/;
+
+ }
+
+ $processed_action = "/echo $action" if DEBUG;
+ $server->command($processed_action);
+ }
+}
+
+init();
diff --git a/growl-notify/growl_notify.pl b/growl-notify/growl_notify.pl
new file mode 100644
index 0000000..604c027
--- /dev/null
+++ b/growl-notify/growl_notify.pl
@@ -0,0 +1,106 @@
+=pod
+
+=head1 NAME
+
+growl_notify.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
+
+=over 4
+
+=item *
+
+Stuff.
+
+=back
+
+=cut
+
+# Plan
+# Notes
+# * Main target is remote screen+irssi, accessed via ssh on local OSX/iTerm2
+# (Because that's what I use :p)
+# * Might work on windows (growl has windows port afaik)
+# * iterm active feature: "[iterm2-discuss] iTerm2 1.0.0.20111020 canary released"
+# "Add support for reporting focus lost/gained. esc[?1004h turns it on;
+# then the terminal sends esc[I when focusing, esc[O when de-focusing.
+# Send esc[?1004l to disable."
+
+# Main features are:
+# * detect activity from irssi similarly to existing activity (crap, text, hilight)
+# * configurable white/blacklists for nicks, masks, activities?
+# * use the Growl remote protocol (GNTP) via optional ssh backchannel?
+# * easy to configure other parts (ssh tunnel, etc?)
+
+
+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'
+ );
+
+sub init {
+ Irssi::theme_register
+ ([
+ verbatim => '[$*]',
+ script_loaded => 'Loaded script {hilight $0} v$1',
+ ]);
+ Irssi::printformat(Irssi::MSGLEVEL_CLIENTCRAP,
+ 'script_loaded', $IRSSI{name}, $VERSION);
+}
+
+
+init();
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();
diff --git a/history-search/rl_history_search.pl b/history-search/rl_history_search.pl
index 016249d..7402a83 100644
--- a/history-search/rl_history_search.pl
+++ b/history-search/rl_history_search.pl
@@ -396,7 +396,8 @@ sub next_match {
sub update_input {
my $match = get_history_match();
- Irssi::gui_input_set($match);
+ # TODO: Use of uninitialized value in subroutine entry at /Users/shabble/projects/tmp/test/irssi-shab/scripts/rl_history_search.pl line 399.
+ Irssi::gui_input_set($match); # <--- here.
Irssi::gui_input_set_pos(length $match);
}
diff --git a/longify/longify-urls.pl b/longify/longify-urls.pl
index cd36503..83adc36 100644
--- a/longify/longify-urls.pl
+++ b/longify/longify-urls.pl
@@ -104,7 +104,13 @@ my $pending_msg_params = {};
my $lookup_in_progress;
my $flushing_message;
my $domains;
+my $DEBUG;
+sub _debug_print($) {
+ return unless $DEBUG;
+ my ($msg) = @_;
+ Irssi::active_win->print($msg, MSGLEVEL_CLIENTCRAP);
+}
sub sig_public_message {
_handle_messages(@_);
@@ -116,7 +122,7 @@ sub sig_private_message {
sub _handle_messages {
- my $msg = $_[1];
+ my ($server, $msg) = @_;
if ($flushing_message) { # don't interrupt it a second time.
delete $pending_msg_params->{$flushing_message};
@@ -139,11 +145,13 @@ sub _handle_messages {
$pending_msg_params->{$url} = [@_];
$lookup_in_progress = 1;
+
expand_url($url);
- Irssi::signal_stop;
+ Irssi::signal_stop if $server;
}
+
sub expand_url {
my ($url) = @_;
fork_off $url, \&expand_url_request, \&expand_url_callback;
@@ -158,16 +166,28 @@ sub expand_url_request {
$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) {
+ my $result = $user_agent->simple_request($request);
+
+ if ($result->is_redirect) {
+ my $location = $result->header('Location');
+ if ($location) {
+ print "$location\n";
+ } else {
+ print "ERROR: no Location header\n";
+ }
+ } elsif ($result->is_error) {
print "ERROR: " . $result->as_string . "\n";
- return;
+ } elsif ($result->is_success) {
+ print "$url\n";
}
+#elsif ($result->is_success) {
+ # print "
+# return;
+# }
+
my @redirects = $result->redirects;
+ #_debug_print(join (" => ", map { $_->header('Location') } @redirects));
if (@redirects) {
print $redirects[-1]->header('Location') . "\n";
}
@@ -177,26 +197,40 @@ sub expand_url_callback {
my ($result) = @_;
chomp $result;
+
my ($orig_url, $long_url) = split /\n/, $result;
$long_url = '' unless $long_url;
+
+ # l/rtrim to clean up whitespace
$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"/;
+ _debug_print("Result: orignal: $orig_url, new: $long_url");
+
+ if ($long_url) {
+ if ($long_url !~ /^ERROR/ && $long_url ne $orig_url) {
+ $new_signal[1]
+ =~ s/\Q$orig_url\E/$long_url [was: $orig_url]/;
+ _debug_print("Printing with: "
+ . Dumper(@new_signal[1..$#new_signal]));
+ } elsif ($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;
+ if (defined $new_signal[0]) {
+ $flushing_message = $orig_url;
+ Irssi::signal_emit 'message public', @new_signal;
+ } else {
+ delete $pending_msg_params->{$orig_url};
+ Irssi::print("URL: $orig_url expands to $new_signal[1]");
+ }
+ $lookup_in_progress = 0;
}
sub match_uri {
@@ -244,7 +278,7 @@ sub match_uri {
}
sub cmd_reload {
- my $filename = shift
+ my $filename = shift
|| File::Spec->catfile(Irssi::get_irssi_dir, 'longify-urls.list');
$domains = {};
open my $fh, '<', $filename
@@ -257,16 +291,31 @@ sub cmd_reload {
Irssi::active_win->print('%_Longify:%_ List of domains has been reloaded.');
}
+sub cmd_longify {
+ my ($args, $server, $witem) = @_;
+
+ # _handle_messages expects $_[1] to contain message content.
+ _handle_messages(undef, $args);
+}
+
sub init {
+ Irssi::settings_add_bool 'longify', 'longify-debug', 0;
+
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;
+ Irssi::command_bind 'longify', \&cmd_longify;
cmd_reload();
+ sig_setup_changed();
}
sub sig_setup_changed {
+
+ $DEBUG = Irssi::settings_get_bool 'longify-debug';
+ $DEBUG = 0 unless defined $DEBUG;
+
# TODO: settings updating stuff goes here.
}
diff --git a/foreach-guard/foreach-guard.pl b/molly-guard/molly_guard.pl
index bcebef6..fb45142 100644
--- a/foreach-guard/foreach-guard.pl
+++ b/molly-guard/molly_guard.pl
@@ -2,11 +2,30 @@
=head1 NAME
-foreach-guard.pl - confirm that you really mean to send a (non-)command to all channels.
+molly_guard.pl - confirm that you really mean to do things that could have
+potentially dangerous (or embarassing) effects.
=head1 DESCRIPTION
+Named after the plastic cover installed over some Big Red Switches With
+Major Consequences. See L<http://catb.org/jargon/html/M/molly-guard.html>.
+Attempts to stop you shooting yourself in the foot, face, or other body-part
+during normal day-to-day use of Irssi.
+By default, it protects you from the following potential mishaps:
+
+=over 4
+
+=item * C</foreach <channel|query|window|server> [not a command]>
+
+C</foreach THING ARGS> will pass I<ARGS> to every I<THING> specified. Usually,
+this is used to, for example, run a command in every window. A common mistake is
+not including a command char such as C</> in your I<ARGS>, in which case I<ARGS>
+is sent as text to every window or channel it can be. This is almost always bad.
+
+=item * I<Nothing else, yet>
+
+=back
=head1 INSTALLATION
@@ -45,7 +64,25 @@ THE SOFTWARE.
=head1 TODO
-Use this template to make an actual script.
+=over 4
+
+=item * Commands to protect:
+
+=over 4
+
+=item * C</foreach [noncommand]>
+
+=item * C</server> (in cases where C</connect> is probably meant)
+
+=item * C</upgrade> (way too easy to tab-complete instead of /UPTIME)
+
+=item * C</exit>, C</quit> (obvious)
+
+=item * ...
+
+=back
+
+=back
=cut
@@ -58,12 +95,14 @@ use Irssi::TextUI;
use Data::Dumper;
-our $VERSION = '0.1';
+our $VERSION = '0.2';
our %IRSSI = (
authors => 'shabble',
contact => 'shabble+irssi@metavore.org',
- name => 'foreach-guard',
- description => '',
+ name => 'molly_guard',
+ description => 'A script to protect users from accidentally invoking'
+ . ' commands which may perform undesired actions. See '
+ . 'http://catb.org/jargon/html/M/molly-guard.html',
license => 'MIT',
updated => '$DATE'
);
@@ -76,14 +115,14 @@ my $cmd_confirm_list;
my $txt_confirm_list;
sub init {
- Irssi::settings_add_bool('foreach_guard',
- 'foreach_guard_debug',
+ Irssi::settings_add_bool('molly_guard',
+ 'molly_guard_debug',
0);
- Irssi::settings_add_str ('foreach_guard',
- 'foreach_guard_confirm_commands',
+ Irssi::settings_add_str ('molly_guard',
+ 'molly_guard_confirm_commands',
'');
- Irssi::settings_add_str ('foreach_guard',
- 'foreach_guard_confirm_text',
+ Irssi::settings_add_str ('molly_guard',
+ 'molly_guard_confirm_text',
'');
Irssi::theme_register([
@@ -109,7 +148,7 @@ sub init {
}
sub sig_setup_changed {
- $DEBUG = Irssi::settings_get_bool('foreach_guard_debug');
+ $DEBUG = Irssi::settings_get_bool('molly_guard_debug');
_debug("settings changed");
$cmdchars = Irssi::settings_get_str('cmdchars');
my $tmp = join('|', map { quotemeta } split('', $cmdchars));
@@ -118,10 +157,10 @@ sub sig_setup_changed {
_debug("Match cmdchars set to: %s", $match_cmdchars);
$cmd_confirm_check = { map { $_ => 1 } split /\s+/,
- Irssi::settings_get_str('foreach_guard_confirm_commands') };
+ Irssi::settings_get_str('molly_guard_confirm_commands') };
$txt_confirm_check = { map { $_ => 1 } split /\s+/,
- Irssi::settings_get_str('foreach_guard_confirm_text') };
+ Irssi::settings_get_str('molly_guard_confirm_text') };
}
diff --git a/random/ignore-autovoice.pl b/random/ignore-autovoice.pl
new file mode 100644
index 0000000..82336e5
--- /dev/null
+++ b/random/ignore-autovoice.pl
@@ -0,0 +1,88 @@
+
+=pod
+
+=head1 NAME
+
+ignore-autovoice.pl
+
+=head1 DESCRIPTION
+
+Ignores C<+m> mode changes in all (or a custom subset) of your channels, to avoid
+mode-spam without ignoring all modes.
+
+=head1 INSTALLATION
+
+Copy into your F<~/.irssi/scripts/> directory and load with
+C</SCRIPT LOAD F<filename>>.
+
+=head1 USAGE
+
+TODO
+
+=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;
+
+# Question: how to mark a signal in one event and apply actions to it later on?
+# TODO: make this a generic 'some modes only' thing.
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => 'shabble',
+ contact => 'shabble+irssi@metavore.org',
+ name => 'ignore-autovoice',
+ description => 'ignores autovoice +m mode changes',
+ license => 'MIT',
+ updated => '$DATE'
+ );
+
+
+sub init {
+
+ Irssi::settings_add_string('ignore-autovoice', '
+ Irssi::signal_add('setup changed', \&sig_setup_changed);
+ Irssi::signal_add('');
+}
+
+sub sig_setup_changed {
+
+}
+
+sub sig_mode_changed {
+
+}