summaryrefslogtreecommitdiffstats
path: root/cmd-queue.c
diff options
context:
space:
mode:
authornicm <nicm>2015-11-12 11:10:50 +0000
committernicm <nicm>2015-11-12 11:10:50 +0000
commitc41673f3fae397e872214880bd005cce631cf11b (patch)
tree6f07266d52a6a1b21a213de354f14a59c13d420d /cmd-queue.c
parent1b86f520ea1620628e569ea833c7b13306c18a4e (diff)
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.c19
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 {