mirror of
https://github.com/tmux/tmux.git
synced 2025-09-03 14:27:09 +00:00
Sync OpenBSD patchset 184:
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:
14
tty-keys.c
14
tty-keys.c
@ -1,4 +1,4 @@
|
||||
/* $Id: tty-keys.c,v 1.28 2009-07-22 16:24:59 tcunha Exp $ */
|
||||
/* $Id: tty-keys.c,v 1.29 2009-07-28 22:37:02 tcunha Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -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