From 2dc6697a4182232c56ec9f1587ad0b713ed9dc3c Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Fri, 19 Jan 2024 12:31:13 +0000 Subject: i3status-wrapper: fix sorting of workspace names --- scripts/desktop/i3status-wrapper | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/scripts/desktop/i3status-wrapper b/scripts/desktop/i3status-wrapper index a644f781..ad5efba1 100755 --- a/scripts/desktop/i3status-wrapper +++ b/scripts/desktop/i3status-wrapper @@ -78,7 +78,7 @@ unless (fork // warn "couldn't fork monitoring loop") { if ($node->{type} eq "workspace" && grep $_ eq $node->{name}, @all_workspaces) { my $entry = $info{paper_ws}{$node->{id}} - //= { name => ws_name($node), + //= { name => $node->{name}, off_left => [], off_right => [] }; sync_cols($node => $entry); $entry->{ncols} = max 2, scalar $entry->{cols}->@*; @@ -155,7 +155,7 @@ unless (fork // warn "couldn't fork monitoring loop") { } elsif ($e->{change} && $e->{change} eq "init" && $e->{current} && grep $_ eq $e->{current}{name}, @all_workspaces) { $info{paper_ws}{$e->{current}{id}} - = { name => ws_name($e->{current}), ncols => 2, cols => [], + = { name => $e->{current}{name}, ncols => 2, cols => [], off_left => [], off_right => [], }; } elsif ($e->{change} && $e->{change} eq "rename" && exists $info{paper_ws}{$e->{current}{id}}) { @@ -320,13 +320,12 @@ while (my ($statusline) = (<> =~ /^,?(.*)/)) { if ($info{focused_ws} && $info{paper_ws} && keys $info{paper_ws}->%* > 1) { my @disp; - my @keys = - sort { $info{paper_ws}{$a}{name} cmp $info{paper_ws}{$b}{name} } - keys $info{paper_ws}->%*; + my @keys = sorted_paper_ws(); foreach my $key (@keys) { push @disp, sprintf +($info{focused_ws} == $key ? "%s" : "%s"), - $info{paper_ws}{$key}{name}; + ws_name($info{paper_ws}{$key}{name}) + } unshift @$blocks, { name => "ws", markup => "pango", full_text => join " ", @disp }; @@ -512,6 +511,12 @@ sub normalise_ws_cols { } } +sub sorted_paper_ws { + sort { ws_num($info{paper_ws}{$a}{name}) + <=> ws_num($info{paper_ws}{$b}{name}) } + keys $info{paper_ws}->%* +} + sub hide_con { sprintf "[con_id=%s] move container to workspace %s", $_[0], "*$_[0]*" } @@ -521,6 +526,7 @@ sub show_con { } sub ws_name { - my ($before, $after) = split /:/, shift->{name}; + my ($before, $after) = split /:/, $_[0]; $after // $before } +sub ws_num { (split /:/, $_[0])[0] } -- cgit v1.2.3