Revert screen-write.c r1.54 and fix the bug properly. After wrapping a

line in a pane, the cursor needs to move to the next line unless it
scrolled.
This commit is contained in:
Nicholas Marriott 2012-03-17 17:36:03 +00:00
parent c8c0d68128
commit 0489213b1b
2 changed files with 8 additions and 5 deletions

View File

@ -1071,8 +1071,11 @@ screen_write_cell(struct screen_write_ctx *ctx,
return; return;
} }
/* Initialise the redraw context, saving the last cell. */
screen_write_initctx(ctx, &ttyctx, 1);
/* If in insert mode, make space for the cells. */ /* If in insert mode, make space for the cells. */
if (s->mode & MODE_INSERT && s->cx <= screen_size_x(s) - width) { if ((s->mode & MODE_INSERT) && s->cx <= screen_size_x(s) - width) {
xx = screen_size_x(s) - s->cx - width; xx = screen_size_x(s) - s->cx - width;
grid_move_cells(s->grid, s->cx + width, s->cx, s->cy, xx); grid_move_cells(s->grid, s->cx + width, s->cx, s->cy, xx);
insert = 1; insert = 1;
@ -1084,9 +1087,6 @@ screen_write_cell(struct screen_write_ctx *ctx,
s->cx = 0; /* carriage return */ s->cx = 0; /* carriage return */
} }
/* Initialise the redraw context, saving the last cell. */
screen_write_initctx(ctx, &ttyctx, 1);
/* Sanity checks. */ /* Sanity checks. */
if (((s->mode & MODE_WRAP) && s->cx > screen_size_x(s) - width) if (((s->mode & MODE_WRAP) && s->cx > screen_size_x(s) - width)
|| s->cy > screen_size_y(s) - 1) || s->cy > screen_size_y(s) - 1)

3
tty.c
View File

@ -1000,7 +1000,10 @@ tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx)
* The pane doesn't fill the entire line, the linefeed * The pane doesn't fill the entire line, the linefeed
* will already have happened, so just move the cursor. * will already have happened, so just move the cursor.
*/ */
if (ctx->ocy != wp->yoff + wp->sy)
tty_cursor_pane(tty, ctx, 0, ctx->ocy + 1); tty_cursor_pane(tty, ctx, 0, ctx->ocy + 1);
else
tty_cursor_pane(tty, ctx, 0, ctx->ocy);
} else if (tty->cx < tty->sx) { } else if (tty->cx < tty->sx) {
/* /*
* The cursor isn't in the last position already, so * The cursor isn't in the last position already, so