/
hlagg.pl
65 lines (59 loc) · 1.84 KB
/
hlagg.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use strict;
use Irssi;
use vars qw($VERSION %IRSSI);
$VERSION = "0.1";
%IRSSI = (
authors => 'rupa',
contact => 'rupa@lrrr.us',
name => 'hlagg.pl',
description => 'store higlighted lines internally',
license => 'GNU General Public License',
url => '',
);
my @hls;
my @hlnew;
sub cmd_help {
my @hlp = (
$IRSSI{'name'}.": ".$IRSSI{'description'},
"/hlagg all - show all",
"/hlagg clear - clear list",
"/hlagg N - show last N entries",
"/hlagg - show all new entries",
);
Irssi::print(join("\n", @hlp), MSGLEVEL_NOTICES);
}
sub hlagg {
my ($q) = @_;
my $out;
my $window = Irssi::active_win();
return cmd_help() if $q eq "help";
if( $q eq "clear" ) {
@hls = ();
return;
} elsif( $q eq "all" or ($q > 0 and (scalar(@hls) - $q) <= 0) ) {
return if !@hls;
$window->print(join("\n", @hls), MSGLEVEL_NOTICES);
} elsif ( $q > 0 ) {
return if !@hls;
$window->print(join("\n", @hls[(scalar(@hls) - $q) .. $#hls]), MSGLEVEL_NOTICES);
} else {
return if !@hlnew;
$window->print(join("\n", @hlnew), MSGLEVEL_NOTICES);
@hlnew = ();
}
$window->print(join("\n", @hlnew), MSGLEVEL_NOTICES);
}
sub print_text {
my ($dest, $text, $stripped) = @_;
my $server = $dest->{server};
return if (!$server || !($dest->{level} & MSGLEVEL_HILIGHT));
my $sender = $stripped;
$sender =~ s/^\<.([^\>]+)\>.+/$1/ ;
$stripped =~ s/^\<.[^\>]+\>.// ;
$stripped =~ s/\x03\d?\d?(,\d\d?)?|\x02|\x1f|\x16|\x06//g;
my $summary = $dest->{target} . ": " . $sender;
push(@hls, localtime(time)." $summary $stripped");
push(@hlnew, localtime(time)." $summary $stripped");
}
Irssi::signal_add('print text', 'print_text');
Irssi::command_bind('hlagg', 'hlagg');