User:Optimix~enwiki/Irssi guifications

Irssi plugin that pops up a gtk2 window when someone says your name in a chat or when you receive a private message.

It sucks, but it works and I like it.

use vars qw(%IRSSI	   $total_popups	    $popup_vertical_pos	    $first_popup_closed);
 * 1) !/usr/bin/perl

use Gtk2 '-init'; use Glib;
 * 1) gtk and glib

use constant TRUE => 1; use constant FALSE => 0;
 * 1) constants

%IRSSI = (   authors     => 'Munteanu Alexandru Ionut',    contact     => 'io_alex_2002 AT yahoo DOT fr',    name        => 'irssi_guifications',    description => 'pop-up gtk window on incoming private message',    version     => '0.1',    license     => 'GPLv2',    year        => '2006',    url         => '', );

$total_popups = 0; $popup_vertical_pos = 30; $first_popup_closed = FALSE;

@popups = ;
 * 1) contains arrays of {'nick' =>,'number' =>}

sub show_popup($$$$$$) {   #if private_message is true, then we have received a private #message, otherwise a public message my ($private_message,$server, $msg, $nick, $address, $target) = @_; my $current_popup; #security check if ($total_popups < 0) {	$total_popups = 0; }   $current_popup = $total_popups; $total_popups++; #number of seconds to show the notification ares my $seconds = 6; #creates new gtk window my $window = Gtk2::Window->new('popup'); $window->set_default_size(150,30); #click event my $click_event = Gtk2::EventBox->new; $click_event->signal_connect(button_press_event => sub { 	$total_popups--;	#if we are the first popup,	if ($current_popup == 0)	{	   $new_popup_vertical_pos = 30;	    $total_popups = 0;	}	$window->destroy;	}); #we add the click event to the main window $window->add($click_event); #main vertical box my $main_vbox = Gtk2::VBox->new; #we add the main vertical vbox to the click event $click_event->add($main_vbox); #vertical box my $vbox = Gtk2::VBox->new; #we put the vbox inside the main vbox $main_vbox->pack_start($vbox,TRUE,TRUE,10); #blue color my $gdk_blue_color; $gdk_blue_color = Gtk2::Gdk::Color->parse("blue"); #the nick label my $nick_label = Gtk2::Label->new($nick); $nick_label->modify_fg(GTK_STATE_NORMAL,$gdk_blue_color); #"has messaged you" label my $has_messaged_you_label; #the channel where our name was pronounced my $channel_label; my $network_name_label; $network_name_label = Gtk2::Label->new($server->{'chatnet'}); $network_name_label->modify_fg(GTK_STATE_NORMAL,$gdk_blue_color); #ŧhe "has messaged you" message if ($private_message) {	$has_messaged_you_label = Gtk2::Label->new("has messaged you on"); }   else {	$has_messaged_you_label = Gtk2::Label->new("said your name on"); $channel_label = Gtk2::Label->new($target); $channel_label->modify_fg(GTK_STATE_NORMAL,$gdk_blue_color); }   #we put the nick in the box $vbox->pack_start($nick_label,FALSE,FALSE,0); #we put the "has messaged you" label in the main vbox $vbox->pack_start($has_messaged_you_label,FALSE,FALSE,0); #we put the network name $vbox->pack_start($network_name_label,FALSE,FALSE,0); #if public message, put channel if (!$private_message) {	$vbox->pack_start($channel_label,FALSE,FALSE,0); }   #we show the popup $window->show_all; #we move the window $window->move(0,$popup_vertical_pos+2); if (($popup_vertical_pos != 30)	|| ($current_popup == 0)) {	#we get the vertical size of the window #and stock it for future popups my $window_y_pos, $window_x_pos; ($window_x_pos, $window_y_pos) = $window->get_position; my $window_width, $window_height; ($window_width, $window_height) = $window->get_size; $popup_vertical_pos = $window_y_pos + $window_height; }   #we destroy the window after $seconds Glib::Timeout->add($seconds * 1000, sub {	$total_popups--;	#if we are the first popup,	if ($current_popup == 0)	{	   $popup_vertical_pos = 30;	    $total_popups = 0;	}	$window->destroy;    }); }
 * 1) popups the gtk window that expires in $seconds (see below)

sub sig_message_private ($$$$$) {   my ($server, $msg, $nick, $address,$target) = @_; show_popup(TRUE,$server, $msg, $nick, $address,$target); }
 * 1) when we receive a private message, we execute this

sub sig_message_public ($$$$$) {   my ($server, $msg, $nick, $address,$target) = @_; #if our nick is pronounced in the public chat if ($msg =~ /.*$server->{nick}.*/) {	show_popup(FALSE,$server, $msg, $nick, $address, $target); } }
 * 1) we receive a public message

Irssi::signal_add('message private', \&sig_message_private); Irssi::signal_add('message public', \&sig_message_public);
 * 1) when we receile a private message

print CLIENTCRAP '%B>>%n '.$IRSSI{name}.' v'.$IRSSI{version}. ' loaded - '.$IRSSI{license}." license"." - ". $IRSSI{authors}, " - ".$IRSSI{year};
 * 1) show message on plugin load