]> git.sur5r.net Git - i3/i3/commitdiff
migrate-config: also handle named workspaces correctly when their names come after...
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 6 Jul 2011 15:56:09 +0000 (17:56 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 6 Jul 2011 15:56:09 +0000 (17:56 +0200)
i3-migrate-config-to-v4.pl
testcases/t/71-config-migrate.t

index 3a27c943ce86baed61b4599d4744b5b1d39efb1a..7e4f61ce96fa1624239b75d413545e461fa8b7df 100755 (executable)
@@ -83,6 +83,21 @@ if (!need_to_convert()) {
     exit 1;
 }
 
+# first pass: get workspace names
+for my $line (@lines) {
+    next if $line =~ /^#/ || $line =~ /^$/;
+
+    my ($statement, $parameters) = ($line =~ /([a-zA-Z._-]+)(.*)/);
+
+    # skip everything but workspace lines
+    next unless defined($statement) and $statement eq 'workspace';
+
+    my ($number, $params) = ($parameters =~ /[ \t]+([0-9]+) (.+)/);
+
+    # save workspace name (unless the line is actually a workspace assignment)
+    $workspace_names{$number} = $params unless $params =~ /^output/;
+}
+
 for my $line (@lines) {
     # directly use comments and empty lines
     if ($line =~ /^#/ || $line =~ /^$/) {
@@ -141,8 +156,7 @@ for my $line (@lines) {
             print "$line\n";
             next;
         } else {
-            print "# XXX: workspace name will end up in the bindings, see below\n";
-            $workspace_names{$number} = $params;
+            print "# XXX: workspace name will end up in the corresponding bindings.\n";
             next;
         }
     }
index 11c70bfa2f3426cd7aaf091452e278271a880850..ec46eb3328bd34ec1aedd7ebcfd116d15f391b0e 100644 (file)
@@ -297,6 +297,15 @@ $output = migrate_config($input);
 ok(!line_exists($output, qr|^workspace|), 'workspace name not present');
 ok(line_exists($output, qr|^bindsym Mod1\+3 workspace work|), 'named workspace in bindings');
 
+# The same, but in reverse order
+$input = <<EOT;
+    bindsym Mod1+3 3
+    workspace 3 work
+EOT
+$output = migrate_config($input);
+ok(!line_exists($output, qr|^workspace|), 'workspace name not present');
+ok(line_exists($output, qr|^bindsym Mod1\+3 workspace work|), 'named workspace in bindings');
+
 $output = migrate_config('bindsym Mod1+3 3');
 ok(line_exists($output, qr|^bindsym Mod1\+3 workspace 3|), 'workspace changed');