aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2011-01-21 18:56:43 +0000
committerJoel Brobecker <brobecker@gnat.com>2011-01-21 18:56:43 +0000
commit7bfc943420917444b86391e4f7bf96e79150aa21 (patch)
treeab4656f486c19164b41f5f6d55822ada3ef5ccd4
parent6da78614a34009388ab8af71cd26f59a451d486a (diff)
downloadfsf-binutils-gdb-7bfc943420917444b86391e4f7bf96e79150aa21.zip
fsf-binutils-gdb-7bfc943420917444b86391e4f7bf96e79150aa21.tar.gz
fsf-binutils-gdb-7bfc943420917444b86391e4f7bf96e79150aa21.tar.bz2
move handing of "set interactive-mode" to gdb_has_a_terminal
The real purpose of this setting is really to override what the debugger would otherwise guess from checking the stdin settings. So it seems more natural to see this setting being handled inside gdb_has_a_terminal rather than input_is_terminal (which checks for other things, such as whether the input is stdin, for instance). This patch also adjust the command help and the associated section in the GDB Manual to be a little clearer about that. gdb/ChangeLog: * 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. gdb/doc/ChangeLog: * gdb.texinfo (Other Misc Settings): Rework part of the documentation of the "set interactive mode" command.
-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."),