summaryrefslogtreecommitdiff
path: root/sway/config.c
diff options
context:
space:
mode:
authorBrian Ashworth <[email protected]>2018-11-28 11:08:54 -0500
committerBrian Ashworth <[email protected]>2018-11-28 11:09:01 -0500
commite5f90f25d755b19151dfcfd98790c1bad3eb8068 (patch)
treec6af192b469e6cf86ee00cb5d0ab4e03a98bacae /sway/config.c
parenta22d0c0ff60469d57de733bb767333d5b222df2d (diff)
Introduce a way to show config warnings in swaynag
Adds the function `config_add_swaynag_warning(char *fmt, ...)` so that handlers can add warnings to the swaynag config log in a uniform way. The formatting is identical to errors and include the line number, line, and config path. This also alters the background file access warning to use the function and introduces a warning for duplicate bindings.
Diffstat (limited to 'sway/config.c')
-rw-r--r--sway/config.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/sway/config.c b/sway/config.c
index ed288060..46322374 100644
--- a/sway/config.c
+++ b/sway/config.c
@@ -700,6 +700,8 @@ bool read_config(FILE *file, struct sway_config *config,
free(line);
return false;
}
+ config->current_config_line_number = line_number;
+ config->current_config_line = line;
struct cmd_results *res;
if (block && strcmp(block, "<commands>") == 0) {
// Special case
@@ -761,10 +763,36 @@ bool read_config(FILE *file, struct sway_config *config,
}
list_foreach(stack, free);
list_free(stack);
+ config->current_config_line_number = 0;
+ config->current_config_line = NULL;
return success;
}
+void config_add_swaynag_warning(char *fmt, ...) {
+ if (config->reading && !config->validating) {
+ va_list args;
+ va_start(args, fmt);
+ size_t length = vsnprintf(NULL, 0, fmt, args) + 1;
+ va_end(args);
+
+ char *temp = malloc(length + 1);
+ if (!temp) {
+ wlr_log(WLR_ERROR, "Failed to allocate buffer for warning.");
+ return;
+ }
+
+ va_start(args, fmt);
+ vsnprintf(temp, length, fmt, args);
+ va_end(args);
+
+ swaynag_log(config->swaynag_command, &config->swaynag_config_errors,
+ "Warning on line %i (%s) '%s': %s",
+ config->current_config_line_number, config->current_config_path,
+ config->current_config_line, temp);
+ }
+}
+
char *do_var_replacement(char *str) {
int i;
char *find = str;