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 )