use vars qw($VERSION %IRSSI %channels); use Irssi; use Irssi::TextUI; $VERSION = '0.2'; %IRSSI = ( authors => 'Dregu', contact => 'dregu@dreg.us', name => 'Wanha', description => 'Stops you if you are trying to paste an url that is already in your lastlog.', license => 'evvk', changed => '' ); # Changelog: # 0.1 - Initial release # 0.2 - You can now define keybinds to discard the wanha line or say it anyway.. kinda. my $wanhaline = ""; my $wanhawitem; my $wanhaserver; my $wanhaobind; my $wanhacbind; sub wanha_override () { return if ($wanhaline eq ""); $wanhaserver->command("/MSG -$wanhaserver->{tag} $wanhawitem->{name} " . $wanhaline); $wanhaline = ""; $wanhaserver->command("^BIND -delete $wanhaobind"); $wanhaserver->command("^BIND -delete $wanhacbind"); my $win = $wanhawitem->window(); my $line = $win->view()->get_bookmark('wanha'); $win->view()->remove_line($line) if defined $line; Irssi::command("redraw"); } sub wanha_clear () { $wanhaline = ""; $wanhaserver->command("^BIND -delete $wanhaobind"); $wanhaserver->command("^BIND -delete $wanhacbind"); my $win = $wanhawitem->window(); my $line = $win->view()->get_bookmark('wanha'); $win->view()->remove_line($line) if defined $line; Irssi::command("redraw"); } sub wanha ($$$) { my ($line, $server, $witem) = @_; return unless ($witem && $witem->{type} eq "CHANNEL"); return unless ( $line =~ m/(http:\/\/[^\s]+)/g ); $wanhaline = $line; $wanhawitem = $witem; $wanhaserver = $server; my $url = $1; my $lines = Irssi::settings_get_int('wanha_lines'); my $win = ref $witem ? $witem->window() : Irssi::active_win(); my $view = $win->view; my $line = $view->get_lines; $line = $line->next while defined $line->next; while (defined $line->prev) { last if $lines == 0; my $text = $line->get_text(1); if( $text =~ m/$url(\s|$)/g && $line->{info}{level} & Irssi::level2bits(PUBLIC) ) { Irssi::signal_stop(); my $obind = Irssi::settings_get_str('wanha_bind_override'); my $cbind = Irssi::settings_get_str('wanha_bind_clear'); $win->print("Wanha! (".$text.") Press $obind to say it anyway or $cbind to clear.", MSGLEVEL_NEVER); $win->view()->set_bookmark_bottom('wanha'); $server->command('^BIND '.$obind.' /wanha_override'); $server->command('^BIND '.$cbind.' /wanha_clear'); $wanhaobind = $obind; $wanhacbind = $cbind; last; } $line = $line->prev; $lines-- if $lines; } } Irssi::settings_add_str('wanha', 'wanha_bind_override', '^K'); Irssi::settings_add_str('wanha', 'wanha_bind_clear', '^C'); Irssi::settings_add_int('wanha', 'wanha_lines', 1000); Irssi::signal_add('send text', \&wanha); Irssi::command_bind('wanha_override', 'wanha_override'); Irssi::command_bind('wanha_clear', 'wanha_clear');