App-wmiirc
view release on metacpan or search on metacpan
lib/App/wmiirc.pm view on Meta::CPAN
# ABSTRACT: An event loop for wmii (X11 window manager)
package App::wmiirc;
{
$App::wmiirc::VERSION = '1.000';
}
use 5.014;
use App::wmiirc::Util;
use File::Which;
use IO::Async::Loop;
use IO::Async::Stream;
use Moo;
use Try::Tiny;
$SIG{PIPE} = 'IGNORE';
our $DEBUG = !!$ENV{WMIIP_DEBUG};
has loop => (
is => 'ro',
default => sub { IO::Async::Loop->new }
);
has main_config => (
is => 'ro',
default => sub {
+{config("config", {
modkey => 'Mod4',
normcolors => '#999999 #151f3f #2a3f3f',
focuscolors => '#ffffaa #5f77bf #2a3f8f',
alertcolors => '#ffffff #aa2299 #ff44cc',
font => '-*-fixed-medium-r-*-*-12-*-*-*-*-*-*-*',
terminal => scalar(config('commands', 'terminal',
which('urxvt') || which('xterm'))),
})}
}
);
sub BUILD {
my($self) = @_;
$SIG{__WARN__} = sub {
print STDERR @_;
$self->dispatch("event_msg", @_);
};
# Munge defaults to wmii ctl form
my %ctl_config = %{$self->main_config};
$ctl_config{grabmod} ||= $self->main_config->{modkey};
delete @ctl_config{qw(modkey terminal alertcolors)};
wmiir "/ctl", map "$_ $ctl_config{$_}", keys %ctl_config;
# Mirror various bits of config under .wmii to wmii's filesystem
wmiir "/rules", scalar config("rules");
wmiir "/colrules", scalar config("colrules");
# Load configured modules
my %modules = config("modules", { key => "", tag => "" });
$self->load($_) for keys %modules;
# Run configured external programs
for(split /\n/, scalar config("startup") || "witray") {
next if /^\s*#/;
system "$_ &";
}
}
sub run {
my($self) = @_;
$self->loop->add(IO::Async::Stream->new(
read_handle => do {
open my $event_fh, "-|", "wmiir", "read", "/event" or die $!; $event_fh;
( run in 1.059 second using v1.01-cache-2.11-cpan-39bf76dae61 )