Fix HPA in origin mode.

This commit is contained in:
nicm 2019-03-12 18:30:08 +00:00
parent f3f534a3a0
commit 2796ae81d0
3 changed files with 8 additions and 8 deletions

View File

@ -1447,7 +1447,7 @@ input_csi_dispatch(struct input_ctx *ictx)
case INPUT_CSI_HPA: case INPUT_CSI_HPA:
n = input_get(ictx, 0, 1, 1); n = input_get(ictx, 0, 1, 1);
if (n != -1) if (n != -1)
screen_write_cursormove(sctx, n - 1, s->cy); screen_write_cursormove(sctx, n - 1, -1);
break; break;
case INPUT_CSI_ICH: case INPUT_CSI_ICH:
n = input_get(ictx, 0, 1, 1); n = input_get(ictx, 0, 1, 1);
@ -1519,7 +1519,7 @@ input_csi_dispatch(struct input_ctx *ictx)
case INPUT_CSI_VPA: case INPUT_CSI_VPA:
n = input_get(ictx, 0, 1, 1); n = input_get(ictx, 0, 1, 1);
if (n != -1) if (n != -1)
screen_write_cursormove(sctx, s->cx, n - 1); screen_write_cursormove(sctx, -1, n - 1);
break; break;
case INPUT_CSI_DECSCUSR: case INPUT_CSI_DECSCUSR:
n = input_get(ictx, 0, 0, 0); n = input_get(ictx, 0, 0, 0);

View File

@ -1034,20 +1034,20 @@ screen_write_clearstartofline(struct screen_write_ctx *ctx, u_int bg)
/* Move cursor to px,py. */ /* Move cursor to px,py. */
void void
screen_write_cursormove(struct screen_write_ctx *ctx, u_int px, u_int py) screen_write_cursormove(struct screen_write_ctx *ctx, int px, int py)
{ {
struct screen *s = ctx->s; struct screen *s = ctx->s;
if (s->mode & MODE_ORIGIN) { if (py != -1 && (s->mode & MODE_ORIGIN)) {
if (py > s->rlower - s->rupper) if ((u_int)py > s->rlower - s->rupper)
py = s->rlower; py = s->rlower;
else else
py += s->rupper; py += s->rupper;
} }
if (px > screen_size_x(s) - 1) if (px != -1 && (u_int)px > screen_size_x(s) - 1)
px = screen_size_x(s) - 1; px = screen_size_x(s) - 1;
if (py > screen_size_y(s) - 1) if (py != -1 && (u_int)py > screen_size_y(s) - 1)
py = screen_size_y(s) - 1; py = screen_size_y(s) - 1;
screen_write_set_cursor(ctx, px, py); screen_write_set_cursor(ctx, px, py);

2
tmux.h
View File

@ -2100,7 +2100,7 @@ void screen_write_deleteline(struct screen_write_ctx *, u_int, u_int);
void screen_write_clearline(struct screen_write_ctx *, u_int); void screen_write_clearline(struct screen_write_ctx *, u_int);
void screen_write_clearendofline(struct screen_write_ctx *, u_int); void screen_write_clearendofline(struct screen_write_ctx *, u_int);
void screen_write_clearstartofline(struct screen_write_ctx *, u_int); void screen_write_clearstartofline(struct screen_write_ctx *, u_int);
void screen_write_cursormove(struct screen_write_ctx *, u_int, u_int); void screen_write_cursormove(struct screen_write_ctx *, int, int);
void screen_write_reverseindex(struct screen_write_ctx *, u_int); void screen_write_reverseindex(struct screen_write_ctx *, u_int);
void screen_write_scrollregion(struct screen_write_ctx *, u_int, u_int); void screen_write_scrollregion(struct screen_write_ctx *, u_int, u_int);
void screen_write_linefeed(struct screen_write_ctx *, int, u_int); void screen_write_linefeed(struct screen_write_ctx *, int, u_int);