Give a name to the TUI SingleKey keymap
Commit Message
Readline 8.0 has a feature that lets an application name a keymap.
This in turn makes it simpler for users to bind keys in keymaps in
their .inputrc.
This patch gives a name to the TUI SingleKey keymap, so that
additional bindings can be made there. For example:
$if gdb
set keymap SingleKey
"X": "echo hello\\n\n"
$endif
The call to rl_initialize, in tui_initialize_readline, had to be
removed so that .inputrc was not read too early. Note that Readline
explicitly documents that this call is not needed.
gdb/ChangeLog
2019-09-10 Tom Tromey <tom@tromey.com>
* tui/tui.c (tui_initialize_readline): Set name of keymap. Do not
call rl_initialize.
(tui_enable): Do not call rl_initialize.
gdb/doc/ChangeLog
2019-09-10 Tom Tromey <tom@tromey.com>
* gdb.texinfo (Editing): Document readline application name.
(TUI Single Key Mode): Document TUI SingleKey keymap name.
---
gdb/ChangeLog | 6 ++++++
gdb/doc/ChangeLog | 5 +++++
gdb/doc/gdb.texinfo | 6 ++++++
gdb/tui/tui.c | 9 ++++++---
4 files changed, 23 insertions(+), 3 deletions(-)
Comments
> From: Tom Tromey <tom@tromey.com>
> Cc: Tom Tromey <tom@tromey.com>
> Date: Tue, 10 Sep 2019 18:43:52 -0600
>
> Readline 8.0 has a feature that lets an application name a keymap.
> This in turn makes it simpler for users to bind keys in keymaps in
> their .inputrc.
>
> This patch gives a name to the TUI SingleKey keymap, so that
> additional bindings can be made there. For example:
>
> $if gdb
> set keymap SingleKey
> "X": "echo hello\\n\n"
> $endif
>
> The call to rl_initialize, in tui_initialize_readline, had to be
> removed so that .inputrc was not read too early. Note that Readline
> explicitly documents that this call is not needed.
The documentation part is OK, but please add index entries to the new
information, so that it could be easily found if someone forgets the
details.
Also, should this be in NEWS?
Thanks.
@@ -24975,6 +24975,9 @@ for more details about the Readline
interface. Users unfamiliar with @sc{gnu} Emacs or @code{vi} are
encouraged to read that chapter.
+@value{GDBN} sets the Readline application name to @samp{gdb}. This
+is useful for conditions in @file{.inputrc}.
+
@node Command History
@section Command History
@cindex command history
@@ -27577,6 +27580,9 @@ with the TUI SingleKey mode. Once the command is entered the TUI
SingleKey mode is restored. The only way to permanently leave
this mode is by typing @kbd{q} or @kbd{C-x s}.
+If @value{GDBN} was built with Readline 8.0 or later, the TUI
+SingleKey keymap will be named @samp{SingleKey}. This can be used in
+@file{.inputrc} to add additional bindings to this keymap.
@node TUI Commands
@section TUI-specific Commands
@@ -329,13 +329,17 @@ tui_initialize_readline (void)
int i;
Keymap tui_ctlx_keymap;
- rl_initialize ();
-
rl_add_defun ("tui-switch-mode", tui_rl_switch_mode, -1);
rl_add_defun ("gdb-command", tui_rl_command_key, -1);
rl_add_defun ("next-keymap", tui_rl_next_keymap, -1);
tui_keymap = rl_make_bare_keymap ();
+
+ /* The named keymap feature was added in Readline 8.0. */
+#if RL_READLINE_VERSION >= 0x800
+ rl_set_keymap_name ("SingleKey", tui_keymap);
+#endif
+
tui_ctlx_keymap = rl_make_bare_keymap ();
tui_readline_standard_keymap = rl_get_keymap ();
@@ -467,7 +471,6 @@ tui_enable (void)
nodelay(w, FALSE);
nl();
keypad (w, TRUE);
- rl_initialize ();
tui_set_term_height_to (LINES);
tui_set_term_width_to (COLS);
def_prog_mode ();