Merge pull request #1101 from 4e554c4c/worspace_names

Fix #1099: Allow spaces in worspace names
master
Drew DeVault 8 years ago committed by GitHub
commit d4aa604812

@ -12,12 +12,44 @@ struct cmd_results *cmd_workspace(int argc, char **argv) {
if ((error = checkarg(argc, "workspace", EXPECTED_AT_LEAST, 1))) { if ((error = checkarg(argc, "workspace", EXPECTED_AT_LEAST, 1))) {
return error; return error;
} }
if (argc == 1 || (argc >= 2 && strcasecmp(argv[0], "number") == 0) ) {
int output_location = -1;
for (int i = 0; i < argc; ++i) {
if (strcasecmp(argv[i], "output") == 0) {
output_location = i;
break;
}
}
if (output_location >= 0) {
if ((error = checkarg(argc, "workspace", EXPECTED_EQUAL_TO, output_location + 2))) {
return error;
}
struct workspace_output *wso = calloc(1, sizeof(struct workspace_output));
if (!wso) {
return cmd_results_new(CMD_FAILURE, "workspace output",
"Unable to allocate workspace output");
}
wso->workspace = join_args(argv, argc - 2);
wso->output = strdup(argv[output_location]);
int i = -1;
if ((i = list_seq_find(config->workspace_outputs, workspace_output_cmp_workspace, wso)) != -1) {
struct workspace_output *old = config->workspace_outputs->items[i];
free(old); // workspaces can only be assigned to a single output
list_del(config->workspace_outputs, i);
}
sway_log(L_DEBUG, "Assigning workspace %s to output %s", wso->workspace, wso->output);
list_add(config->workspace_outputs, wso);
if (!config->reading) {
// TODO: Move workspace to output. (don't do so when reloading)
}
}
else {
if (config->reading || !config->active) { if (config->reading || !config->active) {
return cmd_results_new(CMD_DEFER, "workspace", NULL); return cmd_results_new(CMD_DEFER, "workspace", NULL);
} }
swayc_t *ws = NULL; swayc_t *ws = NULL;
if (argc >= 2) { if (strcasecmp(argv[0], "number") == 0) {
if (!(ws = workspace_by_number(argv[1]))) { if (!(ws = workspace_by_number(argv[1]))) {
char *name = join_args(argv + 1, argc - 1); char *name = join_args(argv + 1, argc - 1);
ws = workspace_create(name); ws = workspace_create(name);
@ -41,9 +73,11 @@ struct cmd_results *cmd_workspace(int argc, char **argv) {
ws = workspace_create(prev_workspace_name); ws = workspace_create(prev_workspace_name);
} }
} else { } else {
if (!(ws = workspace_by_name(argv[0]))) { char *name = join_args(argv, argc);
ws = workspace_create(argv[0]); if (!(ws = workspace_by_name(name))) {
ws = workspace_create(name);
} }
free(name);
} }
swayc_t *old_output = swayc_active_output(); swayc_t *old_output = swayc_active_output();
workspace_switch(ws); workspace_switch(ws);
@ -55,30 +89,6 @@ struct cmd_results *cmd_workspace(int argc, char **argv) {
center_pointer_on(focused); center_pointer_on(focused);
} }
} }
} else {
if (strcasecmp(argv[1], "output") == 0) {
if ((error = checkarg(argc, "workspace", EXPECTED_EQUAL_TO, 3))) {
return error;
}
struct workspace_output *wso = calloc(1, sizeof(struct workspace_output));
if (!wso) {
return cmd_results_new(CMD_FAILURE, "workspace output",
"Unable to allocate workspace output");
}
wso->workspace = strdup(argv[0]);
wso->output = strdup(argv[2]);
int i = -1;
if ((i = list_seq_find(config->workspace_outputs, workspace_output_cmp_workspace, wso)) != -1) {
struct workspace_output *old = config->workspace_outputs->items[i];
free(old); // workspaces can only be assigned to a single output
list_del(config->workspace_outputs, i);
}
sway_log(L_DEBUG, "Assigning workspace %s to output %s", argv[0], argv[2]);
list_add(config->workspace_outputs, wso);
if (!config->reading) {
// TODO: Move workspace to output. (don't do so when reloading)
}
}
} }
return cmd_results_new(CMD_SUCCESS, NULL, NULL); return cmd_results_new(CMD_SUCCESS, NULL, NULL);
} }

@ -364,8 +364,11 @@ The default colors are:
be configured with perfectly aligned adjacent positions for this option to be configured with perfectly aligned adjacent positions for this option to
have any effect. have any effect.
**workspace** <name>:: **workspace** [number] <name>::
Switches to the specified workspace. Switches to the specified workspace. The string "number" is optional. The
worspace _name_, if unquoted, may not contain the string "output", as sway
will assume that the command is moving a worspace to an output, as described
below.
**workspace** <prev|next>:: **workspace** <prev|next>::
Switches to the next workspace on the current output or on the next output Switches to the next workspace on the current output or on the next output

Loading…
Cancel
Save