diff options
-rw-r--r-- | gdb/ChangeLog | 19 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 12 | ||||
-rw-r--r-- | gdb/inflow.c | 36 | ||||
-rw-r--r-- | gdb/top.c | 38 |
5 files changed, 68 insertions, 42 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0ab1295..0e430d1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,22 @@ +2011-01-21 Joel Brobecker <brobecker@adacore.com> + + * inflow.c: Include "gdbcmd.h". + (interactive_mode): New static global, moved here from top.c. + (show_interactive_mode): New function, moved here from top.c. + use gdb_has_a_terminal instead of input_from_terminal_p to + determine the current mode. + (gdb_has_a_terminal): Add handling of the "iteractive-mode" + setting. + (_initialize_inflow): Add the "set/show interactive-mode" + commands. Moved here from top.c, after having adjusted slightly + the help text. + * top.c (interactive_mode, show_interactive_mode): Delete, moved + to inflow.c. + (input_from_terminal_p): Remove handling of "interactive-mode" + setting, moved to infow.c. + (init_main): Remove creation of the "set/show interactive-mode" + commands, moved to inflow.c. + 2011-01-19 Joel Brobecker <brobecker@adacore.com> * NEWS: Add entry for native ia64-hpux support. diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 25c4758..f926ebc 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2011-01-21 Joel Brobecker <brobecker@adacore.com> + + * gdb.texinfo (Other Misc Settings): Rework part of the + documentation of the "set interactive mode" command. + 2011-01-19 Tom Tromey <tromey@redhat.com> * gdb.texinfo (Threads): Document thread name output and `thread diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 4da4e55..cc2391b 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -20040,10 +20040,14 @@ Displays the current state of XML debugging messages. @table @code @kindex set interactive-mode @item set interactive-mode -If @code{on}, forces @value{GDBN} to operate interactively. -If @code{off}, forces @value{GDBN} to operate non-interactively, -If @code{auto} (the default), @value{GDBN} guesses which mode to use, -based on whether the debugger was started in a terminal or not. +If @code{on}, forces @value{GDBN} to assume that GDB was started +in a terminal. In practice, this means that @value{GDBN} should wait +for the user to answer queries generated by commands entered at +the command prompt. If @code{off}, forces @value{GDBN} to operate +in the opposite mode, and it uses the default answers to all queries. +If @code{auto} (the default), @value{GDBN} tries to determine whether +its standard input is a terminal, and works in interactive-mode if it +is, non-interactively otherwise. In the vast majority of cases, the debugger should be able to guess correctly which mode should be used. But this setting can be useful diff --git a/gdb/inflow.c b/gdb/inflow.c index 65f48ba..859c74e 100644 --- a/gdb/inflow.c +++ b/gdb/inflow.c @@ -34,6 +34,7 @@ #include "gdb_select.h" #include "inflow.h" +#include "gdbcmd.h" #ifdef HAVE_SYS_IOCTL_H #include <sys/ioctl.h> @@ -141,10 +142,31 @@ enum } gdb_has_a_terminal_flag = have_not_checked; +/* The value of the "interactive-mode" setting. */ +static enum auto_boolean interactive_mode = AUTO_BOOLEAN_AUTO; + +/* Implement the "show interactive-mode" option. */ + +static void +show_interactive_mode (struct ui_file *file, int from_tty, + struct cmd_list_element *c, + const char *value) +{ + if (interactive_mode == AUTO_BOOLEAN_AUTO) + fprintf_filtered (file, "Debugger's interactive mode " + "is %s (currently %s).\n", + value, gdb_has_a_terminal () ? "on" : "off"); + else + fprintf_filtered (file, "Debugger's interactive mode is %s.\n", value); +} + /* Does GDB have a terminal (on stdin)? */ int gdb_has_a_terminal (void) { + if (interactive_mode != AUTO_BOOLEAN_AUTO) + return interactive_mode = AUTO_BOOLEAN_TRUE; + switch (gdb_has_a_terminal_flag) { case yes: @@ -853,6 +875,20 @@ _initialize_inflow (void) add_info ("terminal", term_info, _("Print inferior's saved terminal status.")); + add_setshow_auto_boolean_cmd ("interactive-mode", class_support, + &interactive_mode, _("\ +Set whether GDB's standard input is a terminal."), _("\ +Show whether GDB's standard input is a terminal."), _("\ +If on, GDB assumes that standard input is a terminal. In practice, it\n\ +means that GDB should wait for the user to answer queries associated to\n\ +commands entered at the command prompt. If off, GDB assumes that standard\n\ +input is not a terminal, and uses the default answer to all queries.\n\ +If auto (the default), determine which mode to use based on the standard\n\ +input settings."), + NULL, + show_interactive_mode, + &setlist, &showlist); + terminal_is_ours = 1; /* OK, figure out whether we have job control. If neither termios nor @@ -1263,38 +1263,12 @@ quit_force (char *args, int from_tty) exit (exit_code); } -/* If OFF, the debugger will run in non-interactive mode, which means - that it will automatically select the default answer to all the - queries made to the user. If ON, gdb will wait for the user to - answer all queries. If AUTO, gdb will determine whether to run - in interactive mode or not depending on whether stdin is a terminal - or not. */ -static enum auto_boolean interactive_mode = AUTO_BOOLEAN_AUTO; - -/* Implement the "show interactive-mode" option. */ - -static void -show_interactive_mode (struct ui_file *file, int from_tty, - struct cmd_list_element *c, - const char *value) -{ - if (interactive_mode == AUTO_BOOLEAN_AUTO) - fprintf_filtered (file, "Debugger's interactive mode " - "is %s (currently %s).\n", - value, input_from_terminal_p () ? "on" : "off"); - else - fprintf_filtered (file, "Debugger's interactive mode is %s.\n", value); -} - /* Returns whether GDB is running on a terminal and input is currently coming from that terminal. */ int input_from_terminal_p (void) { - if (interactive_mode != AUTO_BOOLEAN_AUTO && instream == stdin) - return interactive_mode == AUTO_BOOLEAN_TRUE; - if (batch_flag) return 0; @@ -1627,18 +1601,6 @@ Use \"on\" to enable the notification, and \"off\" to disable it."), show_exec_done_display_p, &setlist, &showlist); - add_setshow_auto_boolean_cmd ("interactive-mode", class_support, - &interactive_mode, _("\ -Set whether GDB should run in interactive mode or not"), _("\ -Show whether GDB runs in interactive mode"), _("\ -If on, run in interactive mode and wait for the user to answer\n\ -all queries. If off, run in non-interactive mode and automatically\n\ -assume the default answer to all queries. If auto (the default),\n\ -determine which mode to use based on the standard input settings"), - NULL, - show_interactive_mode, - &setlist, &showlist); - add_setshow_filename_cmd ("data-directory", class_maintenance, &gdb_datadir, _("Set GDB's data directory."), _("Show GDB's data directory."), |