Patchwork Give a name to the TUI SingleKey keymap

login
register
mail settings
Submitter Tom Tromey
Date Sept. 11, 2019, 12:43 a.m.
Message ID <20190911004352.24819-1-tom@tromey.com>
Download mbox | patch
Permalink /patch/34495/
State New
Headers show

Comments

Tom Tromey - Sept. 11, 2019, 12:43 a.m.
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(-)
Eli Zaretskii - Sept. 11, 2019, 2:39 a.m.
> 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.

Patch

diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 53b7de91e47..5d82155a3b0 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -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
diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c
index db34e0c0441..5d6b9f32036 100644
--- a/gdb/tui/tui.c
+++ b/gdb/tui/tui.c
@@ -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 ();