]> git.sur5r.net Git - i3/i3/commitdiff
Make the --workspace optional by defaulting to the focused workspace.
authorIngo Bürk <ingo.buerk@tngtech.com>
Wed, 18 Mar 2015 20:37:37 +0000 (21:37 +0100)
committerIngo Bürk <ingo.buerk@tngtech.com>
Wed, 18 Mar 2015 20:37:37 +0000 (21:37 +0100)
If no option is given, i3-save-tree should default to the currently focused workspace.
Specifying both --workspace and --output will still yield an error.

i3-save-tree

index c64fc72a09ae119b6cd3bc8615781c3595be1551..04c7e38a3b6b3ec8b2a4f8a17ed7cfbd028735e4 100755 (executable)
@@ -13,6 +13,7 @@ use POSIX qw(locale_h);
 use File::Find;
 use File::Basename qw(basename);
 use File::Temp qw(tempfile);
+use List::Util qw(first);
 use Getopt::Long;
 use Pod::Usage;
 use AnyEvent::I3;
@@ -41,11 +42,7 @@ my $result = GetOptions(
 
 die "Could not parse command line options" unless $result;
 
-if (!defined($workspace) && !defined($output)) {
-    die "One of --workspace or --output need to be specified";
-}
-
-unless (defined($workspace) ^ defined($output)) {
+if (defined($workspace) && defined($output)) {
     die "Only one of --workspace or --output can be specified";
 }
 
@@ -57,6 +54,15 @@ if (!$i3->connect->recv) {
     die "Could not connect to i3";
 }
 
+sub get_current_workspace {
+    my $current = first { $_->{focused} } @{$i3->get_workspaces->recv};
+    return $current->{name};
+}
+
+if (!defined($workspace) && !defined($output)) {
+    $workspace = get_current_workspace();
+}
+
 sub filter_containers {
     my ($tree, $pred) = @_;