From 21f9b39f060006fe769034ac2bb9b71d0a910f80 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 13 Dec 2019 09:15:13 +0000 Subject: Show UTF-8 in choose-buffer mode. From KOIE Hidetaka. --- window-buffer.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) (limited to 'window-buffer.c') 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 -- cgit v1.2.3