]> git.sur5r.net Git - i3/i3/commitdiff
i3-migrate-config-to-v4: drop the .pl suffix
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 31 Jul 2011 21:11:05 +0000 (23:11 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 31 Jul 2011 21:11:05 +0000 (23:11 +0200)
As lintian (a Debian package checker) mentions, it is more clever to install it
without the extension, since the implementation language might change.

DEPENDS
Makefile
PACKAGE-MAINTAINER
RELEASE-NOTES-4.0
debian/changelog
i3-migrate-config-to-v4 [new file with mode: 0755]
i3-migrate-config-to-v4.pl [deleted file]
src/cfgparse.y
testcases/t/71-config-migrate.t

diff --git a/DEPENDS b/DEPENDS
index 71abc3b2858e5cb001d904badc0f1b9349699ff1..ea7133a5552f7f8ae263538be754677fc685856a 100644 (file)
--- a/DEPENDS
+++ b/DEPENDS
@@ -35,5 +35,5 @@
  All of them are available at CPAN, see http://search.cpan.org/
  Use your distribution’s packages or cpan(1) to install them.
 
- i3-migrate-config-to-v4.pl is implemented in Perl, but it has no dependencies
+ i3-migrate-config-to-v4 is implemented in Perl, but it has no dependencies
  besides Perl 5.10.
index 7a904320a37113bea6c0a3edc50afc56fbdd89ac..3bdffbb49bfddad0c09995c29b20d0d08673ef85 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -79,7 +79,7 @@ install: all
        $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/include/i3
        $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/share/xsessions
        $(INSTALL) -m 0755 i3 $(DESTDIR)$(PREFIX)/bin/
-       $(INSTALL) -m 0755 i3-migrate-config-to-v4.pl $(DESTDIR)$(PREFIX)/bin/
+       $(INSTALL) -m 0755 i3-migrate-config-to-v4 $(DESTDIR)$(PREFIX)/bin/
        test -e $(DESTDIR)$(SYSCONFDIR)/i3/config || $(INSTALL) -m 0644 i3.config $(DESTDIR)$(SYSCONFDIR)/i3/config
        test -e $(DESTDIR)$(SYSCONFDIR)/i3/config.keycodes || $(INSTALL) -m 0644 i3.config.keycodes $(DESTDIR)$(SYSCONFDIR)/i3/config.keycodes
        $(INSTALL) -m 0644 i3.welcome $(DESTDIR)$(SYSCONFDIR)/i3/welcome
@@ -93,7 +93,7 @@ dist: distclean
        [ ! -d i3-${VERSION} ] || rm -rf i3-${VERSION}
        [ ! -e i3-${VERSION}.tar.bz2 ] || rm i3-${VERSION}.tar.bz2
        mkdir i3-${VERSION}
-       cp i3-migrate-config-to-v4.pl i3.config.keycodes DEPENDS GOALS LICENSE PACKAGE-MAINTAINER TODO RELEASE-NOTES-${VERSION} i3.config i3.desktop i3.welcome pseudo-doc.doxygen i3-wsbar Makefile i3-${VERSION}
+       cp i3-migrate-config-to-v4 i3.config.keycodes DEPENDS GOALS LICENSE PACKAGE-MAINTAINER TODO RELEASE-NOTES-${VERSION} i3.config i3.desktop i3.welcome pseudo-doc.doxygen i3-wsbar Makefile i3-${VERSION}
        cp -r src i3-msg i3-nagbar i3-config-wizard yajl-fallback include man i3-${VERSION}
        # Only copy toplevel documentation (important stuff)
        mkdir i3-${VERSION}/docs
index 633b2d7e4af08eed3cc45127cb95c2bfdf0a14d1..3d9a8e1812f995df02520f0c5588dbc6096f9ccd 100644 (file)
@@ -26,7 +26,7 @@ On debian, this looks like this:
        mkdir -p $(CURDIR)/debian/i3-wm/usr/share/man/man1
        cp man/*.1 $(CURDIR)/debian/i3-wm/usr/share/man/man1
 
-Please make sure that i3-migrate-config-to-v4.pl and i3-config-wizard are
+Please make sure that i3-migrate-config-to-v4 and i3-config-wizard are
 installed with i3. The Perl script is necessary to (automatically) convert v3
 configs to v4. The wizard provides the possibility to create a keysym-based
 config with the user’s preferred modifier and should be started on the first
index a9a91134783ddd72acdbe633e3f7df23dadbb89a..14ecbfa1c210a60fd488c5602c2f75c910625620 100644 (file)
@@ -40,7 +40,7 @@ now.
 
  • As the configuration file needs new commands (and a few options are
    obsolete), you need to change it. To make this process a little bit easier
-   for you, this release comes with the script i3-migrate-config-to-v4.pl. Just
+   for you, this release comes with the script i3-migrate-config-to-v4. Just
    run it on your current config file and it will spit out a v4 config file to
    stdout. To make things even better, i3 automatically detects v3 config files
    and calls that script, so you never end up with a non-working config :).
index bfcbc324623660afeef544b2189c205459e3164a..aeca9a2bc1e0f695c70368b237a48ad48e5050bc 100644 (file)
@@ -14,7 +14,7 @@ i3-wm (4.0-1) unstable; urgency=low
     of all Firefox windows.
   * As the configuration file needs new commands (and a few options are
     obsolete), you need to change it. To make this process a little bit easier
-    for you, this release comes with the script i3-migrate-config-to-v4.pl. Just
+    for you, this release comes with the script i3-migrate-config-to-v4. Just
     run it on your current config file and it will spit out a v4 config file to
     stdout. To make things even better, i3 automatically detects v3 config files
     and calls that script, so you never end up with a non-working config :).
diff --git a/i3-migrate-config-to-v4 b/i3-migrate-config-to-v4
new file mode 100755 (executable)
index 0000000..5f20cba
--- /dev/null
@@ -0,0 +1,358 @@
+#!/usr/bin/env perl
+# vim:ts=4:sw=4:expandtab
+#
+# script to migrate an old config file (i3 < 4.0) to the new format (>= 4.0)
+# this script only uses modules which come with perl 5.10
+#
+# reads an i3 v3 config from stdin and spits out a v4 config on stdout
+# exit codes:
+#     0 = the input was a v3 config
+#     1 = the input was already a v4 config
+#         (the config is printed to stdout nevertheless)
+#
+# © 2011 Michael Stapelberg and contributors, see LICENSE
+
+use strict;
+use warnings;
+use Getopt::Long;
+use v5.10;
+
+# is this a version 3 config file? disables auto-detection
+my $v3 = 0;
+my $result = GetOptions('v3' => \$v3);
+
+# reads stdin
+sub slurp {
+    local $/;
+    <>;
+}
+
+my @unchanged = qw(
+    font
+    set
+    mode
+    exec
+    assign
+    floating_modifier
+    focus_follows_mouse
+    ipc-socket
+    ipc_socket
+    client.focused
+    client.focused_inactive
+    client.unfocused
+    client.urgent
+    client.background
+);
+
+my %workspace_names;
+my $workspace_bar = 1;
+
+my $input = slurp();
+my @lines = split /\n/, $input;
+
+# remove whitespaces in the beginning of lines
+@lines = map { s/^[ \t]*//g; $_ } @lines;
+
+# Try to auto-detect if this is a v3 config file.
+sub need_to_convert {
+    # If the user passed --v3, we need to convert in any case
+    return 1 if $v3;
+
+    for my $line (@lines) {
+        # only v4 configfiles can use bindcode or workspace_layout
+        return 0 if $line =~ /^bindcode/ ||
+                    $line =~ /^workspace_layout/ ||
+                    $line =~ /^force_focus_wrapping/;
+
+        # have a look at bindings
+        next unless $line =~ /^bind/;
+
+        my ($statement, $key, $command) = ($line =~ /([a-zA-Z_-]+)[ \t]+([^ \t]+)[ \t]+(.*)/);
+        return 0 if $command =~ /^layout/ ||
+                    $command =~ /^floating/ ||
+                    $command =~ /^workspace/ ||
+                    $command =~ /^focus (left|right|up|down)/ ||
+                    $command =~ /^border (normal|1pixel|none)/;
+    }
+
+    return 1;
+}
+
+if (!need_to_convert()) {
+    # If this is already a v4 config file, we will spit out the lines
+    # and exit with return code 1
+    print $input;
+    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 =~ /^$/) {
+        print "$line\n";
+        next;
+    }
+
+    my ($statement, $parameters) = ($line =~ /([a-zA-Z._-]+)(.*)/);
+
+    # directly use lines which have not changed between 3.x and 4.x
+    if (!defined($statement) || (lc $statement ~~ @unchanged)) {
+        print "$line\n";
+        next;
+    }
+
+    # new_container changed only the statement name to workspace_layout
+    if ($statement eq 'new_container') {
+        # TODO: new_container stack-limit
+        print "workspace_layout$parameters\n";
+        next;
+    }
+
+    # workspace_bar is gone, you should use i3bar now
+    if ($statement eq 'workspace_bar') {
+        $workspace_bar = ($parameters =~ /[ \t+](yes|true|on|enable|active)/);
+        print "# XXX: REMOVED workspace_bar line. There is no internal workspace bar in v4.\n";
+        next;
+    }
+
+    # new_window changed the parameters from bb to none etc.
+    if ($statement eq 'new_window') {
+        if ($parameters =~ /bb/) {
+            print "new_window none\n";
+        } elsif ($parameters =~ /bp/) {
+            print "new_window 1pixel\n";
+        } elsif ($parameters =~ /bn/) {
+            print "new_window normal\n";
+        } else {
+            print "# XXX: Invalid parameter for new_window, not touching line:\n";
+            print "$line\n";
+        }
+        next;
+    }
+
+    # bar colors are obsolete, need to be configured in i3bar
+    if ($statement =~ /^bar\./) {
+        print "# XXX: REMOVED $statement, configure i3bar instead.\n";
+        print "# Old line: $line\n";
+        next;
+    }
+
+    # one form of this is still ok (workspace assignments), the other (named workspaces) isn’t
+    if ($statement eq 'workspace') {
+        my ($number, $params) = ($parameters =~ /[ \t]+([0-9]+) (.+)/);
+        if ($params =~ /^output/) {
+            print "$line\n";
+            next;
+        } else {
+            print "# XXX: workspace name will end up in the corresponding bindings.\n";
+            next;
+        }
+    }
+
+    if ($statement eq 'bind' || $statement eq 'bindsym') {
+        convert_command($line);
+        next;
+    }
+
+    print "# XXX: migration script could not handle line: $line\n";
+}
+
+#
+# Converts a command (after bind/bindsym)
+#
+sub convert_command {
+    my ($line) = @_;
+
+    my @unchanged_cmds = qw(
+        exec
+        mark
+        kill
+        restart
+        reload
+        exit
+        stack-limit
+    );
+
+    my ($statement, $key, $command) = ($line =~ /([a-zA-Z_-]+)[ \t]+([^ \t]+)[ \t]+(.*)/);
+
+    # turn 'bind' to 'bindcode'
+    $statement = 'bindcode' if $statement eq 'bind';
+
+    # check if it’s one of the unchanged commands
+    my ($cmd) = ($command =~ /([a-zA-Z_-]+)/);
+    if ($cmd ~~ @unchanged_cmds) {
+        print "$statement $key $command\n";
+        return;
+    }
+
+    # simple replacements
+    my @replace = (
+        qr/^s/ => 'layout stacking',
+        qr/^d/ => 'layout default',
+        qr/^T/ => 'layout tabbed',
+        qr/^f($|[^go])/ => 'fullscreen',
+        qr/^fg/ => 'fullscreen global',
+        qr/^t/ => 'floating toggle',
+        qr/^h/ => 'focus left',
+        qr/^j($|[^u])/ => 'focus down',
+        qr/^k/ => 'focus up',
+        qr/^l/ => 'focus right',
+        qr/^mh/ => 'move left',
+        qr/^mj/ => 'move down',
+        qr/^mk/ => 'move up',
+        qr/^ml/ => 'move right',
+        qr/^bn/ => 'border normal',
+        qr/^bp/ => 'border 1pixel',
+        qr/^bb/ => 'border none',
+        qr/^bt/ => 'border toggle',
+        qr/^pw/ => 'workspace prev',
+        qr/^nw/ => 'workspace next',
+    );
+
+    my $replaced = 0;
+    for (my $c = 0; $c < @replace; $c += 2) {
+        if ($command =~ $replace[$c]) {
+            $command = $replace[$c+1];
+            $replaced = 1;
+            last;
+        }
+    }
+
+    # goto command is now obsolete due to criteria + focus command
+    if ($command =~ /^goto/) {
+        my ($mark) = ($command =~ /^goto (.*)/);
+        print qq|$statement $key [con_mark="$mark"] focus\n|;
+        return;
+    }
+
+    # the jump command is also obsolete due to criteria + focus
+    if ($command =~ /^jump/) {
+        my ($params) = ($command =~ /^jump (.*)/);
+        if ($params =~ /^"/) {
+            # jump ["]window class[/window title]["]
+            ($params) = ($params =~ /^"([^"]+)"/);
+
+            # check if a window title was specified
+            if ($params =~ m,/,) {
+                my ($class, $title) = ($params =~ m,([^/]+)/(.+),);
+                print qq|$statement $key [class="$class" title="$title"] focus\n|;
+            } else {
+                print qq|$statement $key [class="$params"] focus\n|;
+            }
+            return;
+        } else {
+            # jump <workspace> [ column row ]
+            print "# XXX: jump workspace is obsolete in 4.x: $line\n";
+            return;
+        }
+    }
+
+    if (!$replaced && $command =~ /^focus/) {
+        my ($what) = ($command =~ /^focus (.*)/);
+        $what =~ s/[ \t]//g;
+        if ($what eq 'ft') {
+            $what = 'mode_toggle';
+        } elsif ($what eq 'floating' || $what eq 'tiling') {
+            # those are unchanged
+        } else {
+            print "# XXX: focus <number> is obsolete in 4.x: $line\n";
+            return;
+        }
+        print qq|$statement $key focus $what\n|;
+        return;
+    }
+
+    if ($command =~ /^mode/) {
+        my ($parameters) = ($command =~ /^mode (.*)/);
+        print qq|$statement $key mode "$parameters"\n|;
+        return;
+    }
+
+    # the parameters of the resize command have changed
+    if ($command =~ /^resize/) {
+        # OLD: resize <left|right|top|bottom> [+|-]<pixels>\n")
+        # NEW: resize <grow|shrink> <direction> [<px> px] [or <ppt> ppt]
+        my ($direction, $sign, $px) = ($command =~ /^resize (left|right|top|bottom) ([+-])([0-9]+)/);
+        my $cmd = 'resize ';
+        $cmd .= ($sign eq '+' ? 'grow' : 'shrink') . ' ';
+        $cmd .= "$direction ";
+        $cmd .= "$px px";
+        print qq|$statement $key $cmd\n|;
+        return;
+    }
+
+    # switch workspace
+    if ($command =~ /^[0-9]+/) {
+        my ($number) = ($command =~ /^([0-9]+)/);
+        if (exists $workspace_names{$number}) {
+            print qq|$statement $key workspace $workspace_names{$number}\n|;
+            return;
+        } else {
+            print qq|$statement $key workspace $number\n|;
+            return;
+        }
+    }
+
+    # move to workspace
+    if ($command =~ /^m[0-9]+/) {
+        my ($number) = ($command =~ /^m([0-9]+)/);
+        if (exists $workspace_names{$number}) {
+            print qq|$statement $key move workspace $workspace_names{$number}\n|;
+            return;
+        } else {
+            print qq|$statement $key move workspace $number\n|;
+            return;
+        }
+    }
+
+    # With Container-commands are now obsolete due to different abstraction
+    if ($command =~ /^wc/) {
+        $command =~ s/^wc//g;
+        my $wc_replaced = 0;
+        for (my $c = 0; $c < @replace; $c += 2) {
+            if ($command =~ $replace[$c]) {
+                $command = $replace[$c+1];
+                $wc_replaced = 1;
+                last;
+            }
+        }
+        if (!$wc_replaced) {
+            print "# XXX: migration script could not handle command: $line\n";
+        } else {
+            # NOTE: This is not 100% accurate, as it only works for one level
+            # of nested containers. As this is a common use case, we use 'focus
+            # parent; $command' nevertheless. For advanced use cases, the user
+            # has to modify his config.
+            print "$statement $key focus parent; $command\n";
+        }
+        return;
+    }
+
+    if ($replaced) {
+        print "$statement $key $command\n";
+    } else {
+        print "# XXX: migration script could not handle command: $line\n";
+    }
+}
+
+
+# add an i3bar invocation automatically if no 'workspace_bar no' was found
+if ($workspace_bar) {
+    print "\n";
+    print "# XXX: Automatically added a call to i3bar to provide a workspace bar\n";
+    print "exec i3status | i3bar -d\n";
+}
diff --git a/i3-migrate-config-to-v4.pl b/i3-migrate-config-to-v4.pl
deleted file mode 100755 (executable)
index 5f20cba..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-#!/usr/bin/env perl
-# vim:ts=4:sw=4:expandtab
-#
-# script to migrate an old config file (i3 < 4.0) to the new format (>= 4.0)
-# this script only uses modules which come with perl 5.10
-#
-# reads an i3 v3 config from stdin and spits out a v4 config on stdout
-# exit codes:
-#     0 = the input was a v3 config
-#     1 = the input was already a v4 config
-#         (the config is printed to stdout nevertheless)
-#
-# © 2011 Michael Stapelberg and contributors, see LICENSE
-
-use strict;
-use warnings;
-use Getopt::Long;
-use v5.10;
-
-# is this a version 3 config file? disables auto-detection
-my $v3 = 0;
-my $result = GetOptions('v3' => \$v3);
-
-# reads stdin
-sub slurp {
-    local $/;
-    <>;
-}
-
-my @unchanged = qw(
-    font
-    set
-    mode
-    exec
-    assign
-    floating_modifier
-    focus_follows_mouse
-    ipc-socket
-    ipc_socket
-    client.focused
-    client.focused_inactive
-    client.unfocused
-    client.urgent
-    client.background
-);
-
-my %workspace_names;
-my $workspace_bar = 1;
-
-my $input = slurp();
-my @lines = split /\n/, $input;
-
-# remove whitespaces in the beginning of lines
-@lines = map { s/^[ \t]*//g; $_ } @lines;
-
-# Try to auto-detect if this is a v3 config file.
-sub need_to_convert {
-    # If the user passed --v3, we need to convert in any case
-    return 1 if $v3;
-
-    for my $line (@lines) {
-        # only v4 configfiles can use bindcode or workspace_layout
-        return 0 if $line =~ /^bindcode/ ||
-                    $line =~ /^workspace_layout/ ||
-                    $line =~ /^force_focus_wrapping/;
-
-        # have a look at bindings
-        next unless $line =~ /^bind/;
-
-        my ($statement, $key, $command) = ($line =~ /([a-zA-Z_-]+)[ \t]+([^ \t]+)[ \t]+(.*)/);
-        return 0 if $command =~ /^layout/ ||
-                    $command =~ /^floating/ ||
-                    $command =~ /^workspace/ ||
-                    $command =~ /^focus (left|right|up|down)/ ||
-                    $command =~ /^border (normal|1pixel|none)/;
-    }
-
-    return 1;
-}
-
-if (!need_to_convert()) {
-    # If this is already a v4 config file, we will spit out the lines
-    # and exit with return code 1
-    print $input;
-    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 =~ /^$/) {
-        print "$line\n";
-        next;
-    }
-
-    my ($statement, $parameters) = ($line =~ /([a-zA-Z._-]+)(.*)/);
-
-    # directly use lines which have not changed between 3.x and 4.x
-    if (!defined($statement) || (lc $statement ~~ @unchanged)) {
-        print "$line\n";
-        next;
-    }
-
-    # new_container changed only the statement name to workspace_layout
-    if ($statement eq 'new_container') {
-        # TODO: new_container stack-limit
-        print "workspace_layout$parameters\n";
-        next;
-    }
-
-    # workspace_bar is gone, you should use i3bar now
-    if ($statement eq 'workspace_bar') {
-        $workspace_bar = ($parameters =~ /[ \t+](yes|true|on|enable|active)/);
-        print "# XXX: REMOVED workspace_bar line. There is no internal workspace bar in v4.\n";
-        next;
-    }
-
-    # new_window changed the parameters from bb to none etc.
-    if ($statement eq 'new_window') {
-        if ($parameters =~ /bb/) {
-            print "new_window none\n";
-        } elsif ($parameters =~ /bp/) {
-            print "new_window 1pixel\n";
-        } elsif ($parameters =~ /bn/) {
-            print "new_window normal\n";
-        } else {
-            print "# XXX: Invalid parameter for new_window, not touching line:\n";
-            print "$line\n";
-        }
-        next;
-    }
-
-    # bar colors are obsolete, need to be configured in i3bar
-    if ($statement =~ /^bar\./) {
-        print "# XXX: REMOVED $statement, configure i3bar instead.\n";
-        print "# Old line: $line\n";
-        next;
-    }
-
-    # one form of this is still ok (workspace assignments), the other (named workspaces) isn’t
-    if ($statement eq 'workspace') {
-        my ($number, $params) = ($parameters =~ /[ \t]+([0-9]+) (.+)/);
-        if ($params =~ /^output/) {
-            print "$line\n";
-            next;
-        } else {
-            print "# XXX: workspace name will end up in the corresponding bindings.\n";
-            next;
-        }
-    }
-
-    if ($statement eq 'bind' || $statement eq 'bindsym') {
-        convert_command($line);
-        next;
-    }
-
-    print "# XXX: migration script could not handle line: $line\n";
-}
-
-#
-# Converts a command (after bind/bindsym)
-#
-sub convert_command {
-    my ($line) = @_;
-
-    my @unchanged_cmds = qw(
-        exec
-        mark
-        kill
-        restart
-        reload
-        exit
-        stack-limit
-    );
-
-    my ($statement, $key, $command) = ($line =~ /([a-zA-Z_-]+)[ \t]+([^ \t]+)[ \t]+(.*)/);
-
-    # turn 'bind' to 'bindcode'
-    $statement = 'bindcode' if $statement eq 'bind';
-
-    # check if it’s one of the unchanged commands
-    my ($cmd) = ($command =~ /([a-zA-Z_-]+)/);
-    if ($cmd ~~ @unchanged_cmds) {
-        print "$statement $key $command\n";
-        return;
-    }
-
-    # simple replacements
-    my @replace = (
-        qr/^s/ => 'layout stacking',
-        qr/^d/ => 'layout default',
-        qr/^T/ => 'layout tabbed',
-        qr/^f($|[^go])/ => 'fullscreen',
-        qr/^fg/ => 'fullscreen global',
-        qr/^t/ => 'floating toggle',
-        qr/^h/ => 'focus left',
-        qr/^j($|[^u])/ => 'focus down',
-        qr/^k/ => 'focus up',
-        qr/^l/ => 'focus right',
-        qr/^mh/ => 'move left',
-        qr/^mj/ => 'move down',
-        qr/^mk/ => 'move up',
-        qr/^ml/ => 'move right',
-        qr/^bn/ => 'border normal',
-        qr/^bp/ => 'border 1pixel',
-        qr/^bb/ => 'border none',
-        qr/^bt/ => 'border toggle',
-        qr/^pw/ => 'workspace prev',
-        qr/^nw/ => 'workspace next',
-    );
-
-    my $replaced = 0;
-    for (my $c = 0; $c < @replace; $c += 2) {
-        if ($command =~ $replace[$c]) {
-            $command = $replace[$c+1];
-            $replaced = 1;
-            last;
-        }
-    }
-
-    # goto command is now obsolete due to criteria + focus command
-    if ($command =~ /^goto/) {
-        my ($mark) = ($command =~ /^goto (.*)/);
-        print qq|$statement $key [con_mark="$mark"] focus\n|;
-        return;
-    }
-
-    # the jump command is also obsolete due to criteria + focus
-    if ($command =~ /^jump/) {
-        my ($params) = ($command =~ /^jump (.*)/);
-        if ($params =~ /^"/) {
-            # jump ["]window class[/window title]["]
-            ($params) = ($params =~ /^"([^"]+)"/);
-
-            # check if a window title was specified
-            if ($params =~ m,/,) {
-                my ($class, $title) = ($params =~ m,([^/]+)/(.+),);
-                print qq|$statement $key [class="$class" title="$title"] focus\n|;
-            } else {
-                print qq|$statement $key [class="$params"] focus\n|;
-            }
-            return;
-        } else {
-            # jump <workspace> [ column row ]
-            print "# XXX: jump workspace is obsolete in 4.x: $line\n";
-            return;
-        }
-    }
-
-    if (!$replaced && $command =~ /^focus/) {
-        my ($what) = ($command =~ /^focus (.*)/);
-        $what =~ s/[ \t]//g;
-        if ($what eq 'ft') {
-            $what = 'mode_toggle';
-        } elsif ($what eq 'floating' || $what eq 'tiling') {
-            # those are unchanged
-        } else {
-            print "# XXX: focus <number> is obsolete in 4.x: $line\n";
-            return;
-        }
-        print qq|$statement $key focus $what\n|;
-        return;
-    }
-
-    if ($command =~ /^mode/) {
-        my ($parameters) = ($command =~ /^mode (.*)/);
-        print qq|$statement $key mode "$parameters"\n|;
-        return;
-    }
-
-    # the parameters of the resize command have changed
-    if ($command =~ /^resize/) {
-        # OLD: resize <left|right|top|bottom> [+|-]<pixels>\n")
-        # NEW: resize <grow|shrink> <direction> [<px> px] [or <ppt> ppt]
-        my ($direction, $sign, $px) = ($command =~ /^resize (left|right|top|bottom) ([+-])([0-9]+)/);
-        my $cmd = 'resize ';
-        $cmd .= ($sign eq '+' ? 'grow' : 'shrink') . ' ';
-        $cmd .= "$direction ";
-        $cmd .= "$px px";
-        print qq|$statement $key $cmd\n|;
-        return;
-    }
-
-    # switch workspace
-    if ($command =~ /^[0-9]+/) {
-        my ($number) = ($command =~ /^([0-9]+)/);
-        if (exists $workspace_names{$number}) {
-            print qq|$statement $key workspace $workspace_names{$number}\n|;
-            return;
-        } else {
-            print qq|$statement $key workspace $number\n|;
-            return;
-        }
-    }
-
-    # move to workspace
-    if ($command =~ /^m[0-9]+/) {
-        my ($number) = ($command =~ /^m([0-9]+)/);
-        if (exists $workspace_names{$number}) {
-            print qq|$statement $key move workspace $workspace_names{$number}\n|;
-            return;
-        } else {
-            print qq|$statement $key move workspace $number\n|;
-            return;
-        }
-    }
-
-    # With Container-commands are now obsolete due to different abstraction
-    if ($command =~ /^wc/) {
-        $command =~ s/^wc//g;
-        my $wc_replaced = 0;
-        for (my $c = 0; $c < @replace; $c += 2) {
-            if ($command =~ $replace[$c]) {
-                $command = $replace[$c+1];
-                $wc_replaced = 1;
-                last;
-            }
-        }
-        if (!$wc_replaced) {
-            print "# XXX: migration script could not handle command: $line\n";
-        } else {
-            # NOTE: This is not 100% accurate, as it only works for one level
-            # of nested containers. As this is a common use case, we use 'focus
-            # parent; $command' nevertheless. For advanced use cases, the user
-            # has to modify his config.
-            print "$statement $key focus parent; $command\n";
-        }
-        return;
-    }
-
-    if ($replaced) {
-        print "$statement $key $command\n";
-    } else {
-        print "# XXX: migration script could not handle command: $line\n";
-    }
-}
-
-
-# add an i3bar invocation automatically if no 'workspace_bar no' was found
-if ($workspace_bar) {
-    print "\n";
-    print "# XXX: Automatically added a call to i3bar to provide a workspace bar\n";
-    print "exec i3status | i3bar -d\n";
-}
index ecfa665859c51520d8bbe557633192e561a03266..ae789576195425b16aafebfeedaf410ed9e4beb9 100644 (file)
@@ -115,7 +115,7 @@ next:
 }
 
 /*
- * Calls i3-migrate-config-to-v4.pl to migrate a configuration file (input
+ * Calls i3-migrate-config-to-v4 to migrate a configuration file (input
  * buffer).
  *
  * Returns the converted config file or NULL if there was an error (for
@@ -153,7 +153,7 @@ static char *migrate_config(char *input, off_t size) {
             NULL, /* will be replaced by the executable path */
             NULL
         };
