]> git.sur5r.net Git - i3/i3/blobdiff - i3-save-tree
i3-nagbar: add option for button that runs commands without a terminal (#3258)
[i3/i3] / i3-save-tree
index b6ed085ec7b836a55d3ec3e22dd58ff7cf59acd9..da5e6deddedb4bd1078f2b9c091fd8d9c3a0d626 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/env perl
 # vim:ts=4:sw=4:expandtab
 #
-# © 2013-2014 Michael Stapelberg
+# © 2013 Michael Stapelberg
 #
 # Requires perl ≥ v5.10, AnyEvent::I3 and JSON::XS
 
@@ -98,7 +98,8 @@ my %allowed_keys = map { ($_, 1) } qw(
     name
     geometry
     window_properties
-    mark
+    marks
+    rect
 );
 
 sub strip_containers {
@@ -116,12 +117,13 @@ sub strip_containers {
 
     delete $tree->{geometry} if zero_rect($tree->{geometry});
 
+    # Retain the rect for floating containers to keep their positions.
+    delete $tree->{rect} unless $tree->{type} eq 'floating_con';
+
     delete $tree->{current_border_width} if $tree->{current_border_width} == -1;
 
     for my $key (keys %$tree) {
-        next if exists($allowed_keys{$key});
-
-        delete $tree->{$key};
+        delete $tree->{$key} unless exists($allowed_keys{$key});
     }
 
     for my $key (qw(nodes floating_nodes)) {
@@ -165,7 +167,8 @@ sub dump_containers {
     if (leaf_node($tree)) {
         my $swallows = {};
         for my $property (keys %{$tree->{window_properties}}) {
-            $swallows->{$property} = '^' . quotemeta($tree->{window_properties}->{$property}) . '$';
+            $swallows->{$property} = '^' . quotemeta($tree->{window_properties}->{$property}) . '$'
+                if $property ne 'transient_for';
         }
         $tree->{swallows} = [ $swallows ];
     }
@@ -222,7 +225,7 @@ my $tree = $i3->get_tree->recv;
 my $dump;
 if (defined($workspace)) {
     $dump = filter_containers($tree, sub {
-        $_->{type} eq 'workspace' && $_->{name} eq $workspace
+        $_->{type} eq 'workspace' && ($_->{name} eq $workspace || ($workspace =~ /^\d+$/ && $_->{num} eq $workspace))
     });
 } else {
     $dump = filter_containers($tree, sub {
@@ -252,7 +255,7 @@ for my $key (qw(nodes floating_nodes)) {
 
 =head1 SYNOPSIS
 
-    i3-save-tree [--workspace=name] [--output=name]
+    i3-save-tree [--workspace=name|number] [--output=name]
 
 =head1 DESCRIPTION
 
@@ -271,9 +274,10 @@ If neither argument is specified, the currently focused workspace will be used.
 
 =over
 
-=item B<--workspace=name>
+=item B<--workspace=name|number>
 
-Specifies the workspace that should be dumped, e.g. 1.
+Specifies the workspace that should be dumped, e.g. 1. This can either be a
+name or the number of a workspace.
 
 =item B<--output=name>