mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Be more specific in the DSR we are looking for so it doesn't get
confused with mouse sequences. Also set a flag and don't bother checking for it if we have already seen it (same for DA), and don't check if we never asked for it.
This commit is contained in:
		
							
								
								
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1227,6 +1227,8 @@ struct tty {
 | 
			
		||||
#define TTY_OPENED 0x20
 | 
			
		||||
#define TTY_FOCUS 0x40
 | 
			
		||||
#define TTY_BLOCK 0x80
 | 
			
		||||
#define TTY_HAVEDA 0x100
 | 
			
		||||
#define TTY_HAVEDSR 0x200
 | 
			
		||||
	int		 flags;
 | 
			
		||||
 | 
			
		||||
	struct tty_term	*term;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								tty-keys.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								tty-keys.c
									
									
									
									
									
								
							@@ -1020,6 +1020,8 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len,
 | 
			
		||||
	int		 flags = 0;
 | 
			
		||||
 | 
			
		||||
	*size = 0;
 | 
			
		||||
	if (tty->flags & TTY_HAVEDA)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	/* First three bytes are always \033[?. */
 | 
			
		||||
	if (buf[0] != '\033')
 | 
			
		||||
@@ -1064,7 +1066,10 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len,
 | 
			
		||||
	for (i = 1; i < n; i++)
 | 
			
		||||
		log_debug("%s: DA feature: %d", c->name, p[i]);
 | 
			
		||||
	log_debug("%s: received DA %.*s", c->name, (int)*size, buf);
 | 
			
		||||
 | 
			
		||||
	tty_set_flags(tty, flags);
 | 
			
		||||
	tty->flags |= TTY_HAVEDA;
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1082,6 +1087,8 @@ tty_keys_device_status_report(struct tty *tty, const char *buf, size_t len,
 | 
			
		||||
	int		 flags = 0;
 | 
			
		||||
 | 
			
		||||
	*size = 0;
 | 
			
		||||
	if (tty->flags & TTY_HAVEDSR)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	/* First three bytes are always \033[. */
 | 
			
		||||
	if (buf[0] != '\033')
 | 
			
		||||
@@ -1092,6 +1099,10 @@ tty_keys_device_status_report(struct tty *tty, const char *buf, size_t len,
 | 
			
		||||
		return (-1);
 | 
			
		||||
	if (len == 2)
 | 
			
		||||
		return (1);
 | 
			
		||||
	if (buf[2] != 'I')
 | 
			
		||||
		return (-1);
 | 
			
		||||
	if (len == 3)
 | 
			
		||||
		return (1);
 | 
			
		||||
 | 
			
		||||
	/* Copy the rest up to a 'n'. */
 | 
			
		||||
	for (i = 0; i < (sizeof tmp) - 1 && buf[2 + i] != 'n'; i++) {
 | 
			
		||||
@@ -1108,6 +1119,9 @@ tty_keys_device_status_report(struct tty *tty, const char *buf, size_t len,
 | 
			
		||||
	if (strncmp(tmp, "ITERM2 ", 7) == 0)
 | 
			
		||||
		flags |= TERM_DECSLRM;
 | 
			
		||||
	log_debug("%s: received DSR %.*s", c->name, (int)*size, buf);
 | 
			
		||||
 | 
			
		||||
	tty_set_flags(tty, flags);
 | 
			
		||||
	tty->flags |= TTY_HAVEDSR;
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								tty.c
									
									
									
									
									
								
							@@ -327,8 +327,9 @@ tty_start_tty(struct tty *tty)
 | 
			
		||||
			tty->flags |= TTY_FOCUS;
 | 
			
		||||
			tty_puts(tty, "\033[?1004h");
 | 
			
		||||
		}
 | 
			
		||||
		tty_puts(tty, "\033[c\033[1337n");
 | 
			
		||||
	}
 | 
			
		||||
		tty_puts(tty, "\033[c\033[1337n"); /* DA and DSR */
 | 
			
		||||
	} else
 | 
			
		||||
		tty->flags |= (TTY_HAVEDA|TTY_HAVEDSR);
 | 
			
		||||
 | 
			
		||||
	tty->flags |= TTY_STARTED;
 | 
			
		||||
	tty_invalidate(tty);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user