NAME
AnyEvent::I3X::Workspace::OnDemand - An I3 workspace loader
VERSION
version 0.002
SYNOPSIS
use AnyEvent::I3X::Workspace::OnDemand;
my $i3 = AnyEvent::I3X::Workspace::OnDemand->new(
debug => 0,
layout_path => "$ENV{HOME}/.config/i3",
workspaces => {
foo => {
layout => 'foo.json',
},
bar => {
layout => 'bar.json',
groups => {
foo => undef,
# Override the layout for group bar
bar => { layout => 'foo.json' },
}
},
baz => {
layout => 'baz.json',
groups => {
all => undef,
}
}
},
groups => [
qw(foo bar baz)
],
swallows => [
{
cmd => 'kitty',
match => {
class => '^kitty$',
}
},
{
# Start firefox on group bar
cmd => 'firefox',
on => {
group => 'bar',
}
match => {
window_role => '^browser$',
}
},
{
cmd => 'google-chrome',
on => {
group => 'foo',
}
match => {
window_role => '^browser$',
}
}
],
);
DESCRIPTION
Workspace switcher for i3.
This module listens to tick events which are named group:$name
where the name corresponds to the workspace groups you have defined. When you send a tick event the current workspaces get renamed to $former_group:$workspace_name
and leaves new workspaces for the ones you have defined.
In your .config/i3/config
you can set something like this to switch groups:
bindsym $mod+w mode "Activities"
mode "Activities" {
bindsym 0 exec i3-msg -t send_tick group:foo; mode default
bindsym 9 exec i3-msg -t send_tick group:bar; mode default
bindsym 8 exec i3-msg -t send_tick group:baz; mode default
bindsym Return mode "default"
bindsym Escape mode "default"
}
METHODS
$self->subscribe
See "subscribe" in AnyEvent::I3
$self->get_i3
Get the AnyEvent::I3 instance
$self->command(@args)
Execute a command, the command can be in scalar or list context.
See also "command" in AnyEvent::I3.
$self->debug(1)
Enable or disable debug
$self->log($msg)
Print warns when debug is enabled
$self->on_tick($payload, $sub)
Subscribe to a tick event with $payload
and perform the action. Your sub needs to support the following prototype:
sub foo($self, $i3, $event) {
print "Yay processed foo tick";
}
$self->on_tick('foo', \&foo);
$self->on_workspace($name, $type, $sub)
Subscribe to a workspace event for workspace $name
of $type
with $sub
.
$type
can be any of the following events from i3 plus any
or *
$i3->on_workspace(
'www', 'init',
sub {
my $self = shift;
my $i3 = shift;
my $event = shift;
$self->append_layout($event->{current}{name}, '/path/to/layout.json');
}
);
$self->add_swallow($match, $cmd, $on)
Add a command that can be used to start after a layout has been appended
$self->add_swallow({ class => '^kitty$' }, 'exec --no-startup-id kitty');
# or only on this group
$self->add_swallow(
{ class => '^kitty$' },
'exec --no-startup-id kitty',
{ group => 'foo' }
);
# or workspace
$self->add_swallow(
{ class => '^kitty$' },
'exec --no-startup-id kitty',
{ workspace => 'foo' }
);
$self->workspace($name, @cmds)
Runs commands on workspace by name. Without a command you only switch workspaces
AUTHOR
Wesley Schwengle <waterkip@cpan.org>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2024 by Wesley Schwengle.
This is free software, licensed under:
The (three-clause) BSD License