aboutsummaryrefslogtreecommitdiffstats
path: root/sway/commands.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/commands.c')
-rw-r--r--sway/commands.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/sway/commands.c b/sway/commands.c
index 2160a970..8d003dfa 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -1,4 +1,3 @@
1#define _POSIX_C_SOURCE 200809
2#include <ctype.h> 1#include <ctype.h>
3#include <stdarg.h> 2#include <stdarg.h>
4#include <stdlib.h> 3#include <stdlib.h>
@@ -104,6 +103,7 @@ static const struct cmd_handler handlers[] = {
104static const struct cmd_handler config_handlers[] = { 103static const struct cmd_handler config_handlers[] = {
105 { "default_orientation", cmd_default_orientation }, 104 { "default_orientation", cmd_default_orientation },
106 { "include", cmd_include }, 105 { "include", cmd_include },
106 { "primary_selection", cmd_primary_selection },
107 { "swaybg_command", cmd_swaybg_command }, 107 { "swaybg_command", cmd_swaybg_command },
108 { "swaynag_command", cmd_swaynag_command }, 108 { "swaynag_command", cmd_swaynag_command },
109 { "workspace_layout", cmd_workspace_layout }, 109 { "workspace_layout", cmd_workspace_layout },
@@ -147,7 +147,7 @@ static int handler_compare(const void *_a, const void *_b) {
147 return strcasecmp(a->command, b->command); 147 return strcasecmp(a->command, b->command);
148} 148}
149 149
150const struct cmd_handler *find_handler(char *line, 150const struct cmd_handler *find_handler(const char *line,
151 const struct cmd_handler *handlers, size_t handlers_size) { 151 const struct cmd_handler *handlers, size_t handlers_size) {
152 if (!handlers || !handlers_size) { 152 if (!handlers || !handlers_size) {
153 return NULL; 153 return NULL;
@@ -380,10 +380,13 @@ struct cmd_results *config_command(char *exec, char **new_block) {
380 sway_log(SWAY_INFO, "Config command: %s", exec); 380 sway_log(SWAY_INFO, "Config command: %s", exec);
381 const struct cmd_handler *handler = find_core_handler(argv[0]); 381 const struct cmd_handler *handler = find_core_handler(argv[0]);
382 if (!handler || !handler->handle) { 382 if (!handler || !handler->handle) {
383 const char *error = handler 383 if (handler) {
384 ? "Command '%s' is shimmed, but unimplemented" 384 results = cmd_results_new(CMD_INVALID,
385 : "Unknown/invalid command '%s'"; 385 "Command '%s' is shimmed, but unimplemented", argv[0]);
386 results = cmd_results_new(CMD_INVALID, error, argv[0]); 386 } else {
387 results = cmd_results_new(CMD_INVALID,
388 "Unknown/invalid command '%s'", argv[0]);
389 }
387 goto cleanup; 390 goto cleanup;
388 } 391 }
389 392
@@ -485,20 +488,10 @@ struct cmd_results *cmd_results_new(enum cmd_status status,
485 } 488 }
486 results->status = status; 489 results->status = status;
487 if (format) { 490 if (format) {
488 char *error = NULL;
489 va_list args; 491 va_list args;
490 va_start(args, format); 492 va_start(args, format);
491 int slen = vsnprintf(NULL, 0, format, args); 493 results->error = vformat_str(format, args);
492 va_end(args); 494 va_end(args);
493 if (slen > 0) {
494 error = malloc(slen + 1);
495 if (error != NULL) {
496 va_start(args, format);
497 vsnprintf(error, slen + 1, format, args);
498 va_end(args);
499 }
500 }
501 results->error = error;
502 } else { 495 } else {
503 results->error = NULL; 496 results->error = NULL;
504 } 497 }