diff options
author | nicm <nicm> | 2015-11-12 11:10:50 +0000 |
---|---|---|
committer | nicm <nicm> | 2015-11-12 11:10:50 +0000 |
commit | c41673f3fae397e872214880bd005cce631cf11b (patch) | |
tree | 6f07266d52a6a1b21a213de354f14a59c13d420d /cmd-queue.c | |
parent | 1b86f520ea1620628e569ea833c7b13306c18a4e (diff) | |
download | rtmux-c41673f3fae397e872214880bd005cce631cf11b.tar.gz rtmux-c41673f3fae397e872214880bd005cce631cf11b.tar.bz2 rtmux-c41673f3fae397e872214880bd005cce631cf11b.zip |
If we know the terminal outside tmux is not UTF-8, replace UTF-8 in
error messages and whatnot with underscores the same as we do when we
draw UTF-8 characters as part of the screen.
Diffstat (limited to 'cmd-queue.c')
-rw-r--r-- | cmd-queue.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/cmd-queue.c b/cmd-queue.c index ff8c69cb..5015981c 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -69,14 +69,21 @@ cmdq_print(struct cmd_q *cmdq, const char *fmt, ...) struct client *c = cmdq->client; struct window *w; va_list ap; + char *tmp, *msg; va_start(ap, fmt); if (c == NULL) /* nothing */; else if (c->session == NULL || (c->flags & CLIENT_CONTROL)) { - evbuffer_add_vprintf(c->stdout_data, fmt, ap); - + if (~c->flags & CLIENT_UTF8) { + vasprintf(&tmp, fmt, ap); + msg = utf8_sanitize(tmp); + free(tmp); + evbuffer_add(c->stdout_data, msg, strlen(msg)); + free(msg); + } else + evbuffer_add_vprintf(c->stdout_data, fmt, ap); evbuffer_add(c->stdout_data, "\n", 1); server_push_stdout(c); } else { @@ -101,6 +108,7 @@ cmdq_error(struct cmd_q *cmdq, const char *fmt, ...) va_list ap; char *msg; size_t msglen; + char *tmp; va_start(ap, fmt); msglen = xvasprintf(&msg, fmt, ap); @@ -109,9 +117,14 @@ cmdq_error(struct cmd_q *cmdq, const char *fmt, ...) if (c == NULL) cfg_add_cause("%s:%u: %s", cmd->file, cmd->line, msg); else if (c->session == NULL || (c->flags & CLIENT_CONTROL)) { + if (~c->flags & CLIENT_UTF8) { + tmp = msg; + msg = utf8_sanitize(tmp); + free(tmp); + msglen = strlen(msg); + } evbuffer_add(c->stderr_data, msg, msglen); evbuffer_add(c->stderr_data, "\n", 1); - server_push_stderr(c); c->retval = 1; } else { |