package Xchat::VPIT::Highlight; use strict; use warnings; use Xchat qw<:all>; use lib get_info 'xchatdir'; use Xchat::XPI; use Xchat::XPI::Events qw; our $VERSION = '0.04'; my $ph; sub guihl { command 'GUI FLASH'; command 'GUI COLOR 3'; } sub guiclear { command 'GUI COLOR 0'; } hook_print 'Private Message to Dialog', sub { guihl; return EAT_NONE }; my %hl = ( '#cpantesters' => [ qw< Acme-CPANAuthors-You-re_using B-RecDeparse Bit-MorseSignals CPANPLUS-Dist-Gentoo IPC-MorseSignals Lexical-Types Linux-SysInfo Perl-Critic-Policy-Dynamic-NoIndirect Regexp-Wildcards Scalar-Vec-Util Scope-Upper Sub-Nary Sub-Op Sub-Prototype-Util Test-Valgrind Thread-Cleanup Variable-Magic autovivification- indirect- rgit- subs-auto \bwith- > ], ); for (keys %hl) { my $rx = '(?:' . join('|', @{$hl{$_}}) . ')'; $hl{$_} = qr/$rx/; } filter 'Channel Action' => sub { my $chan = lc get_info 'channel'; if ($hl{$chan} and $_[1] =~ /$hl{$chan}/) { guihl; 1; } else { 0; } } => 'Channel Action Hilight'; my %skip = ( '#p5p' => [ '(?i:jesse.vincent)', ], ); for (keys %skip) { my $rx = '(?:' . join('|', @{$skip{$_}}) . ')'; $skip{$_} = qr/$rx/; } filter 'Channel Action Hilight' => sub { my $chan = lc get_info 'channel'; if ($skip{$chan} and $_[1] =~ /$skip{$chan}/) { guiclear; 1; } else { 0; } } => 'Channel Action'; $ph = Xchat::XPI->new( name => 'Smart highlighting', tag => 'HL', desc => 'Highlight on private messages', author => 'Vincent Pit (VPIT)', email => 'perl@profvince.com', url => 'http://www.profvince.com', ); 1;