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:
Nicholas Marriott
2009-07-26 21:42:08 +00:00
parent 55d8c01c33
commit 639fbe0392
5 changed files with 22 additions and 4 deletions

View File

@@ -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;
}