summaryrefslogtreecommitdiffstats
path: root/scripts/queryresume.pl
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--scripts/queryresume.pl64
1 files changed, 64 insertions, 0 deletions
diff --git a/scripts/queryresume.pl b/scripts/queryresume.pl
new file mode 100644
index 0000000..b4b090e
--- /dev/null
+++ b/scripts/queryresume.pl
@@ -0,0 +1,64 @@
+# QueryResume by Stefan Tomanek <stefan@pico.ruhr.de>
+#
+use strict;
+
+use vars qw($VERSION %IRSSI);
+$VERSION = '2003021201';
+%IRSSI = (
+ authors => 'Stefan \'tommie\' Tomanek',
+ contact => 'stefan@pico.ruhr.de',
+ name => 'QueryResume',
+ description => 'restores the last lines of a query on re-creation',
+ license => 'GPLv2',
+ modules => 'Date::Format File::Glob',
+ changed => $VERSION,
+);
+
+use Irssi 20020324;
+use Date::Format;
+use File::Glob ':glob';
+
+sub draw_box ($$$$) {
+ my ($title, $text, $footer, $colour) = @_;
+ my $box = '';
+ $box .= '%R,--[%n%9%U'.$title.'%U%9%R]%n'."\n";
+ foreach (split(/\n/, $text)) {
+ $box .= '%R|%n '.$_."\n";
+ }
+ $box .= '%R`--<%n'.$footer.'%R>->%n';
+ $box =~ s/%.//g unless $colour;
+ return $box;
+}
+
+sub sig_window_item_new ($$) {
+ my ($win, $witem) = @_;
+ return unless (ref $witem && $witem->{type} eq 'QUERY');
+ my @data;
+ my $filename = Irssi::settings_get_str('autolog_path');
+ my $servertag = $witem->{server}->{tag};
+ my $name = lc $witem->{name};
+ $filename =~ s/(\$tag|\$1)/$servertag/g;
+ $filename =~ s/\$0/$name/g;
+ my @lt = localtime(time);
+ my $zone;
+ $filename = strftime($filename, @lt, $zone);
+ $filename =~ s/(\[|\])/\\$1/g;
+ local *F;
+ open(F, "<", bsd_glob($filename));
+ my $lines = Irssi::settings_get_int('queryresume_lines');
+ foreach (<F>) {
+ unless (/^--- Log/) {
+ push(@data, $_);
+ shift(@data) if (@data > $lines);
+ }
+ }
+ my $text;
+ $text .= $_ foreach @data;
+ $text =~ s/%/%%/g;
+ $witem->print(draw_box('QueryResume', $text, $filename, 1), MSGLEVEL_CLIENTCRAP) if $text;
+}
+
+Irssi::settings_add_int($IRSSI{name}, 'queryresume_lines', 10);
+
+Irssi::signal_add('window item new', 'sig_window_item_new');
+