X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=i3-save-tree;h=add4c8c1c305ee8cc635fc6d4ff0cb24fad1097f;hb=9463be42b84b2d87b470e0ef5ccf3d24114e791a;hp=6ac3e1b1a2564b83e3dffa522fc01f9b657b2681;hpb=2314f107784196d8fc7ee500645dbdf548f91386;p=i3%2Fi3 diff --git a/i3-save-tree b/i3-save-tree index 6ac3e1b1..add4c8c1 100755 --- a/i3-save-tree +++ b/i3-save-tree @@ -1,7 +1,7 @@ #!/usr/bin/env perl # vim:ts=4:sw=4:expandtab # -# © 2013 Michael Stapelberg +# © 2013-2014 Michael Stapelberg # # Requires perl ≥ v5.10, AnyEvent::I3 and JSON::XS @@ -18,6 +18,7 @@ use Pod::Usage; use AnyEvent::I3; use JSON::XS; use List::Util qw(first); +use Encode qw(decode); use v5.10; use utf8; use open ':encoding(UTF-8)'; @@ -48,6 +49,9 @@ unless (defined($workspace) ^ defined($output)) { die "Only one of --workspace or --output can be specified"; } +$workspace = decode('utf-8', $workspace); +$output = decode('utf-8', $output); + my $i3 = i3(); if (!$i3->connect->recv) { die "Could not connect to i3"; @@ -149,12 +153,15 @@ sub dump_containers { say "$ws// $desc with " . @{$tree->{nodes}} . " children"; } - # Turn “window_properties” into “swallows” expressions. - my $swallows = {}; - for my $property (keys %{$tree->{window_properties}}) { - $swallows->{$property} = '^' . quotemeta($tree->{window_properties}->{$property}) . '$'; + # Turn “window_properties” into “swallows” expressions, but only for leaf + # nodes. It only makes sense for leaf nodes to swallow anything. + if (leaf_node($tree)) { + my $swallows = {}; + for my $property (keys %{$tree->{window_properties}}) { + $swallows->{$property} = '^' . quotemeta($tree->{window_properties}->{$property}) . '$'; + } + $tree->{swallows} = [ $swallows ]; } - $tree->{swallows} = [ $swallows ]; delete $tree->{window_properties}; my @keys = sort keys %$tree;