Skip to content

Commit

Permalink
Fix a couple of problems with insert mode: flush dirty cells before we
Browse files Browse the repository at this point in the history
modify the screen, not after; and use grid_view_insert_cells to make
space not grid_move_cells.
  • Loading branch information
nicm committed Oct 12, 2016
1 parent 4025304 commit e83ebf5
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions screen-write.c
Expand Up @@ -103,6 +103,7 @@ screen_write_flush(struct screen_write_ctx *ctx)
if (ctx->dirty == 0)
return;
dirty = 0;
log_debug("%s: dirty %u", __func__, ctx->dirty);

cx = s->cx;
cy = s->cy;
Expand Down Expand Up @@ -1044,9 +1045,12 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc)
screen_write_initctx(ctx, &ttyctx);

/* If in insert mode, make space for the cells. */
if ((s->mode & MODE_INSERT) && s->cx <= sx - width) {
xx = sx - s->cx - width;
grid_move_cells(s->grid, s->cx + width, s->cx, s->cy, xx);
if (s->mode & MODE_INSERT) {
if (s->cx <= sx - width) {
screen_write_flush(ctx);
xx = sx - s->cx - width;
grid_view_insert_cells(s->grid, s->cx, s->cy, xx);
}
insert = 1;
} else
insert = 0;
Expand Down Expand Up @@ -1133,8 +1137,6 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc)

/* Create space for character in insert mode. */
if (insert) {
if (!wrapped)
screen_write_flush(ctx);
ttyctx.num = width;
tty_write(tty_cmd_insertcharacter, &ttyctx);
}
Expand Down

0 comments on commit e83ebf5

Please sign in to comment.