NAME

AnyEvent::I3 - communicate with the i3 window manager

VERSION

Version 0.01

SYNOPSIS

This module connects to the i3 window manager using the UNIX socket based IPC interface it provides (if enabled in the configuration file). You can then subscribe to events or send messages and receive their replies.

Note that as soon as you subscribe to some kind of event, you should NOT send any more messages as race conditions might occur. Instead, open another connection for that.

use AnyEvent::I3 qw(:all);

my $i3 = i3("/tmp/i3-ipc.sock");

$i3->connect->recv;
say "Connected to i3";

my $workspaces = $i3->message(TYPE_GET_WORKSPACES)->recv;
say "Currently, you use " . @{$workspaces} . " workspaces";

EXPORT

$i3 = i3([ $path ]);

Creates a new AnyEvent::I3 object and returns it. path is the path of the UNIX socket to connect to.

SUBROUTINES/METHODS

$i3 = AnyEvent::I3->new([ $path ])

Creates a new AnyEvent::I3 object and returns it. path is the path of the UNIX socket to connect to.

$i3->connect

Establishes the connection to i3. Returns an AnyEvent::CondVar which will be triggered with a boolean (true if the connection was established) as soon as the connection has been established.

if ($i3->connect->recv) {
    say "Connected to i3";
}

$i3->subscribe(\%callbacks)

Subscribes to the given event types. This function awaits a hashref with the key being the name of the event and the value being a callback.

$i3->subscribe({
    workspace => sub { say "Workspaces changed" }
});

$i3->message($type, $content)

Sends a message of the specified type to i3, possibly containing the data structure payload, if specified.

my $reply = $i3->message(TYPE_COMMAND, "reload")->recv;
if ($reply->{success}) {
    say "Configuration successfully reloaded";
}

AUTHOR

Michael Stapelberg, <michael at stapelberg.de>

BUGS

Please report any bugs or feature requests to bug-anyevent-i3 at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=AnyEvent-I3. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc AnyEvent::I3

You can also look for information at:

ACKNOWLEDGEMENTS

LICENSE AND COPYRIGHT

Copyright 2010 Michael Stapelberg.

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.