aboutsummaryrefslogtreecommitdiff
path: root/tty-keys.c
diff options
context:
space:
mode:
authorTiago Cunha <tcunha@gmx.com>2009-07-28 22:37:02 +0000
committerTiago Cunha <tcunha@gmx.com>2009-07-28 22:37:02 +0000
commit361801aaaa4f68768f7f45695c51bbe5a1acee2b (patch)
tree575efc02cb16abad18f951092daf963abaceb2a8 /tty-keys.c
parent2aa4d473121520167962756c5323865c73607186 (diff)
downloadrtmux-361801aaaa4f68768f7f45695c51bbe5a1acee2b.tar.gz
rtmux-361801aaaa4f68768f7f45695c51bbe5a1acee2b.tar.bz2
rtmux-361801aaaa4f68768f7f45695c51bbe5a1acee2b.zip
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.
Diffstat (limited to 'tty-keys.c')
-rw-r--r--tty-keys.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/tty-keys.c b/tty-keys.c
index c094e361..62ecced8 100644
--- a/tty-keys.c
+++ b/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;
}