Instead of passing titles through vis() which doubles backslashes, just

ignore any containing control characters or invalid UTF-8. GitHub issue 2070.
This commit is contained in:
nicm 2020-02-03 13:46:27 +00:00
parent 87bcc0c7e0
commit 265164d251
4 changed files with 13 additions and 12 deletions

View File

@ -197,7 +197,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item)
if (args_has(self->args, 'T')) { if (args_has(self->args, 'T')) {
pane_title = format_single(item, args_get(self->args, 'T'), pane_title = format_single(item, args_get(self->args, 'T'),
c, s, wl, wp); c, s, wl, wp);
screen_set_title(&wp->base, pane_title); if (screen_set_title(&wp->base, pane_title))
server_status_window(wp->window); server_status_window(wp->window);
free(pane_title); free(pane_title);
return (CMD_RETURN_NORMAL); return (CMD_RETURN_NORMAL);

View File

@ -2213,10 +2213,8 @@ input_exit_osc(struct input_ctx *ictx)
switch (option) { switch (option) {
case 0: case 0:
case 2: case 2:
if (utf8_isvalid(p)) { if (screen_set_title(sctx->s, p))
screen_set_title(sctx->s, p);
server_status_window(ictx->wp->window); server_status_window(ictx->wp->window);
}
break; break;
case 4: case 4:
input_osc_4(ictx, p); input_osc_4(ictx, p);
@ -2274,9 +2272,7 @@ input_exit_apc(struct input_ctx *ictx)
return; return;
log_debug("%s: \"%s\"", __func__, ictx->input_buf); log_debug("%s: \"%s\"", __func__, ictx->input_buf);
if (!utf8_isvalid(ictx->input_buf)) if (screen_set_title(sctx->s, ictx->input_buf))
return;
screen_set_title(sctx->s, ictx->input_buf);
server_status_window(ictx->wp->window); server_status_window(ictx->wp->window);
} }

View File

@ -152,11 +152,16 @@ screen_set_cursor_colour(struct screen *s, const char *colour)
} }
/* Set screen title. */ /* Set screen title. */
void int
screen_set_title(struct screen *s, const char *title) screen_set_title(struct screen *s, const char *title)
{ {
char *cp;
if (!utf8_isvalid(title))
return (0);
free(s->title); free(s->title);
utf8_stravis(&s->title, title, VIS_OCTAL|VIS_CSTYLE|VIS_TAB|VIS_NL); s->title = xstrdup(title);
return (1);
} }
/* Set screen path. */ /* Set screen path. */

2
tmux.h
View File

@ -2424,7 +2424,7 @@ void screen_free(struct screen *);
void screen_reset_tabs(struct screen *); void screen_reset_tabs(struct screen *);
void screen_set_cursor_style(struct screen *, u_int); void screen_set_cursor_style(struct screen *, u_int);
void screen_set_cursor_colour(struct screen *, const char *); void screen_set_cursor_colour(struct screen *, const char *);
void screen_set_title(struct screen *, const char *); int screen_set_title(struct screen *, const char *);
void screen_set_path(struct screen *, const char *); void screen_set_path(struct screen *, const char *);
void screen_push_title(struct screen *); void screen_push_title(struct screen *);
void screen_pop_title(struct screen *); void screen_pop_title(struct screen *);