Skip to content

Commit

Permalink
Add a hacked up version of fnotify that beeps as well as printing
Browse files Browse the repository at this point in the history
hilights to file

This allows you to specify who you want to light up in tmux/screen
  • Loading branch information
richo committed Oct 14, 2011
1 parent 157dfb6 commit 82e4bd1
Showing 1 changed file with 136 additions and 0 deletions.
136 changes: 136 additions & 0 deletions bnotify/bnotify.pl
@@ -0,0 +1,136 @@
# todo: grap topic changes

use strict;
use vars qw($VERSION %IRSSI);

use Irssi;
$VERSION = '0.0.1';
%IRSSI = (
authors => 'richo',
contact => 'richo@psych0tik.net',
name => 'bnotify',
description => 'Write notifications based on who\'s talking to you, also handle some window management and tmux alerts',
url => 'http://natalya.psych0tik.net/~richo/bnotify',
license => 'GNU General Public License',
changed => '$Date: 2011-06-21 21:51:30 +1000 (Tue, 21 Jun 2011) $'
);
# Originally based on fnotify.pl 0.0.3 by Thorsten Leemhuis
# fedora@leemhuis.info
# 'http://www.leemhuis.info/files/fnotify/',
#
#--------------------------------------------------------------------
# In parts based on knotify.pl 0.1.1 by Hugo Haas
# http://larve.net/people/hugo/2005/01/knotify.pl
# which is based on osd.pl 0.3.3 by Jeroen Coekaerts, Koenraad Heijlen
# http://www.irssi.org/scripts/scripts/osd.pl
#
# Other parts based on notify.pl from Luke Macken
# http://fedora.feedjack.org/user/918/
#
#--------------------------------------------------------------------

# TODO
# Add settings for which networks to beep on

my @alert_nets = ();
sub bnotify_init {
Irssi::settings_add_str('bnotify', 'bnotify_alert_nets', '');
@alert_nets = split(/ /, Irssi::settings_get_str('bnotify_alert_nets'));
}

#--------------------------------------------------------------------
# Private message parsing
#--------------------------------------------------------------------
# TODO
# Test to see if the privmsg went to a status window, and is from bitlbee in
# which case send it to it's own window

sub priv_msg {
my ($server,$msg,$nick,$address,$target) = @_;
# Does this expose issues if someone includes regexp chars in their server
# tag?
if (grep(/^$server->{tag}$/, @alert_nets)) {
Irssi::command('beep');
}
filewrite($server->{tag}.":".$nick." private");
#Irssi::settings_set_str('autocreate_query_level', 'DCCMSGS MSGS');
}

#--------------------------------------------------------------------
# Private msg windowing
#--------------------------------------------------------------------

sub priv_msg_winhook {
my ($server,$msg,$nick,$address,$target) = @_;
if (grep($server->{tag}, @alert_nets)) {
Irssi::settings_set_str('autocreate_query_level', 'DCCMSGS MSGS');
}
}

#--------------------------------------------------------------------
# Printing hilight's
#--------------------------------------------------------------------

sub hilight {
my ($dest, $text, $stripped) = @_;
if ($dest->{level} & MSGLEVEL_HILIGHT) {
filewrite($dest->{server}->{tag}.":".$dest->{target}. " " .$stripped );
}
}

#--------------------------------------------------------------------
# Handle Arguments
#--------------------------------------------------------------------

sub cmd_add {
my $net = shift;
if (not grep($net, @alert_nets)) {
push @alert_nets, $net;
Irssi::active_win->print("Added $net to alert networks.");
} else {
Irssi::active_win->print("$net already configured to alert.");
}
}

sub cmd_del {
my $net = shift;
my @valid;
my $idx = 0;
while ($idx <= $#alert_nets) {
if (lc($alert_nets[$idx]) eq lc($net)) {
push @valid, $alert_nets[$idx];
}
$idx++;
}
if ($#alert_nets != $#valid) {
Irssi::active_win->print("Removed $net from alert networks.");
} else {
Irssi::active_win->print("$net didn't exist in alert networks.");
}
@alert_nets = @valid;
}

#--------------------------------------------------------------------
# The actual printing
#--------------------------------------------------------------------

sub filewrite {
my ($text) = @_;
open(FILE, '>' .Irssi::get_irssi_dir() . '/fnotify');
print FILE $text . "\n";
close (FILE);
}

#--------------------------------------------------------------------
# Irssi::signal_add_last / Irssi::command_bind
#--------------------------------------------------------------------

Irssi::signal_add_first("message private", "priv_msg_winhook");
Irssi::signal_add_last("message private", "priv_msg");
Irssi::signal_add_last("print text", "hilight");

Irssi::command_bind('bnotify add', \&cmd_add);
Irssi::command_bind('bnotify del', \&cmd_del);
bnotify_init();

#- end

0 comments on commit 82e4bd1

Please sign in to comment.