diff options
author | nicm <nicm> | 2020-02-03 13:46:27 +0000 |
---|---|---|
committer | nicm <nicm> | 2020-02-03 13:46:27 +0000 |
commit | 265164d251f427bf9275c355a4f205c781d70b20 (patch) | |
tree | 9ddc4dee575a2d99de8347a5407dcc9a45d4b305 | |
parent | 87bcc0c7e0fa0aded9a05093caaf22f3a080753d (diff) | |
download | rtmux-265164d251f427bf9275c355a4f205c781d70b20.tar.gz rtmux-265164d251f427bf9275c355a4f205c781d70b20.tar.bz2 rtmux-265164d251f427bf9275c355a4f205c781d70b20.zip |
Instead of passing titles through vis() which doubles backslashes, just
ignore any containing control characters or invalid UTF-8. GitHub issue 2070.
-rw-r--r-- | cmd-select-pane.c | 4 | ||||
-rw-r--r-- | input.c | 10 | ||||
-rw-r--r-- | screen.c | 9 | ||||
-rw-r--r-- | 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); } @@ -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. */ @@ -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. */ @@ -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 *); |