aboutsummaryrefslogtreecommitdiff
path: root/gdb/tui/tui-io.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-09-03 15:23:48 -0600
committerTom Tromey <tom@tromey.com>2018-10-06 15:51:37 -0600
commit7a9569281a63e472750e3b7b481e2cdf5c931ed8 (patch)
tree24ee6e5c881e52c52de13a530b0ce65b80447b06 /gdb/tui/tui-io.c
parente04caa70901ed44eb9537ccdbd286fe9b0a46ce2 (diff)
downloadgdb-7a9569281a63e472750e3b7b481e2cdf5c931ed8.zip
gdb-7a9569281a63e472750e3b7b481e2cdf5c931ed8.tar.gz
gdb-7a9569281a63e472750e3b7b481e2cdf5c931ed8.tar.bz2
Call nonl before wgetch in TUI
PR tui/28819 points out that, in the TUI, the C-j and C-m keys cannot be bound differently in one's ~/.inputrc. However, this works in other readline applications. The bug is that the TUI uses curses' "nl" mode, which causes wgetch to return the same value for both keys. There is a "nonl" mode, but it also affects output. This patch fixes the bug by arranging to call nonl before reading a key and then nl afterward. This avoids any potential problem with changing the output if gdb was to use nonl globally. gdb/ChangeLog 2018-10-06 Tom Tromey <tom@tromey.com> PR tui/28819: * tui/tui-io.c (gdb_wgetch): New function. (tui_mld_getc, tui_getc): Use it.
Diffstat (limited to 'gdb/tui/tui-io.c')
-rw-r--r--gdb/tui/tui-io.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c
index c7df50a..4476151 100644
--- a/gdb/tui/tui-io.c
+++ b/gdb/tui/tui-io.c
@@ -412,6 +412,21 @@ tui_mld_beep (const struct match_list_displayer *displayer)
beep ();
}
+/* A wrapper for wgetch that enters nonl mode. We We normally want
+ curses' "nl" mode, but when reading from the user, we'd like to
+ differentiate between C-j and C-m, because some users bind these
+ keys differently in their .inputrc. So, put curses into nonl mode
+ just when reading from the user. See PR tui/20819. */
+
+static int
+gdb_wgetch (WINDOW *win)
+{
+ nonl ();
+ int r = wgetch (win);
+ nl ();
+ return r;
+}
+
/* Helper function for tui_mld_read_key.
This temporarily replaces tui_getc for use during tab-completion
match list display. */
@@ -420,7 +435,7 @@ static int
tui_mld_getc (FILE *fp)
{
WINDOW *w = TUI_CMD_WIN->generic.handle;
- int c = wgetch (w);
+ int c = gdb_wgetch (w);
return c;
}
@@ -612,7 +627,7 @@ tui_getc (FILE *fp)
tui_readline_output (0, 0);
#endif
- ch = wgetch (w);
+ ch = gdb_wgetch (w);
/* The \n must be echoed because it will not be printed by
readline. */
@@ -659,7 +674,7 @@ tui_getc (FILE *fp)
int ch_pending;
nodelay (w, TRUE);
- ch_pending = wgetch (w);
+ ch_pending = gdb_wgetch (w);
nodelay (w, FALSE);
/* If we have pending input following a start sequence, call the stdin