/* General functions for the WDB TUI.
- Copyright (C) 1998-2019 Free Software Foundation, Inc.
+ Copyright (C) 1998-2020 Free Software Foundation, Inc.
Contributed by Hewlett-Packard Company.
#include "tui/tui-regs.h"
#include "tui/tui-stack.h"
#include "tui/tui-win.h"
+#include "tui/tui-wingeneral.h"
#include "tui/tui-winsource.h"
#include "tui/tui-source.h"
#include "target.h"
/* TUI readline command.
Change the TUI layout to show a next layout.
This function is bound to CTRL-X 2. It is intended to provide
- a functionality close to the Emacs split-window command. We
- always show two windows (src+asm), (src+regs) or (asm+regs). */
+ a functionality close to the Emacs split-window command. */
static int
tui_rl_change_windows (int notused1, int notused2)
{
tui_rl_switch_mode (0 /* notused */, 0 /* notused */);
if (tui_active)
- {
- enum tui_layout_type new_layout;
-
- new_layout = tui_current_layout ();
+ tui_next_layout ();
- /* Select a new layout to have a rolling layout behavior with
- always two windows (except when undefined). */
- switch (new_layout)
- {
- case SRC_COMMAND:
- new_layout = SRC_DISASSEM_COMMAND;
- break;
-
- case DISASSEM_COMMAND:
- new_layout = SRC_DISASSEM_COMMAND;
- break;
-
- case SRC_DATA_COMMAND:
- new_layout = SRC_DISASSEM_COMMAND;
- break;
-
- case SRC_DISASSEM_COMMAND:
- new_layout = DISASSEM_DATA_COMMAND;
- break;
-
- case DISASSEM_DATA_COMMAND:
- new_layout = SRC_DATA_COMMAND;
- break;
-
- default:
- new_layout = SRC_COMMAND;
- break;
- }
- tui_set_layout (new_layout);
- }
return 0;
}
tui_rl_switch_mode (0 /* notused */, 0 /* notused */);
if (tui_active)
- {
- enum tui_layout_type new_layout;
-
- new_layout = tui_current_layout ();
+ tui_remove_some_windows ();
- /* Kill one window. */
- switch (new_layout)
- {
- case SRC_COMMAND:
- case SRC_DATA_COMMAND:
- case SRC_DISASSEM_COMMAND:
- default:
- new_layout = SRC_COMMAND;
- break;
-
- case DISASSEM_COMMAND:
- case DISASSEM_DATA_COMMAND:
- new_layout = DISASSEM_COMMAND;
- break;
- }
- tui_set_layout (new_layout);
- }
return 0;
}
/* Initialize readline and configure the keymap for the switching
key shortcut. */
void
-tui_initialize_readline (void)
+tui_ensure_readline_initialized ()
{
+ static bool initialized;
+
+ if (initialized)
+ return;
+ initialized = true;
+
int i;
Keymap tui_ctlx_keymap;
rl_bind_key_in_map ('q', tui_rl_next_keymap, tui_keymap);
rl_bind_key_in_map ('s', tui_rl_next_keymap, emacs_ctlx_keymap);
rl_bind_key_in_map ('s', tui_rl_next_keymap, tui_ctlx_keymap);
+
+ /* Initialize readline after the above. */
+ rl_initialize ();
}
/* Return the TERM variable from the environment, or "<unset>"
/* Don't try to setup curses (and print funny control
characters) if we're not outputting to a terminal. */
- if (!ui_file_isatty (gdb_stdout))
+ if (!gdb_stderr->isatty ())
error (_("Cannot enable the TUI when output is not a terminal"));
s = newterm (NULL, stdout, stdin);
def_prog_mode ();
tui_show_frame_info (0);
- tui_set_layout (SRC_COMMAND);
+ tui_set_initial_layout ();
tui_set_win_focus_to (TUI_SRC_WIN);
keypad (TUI_CMD_WIN->handle.get (), TRUE);
wrefresh (TUI_CMD_WIN->handle.get ());
clearok (stdscr, TRUE);
}
- /* Install the TUI specific hooks. */
- tui_install_hooks ();
- rl_startup_hook = tui_rl_startup_hook;
-
if (tui_update_variables ())
tui_rehighlight_all ();
else
tui_display_main ();
+ /* Install the TUI specific hooks. This must be done after the call to
+ tui_display_main so that we don't detect the symtab changed event it
+ can cause. */
+ tui_install_hooks ();
+ rl_startup_hook = tui_rl_startup_hook;
+
/* Restore TUI keymap. */
tui_set_key_mode (tui_current_key_mode);
void
tui_show_assembly (struct gdbarch *gdbarch, CORE_ADDR addr)
{
+ tui_suppress_output suppress;
tui_add_win_to_layout (DISASSEM_WIN);
tui_update_source_windows_with_addr (gdbarch, addr);
}
return true;
}
+void _initialize_tui ();
void
-_initialize_tui (void)
+_initialize_tui ()
{
struct cmd_list_element **tuicmd;
tuicmd = tui_get_cmd_list ();
add_cmd ("enable", class_tui, tui_enable_command,
- _("Enable TUI display mode."),
+ _("Enable TUI display mode.\n\
+Usage: tui enable"),
tuicmd);
add_cmd ("disable", class_tui, tui_disable_command,
- _("Disable TUI display mode."),
+ _("Disable TUI display mode.\n\
+Usage: tui disable"),
tuicmd);
}