summaryrefslogtreecommitdiffstats
path: root/scripts/repeat.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/repeat.pl')
-rw-r--r--scripts/repeat.pl144
1 files changed, 144 insertions, 0 deletions
diff --git a/scripts/repeat.pl b/scripts/repeat.pl
new file mode 100644
index 0000000..0d70b72
--- /dev/null
+++ b/scripts/repeat.pl
@@ -0,0 +1,144 @@
+use Irssi;
+use strict;
+
+use vars qw($VERSION %IRSSI);
+
+$VERSION="0.2.0";
+%IRSSI = (
+ authors=> 'BC-bd',
+ contact=> 'bd@bc-bd.org',
+ name=> 'repeat',
+ description=> 'Hide duplicate lines',
+ license=> 'GPL v2',
+ url=> 'http://bc-bd.org/blog/irssi/',
+);
+
+# repeal.pl: ignore repeated messages
+#
+# for irssi 0.8.5 by bd@bc-bd.org
+#
+#########
+# USAGE
+###
+#
+# This script hides repeated lines from:
+#
+# dude> Plz Help me!!!
+# dude> Plz Help me!!!
+# dude> Plz Help me!!!
+# guy> foo
+#
+# Becomes:
+#
+# dude> Plz Help me!!!
+# guy> foo
+#
+# Or with 'repeat_show' set to ON:
+#
+# dude> Plz Help me!!!
+# Irssi: Message repeated 3 times
+# guy> foo
+#
+#########
+# OPTIONS
+#########
+#
+# /set repeat_show <ON|OFF>
+# * ON : show info line: 'Message repeated N times'
+# * OFF : don't show it.
+#
+# /set repeat_count <N>
+# N : Display a message N times, then ignore it.
+#
+###
+################
+###
+# Changelog
+#
+# Version 0.2.0
+# - addes support for /me
+#
+# Version master
+# - updated url
+#
+# Version 0.1.3
+# - fix: also check before own message (by Wouter Coekaerts)
+#
+# Version 0.1.2
+# - removed stray debug message (duh!)
+#
+# Version 0.1.1
+# - off by one fixed
+# - fixed missing '$'
+#
+# Version 0.1.0
+# - initial release
+#
+my %said;
+my %count;
+
+sub sig_public {
+ my ($server, $msg, $nick, $address, $target) = @_;
+
+ my $maxcount = Irssi::settings_get_int('repeat_count');
+
+ my $window = $server->window_find_item($target);
+ my $refnum = $window->{refnum};
+
+ my $this = $refnum.$nick.$msg;
+
+ my $last = $said{$refnum};
+ my $i = $count{$refnum};
+
+ if ($last eq $this and not $nick eq $server->{nick}) {
+ $count{$refnum} = $i +1;
+
+ if ($i >= $maxcount) {
+ Irssi::signal_stop();
+ }
+ } else {
+ if ($i > $maxcount && Irssi::settings_get_bool('repeat_show')) {
+ $window->print("Message repeated ".($i-1)." times");
+ }
+
+ $count{$refnum} = 1;
+ $said{$refnum} = $this;
+ }
+}
+
+sub sig_own_public {
+ my ($server, $msg, $target) = @_;
+ sig_public ($server, $msg, $server->{nick}, "", $target);
+}
+
+sub remove_window {
+ my ($num) = @_;
+
+ delete($count{$num});
+ delete($said{$num});
+}
+
+sub sig_refnum {
+ my ($window,$old) = @_;
+ my $refnum = $window->{refnum};
+
+ $count{$refnum} = $count{old};
+ $said{$refnum} = $count{old};
+
+ remove_window($old);
+}
+
+sub sig_destroyed {
+ my ($window) = @_;
+ remove_window($window->{refnum});
+}
+
+Irssi::signal_add('message public', 'sig_public');
+Irssi::signal_add('message own_public', 'sig_own_public');
+Irssi::signal_add('message irc action', 'sig_public');
+Irssi::signal_add_last('window refnum changed', 'sig_refnum');
+Irssi::signal_add_last('window destroyed', 'sig_destroyed');
+
+Irssi::settings_add_int('misc', 'repeat_count', 1);
+Irssi::settings_add_bool('misc', 'repeat_show', 1);
+