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.
This commit is contained in:
parent
e04caa7090
commit
7a9569281a
|
@ -1,3 +1,9 @@
|
|||
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.
|
||||
|
||||
2018-10-05 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* sol-thread.c (sol_thread_target::wait): Rename inner
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue