[vte] Bug 543379 – VTE sends NUL/^@ for backspace
- From: Behdad Esfahbod <behdad src gnome org>
- To: svn-commits-list gnome org
- Subject: [vte] Bug 543379 – VTE sends NUL/^@ for backspace
- Date: Sat, 30 May 2009 14:06:45 -0400 (EDT)
commit 33f265a9e3397126bd9f1b210c38bd54ea9a1ddb
Author: Behdad Esfahbod <behdad behdad org>
Date: Sat May 30 14:04:42 2009 -0400
Bug 543379 â?? VTE sends NUL/^@ for backspace
Add VTE_ERASE_TTY. Also make AUTO send \H if terminal erase is undefined.
---
doc/reference/tmpl/vte.sgml | 1 +
src/vte.c | 41 +++++++++++++++++++++++++++++++++--------
src/vte.h | 3 ++-
3 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/doc/reference/tmpl/vte.sgml b/doc/reference/tmpl/vte.sgml
index ec3ba28..76f5ff2 100644
--- a/doc/reference/tmpl/vte.sgml
+++ b/doc/reference/tmpl/vte.sgml
@@ -397,6 +397,7 @@ keys.
@VTE_ERASE_ASCII_BACKSPACE: Send an ASCII backspace character (0x08).
@VTE_ERASE_ASCII_DELETE: Send an ASCII delete character (0x7F).
@VTE_ERASE_DELETE_SEQUENCE: Send the "@@7" control sequence.
+ VTE_ERASE_TTY: Send terminal's "erase" setting.
<!-- ##### ENUM VteTerminalCursorShape ##### -->
<para>
diff --git a/src/vte.c b/src/vte.c
index 5bc7e58..656eacd 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -4957,16 +4957,32 @@ vte_terminal_key_press(GtkWidget *widget, GdkEventKey *event)
special = "kD";
suppress_meta_esc = TRUE;
break;
- /* Use the tty's erase character. */
+ case VTE_ERASE_TTY:
+ if (terminal->pvt->pty_master != -1 &&
+ tcgetattr(terminal->pvt->pty_master, &tio) != -1)
+ {
+ normal = g_strdup_printf("%c", tio.c_cc[VERASE]);
+ normal_length = 1;
+ }
+ suppress_meta_esc = FALSE;
+ break;
case VTE_ERASE_AUTO:
default:
- if (terminal->pvt->pty_master != -1) {
- if (tcgetattr(terminal->pvt->pty_master,
- &tio) != -1) {
- normal = g_strdup_printf("%c",
- tio.c_cc[VERASE]);
- normal_length = 1;
- }
+#ifndef _POSIX_VDISABLE
+#define _POSIX_VDISABLE '\0'
+#endif
+ if (terminal->pvt->pty_master != -1 &&
+ tcgetattr(terminal->pvt->pty_master, &tio) != -1 &&
+ tio.c_cc[VERASE] != _POSIX_VDISABLE)
+ {
+ normal = g_strdup_printf("%c", tio.c_cc[VERASE]);
+ normal_length = 1;
+ }
+ else
+ {
+ normal = g_strdup("");
+ normal_length = 1;
+ suppress_meta_esc = FALSE;
}
suppress_meta_esc = FALSE;
break;
@@ -4984,6 +5000,15 @@ vte_terminal_key_press(GtkWidget *widget, GdkEventKey *event)
normal = g_strdup("\177");
normal_length = 1;
break;
+ case VTE_ERASE_TTY:
+ if (terminal->pvt->pty_master != -1 &&
+ tcgetattr(terminal->pvt->pty_master, &tio) != -1)
+ {
+ normal = g_strdup_printf("%c", tio.c_cc[VERASE]);
+ normal_length = 1;
+ }
+ suppress_meta_esc = FALSE;
+ break;
case VTE_ERASE_DELETE_SEQUENCE:
case VTE_ERASE_AUTO:
default:
diff --git a/src/vte.h b/src/vte.h
index d49164e..8ecb406 100644
--- a/src/vte.h
+++ b/src/vte.h
@@ -158,7 +158,8 @@ typedef enum {
VTE_ERASE_AUTO,
VTE_ERASE_ASCII_BACKSPACE,
VTE_ERASE_ASCII_DELETE,
- VTE_ERASE_DELETE_SEQUENCE
+ VTE_ERASE_DELETE_SEQUENCE,
+ VTE_ERASE_TTY
} VteTerminalEraseBinding;
/* Values for the cursor blink setting */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]