-        exec_i3_utility("i3-migrate-config-to-v4.pl", argv);
+        exec_i3_utility("i3-migrate-config-to-v4", argv);
     }
 
     /* parent */
@@ -438,7 +438,7 @@ void parse_file(const char *f) {
             printf("\n");
             printf("Please convert your config file to v4. You can use this command:\n");
             printf("    mv %s %s.O\n", f, f);
-            printf("    i3-migrate-config-to-v4.pl %s.O > %s\n", f, f);
+            printf("    i3-migrate-config-to-v4 %s.O > %s\n", f, f);
             printf("****************************************************************\n");
             printf("\n");
             free(new);
@@ -446,7 +446,7 @@ void parse_file(const char *f) {
         } else {
             printf("\n");
             printf("**********************************************************************\n");
-            printf("ERROR: Could not convert config file. Maybe i3-migrate-config-to-v4.pl\n");
+            printf("ERROR: Could not convert config file. Maybe i3-migrate-config-to-v4\n");
             printf("was not correctly installed on your system?\n");
             printf("**********************************************************************\n");
             printf("\n");
index e93ca9e7a578fb9985e361d39e050c6781848f9f..4e97fb27e67276a0159c3bae6c6ab03b7d3ed42e 100644 (file)
@@ -2,7 +2,7 @@
 # vim:ts=4:sw=4:expandtab
 # !NO_I3_INSTANCE! will prevent complete-run.pl from starting i3
 #
-# Tests if i3-migrate-config-to-v4.pl correctly migrates all config file
+# Tests if i3-migrate-config-to-v4 correctly migrates all config file
 # directives and commands
 #
 use i3test;
@@ -27,7 +27,7 @@ sub migrate_config {
     print $fh $config;
     close($fh);
 
-    my $cmd = "sh -c 'exec " . abs_path("../i3-migrate-config-to-v4.pl") . " --v3 <$tmpfile'";
+    my $cmd = "sh -c 'exec " . abs_path("../i3-migrate-config-to-v4") . " --v3 <$tmpfile'";
     return [ split /\n/, qx($cmd) ];
 }