mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +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:
		@@ -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;
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user