aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog19
-rw-r--r--gdb/doc/ChangeLog5
-rw-r--r--gdb/doc/gdb.texinfo12
-rw-r--r--gdb/inflow.c36
-rw-r--r--gdb/top.c38
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
diff --git a/gdb/top.c b/gdb/top.c
index bba1a2d..d14f308 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -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."),