mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Sync OpenBSD patchset 1070:
On xterm 271 and later, put the terminal into SCL 5 and use DECCRA for scrolling the region in panes (if the large region check isn't hit). With help from Ailin Nemui.
This commit is contained in:
		
							
								
								
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1468,8 +1468,9 @@ void	tty_putc(struct tty *, u_char);
 | 
			
		||||
void	tty_pututf8(struct tty *, const struct grid_utf8 *);
 | 
			
		||||
void	tty_init(struct tty *, int, char *);
 | 
			
		||||
int	tty_resize(struct tty *);
 | 
			
		||||
int	tty_set_size(struct tty *tty, u_int sx, u_int sy);
 | 
			
		||||
int	tty_set_size(struct tty *, u_int, u_int);
 | 
			
		||||
void	tty_start_tty(struct tty *);
 | 
			
		||||
void	tty_set_version(struct tty *, u_int);
 | 
			
		||||
void	tty_stop_tty(struct tty *);
 | 
			
		||||
void	tty_set_title(struct tty *, const char *);
 | 
			
		||||
void	tty_update_mode(struct tty *, int, struct screen *);
 | 
			
		||||
 
 | 
			
		||||
@@ -728,8 +728,7 @@ tty_keys_device(struct tty *tty, const char *buf, size_t len, size_t *size)
 | 
			
		||||
		a = b = 0;
 | 
			
		||||
 | 
			
		||||
	log_debug("received xterm version %u", b);
 | 
			
		||||
	if (tty->xterm_version == 0)
 | 
			
		||||
		tty->xterm_version = b;
 | 
			
		||||
	tty_set_version(tty, b);
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								tty.c
									
									
									
									
									
								
							@@ -234,6 +234,27 @@ tty_start_tty(struct tty *tty)
 | 
			
		||||
	tty_force_cursor_colour(tty, "");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_set_version(struct tty *tty, u_int version)
 | 
			
		||||
{
 | 
			
		||||
	if (tty->xterm_version != 0)
 | 
			
		||||
		return;
 | 
			
		||||
	tty->xterm_version = version;
 | 
			
		||||
 | 
			
		||||
	if (tty->xterm_version > 270) {
 | 
			
		||||
		tty_puts(tty, "\033[65;1\"p");
 | 
			
		||||
 | 
			
		||||
		tty_putcode(tty, TTYC_RMACS);
 | 
			
		||||
		memcpy(&tty->cell, &grid_default_cell, sizeof tty->cell);
 | 
			
		||||
 | 
			
		||||
		tty->cx = UINT_MAX;
 | 
			
		||||
		tty->cy = UINT_MAX;
 | 
			
		||||
 | 
			
		||||
		tty->rupper = UINT_MAX;
 | 
			
		||||
		tty->rlower = UINT_MAX;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_stop_tty(struct tty *tty)
 | 
			
		||||
{
 | 
			
		||||
@@ -276,6 +297,9 @@ tty_stop_tty(struct tty *tty)
 | 
			
		||||
		tty_raw(tty, "\033[?1000l");
 | 
			
		||||
 | 
			
		||||
	tty_raw(tty, tty_term_string(tty->term, TTYC_RMCUP));
 | 
			
		||||
 | 
			
		||||
	if (tty->xterm_version > 270)
 | 
			
		||||
		tty_raw(tty, "\033[61;1\"p");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -844,12 +868,27 @@ tty_cmd_linefeed(struct tty *tty, const struct tty_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct window_pane	*wp = ctx->wp;
 | 
			
		||||
	struct screen		*s = wp->screen;
 | 
			
		||||
	char			 tmp[64];
 | 
			
		||||
 | 
			
		||||
	if (ctx->ocy != ctx->orlower)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (ctx->xoff != 0 || screen_size_x(s) < tty->sx ||
 | 
			
		||||
	    !tty_term_has(tty->term, TTYC_CSR)) {
 | 
			
		||||
		if (tty_large_region(tty, ctx))
 | 
			
		||||
			wp->flags |= PANE_REDRAW;
 | 
			
		||||
		else if (tty->xterm_version > 270) {
 | 
			
		||||
			snprintf(tmp, sizeof tmp,
 | 
			
		||||
			    "\033[%u;%u;%u;%u;1;%u;%u;1$v",
 | 
			
		||||
			    ctx->yoff + ctx->orupper + 2,
 | 
			
		||||
			    ctx->xoff + 1,
 | 
			
		||||
			    ctx->yoff + ctx->orlower + 1,
 | 
			
		||||
			    ctx->xoff + screen_size_x(s),
 | 
			
		||||
			    ctx->yoff + ctx->orupper + 1,
 | 
			
		||||
			    ctx->xoff + 1);
 | 
			
		||||
			tty_puts(tty, tmp);
 | 
			
		||||
			tty_cmd_clearline(tty, ctx);
 | 
			
		||||
		} else
 | 
			
		||||
			tty_redraw_region(tty, ctx);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user