From: Michael Stapelberg Date: Sat, 22 Oct 2011 15:33:00 +0000 (+0100) Subject: migration from exec i3bar to bar config: i3 substitutes exec with a bar block, shows... X-Git-Tag: 4.1~92^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=753d67fb64ebe43e7b113f04b1e1aee687f44043;p=i3%2Fi3 migration from exec i3bar to bar config: i3 substitutes exec with a bar block, shows nagbar --- diff --git a/i3-nagbar/main.c b/i3-nagbar/main.c index a1b473ae..254aedfb 100644 --- a/i3-nagbar/main.c +++ b/i3-nagbar/main.c @@ -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 }; diff --git a/include/config.h b/include/config.h index bb092091..c7748c82 100644 --- a/include/config.h +++ b/include/config.h @@ -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; diff --git a/src/cfgparse.y b/src/cfgparse.y index bc4928f6..8232ae57 100644 --- a/src/cfgparse.y +++ b/src/cfgparse.y @@ -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;