summaryrefslogtreecommitdiffstats
path: root/cmd-new-window.c
diff options
context:
space:
mode:
authornicm <nicm>2023-09-01 14:24:46 +0000
committernicm <nicm>2023-09-01 14:24:46 +0000
commitc41d59f232a7243bfff34ec3f02adc76fddc91b2 (patch)
treea4392d3766f6abc00807e4339cf22e87e72d58ff /cmd-new-window.c
parentc1e6e54e6ee9517dcb2f789d99bbf06c66b9dc44 (diff)
Expand name before looking for window with -S, GitHub issue 3670.
Diffstat (limited to 'cmd-new-window.c')
-rw-r--r--cmd-new-window.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/cmd-new-window.c b/cmd-new-window.c
index e7f0868f..f2d932de 100644
--- a/cmd-new-window.c
+++ b/cmd-new-window.c
@@ -60,7 +60,7 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item)
struct session *s = target->s;
struct winlink *wl = target->wl, *new_wl = NULL;
int idx = target->idx, before;
- char *cause = NULL, *cp;
+ char *cause = NULL, *cp, *expanded;
const char *template, *name;
struct cmd_find_state fs;
struct args_value *av;
@@ -71,16 +71,19 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item)
*/
name = args_get(args, 'n');
if (args_has(args, 'S') && name != NULL && target->idx == -1) {
+ expanded = format_single(item, name, c, s, NULL, NULL);
RB_FOREACH(wl, winlinks, &s->windows) {
- if (strcmp(wl->window->name, name) != 0)
+ if (strcmp(wl->window->name, expanded) != 0)
continue;
if (new_wl == NULL) {
new_wl = wl;
continue;
}
cmdq_error(item, "multiple windows named %s", name);
+ free(expanded);
return (CMD_RETURN_ERROR);
}
+ free(expanded);
if (new_wl != NULL) {
if (args_has(args, 'd'))
return (CMD_RETURN_NORMAL);