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