diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2024-01-14 13:26:00 +0000 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2024-01-14 13:28:13 +0000 |
commit | 37dc2639a9453c0f24ed48cedb11223a6fb937a7 (patch) | |
tree | fd6d0bcfac8785bbd6f36021f8367c7ac8270487 /scripts/desktop | |
parent | fdf056d799b974d878ba77cb96056125a0510e92 (diff) | |
download | dotfiles-37dc2639a9453c0f24ed48cedb11223a6fb937a7.tar.gz |
add & use Local::Desktop::WMIPC class for i3/Sway IPC connections
Diffstat (limited to 'scripts/desktop')
-rwxr-xr-x | scripts/desktop/i3status-wrapper | 42 | ||||
-rwxr-xr-x | scripts/desktop/sway-ftp-master | 2 |
2 files changed, 24 insertions, 20 deletions
diff --git a/scripts/desktop/i3status-wrapper b/scripts/desktop/i3status-wrapper index 268a5bcd..702e4240 100755 --- a/scripts/desktop/i3status-wrapper +++ b/scripts/desktop/i3status-wrapper @@ -26,6 +26,7 @@ use JSON; use Local::Desktop; use IO::Pipe; use IPC::Shareable; +use Local::Desktop::WMIPC; use Sys::Hostname; use POSIX "floor", "mkfifo"; use File::Basename "basename", "dirname"; @@ -46,28 +47,29 @@ unless ($i3status) { tie my %info, "IPC::Shareable", undef, { destroy => 1 }; +my $wmipc = Local::Desktop::WMIPC->new; sub with_ignored_events (&) { - system $wmipc, "-q", "-t", "send_tick", "i3status-wrapper-ign"; + $wmipc->send_tick("i3status-wrapper-ign"); $_[0]->(); - system $wmipc, "-q", "-t", "send_tick", "i3status-wrapper-unign"; + $wmipc->send_tick("i3status-wrapper-unign"); } unless (fork // warn "couldn't fork monitoring loop") { - open my $events, "-|", - $wmipc, "-t", "subscribe", "-m", '[ "tick", "window", "workspace" ]'; + my $events = Local::Desktop::WMIPC->new; + $events->subscribe(qw(tick window workspace)); # Determine the initial state -- the WM might just have been reloaded. # Move any previously-hidden containers to a fresh workspace for perusal. my @old_ids; - for (@{decode_json `$wmipc -t get_workspaces`}) { + for ($wmipc->get_workspaces->@*) { $info{focused_ws} = $_->{name} if $_->{focused}; push @old_ids, $1 if $_->{name} =~ /\A\*(\d+)\*\z/; } if (@old_ids) { fresh_workspace(go => 1); - wmipc map("[con_id=$_] move container workspace current", @old_ids), - "focus child"; + $wmipc->cmd(map("[con_id=$_] move container workspace current", @old_ids), + "focus child"); } update_paper_ws_cols(); @@ -84,13 +86,13 @@ unless (fork // warn "couldn't fork monitoring loop") { if ($ws->{monocle} || $cols->@* > $ws->{ncols}) { with_ignored_events { my $pushed = shift $cols->@*; - wmipc hide_con($pushed); + $wmipc->cmd(hide_con($pushed)); push $ws->{off_left}->@*, $pushed; }; } } eval { - while (my $e = decode_json <$events>) { + while (my $e = <$events>) { state $last_e; # New containers @@ -147,9 +149,9 @@ unless (fork // warn "couldn't fork monitoring loop") { && ($i < $mid_i || !$ws->{off_right}->@*)) { with_ignored_events { my $pulled = pop $ws->{off_left}->@*; - wmipc +("focus left")x$i, - show_con($pulled), "move left", - ("focus right")x$i; + $wmipc->cmd(("focus left")x$i, + show_con($pulled), "move left", + ("focus right")x$i); unshift @$cols, $pulled; $ws->{focused_col} = $cols->[$i]; }; @@ -158,8 +160,8 @@ unless (fork // warn "couldn't fork monitoring loop") { with_ignored_events { my $j = $#$cols - $i; my $pulled = pop $ws->{off_right}->@*; - wmipc +("focus right")x$j, - show_con($pulled), ("focus left")x$j; + $wmipc->cmd(("focus right")x$j, + show_con($pulled), ("focus left")x$j); push @$cols, $pulled; $ws->{focused_col} = $cols->[$i+1]; }; @@ -174,7 +176,7 @@ unless (fork // warn "couldn't fork monitoring loop") { # Ignore everything until tick telling us to unignore. # Thread that sent the ignore is responsible for updating data # structures in the meantime. - while (my $next = decode_json <$events>) { + while (my $next = <$events>) { last if $next->{payload} && $next->{payload} eq "i3status-wrapper-unign"; } @@ -234,7 +236,7 @@ unless (fork // warn "couldn't fork command pipe reader") { my $move = $1 eq "move"; $2 eq "right" ? $i++ : $i--; if ($cols->@* > $i >= 0) { - wmipc $cmd; + $wmipc->cmd($cmd); } elsif ($i == @$cols && $ws->{off_right}->@*) { with_ignored_events { my $pushed = shift $cols->@*; @@ -250,7 +252,7 @@ unless (fork // warn "couldn't fork command pipe reader") { push $cols->@*, $pulled; } - wmipc @cmds, hide_con($pushed); + $wmipc->cmd(@cmds, hide_con($pushed)); }; kill USR1 => $i3status; } elsif ($i == -1 && $ws->{off_left}->@*) { @@ -270,7 +272,7 @@ unless (fork // warn "couldn't fork command pipe reader") { unshift $cols->@*, $pulled; } - wmipc @cmds, hide_con($pushed); + $wmipc->cmd(@cmds, hide_con($pushed)); }; kill USR1 => $i3status; } @@ -316,7 +318,7 @@ while (my ($statusline) = (<> =~ /^,?(.*)/)) { sub wsbuttons { return unless $ENV{XDG_CURRENT_DESKTOP} eq "sway"; - wmipc "bar bar-0 workspace_buttons $_[0]"; + $wmipc->cmd("bar bar-0 workspace_buttons $_[0]"); } sub register_caffeinated { @@ -332,7 +334,7 @@ sub clear_caffeinated { } sub update_paper_ws_cols { - my @trees = decode_json `$wmipc -t get_tree`; + my @trees = $wmipc->get_tree; while (@trees) { foreach my $node ((shift @trees)->{nodes}->@*) { if ($node->{type} eq "workspace" diff --git a/scripts/desktop/sway-ftp-master b/scripts/desktop/sway-ftp-master index 0a36feee..5cb3f6a6 100755 --- a/scripts/desktop/sway-ftp-master +++ b/scripts/desktop/sway-ftp-master @@ -14,6 +14,8 @@ use lib "$ENV{HOME}/src/dotfiles/perl5"; use JSON; use Local::Desktop; +sub wmipc { system "swaymsg", "-q", join ", ", @_ } + sub walk_tree (&$) { my ($pred, $tree) = @_; $pred->($tree) and return $tree; |