mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Fix two errors with character/line insertion and deletion: the maximum number
of characters which may be inserted or deleted is the screen width, not one less (and similarly for lines and height); and if characters or lines are deleted by moving the ones that follow, the space at the end needs to be cleared. This appears to solve long-standing redraw issues most visible when using the force-width option then scrolling in view(1) or unwrapping lines in emacs.
This commit is contained in:
		| @@ -1,4 +1,4 @@ | ||||
| /* $Id $ */ | ||||
| /* $Id: grid-view.c,v 1.15 2009-07-01 19:14:33 nicm Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> | ||||
| @@ -158,6 +158,7 @@ grid_view_delete_lines(struct grid *gd, u_int py, u_int ny) | ||||
| 	sy = grid_view_y(gd, gd->sy); | ||||
|  | ||||
| 	grid_move_lines(gd, py, py + ny, sy - py - ny); | ||||
| 	grid_clear(gd, 0, sy - ny, gd->sx, py + ny - (sy - ny)); | ||||
| } | ||||
|  | ||||
| /* Delete lines inside scroll region. */ | ||||
| @@ -191,7 +192,7 @@ grid_view_insert_cells(struct grid *gd, u_int px, u_int py, u_int nx) | ||||
| 	if (px == sx - 1) | ||||
| 		grid_clear(gd, px, py, 1, 1); | ||||
| 	else | ||||
| 		grid_move_cells(gd, px + nx, px, py, (sx - 1) - (px + nx)); | ||||
| 		grid_move_cells(gd, px + nx, px, py, sx - px - nx); | ||||
| } | ||||
|  | ||||
| /* Delete characters. */ | ||||
| @@ -207,7 +208,8 @@ grid_view_delete_cells(struct grid *gd, u_int px, u_int py, u_int nx) | ||||
|  | ||||
| 	sx = grid_view_x(gd, gd->sx); | ||||
|  | ||||
| 	grid_move_cells(gd, px, px + nx, py, (sx - 1) - (px + nx)); | ||||
| 	grid_move_cells(gd, px, px + nx, py, sx - px - nx); | ||||
| 	grid_clear(gd, sx - nx, py, px + nx - (sx - nx), 1); | ||||
| } | ||||
|  | ||||
| /* Convert cells into a string. */ | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /* $Id $ */ | ||||
| /* $Id: screen-write.c,v 1.56 2009-07-01 19:14:33 nicm Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> | ||||
| @@ -325,8 +325,8 @@ screen_write_insertcharacter(struct screen_write_ctx *ctx, u_int nx) | ||||
| 	if (nx == 0) | ||||
| 		nx = 1; | ||||
|  | ||||
| 	if (nx > screen_size_x(s) - 1 - s->cx) | ||||
| 		nx = screen_size_x(s) - 1 - s->cx; | ||||
| 	if (nx > screen_size_x(s) - s->cx) | ||||
| 		nx = screen_size_x(s) - s->cx; | ||||
| 	if (nx == 0) | ||||
| 		return; | ||||
|  | ||||
| @@ -347,8 +347,8 @@ screen_write_deletecharacter(struct screen_write_ctx *ctx, u_int nx) | ||||
| 	if (nx == 0) | ||||
| 		nx = 1; | ||||
|  | ||||
| 	if (nx > screen_size_x(s) - 1 - s->cx) | ||||
| 		nx = screen_size_x(s) - 1 - s->cx; | ||||
| 	if (nx > screen_size_x(s) - s->cx) | ||||
| 		nx = screen_size_x(s) - s->cx; | ||||
| 	if (nx == 0) | ||||
| 		return; | ||||
|  | ||||
| @@ -369,8 +369,8 @@ screen_write_insertline(struct screen_write_ctx *ctx, u_int ny) | ||||
| 	if (ny == 0) | ||||
| 		ny = 1; | ||||
|  | ||||
| 	if (ny > screen_size_y(s) - 1 - s->cy) | ||||
| 		ny = screen_size_y(s) - 1 - s->cy; | ||||
| 	if (ny > screen_size_y(s) - s->cy) | ||||
| 		ny = screen_size_y(s) - s->cy; | ||||
| 	if (ny == 0) | ||||
| 		return; | ||||
|  | ||||
| @@ -395,8 +395,8 @@ screen_write_deleteline(struct screen_write_ctx *ctx, u_int ny) | ||||
| 	if (ny == 0) | ||||
| 		ny = 1; | ||||
|  | ||||
| 	if (ny > screen_size_y(s) - 1 - s->cy) | ||||
| 		ny = screen_size_y(s) - 1 - s->cy; | ||||
| 	if (ny > screen_size_y(s) - s->cy) | ||||
| 		ny = screen_size_y(s) - s->cy; | ||||
| 	if (ny == 0) | ||||
| 		return; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Nicholas Marriott
					Nicholas Marriott