mirror of
https://github.com/swaywm/sway.git
synced 2025-01-02 18:37:55 +01:00
cmd_mode: allow runtime creation and modification
This allows for modes to be created, bindings to be added to modes, and bindings to be removed from modes at runtime. Additionally, this also allows for `mode <mode>` to be deferred in the config to set an initial mode.
This commit is contained in:
parent
fc3253cc35
commit
d0d01810f3
1 changed files with 9 additions and 8 deletions
|
@ -15,6 +15,9 @@ static struct cmd_handler mode_handlers[] = {
|
||||||
{ "bindswitch", cmd_bindswitch },
|
{ "bindswitch", cmd_bindswitch },
|
||||||
{ "bindsym", cmd_bindsym },
|
{ "bindsym", cmd_bindsym },
|
||||||
{ "set", cmd_set },
|
{ "set", cmd_set },
|
||||||
|
{ "unbindcode", cmd_unbindcode },
|
||||||
|
{ "unbindswitch", cmd_unbindswitch },
|
||||||
|
{ "unbindsym", cmd_unbindsym },
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cmd_results *cmd_mode(int argc, char **argv) {
|
struct cmd_results *cmd_mode(int argc, char **argv) {
|
||||||
|
@ -23,10 +26,6 @@ struct cmd_results *cmd_mode(int argc, char **argv) {
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argc > 1 && !config->reading) {
|
|
||||||
return cmd_results_new(CMD_FAILURE, "Can only be used in config file");
|
|
||||||
}
|
|
||||||
|
|
||||||
bool pango = strcmp(*argv, "--pango_markup") == 0;
|
bool pango = strcmp(*argv, "--pango_markup") == 0;
|
||||||
if (pango) {
|
if (pango) {
|
||||||
argc--; argv++;
|
argc--; argv++;
|
||||||
|
@ -35,6 +34,10 @@ struct cmd_results *cmd_mode(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config->reading && argc == 1) {
|
||||||
|
return cmd_results_new(CMD_DEFER, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
char *mode_name = *argv;
|
char *mode_name = *argv;
|
||||||
strip_quotes(mode_name);
|
strip_quotes(mode_name);
|
||||||
struct sway_mode *mode = NULL;
|
struct sway_mode *mode = NULL;
|
||||||
|
@ -64,14 +67,12 @@ struct cmd_results *cmd_mode(int argc, char **argv) {
|
||||||
error = cmd_results_new(CMD_INVALID, "Unknown mode `%s'", mode_name);
|
error = cmd_results_new(CMD_INVALID, "Unknown mode `%s'", mode_name);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
if ((config->reading && argc > 1) || (!config->reading && argc == 1)) {
|
|
||||||
sway_log(SWAY_DEBUG, "Switching to mode `%s' (pango=%d)",
|
|
||||||
mode->name, mode->pango);
|
|
||||||
}
|
|
||||||
// Set current mode
|
// Set current mode
|
||||||
config->current_mode = mode;
|
config->current_mode = mode;
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
// trigger IPC mode event
|
// trigger IPC mode event
|
||||||
|
sway_log(SWAY_DEBUG, "Switching to mode `%s' (pango=%d)",
|
||||||
|
mode->name, mode->pango);
|
||||||
ipc_event_mode(config->current_mode->name,
|
ipc_event_mode(config->current_mode->name,
|
||||||
config->current_mode->pango);
|
config->current_mode->pango);
|
||||||
return cmd_results_new(CMD_SUCCESS, NULL);
|
return cmd_results_new(CMD_SUCCESS, NULL);
|
||||||
|
|
Loading…
Reference in a new issue