summaryrefslogtreecommitdiff
path: root/scripts/desktop
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2024-01-14 13:26:00 +0000
committerSean Whitton <spwhitton@spwhitton.name>2024-01-14 13:28:13 +0000
commit37dc2639a9453c0f24ed48cedb11223a6fb937a7 (patch)
treefd6d0bcfac8785bbd6f36021f8367c7ac8270487 /scripts/desktop
parentfdf056d799b974d878ba77cb96056125a0510e92 (diff)
downloaddotfiles-37dc2639a9453c0f24ed48cedb11223a6fb937a7.tar.gz
add & use Local::Desktop::WMIPC class for i3/Sway IPC connections
Diffstat (limited to 'scripts/desktop')
-rwxr-xr-xscripts/desktop/i3status-wrapper42
-rwxr-xr-xscripts/desktop/sway-ftp-master2
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;