1#!/usr/local/bin/perl 2# 3# irssi beep replace script (tested with irssi v0.8.8.CVS (20030126-1726)) 4# (C) 2002-2004 Ge0rG@IRCnet (Georg Lukas <georg@op-co.de>) 5# inspired and tested by Macrotron@IRCnet (macrotron@president.eu.org) 6 7# added beep_flood to irssi settings: beep_cmd will be run not more often 8# then every $beep_flood milliseconds 9 10# fixed memory leak with timeout_add (made irssi waste 80mb and more after a day of IRC) 11# added > /dev/null, thx to Luis Oliveira 12# fixed timeout handling bug, thx to frizop@charter.net 13 14use strict; 15use vars qw($VERSION %IRSSI); 16$VERSION = "0.10"; 17%IRSSI = ( 18 authors => "Georg Lukas", 19 contact => "georg\@op-co.de", 20 name => "beep_beep", 21 description => "runs arbitrary command instead of system beep, includes flood protection", 22 license => "Public Domain", 23 url => "http://op-co.de/irssi/", 24); 25 26use Irssi; 27 28my $might_beep = 1; 29my $to_tag; 30 31sub beep_overflow_timeout() { 32 $might_beep = 1; 33 Irssi::timeout_remove($to_tag); 34} 35 36sub beep_beep() { 37 my $beep_cmd = Irssi::settings_get_str("beep_cmd"); 38 if ($beep_cmd) { 39 if ($might_beep) { 40 my $beep_flood = Irssi::settings_get_int('beep_flood'); 41 $beep_flood = 1000 if $beep_flood < 0; 42 Irssi::timeout_remove($to_tag); 43 $to_tag = Irssi::timeout_add($beep_flood, 'beep_overflow_timeout', undef); 44 system($beep_cmd); 45 $might_beep = 0; 46 } 47 Irssi::signal_stop(); 48 } 49} 50 51Irssi::settings_add_str("lookandfeel", "beep_cmd", "play ~/.irssi/scripts/beep_beep.wav > /dev/null &"); 52Irssi::settings_add_int("lookandfeel", "beep_flood", 250); 53Irssi::signal_add("beep", "beep_beep"); 54 55