mirror of
https://github.com/tmux/tmux.git
synced 2024-12-12 17:38:48 +00:00
Fix a couple of problems with insert mode: flush dirty cells before we
modify the screen, not after; and use grid_view_insert_cells to make space not grid_move_cells.
This commit is contained in:
parent
40253048ca
commit
e83ebf50de
@ -103,6 +103,7 @@ screen_write_flush(struct screen_write_ctx *ctx)
|
|||||||
if (ctx->dirty == 0)
|
if (ctx->dirty == 0)
|
||||||
return;
|
return;
|
||||||
dirty = 0;
|
dirty = 0;
|
||||||
|
log_debug("%s: dirty %u", __func__, ctx->dirty);
|
||||||
|
|
||||||
cx = s->cx;
|
cx = s->cx;
|
||||||
cy = s->cy;
|
cy = s->cy;
|
||||||
@ -1044,9 +1045,12 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc)
|
|||||||
screen_write_initctx(ctx, &ttyctx);
|
screen_write_initctx(ctx, &ttyctx);
|
||||||
|
|
||||||
/* 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 <= sx - width) {
|
if (s->mode & MODE_INSERT) {
|
||||||
xx = sx - s->cx - width;
|
if (s->cx <= sx - width) {
|
||||||
grid_move_cells(s->grid, s->cx + width, s->cx, s->cy, xx);
|
screen_write_flush(ctx);
|
||||||
|
xx = sx - s->cx - width;
|
||||||
|
grid_view_insert_cells(s->grid, s->cx, s->cy, xx);
|
||||||
|
}
|
||||||
insert = 1;
|
insert = 1;
|
||||||
} else
|
} else
|
||||||
insert = 0;
|
insert = 0;
|
||||||
@ -1133,8 +1137,6 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc)
|
|||||||
|
|
||||||
/* Create space for character in insert mode. */
|
/* Create space for character in insert mode. */
|
||||||
if (insert) {
|
if (insert) {
|
||||||
if (!wrapped)
|
|
||||||
screen_write_flush(ctx);
|
|
||||||
ttyctx.num = width;
|
ttyctx.num = width;
|
||||||
tty_write(tty_cmd_insertcharacter, &ttyctx);
|
tty_write(tty_cmd_insertcharacter, &ttyctx);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user