mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:07:38 +00:00 
			
		
		
		
	Scrolling at least needs to be flushed before sending EL to the terminal
(but it is simpler to flush everything, so do that instead).
This commit is contained in:
		@@ -741,6 +741,7 @@ screen_write_clearline(struct screen_write_ctx *ctx, u_int bg)
 | 
				
			|||||||
	grid_view_clear(s->grid, 0, s->cy, sx, 1, bg);
 | 
						grid_view_clear(s->grid, 0, s->cy, sx, 1, bg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	screen_write_collect_clear(ctx, s->cy, 1);
 | 
						screen_write_collect_clear(ctx, s->cy, 1);
 | 
				
			||||||
 | 
						screen_write_collect_flush(ctx, 0);
 | 
				
			||||||
	tty_write(tty_cmd_clearline, &ttyctx);
 | 
						tty_write(tty_cmd_clearline, &ttyctx);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -764,8 +765,7 @@ screen_write_clearendofline(struct screen_write_ctx *ctx, u_int bg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (s->cx == 0)
 | 
						if (s->cx == 0)
 | 
				
			||||||
		screen_write_collect_clear(ctx, s->cy, 1);
 | 
							screen_write_collect_clear(ctx, s->cy, 1);
 | 
				
			||||||
	else
 | 
						screen_write_collect_flush(ctx, 0);
 | 
				
			||||||
		screen_write_collect_flush(ctx, 0);
 | 
					 | 
				
			||||||
	tty_write(tty_cmd_clearendofline, &ttyctx);
 | 
						tty_write(tty_cmd_clearendofline, &ttyctx);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -787,8 +787,7 @@ screen_write_clearstartofline(struct screen_write_ctx *ctx, u_int bg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (s->cx > sx - 1)
 | 
						if (s->cx > sx - 1)
 | 
				
			||||||
		screen_write_collect_clear(ctx, s->cy, 1);
 | 
							screen_write_collect_clear(ctx, s->cy, 1);
 | 
				
			||||||
	else
 | 
						screen_write_collect_flush(ctx, 0);
 | 
				
			||||||
		screen_write_collect_flush(ctx, 0);
 | 
					 | 
				
			||||||
	tty_write(tty_cmd_clearstartofline, &ttyctx);
 | 
						tty_write(tty_cmd_clearstartofline, &ttyctx);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -863,6 +862,9 @@ screen_write_linefeed(struct screen_write_ctx *ctx, int wrapped)
 | 
				
			|||||||
	else
 | 
						else
 | 
				
			||||||
		gl->flags &= ~GRID_LINE_WRAPPED;
 | 
							gl->flags &= ~GRID_LINE_WRAPPED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						log_debug("%s: at %u,%u (region %u-%u)", __func__, s->cx, s->cy,
 | 
				
			||||||
 | 
						    s->rupper, s->rlower);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (s->cy == s->rlower) {
 | 
						if (s->cy == s->rlower) {
 | 
				
			||||||
		grid_view_scroll_region_up(gd, s->rupper, s->rlower);
 | 
							grid_view_scroll_region_up(gd, s->rupper, s->rlower);
 | 
				
			||||||
		screen_write_collect_scroll(ctx);
 | 
							screen_write_collect_scroll(ctx);
 | 
				
			||||||
@@ -999,7 +1001,7 @@ screen_write_collect_clear(struct screen_write_ctx *ctx, u_int y, u_int n)
 | 
				
			|||||||
			free(ci);
 | 
								free(ci);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ctx->skipped += size;
 | 
							ctx->skipped += size;
 | 
				
			||||||
		log_debug("discarding %zu bytes on line %u", size, i);
 | 
							log_debug("%s: dropped %zu bytes (line %u)", __func__, size, i);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1011,6 +1013,9 @@ screen_write_collect_scroll(struct screen_write_ctx *ctx)
 | 
				
			|||||||
	struct screen_write_collect_line	*cl;
 | 
						struct screen_write_collect_line	*cl;
 | 
				
			||||||
	u_int					 y;
 | 
						u_int					 y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						log_debug("%s: at %u,%u (region %u-%u)", __func__, s->cx, s->cy,
 | 
				
			||||||
 | 
						    s->rupper, s->rlower);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	screen_write_collect_clear(ctx, s->rupper, 1);
 | 
						screen_write_collect_clear(ctx, s->rupper, 1);
 | 
				
			||||||
	for (y = s->rupper; y < s->rlower; y++) {
 | 
						for (y = s->rupper; y < s->rlower; y++) {
 | 
				
			||||||
		cl = &ctx->list[y + 1];
 | 
							cl = &ctx->list[y + 1];
 | 
				
			||||||
@@ -1122,6 +1127,7 @@ screen_write_collect_add(struct screen_write_ctx *ctx,
 | 
				
			|||||||
	if (s->cx > sx - 1 || ctx->item->used > sx - 1 - s->cx)
 | 
						if (s->cx > sx - 1 || ctx->item->used > sx - 1 - s->cx)
 | 
				
			||||||
		screen_write_collect_end(ctx);
 | 
							screen_write_collect_end(ctx);
 | 
				
			||||||
	if (s->cx > sx - 1) {
 | 
						if (s->cx > sx - 1) {
 | 
				
			||||||
 | 
							log_debug("%s: wrapped at %u,%u", __func__, s->cx, s->cy);
 | 
				
			||||||
		screen_write_linefeed(ctx, 1);
 | 
							screen_write_linefeed(ctx, 1);
 | 
				
			||||||
		s->cx = 0;
 | 
							s->cx = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user