mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 01:34:18 +00:00 
			
		
		
		
	Do not create a buffer from an OSC 52 response if we have not sent a
query.
This commit is contained in:
		@@ -225,7 +225,7 @@ cmd_refresh_client_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (args_has(args, 'l')) {
 | 
			
		||||
		tty_putcode_ptr2(&tc->tty, TTYC_MS, "", "?");
 | 
			
		||||
		tty_send_osc52_query(&tc->tty);
 | 
			
		||||
		return (CMD_RETURN_NORMAL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1277,6 +1277,7 @@ LIST_HEAD(tty_terms, tty_term);
 | 
			
		||||
struct tty {
 | 
			
		||||
	struct client	*client;
 | 
			
		||||
	struct event	 start_timer;
 | 
			
		||||
	struct event	 query_timer;
 | 
			
		||||
 | 
			
		||||
	u_int		 sx;
 | 
			
		||||
	u_int		 sy;
 | 
			
		||||
@@ -1320,7 +1321,7 @@ struct tty {
 | 
			
		||||
#define TTY_NOBLOCK 0x8
 | 
			
		||||
#define TTY_STARTED 0x10
 | 
			
		||||
#define TTY_OPENED 0x20
 | 
			
		||||
/* 0x40 unused */
 | 
			
		||||
#define TTY_OSC52QUERY 0x40
 | 
			
		||||
#define TTY_BLOCK 0x80
 | 
			
		||||
#define TTY_HAVEDA 0x100
 | 
			
		||||
#define TTY_HAVEXDA 0x200
 | 
			
		||||
@@ -2173,6 +2174,7 @@ void	tty_reset(struct tty *);
 | 
			
		||||
void	tty_region_off(struct tty *);
 | 
			
		||||
void	tty_margin_off(struct tty *);
 | 
			
		||||
void	tty_cursor(struct tty *, u_int, u_int);
 | 
			
		||||
void	tty_send_osc52_query(struct tty *);
 | 
			
		||||
void	tty_putcode(struct tty *, enum tty_code_code);
 | 
			
		||||
void	tty_putcode1(struct tty *, enum tty_code_code, int);
 | 
			
		||||
void	tty_putcode2(struct tty *, enum tty_code_code, int, int);
 | 
			
		||||
 
 | 
			
		||||
@@ -1217,6 +1217,11 @@ tty_keys_clipboard(__unused struct tty *tty, const char *buf, size_t len,
 | 
			
		||||
	buf++;
 | 
			
		||||
	end--;
 | 
			
		||||
 | 
			
		||||
	/* If we did not request this, ignore it. */
 | 
			
		||||
	if (~tty->flags & TTY_OSC52QUERY)
 | 
			
		||||
		return (0);
 | 
			
		||||
	tty->flags &= ~TTY_OSC52QUERY;
 | 
			
		||||
 | 
			
		||||
	/* It has to be a string so copy it. */
 | 
			
		||||
	copy = xmalloc(end + 1);
 | 
			
		||||
	memcpy(copy, buf, end);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								tty.c
									
									
									
									
									
								
							@@ -83,6 +83,8 @@ static void	tty_check_overlay_range(struct tty *, u_int, u_int, u_int,
 | 
			
		||||
#define TTY_BLOCK_START(tty) (1 + ((tty)->sx * (tty)->sy) * 8)
 | 
			
		||||
#define TTY_BLOCK_STOP(tty) (1 + ((tty)->sx * (tty)->sy) / 8)
 | 
			
		||||
 | 
			
		||||
#define TTY_QUERY_TIMEOUT 5
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_create_log(void)
 | 
			
		||||
{
 | 
			
		||||
@@ -307,7 +309,7 @@ tty_start_tty(struct tty *tty)
 | 
			
		||||
{
 | 
			
		||||
	struct client	*c = tty->client;
 | 
			
		||||
	struct termios	 tio;
 | 
			
		||||
	struct timeval	 tv = { .tv_sec = 3 };
 | 
			
		||||
	struct timeval	 tv = { .tv_sec = TTY_QUERY_TIMEOUT };
 | 
			
		||||
 | 
			
		||||
	setblocking(c->fd, 0);
 | 
			
		||||
	event_add(&tty->event_in, NULL);
 | 
			
		||||
@@ -2917,3 +2919,26 @@ tty_default_attributes(struct tty *tty, const struct grid_cell *defaults,
 | 
			
		||||
	gc.bg = bg;
 | 
			
		||||
	tty_attributes(tty, &gc, defaults, palette);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
tty_query_timer_callback(__unused int fd, __unused short events, void *data)
 | 
			
		||||
{
 | 
			
		||||
	struct tty	*tty = data;
 | 
			
		||||
 | 
			
		||||
	tty->flags &= ~TTY_OSC52QUERY;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tty_send_osc52_query(struct tty *tty)
 | 
			
		||||
{
 | 
			
		||||
	struct timeval	 tv = { .tv_sec = TTY_QUERY_TIMEOUT };
 | 
			
		||||
 | 
			
		||||
	if ((~tty->flags & TTY_STARTED) || (tty->flags & TTY_OSC52QUERY))
 | 
			
		||||
		return;
 | 
			
		||||
	tty_putcode_ptr2(tty, TTYC_MS, "", "?");
 | 
			
		||||
	tty->flags |= TTY_OSC52QUERY;
 | 
			
		||||
 | 
			
		||||
	evtimer_set(&tty->query_timer, tty_query_timer_callback, tty);
 | 
			
		||||
	evtimer_add(&tty->query_timer, &tv);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user