]> git.sur5r.net Git - i3/i3/blobdiff - i3-save-tree
Merge branch 'stevenjm-big-endian'
[i3/i3] / i3-save-tree
index 6ac3e1b1a2564b83e3dffa522fc01f9b657b2681..c64fc72a09ae119b6cd3bc8615781c3595be1551 100755 (executable)
@@ -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";
@@ -88,6 +92,7 @@ my %allowed_keys = map { ($_, 1) } qw(
     name
     geometry
     window_properties
+    mark
 );
 
 sub strip_containers {
@@ -149,12 +154,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;