diff --git a/mode-tree.c b/mode-tree.c index 2e4b9072..eb18bdf7 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -582,10 +582,10 @@ mode_tree_draw(struct mode_tree_data *mtd) } if (i != mtd->current) { - screen_write_nputs(&ctx, w, &gc0, "%s", text); + screen_write_cnputs(&ctx, w, &gc0, "%s", text); screen_write_clearendofline(&ctx, 8); } else { - screen_write_nputs(&ctx, w, &gc, "%s", text); + screen_write_cnputs(&ctx, w, &gc, "%s", text); screen_write_clearendofline(&ctx, gc.bg); } free(text); diff --git a/screen-write.c b/screen-write.c index 00994e48..c65ae688 100644 --- a/screen-write.c +++ b/screen-write.c @@ -350,7 +350,6 @@ screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen, ptr = last + 1; continue; } - if (*ptr > 0x7f && utf8_open(ud, *ptr) == UTF8_MORE) { ptr++; @@ -376,7 +375,9 @@ screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen, if (maxlen > 0 && size + 1 > (size_t)maxlen) break; - if (*ptr > 0x1f && *ptr < 0x7f) { + if (*ptr == '\001') + gc.attr ^= GRID_ATTR_CHARSET; + else if (*ptr > 0x1f && *ptr < 0x7f) { size++; screen_write_putc(ctx, &gc, *ptr); }