mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00:00 
			
		
		
		
	Detect backspace by looking at termios VERASE and translate it into \177 (which
matches screen's behaviour if not its termcap/terminfo entry). The terminfo kbs cap is often wrong or missing so it can't be used, and just assuming \177 may be wrong.
This commit is contained in:
		
							
								
								
									
										12
									
								
								tty-keys.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								tty-keys.c
									
									
									
									
									
								
							@@ -20,6 +20,8 @@
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <termios.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include "tmux.h"
 | 
			
		||||
 | 
			
		||||
@@ -235,6 +237,7 @@ tty_keys_next(struct tty *tty, int *key, u_char *mouse)
 | 
			
		||||
	struct timeval	 tv;
 | 
			
		||||
	char		*buf;
 | 
			
		||||
	size_t		 len, size;
 | 
			
		||||
	cc_t		 bspace;
 | 
			
		||||
 | 
			
		||||
	buf = BUFFER_OUT(tty->in);
 | 
			
		||||
	len = BUFFER_USED(tty->in);
 | 
			
		||||
@@ -245,6 +248,15 @@ tty_keys_next(struct tty *tty, int *key, u_char *mouse)
 | 
			
		||||
	/* If a normal key, return it. */
 | 
			
		||||
	if (*buf != '\033') {
 | 
			
		||||
		*key = buffer_read8(tty->in);
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * Check for backspace key using termios VERASE - the terminfo
 | 
			
		||||
		 * kbs entry is extremely unreliable, so cannot be safely
 | 
			
		||||
		 * used. termios should have a better idea.
 | 
			
		||||
		 */
 | 
			
		||||
		bspace = tty->tio.c_cc[VERASE];
 | 
			
		||||
		if (bspace != _POSIX_VDISABLE && *key == bspace)
 | 
			
		||||
			*key = KEYC_BSPACE;
 | 
			
		||||
		goto found;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user