40 lines
959 B
Perl
40 lines
959 B
Perl
use strict;
|
|
use Irssi;
|
|
use IO::Handle;
|
|
use POSIX;
|
|
|
|
our $pipe_path = "/tmp/irssi_pipe";
|
|
our $pipe_fh;
|
|
|
|
Irssi::settings_add_str('fifo_input', 'fifo_pipe_path', $pipe_path);
|
|
|
|
sub fifo_input_open {
|
|
$pipe_path = Irssi::settings_get_str('fifo_pipe_path');
|
|
unless (-p $pipe_path) {
|
|
mkfifo($pipe_path, 0700) or die "Cannot create FIFO pipe: $!";
|
|
}
|
|
|
|
open($pipe_fh, '<', $pipe_path) or die "Cannot open FIFO pipe: $!";
|
|
$pipe_fh->blocking(0);
|
|
Irssi::input_add(fileno($pipe_fh), Irssi::INPUT_READ, \&fifo_input_read, undef);
|
|
}
|
|
|
|
sub fifo_input_read {
|
|
while (my $line = <$pipe_fh>) {
|
|
chomp $line;
|
|
Irssi::command($line);
|
|
}
|
|
}
|
|
|
|
sub fifo_input_close {
|
|
Irssi::input_remove(fileno($pipe_fh));
|
|
close($pipe_fh);
|
|
}
|
|
|
|
Irssi::signal_add('setup changed', \&fifo_input_open);
|
|
Irssi::command_bind('fifo_close', \&fifo_input_close);
|
|
|
|
fifo_input_open();
|
|
|
|
Irssi::print("FIFO input script loaded. Listening on $pipe_path");
|