use AnyEvent;
use Encode;
use Scalar::Util qw(tainted);
+use Carp;
=head1 NAME
our @EXPORT = qw(i3);
+use constant TYPE_RUN_COMMAND => 0;
use constant TYPE_COMMAND => 0;
use constant TYPE_GET_WORKSPACES => 1;
use constant TYPE_SUBSCRIBE => 2;
use constant TYPE_GET_VERSION => 7;
use constant TYPE_GET_BINDING_MODES => 8;
use constant TYPE_GET_CONFIG => 9;
+use constant TYPE_SEND_TICK => 10;
+use constant TYPE_SYNC => 11;
our %EXPORT_TAGS = ( 'all' => [
- qw(i3 TYPE_COMMAND TYPE_GET_WORKSPACES TYPE_SUBSCRIBE TYPE_GET_OUTPUTS
+ qw(i3 TYPE_RUN_COMMAND TYPE_COMMAND TYPE_GET_WORKSPACES TYPE_SUBSCRIBE TYPE_GET_OUTPUTS
TYPE_GET_TREE TYPE_GET_MARKS TYPE_GET_BAR_CONFIG TYPE_GET_VERSION
- TYPE_GET_BINDING_MODES TYPE_GET_CONFIG)
+ TYPE_GET_BINDING_MODES TYPE_GET_CONFIG TYPE_SEND_TICK TYPE_SYNC)
] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{all} } );
barconfig_update => ($event_mask | 4),
binding => ($event_mask | 5),
shutdown => ($event_mask | 6),
+ tick => ($event_mask | 7),
_error => 0xFFFFFFFF,
);
# We use getpwuid() instead of $ENV{HOME} because the latter is tainted
# and thus produces warnings when running tests with perl -T
my $home = (getpwuid($<))[7];
- die "Could not get home directory" unless $home and -d $home;
+ confess "Could not get home directory" unless $home and -d $home;
$path =~ s/~/$home/g;
}
structure C<content> (or C<content>, encoded as utf8, if C<content> is a
scalar), if specified.
- my $reply = $i3->message(TYPE_COMMAND, "reload")->recv;
+ my $reply = $i3->message(TYPE_RUN_COMMAND, "reload")->recv;
if ($reply->{success}) {
say "Configuration successfully reloaded";
}
sub message {
my ($self, $type, $content) = @_;
- die "No message type specified" unless defined($type);
+ confess "No message type specified" unless defined($type);
- die "No connection to i3" unless defined($self->{ipchdl});
+ confess "No connection to i3" unless defined($self->{ipchdl});
my $payload = "";
if ($content) {
return if defined($self->{ipchdl});
- $self->connect->recv or die "Unable to connect to i3 (socket path " . $self->{path} . ")";
+ $self->connect->recv or confess "Unable to connect to i3 (socket path " . $self->{path} . ")";
}
=head2 get_workspaces
$self->message(TYPE_GET_CONFIG);
}
+=head2 send_tick
+
+Sends a tick event. Requires i3 >= 4.15
+
+=cut
+sub send_tick {
+ my ($self, $payload) = @_;
+
+ $self->_ensure_connection;
+
+ $self->message(TYPE_SEND_TICK, $payload);
+}
+
+=head2 sync
+
+Sends an i3 sync event. Requires i3 >= 4.16
+
+=cut
+sub sync {
+ my ($self, $payload) = @_;
+
+ $self->_ensure_connection;
+
+ $self->message(TYPE_SYNC, $payload);
+}
=head2 command($content)
$self->_ensure_connection;
- $self->message(TYPE_COMMAND, $content)
+ $self->message(TYPE_RUN_COMMAND, $content)
}
=head1 AUTHOR
Please report any bugs or feature requests to C<bug-anyevent-i3 at
rt.cpan.org>, or through the web interface at
-L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=AnyEvent-I3>. I will be
+L<https://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.
=item * RT: CPAN's request tracker
-L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=AnyEvent-I3>
+L<https://rt.cpan.org/NoAuth/Bugs.html?Dist=AnyEvent-I3>
=item * The i3 window manager website
-L<http://i3wm.org>
+L<https://i3wm.org>
=back
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.
+See https://dev.perl.org/licenses/ for more information.
=cut