mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 01:34:18 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		@@ -67,6 +67,7 @@ grid_view_clear_history(struct grid *gd)
 | 
			
		||||
		grid_collect_history(gd);
 | 
			
		||||
		grid_scroll_history(gd);
 | 
			
		||||
	}
 | 
			
		||||
	gd->hscrolled = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Clear area. */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								grid.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								grid.c
									
									
									
									
									
								
							@@ -99,6 +99,7 @@ grid_create(u_int sx, u_int sy, u_int hlimit)
 | 
			
		||||
 | 
			
		||||
	gd->flags = GRID_HISTORY;
 | 
			
		||||
 | 
			
		||||
	gd->hscrolled = 0;
 | 
			
		||||
	gd->hsize = 0;
 | 
			
		||||
	gd->hlimit = hlimit;
 | 
			
		||||
 | 
			
		||||
@@ -170,6 +171,8 @@ grid_collect_history(struct grid *gd)
 | 
			
		||||
 | 
			
		||||
	grid_move_lines(gd, 0, yy, gd->hsize + gd->sy - yy);
 | 
			
		||||
	gd->hsize -= yy;
 | 
			
		||||
	if (gd->hscrolled > gd->hsize)
 | 
			
		||||
		gd->hscrolled = gd->hsize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -186,6 +189,7 @@ grid_scroll_history(struct grid *gd)
 | 
			
		||||
	    sizeof *gd->linedata);
 | 
			
		||||
	memset(&gd->linedata[yy], 0, sizeof gd->linedata[yy]);
 | 
			
		||||
 | 
			
		||||
	gd->hscrolled++;
 | 
			
		||||
	gd->hsize++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -196,7 +200,9 @@ grid_clear_history(struct grid *gd)
 | 
			
		||||
	grid_clear_lines(gd, 0, gd->hsize);
 | 
			
		||||
	grid_move_lines(gd, 0, gd->hsize, gd->sy);
 | 
			
		||||
 | 
			
		||||
	gd->hscrolled = 0;
 | 
			
		||||
	gd->hsize = 0;
 | 
			
		||||
 | 
			
		||||
	gd->linedata = xreallocarray(gd->linedata, gd->sy,
 | 
			
		||||
	    sizeof *gd->linedata);
 | 
			
		||||
}
 | 
			
		||||
@@ -231,6 +237,7 @@ grid_scroll_history_region(struct grid *gd, u_int upper, u_int lower)
 | 
			
		||||
	memset(gl_lower, 0, sizeof *gl_lower);
 | 
			
		||||
 | 
			
		||||
	/* Move the history offset down over the line. */
 | 
			
		||||
	gd->hscrolled++;
 | 
			
		||||
	gd->hsize++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -914,6 +921,10 @@ grid_reflow(struct grid *dst, struct grid *src, u_int new_x)
 | 
			
		||||
			grid_reflow_join(dst, &py, src_gl, new_x);
 | 
			
		||||
		}
 | 
			
		||||
		previous_wrapped = (src_gl->flags & GRID_LINE_WRAPPED);
 | 
			
		||||
 | 
			
		||||
		/* This is where we started scrolling. */
 | 
			
		||||
		if (line == sy + src->hsize - src->hscrolled - 1)
 | 
			
		||||
			dst->hscrolled = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	grid_destroy(src);
 | 
			
		||||
 
 | 
			
		||||
@@ -1016,7 +1016,7 @@ screen_write_clearhistory(struct screen_write_ctx *ctx)
 | 
			
		||||
	struct grid	*gd = s->grid;
 | 
			
		||||
 | 
			
		||||
	grid_move_lines(gd, 0, gd->hsize, gd->sy);
 | 
			
		||||
	gd->hsize = 0;
 | 
			
		||||
	gd->hscrolled = gd->hsize = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Write cell data. */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								screen.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								screen.c
									
									
									
									
									
								
							@@ -177,8 +177,9 @@ screen_resize_y(struct screen *s, u_int sy)
 | 
			
		||||
	 * If the height is decreasing, delete lines from the bottom until
 | 
			
		||||
	 * hitting the cursor, then push lines from the top into the history.
 | 
			
		||||
	 *
 | 
			
		||||
	 * When increasing, pull as many lines as possible from the history to
 | 
			
		||||
	 * the top, then fill the remaining with blanks at the bottom.
 | 
			
		||||
	 * When increasing, pull as many lines as possible from scrolled
 | 
			
		||||
	 * history (not explicitly cleared from view) to the top, then fill the
 | 
			
		||||
	 * remaining with blanks at the bottom.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	/* Size decreasing. */
 | 
			
		||||
@@ -200,9 +201,10 @@ screen_resize_y(struct screen *s, u_int sy)
 | 
			
		||||
		 * lines from the top.
 | 
			
		||||
		 */
 | 
			
		||||
		available = s->cy;
 | 
			
		||||
		if (gd->flags & GRID_HISTORY)
 | 
			
		||||
		if (gd->flags & GRID_HISTORY) {
 | 
			
		||||
			gd->hscrolled += needed;
 | 
			
		||||
			gd->hsize += needed;
 | 
			
		||||
		else if (needed > 0 && available > 0) {
 | 
			
		||||
		} else if (needed > 0 && available > 0) {
 | 
			
		||||
			if (available > needed)
 | 
			
		||||
				available = needed;
 | 
			
		||||
			grid_view_delete_lines(gd, 0, available);
 | 
			
		||||
@@ -219,13 +221,14 @@ screen_resize_y(struct screen *s, u_int sy)
 | 
			
		||||
		needed = sy - oldy;
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * Try to pull as much as possible out of the history, if is
 | 
			
		||||
		 * Try to pull as much as possible out of scrolled history, if is
 | 
			
		||||
		 * is enabled.
 | 
			
		||||
		 */
 | 
			
		||||
		available = gd->hsize;
 | 
			
		||||
		available = gd->hscrolled;
 | 
			
		||||
		if (gd->flags & GRID_HISTORY && available > 0) {
 | 
			
		||||
			if (available > needed)
 | 
			
		||||
				available = needed;
 | 
			
		||||
			gd->hscrolled -= available;
 | 
			
		||||
			gd->hsize -= available;
 | 
			
		||||
			s->cy += available;
 | 
			
		||||
		} else
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user