diff options
author | nicm <nicm> | 2019-12-13 09:15:13 +0000 |
---|---|---|
committer | nicm <nicm> | 2019-12-13 09:15:13 +0000 |
commit | 21f9b39f060006fe769034ac2bb9b71d0a910f80 (patch) | |
tree | 75a4db7638aa852a4ab492cc4aef47ac5daef9c5 /window-buffer.c | |
parent | 6ce943f4d979423290662f691e3d8a3cded79a42 (diff) | |
download | rtmux-21f9b39f060006fe769034ac2bb9b71d0a910f80.tar.gz rtmux-21f9b39f060006fe769034ac2bb9b71d0a910f80.tar.bz2 rtmux-21f9b39f060006fe769034ac2bb9b71d0a910f80.zip |
Show UTF-8 in choose-buffer mode. From KOIE Hidetaka.
Diffstat (limited to 'window-buffer.c')
-rw-r--r-- | window-buffer.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/window-buffer.c b/window-buffer.c index 4091bc07..e03dfa28 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -208,9 +208,9 @@ window_buffer_draw(__unused void *modedata, void *itemdata, { struct window_buffer_itemdata *item = itemdata; struct paste_buffer *pb; - char line[1024]; - const char *pdata, *end, *cp; - size_t psize, at; + const char *pdata, *start, *end; + char *buf = NULL; + size_t psize, len; u_int i, cx = ctx->s->cx, cy = ctx->s->cy; pb = paste_get_name(item->name); @@ -219,27 +219,22 @@ window_buffer_draw(__unused void *modedata, void *itemdata, pdata = end = paste_buffer_data(pb, &psize); for (i = 0; i < sy; i++) { - at = 0; - while (end != pdata + psize && *end != '\n') { - if ((sizeof line) - at > 5) { - cp = vis(line + at, *end, VIS_OCTAL|VIS_TAB, 0); - at = cp - line; - } + start = end; + while (end != pdata + psize && *end != '\n') end++; - } - if (at > sx) - at = sx; - line[at] = '\0'; - - if (*line != '\0') { + buf = xreallocarray(buf, 4, end - start + 1); + len = utf8_strvis(buf, start, end - start, VIS_OCTAL|VIS_TAB); + if (*buf != '\0') { screen_write_cursormove(ctx, cx, cy + i, 0); - screen_write_puts(ctx, &grid_default_cell, "%s", line); + screen_write_nputs(ctx, sx, &grid_default_cell, "%s", + buf); } if (end == pdata + psize) break; end++; } + free(buf); } static int |