Restore saved cursor position after a ZWJ rather than recalculating it.
authornicm <nicm@openbsd.org>
Thu, 12 Aug 2021 11:35:53 +0000 (11:35 +0000)
committernicm <nicm@openbsd.org>
Thu, 12 Aug 2021 11:35:53 +0000 (11:35 +0000)
usr.bin/tmux/screen-write.c

index 01b9477..1e8703d 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: screen-write.c,v 1.197 2021/08/11 20:49:55 nicm Exp $ */
+/* $OpenBSD: screen-write.c,v 1.198 2021/08/12 11:35:53 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1775,13 +1775,13 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc)
        if (width == 0 || (ctx->flags & SCREEN_WRITE_ZWJ)) {
                ctx->flags &= ~SCREEN_WRITE_ZWJ;
                screen_write_collect_flush(ctx, 0, __func__);
-               if ((gc = screen_write_combine(ctx, ud, &xx)) != 0) {
+               if ((gc = screen_write_combine(ctx, ud, &xx)) != NULL) {
                        cx = s->cx; cy = s->cy;
                        screen_write_set_cursor(ctx, xx, s->cy);
                        screen_write_initctx(ctx, &ttyctx, 0);
                        ttyctx.cell = gc;
                        tty_write(tty_cmd_cell, &ttyctx);
-                       s->cx = xx + gc->data.width; s->cy = cy;
+                       s->cx = cx; s->cy = cy;
                }
                return;
        }