From 265164d251f427bf9275c355a4f205c781d70b20 Mon Sep 17 00:00:00 2001 From: nicm <nicm> Date: Mon, 3 Feb 2020 13:46:27 +0000 Subject: [PATCH] Instead of passing titles through vis() which doubles backslashes, just ignore any containing control characters or invalid UTF-8. GitHub issue 2070. --- cmd-select-pane.c | 4 ++-- input.c | 10 +++------- screen.c | 9 +++++++-- tmux.h | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 6542c919..c63c7e61 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -197,8 +197,8 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item) if (args_has(self->args, 'T')) { pane_title = format_single(item, args_get(self->args, 'T'), c, s, wl, wp); - screen_set_title(&wp->base, pane_title); - server_status_window(wp->window); + if (screen_set_title(&wp->base, pane_title)) + server_status_window(wp->window); free(pane_title); return (CMD_RETURN_NORMAL); } diff --git a/input.c b/input.c index ea9320d1..82d2b398 100644 --- a/input.c +++ b/input.c @@ -2213,10 +2213,8 @@ input_exit_osc(struct input_ctx *ictx) switch (option) { case 0: case 2: - if (utf8_isvalid(p)) { - screen_set_title(sctx->s, p); + if (screen_set_title(sctx->s, p)) server_status_window(ictx->wp->window); - } break; case 4: input_osc_4(ictx, p); @@ -2274,10 +2272,8 @@ input_exit_apc(struct input_ctx *ictx) return; log_debug("%s: \"%s\"", __func__, ictx->input_buf); - if (!utf8_isvalid(ictx->input_buf)) - return; - screen_set_title(sctx->s, ictx->input_buf); - server_status_window(ictx->wp->window); + if (screen_set_title(sctx->s, ictx->input_buf)) + server_status_window(ictx->wp->window); } /* Rename string started. */ diff --git a/screen.c b/screen.c index 9db0f609..5aa30271 100644 --- a/screen.c +++ b/screen.c @@ -152,11 +152,16 @@ screen_set_cursor_colour(struct screen *s, const char *colour) } /* Set screen title. */ -void +int screen_set_title(struct screen *s, const char *title) { + char *cp; + + if (!utf8_isvalid(title)) + return (0); 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. */ diff --git a/tmux.h b/tmux.h index 418f0a44..bc4b0d6c 100644 --- a/tmux.h +++ b/tmux.h @@ -2424,7 +2424,7 @@ void screen_free(struct screen *); void screen_reset_tabs(struct screen *); void screen_set_cursor_style(struct screen *, u_int); 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_push_title(struct screen *); void screen_pop_title(struct screen *);