]> git.sur5r.net Git - i3/i3/commitdiff
migration from exec i3bar to bar config: i3 substitutes exec with a bar block, shows...
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 22 Oct 2011 15:33:00 +0000 (16:33 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 22 Oct 2011 15:33:00 +0000 (16:33 +0100)
i3-nagbar/main.c
include/config.h
src/cfgparse.y

index a1b473ae47932f5cc9699b760a1ceb988b1a8f87..254aedfbb3eb6bc0e3b73ab26d9107bcc137ed68 100644 (file)
@@ -173,7 +173,7 @@ static int handle_expose(xcb_connection_t *conn, xcb_expose_event_t *event) {
     line_width = 1;
     for (int c = 0; c < buttoncnt; c++) {
         /* TODO: make w = text extents of the label */
-        w = 90;
+        w = 100;
         y -= 30;
         xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, color_button_background);
         close = (xcb_rectangle_t){ y - w - (2 * line_width), 2, w + (2 * line_width), rect.height - 6 };
index bb0920915841234616ded2e51dc847cab64f6fd4..c7748c828170223ac5dd55e1c0cd1183513a22a4 100644 (file)
@@ -35,6 +35,7 @@ extern TAILQ_HEAD(barconfig_head, Barconfig) barconfigs;
  */
 struct context {
     bool has_errors;
+    bool has_warnings;
 
     int line_number;
     char *line_copy;
index bc4928f632febfb8d1ad35e7f696587ba1a8376c..8232ae572bc848f760bdb48283292aa1799d7607 100644 (file)
@@ -286,13 +286,17 @@ static void start_configerror_nagbar(const char *config_path) {
             exit(1);
         char *argv[] = {
             NULL, /* will be replaced by the executable path */
+            "-t",
+            (context->has_errors ? "error" : "warning"),
             "-m",
-            "You have an error in your i3 config file!",
+            (context->has_errors ?
+             "You have an error in your i3 config file!" :
+             "Your config is outdated. Please fix the warnings to make sure everything works."),
             "-b",
             "edit config",
             editaction,
             (errorfilename ? "-b" : NULL),
-            "show errors",
+            (context->has_errors ? "show errors" : "show warnings"),
             pageraction,
             NULL
         };
@@ -390,6 +394,31 @@ static void check_for_duplicate_bindings(struct context *context) {
     }
 }
 
+static void migrate_i3bar_exec(struct Autostart *exec) {
+    ELOG("**********************************************************************\n");
+    ELOG("IGNORING exec command: %s\n", exec->command);
+    ELOG("It contains \"i3bar\". Since i3 v4.1, i3bar will be automatically started\n");
+    ELOG("for each 'bar' configuration block in your i3 config. Please remove the exec\n");
+    ELOG("line and add the following to your i3 config:\n");
+    ELOG("\n");
+    ELOG("    bar {\n");
+    ELOG("        status_command i3status\n");
+    ELOG("    }\n");
+    ELOG("**********************************************************************\n");
+
+    /* Generate a dummy bar configuration */
+    Barconfig *bar_config = scalloc(sizeof(Barconfig));
+    /* The hard-coded ID is not a problem. It does not conflict with the
+     * auto-generated bar IDs and having multiple hard-coded IDs is irrelevant
+     * – they all just contain status_command = i3status */
+    bar_config->id = sstrdup("migrate-bar");
+    bar_config->status_command = sstrdup("i3status");
+    TAILQ_INSERT_TAIL(&barconfigs, bar_config, configs);
+
+    /* Trigger an i3-nagbar */
+    context->has_warnings = true;
+}
+
 void parse_file(const char *f) {
     SLIST_HEAD(variables_head, Variable) variables = SLIST_HEAD_INITIALIZER(&variables);
     int fd, ret, read_bytes = 0;
@@ -553,7 +582,31 @@ void parse_file(const char *f) {
 
     check_for_duplicate_bindings(context);
 
-    if (context->has_errors) {
+    /* XXX: The following code will be removed in i3 v4.3 (three releases from
+     * now, as of 2011-10-22) */
+    /* Check for any exec or exec_always lines starting i3bar. We remove these
+     * and add a bar block instead. Additionally, a i3-nagbar warning (not an
+     * error) will be displayed so that users update their config file. */
+    struct Autostart *exec, *next;
+    for (exec = TAILQ_FIRST(&autostarts); exec; ) {
+        next = TAILQ_NEXT(exec, autostarts);
+        if (strstr(exec->command, "i3bar") != NULL) {
+            migrate_i3bar_exec(exec);
+            TAILQ_REMOVE(&autostarts, exec, autostarts);
+        }
+        exec = next;
+    }
+
+    for (exec = TAILQ_FIRST(&autostarts_always); exec; ) {
+        next = TAILQ_NEXT(exec, autostarts_always);
+        if (strstr(exec->command, "i3bar") != NULL) {
+            migrate_i3bar_exec(exec);
+            TAILQ_REMOVE(&autostarts_always, exec, autostarts_always);
+        }
+        exec = next;
+    }
+
+    if (context->has_errors || context->has_warnings) {
         start_configerror_nagbar(f);
     }
 
@@ -1356,7 +1409,7 @@ assign:
         ELOG("You are using the old assign syntax (without criteria). "
              "Please see the User's Guide for the new syntax and fix "
              "your config file.\n");
-        context->has_errors = true;
+        context->has_warnings = true;
         printf("assignment of %s to *%s*\n", $2, $3);
         char *workspace = $3;
         char *criteria = $2;