diff options
author | Drew DeVault <sir@cmpwn.com> | 2015-10-27 13:51:00 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2015-10-27 13:51:00 -0400 |
commit | 36526e8cb2bfdfaf0b6c1f5679b8cf7a1f0db27c (patch) | |
tree | fdef312778092e9588dc3a1b4aa8d174a6398b2d /sway | |
parent | eb847a1b1ce122f6621de0fb76e381bf0d10b317 (diff) | |
parent | 48c5325909f86e36e0afb99affac8f576254ab07 (diff) |
Merge pull request #206 from sce/debuglog
commands: Learn 'debuglog'.
Diffstat (limited to 'sway')
-rw-r--r-- | sway/commands.c | 24 | ||||
-rw-r--r-- | sway/log.c | 19 |
2 files changed, 43 insertions, 0 deletions
diff --git a/sway/commands.c b/sway/commands.c index 0102fc5a..c81379fd 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -30,6 +30,7 @@ struct cmd_handler { static sway_cmd cmd_bindsym; static sway_cmd cmd_orientation; +static sway_cmd cmd_debuglog; static sway_cmd cmd_exec; static sway_cmd cmd_exec_always; static sway_cmd cmd_exit; @@ -229,6 +230,28 @@ static struct cmd_results *cmd_exec_always(int argc, char **argv) { return cmd_results_new(CMD_SUCCESS, NULL, NULL); } +static struct cmd_results *cmd_debuglog(int argc, char **argv) { + struct cmd_results *error = NULL; + if ((error = checkarg(argc, "debuglog", EXPECTED_EQUAL_TO, 1))) { + return error; + } else if (strcasecmp(argv[0], "toggle") == 0) { + if (config->reading) { + return cmd_results_new(CMD_FAILURE, "debuglog toggle", "Can't be used in config file."); + } + if (toggle_debug_logging()) { + sway_log(L_DEBUG, "Debuglog turned on."); + } + } else if (strcasecmp(argv[0], "on") == 0) { + set_log_level(L_DEBUG); + sway_log(L_DEBUG, "Debuglog turned on."); + } else if (strcasecmp(argv[0], "off") == 0) { + reset_log_level(); + } else { + return cmd_results_new(CMD_FAILURE, "debuglog", "Expected 'debuglog on|off|toggle'"); + } + return cmd_results_new(CMD_SUCCESS, NULL, NULL); +} + static struct cmd_results *cmd_exec(int argc, char **argv) { if (!config->active) return cmd_results_new(CMD_DEFER, "exec", NULL); if (config->reloading) { @@ -1162,6 +1185,7 @@ static struct cmd_results *cmd_ws_auto_back_and_forth(int argc, char **argv) { /* Keep alphabetized */ static struct cmd_handler handlers[] = { { "bindsym", cmd_bindsym }, + { "debuglog", cmd_debuglog }, { "default_orientation", cmd_orientation }, { "exec", cmd_exec }, { "exec_always", cmd_exec_always }, @@ -11,6 +11,7 @@ #include <execinfo.h> int colored = 1; +log_importance_t loglevel_default = L_ERROR; log_importance_t v = L_SILENT; static const char *verbosity_colors[] = { @@ -21,11 +22,29 @@ static const char *verbosity_colors[] = { }; void init_log(log_importance_t verbosity) { + if (verbosity != L_DEBUG) { + // command "debuglog" needs to know the user specified log level when + // turning off debug logging. + loglevel_default = verbosity; + } v = verbosity; signal(SIGSEGV, error_handler); signal(SIGABRT, error_handler); } +void set_log_level(log_importance_t verbosity) { + v = verbosity; +} + +void reset_log_level(void) { + v = loglevel_default; +} + +bool toggle_debug_logging(void) { + v = (v == L_DEBUG) ? loglevel_default : L_DEBUG; + return (v == L_DEBUG); +} + void sway_log_colors(int mode) { colored = (mode == 1) ? 1 : 0; } |