migration from exec i3bar to bar config: i3 substitutes exec with a bar block, shows nagbar
This commit is contained in:
parent
d7eba46de5
commit
753d67fb64
|
@ -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 };
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue