migration from exec i3bar to bar config: i3 substitutes exec with a bar block, shows nagbar

This commit is contained in:
Michael Stapelberg 2011-10-22 16:33:00 +01:00
parent d7eba46de5
commit 753d67fb64
3 changed files with 59 additions and 5 deletions

View File

@ -173,7 +173,7 @@ static int handle_expose(xcb_connection_t *conn, xcb_expose_event_t *event) {
line_width = 1; line_width = 1;
for (int c = 0; c < buttoncnt; c++) { for (int c = 0; c < buttoncnt; c++) {
/* TODO: make w = text extents of the label */ /* TODO: make w = text extents of the label */
w = 90; w = 100;
y -= 30; y -= 30;
xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, color_button_background); 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 }; close = (xcb_rectangle_t){ y - w - (2 * line_width), 2, w + (2 * line_width), rect.height - 6 };

View File

@ -35,6 +35,7 @@ extern TAILQ_HEAD(barconfig_head, Barconfig) barconfigs;
*/ */
struct context { struct context {
bool has_errors; bool has_errors;
bool has_warnings;
int line_number; int line_number;
char *line_copy; char *line_copy;

View File

@ -286,13 +286,17 @@ static void start_configerror_nagbar(const char *config_path) {
exit(1); exit(1);
char *argv[] = { char *argv[] = {
NULL, /* will be replaced by the executable path */ NULL, /* will be replaced by the executable path */
"-t",
(context->has_errors ? "error" : "warning"),
"-m", "-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", "-b",
"edit config", "edit config",
editaction, editaction,
(errorfilename ? "-b" : NULL), (errorfilename ? "-b" : NULL),
"show errors", (context->has_errors ? "show errors" : "show warnings"),
pageraction, pageraction,
NULL 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) { void parse_file(const char *f) {
SLIST_HEAD(variables_head, Variable) variables = SLIST_HEAD_INITIALIZER(&variables); SLIST_HEAD(variables_head, Variable) variables = SLIST_HEAD_INITIALIZER(&variables);
int fd, ret, read_bytes = 0; int fd, ret, read_bytes = 0;
@ -553,7 +582,31 @@ void parse_file(const char *f) {
check_for_duplicate_bindings(context); 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); start_configerror_nagbar(f);
} }
@ -1356,7 +1409,7 @@ assign:
ELOG("You are using the old assign syntax (without criteria). " ELOG("You are using the old assign syntax (without criteria). "
"Please see the User's Guide for the new syntax and fix " "Please see the User's Guide for the new syntax and fix "
"your config file.\n"); "your config file.\n");
context->has_errors = true; context->has_warnings = true;
printf("assignment of %s to *%s*\n", $2, $3); printf("assignment of %s to *%s*\n", $2, $3);
char *workspace = $3; char *workspace = $3;
char *criteria = $2; char *criteria = $2;