mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Request terminal colours again on SIGWINCH but at most once every 30
seconds, GitHub issue 3582.
This commit is contained in:
		@@ -2770,6 +2770,7 @@ server_client_dispatch(struct imsg *imsg, void *arg)
 | 
			
		||||
			break;
 | 
			
		||||
		server_client_update_latest(c);
 | 
			
		||||
		tty_resize(&c->tty);
 | 
			
		||||
		tty_repeat_requests(&c->tty);
 | 
			
		||||
		recalculate_sizes();
 | 
			
		||||
		if (c->overlay_resize == NULL)
 | 
			
		||||
			server_client_clear_overlay(c);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1386,6 +1386,7 @@ struct tty {
 | 
			
		||||
	struct client	*client;
 | 
			
		||||
	struct event	 start_timer;
 | 
			
		||||
	struct event	 clipboard_timer;
 | 
			
		||||
	time_t		 last_requests;
 | 
			
		||||
 | 
			
		||||
	u_int		 sx;
 | 
			
		||||
	u_int		 sy;
 | 
			
		||||
@@ -1437,10 +1438,8 @@ struct tty {
 | 
			
		||||
#define TTY_HAVEXDA 0x200
 | 
			
		||||
#define TTY_SYNCING 0x400
 | 
			
		||||
#define TTY_HAVEDA2 0x800 /* Secondary DA. */
 | 
			
		||||
#define TTY_HAVEFG 0x1000
 | 
			
		||||
#define TTY_HAVEBG 0x2000
 | 
			
		||||
#define TTY_ALL_REQUEST_FLAGS \
 | 
			
		||||
	(TTY_HAVEDA|TTY_HAVEDA2|TTY_HAVEXDA|TTY_HAVEFG|TTY_HAVEBG)
 | 
			
		||||
	(TTY_HAVEDA|TTY_HAVEDA2|TTY_HAVEXDA)
 | 
			
		||||
	int		 flags;
 | 
			
		||||
 | 
			
		||||
	struct tty_term	*term;
 | 
			
		||||
@@ -2333,6 +2332,7 @@ void	tty_resize(struct tty *);
 | 
			
		||||
void	tty_set_size(struct tty *, u_int, u_int, u_int, u_int);
 | 
			
		||||
void	tty_start_tty(struct tty *);
 | 
			
		||||
void	tty_send_requests(struct tty *);
 | 
			
		||||
void	tty_repeat_requests(struct tty *);
 | 
			
		||||
void	tty_stop_tty(struct tty *);
 | 
			
		||||
void	tty_set_title(struct tty *, const char *);
 | 
			
		||||
void	tty_set_path(struct tty *, const char *);
 | 
			
		||||
 
 | 
			
		||||
@@ -1492,8 +1492,6 @@ tty_keys_colours(struct tty *tty, const char *buf, size_t len, size_t *size)
 | 
			
		||||
	int		 n;
 | 
			
		||||
 | 
			
		||||
	*size = 0;
 | 
			
		||||
	if ((tty->flags & TTY_HAVEFG) && (tty->flags & TTY_HAVEBG))
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	/* First four bytes are always \033]1 and 0 or 1 and ;. */
 | 
			
		||||
	if (buf[0] != '\033')
 | 
			
		||||
@@ -1539,11 +1537,9 @@ tty_keys_colours(struct tty *tty, const char *buf, size_t len, size_t *size)
 | 
			
		||||
	if (n != -1 && buf[3] == '0') {
 | 
			
		||||
		log_debug("%s: foreground is %s", c->name, colour_tostring(n));
 | 
			
		||||
		tty->fg = n;
 | 
			
		||||
		tty->flags |= TTY_HAVEFG;
 | 
			
		||||
	} else if (n != -1) {
 | 
			
		||||
		log_debug("%s: background is %s", c->name, colour_tostring(n));
 | 
			
		||||
		tty->bg = n;
 | 
			
		||||
		tty->flags |= TTY_HAVEBG;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								tty.c
									
									
									
									
									
								
							@@ -82,6 +82,7 @@ static void	tty_check_overlay_range(struct tty *, u_int, u_int, u_int,
 | 
			
		||||
#define TTY_BLOCK_STOP(tty) (1 + ((tty)->sx * (tty)->sy) / 8)
 | 
			
		||||
 | 
			
		||||
#define TTY_QUERY_TIMEOUT 5
 | 
			
		||||
#define TTY_REQUEST_LIMIT 30
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_create_log(void)
 | 
			
		||||
@@ -369,12 +370,29 @@ tty_send_requests(struct tty *tty)
 | 
			
		||||
			tty_puts(tty, "\033[>c");
 | 
			
		||||
		if (~tty->flags & TTY_HAVEXDA)
 | 
			
		||||
			tty_puts(tty, "\033[>q");
 | 
			
		||||
		if (~tty->flags & TTY_HAVEFG)
 | 
			
		||||
		tty_puts(tty, "\033]10;?\033\\");
 | 
			
		||||
		if (~tty->flags & TTY_HAVEBG)
 | 
			
		||||
		tty_puts(tty, "\033]11;?\033\\");
 | 
			
		||||
	} else
 | 
			
		||||
		tty->flags |= TTY_ALL_REQUEST_FLAGS;
 | 
			
		||||
	tty->last_requests = time (NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_repeat_requests(struct tty *tty)
 | 
			
		||||
{
 | 
			
		||||
	time_t	t = time (NULL);
 | 
			
		||||
 | 
			
		||||
	if (~tty->flags & TTY_STARTED)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (t - tty->last_requests <= TTY_REQUEST_LIMIT)
 | 
			
		||||
		return;
 | 
			
		||||
	tty->last_requests = t;
 | 
			
		||||
 | 
			
		||||
	if (tty->term->flags & TERM_VT100LIKE) {
 | 
			
		||||
		tty_puts(tty, "\033]10;?\033\\");
 | 
			
		||||
		tty_puts(tty, "\033]11;?\033\\");
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user