aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/cli/cli-decode.c5
-rw-r--r--gdb/command.h2
-rw-r--r--gdb/completer.c17
-rw-r--r--gdb/testsuite/ChangeLog4
-rw-r--r--gdb/testsuite/gdb.base/completion.exp13
6 files changed, 42 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 983bbdb..05b6f66 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2012-11-20 Mike Frysinger <vapier@gentoo.org>
+
+ * cli/cli-decode.c (complete_on_cmdlist): Add a fourth arg and check
+ it when looking at ptr->func.
+ * command.h (complete_on_cmdlist): Add a fourth arg.
+ * completer.c (complete_line_internal): Add local ignore_help_classes,
+ and set it to 1 when reason is not handle_help. Pass this down to
+ lookup_cmd_1 and complete_on_cmdlist.
+
2012-11-20 Tom Tromey <tromey@redhat.com>
* completer.c (count_struct_fields): Remove.
diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
index 6e0f0de..3de01d5 100644
--- a/gdb/cli/cli-decode.c
+++ b/gdb/cli/cli-decode.c
@@ -1726,7 +1726,8 @@ lookup_cmd_composition (char *text,
"oobar"; if WORD is "baz/foo", return "baz/foobar". */
VEC (char_ptr) *
-complete_on_cmdlist (struct cmd_list_element *list, char *text, char *word)
+complete_on_cmdlist (struct cmd_list_element *list, char *text, char *word,
+ int ignore_help_classes)
{
struct cmd_list_element *ptr;
VEC (char_ptr) *matchlist = NULL;
@@ -1743,7 +1744,7 @@ complete_on_cmdlist (struct cmd_list_element *list, char *text, char *word)
for (ptr = list; ptr; ptr = ptr->next)
if (!strncmp (ptr->name, text, textlen)
&& !ptr->abbrev_flag
- && (ptr->func
+ && (!ignore_help_classes || ptr->func
|| ptr->prefixlist))
{
char *match;
diff --git a/gdb/command.h b/gdb/command.h
index b88bd8b..8eb86ba 100644
--- a/gdb/command.h
+++ b/gdb/command.h
@@ -216,7 +216,7 @@ extern struct cmd_list_element *add_info (char *,
extern struct cmd_list_element *add_info_alias (char *, char *, int);
extern VEC (char_ptr) *complete_on_cmdlist (struct cmd_list_element *,
- char *, char *);
+ char *, char *, int);
extern VEC (char_ptr) *complete_on_enum (const char *const *enumlist,
char *, char *);
diff --git a/gdb/completer.c b/gdb/completer.c
index 0815711..4d6b0d1 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -501,6 +501,7 @@ complete_line_internal (const char *text,
{
VEC (char_ptr) *list = NULL;
char *tmp_command, *p;
+ int ignore_help_classes;
/* Pointer within tmp_command which corresponds to text. */
char *word;
struct cmd_list_element *c, *result_list;
@@ -520,6 +521,9 @@ complete_line_internal (const char *text,
tmp_command = (char *) alloca (point + 1);
p = tmp_command;
+ /* The help command should complete help aliases. */
+ ignore_help_classes = reason != handle_help;
+
strncpy (tmp_command, line_buffer, point);
tmp_command[point] = '\0';
/* Since text always contains some number of characters leading up
@@ -536,7 +540,7 @@ complete_line_internal (const char *text,
}
else
{
- c = lookup_cmd_1 (&p, cmdlist, &result_list, 1);
+ c = lookup_cmd_1 (&p, cmdlist, &result_list, ignore_help_classes);
}
/* Move p up to the next interesting thing. */
@@ -577,12 +581,13 @@ complete_line_internal (const char *text,
{
if (reason != handle_brkchars)
list = complete_on_cmdlist (*result_list->prefixlist, p,
- word);
+ word, ignore_help_classes);
}
else
{
if (reason != handle_brkchars)
- list = complete_on_cmdlist (cmdlist, p, word);
+ list = complete_on_cmdlist (cmdlist, p, word,
+ ignore_help_classes);
}
/* Ensure that readline does the right thing with respect to
inserting quotes. */
@@ -608,7 +613,8 @@ complete_line_internal (const char *text,
/* It is a prefix command; what comes after it is
a subcommand (e.g. "info "). */
if (reason != handle_brkchars)
- list = complete_on_cmdlist (*c->prefixlist, p, word);
+ list = complete_on_cmdlist (*c->prefixlist, p, word,
+ ignore_help_classes);
/* Ensure that readline does the right thing
with respect to inserting quotes. */
@@ -679,7 +685,8 @@ complete_line_internal (const char *text,
}
if (reason != handle_brkchars)
- list = complete_on_cmdlist (result_list, q, word);
+ list = complete_on_cmdlist (result_list, q, word,
+ ignore_help_classes);
/* Ensure that readline does the right thing
with respect to inserting quotes. */
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 04821e6..907bec3 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2012-11-20 Mike Frysinger <vapier@gentoo.org>
+
+ * gdb.base/completion.exp: Add test for help aliases completion.
+
2012-11-20 Yao Qi <yao@codesourcery.com>
* gdb.mi/mi-cmd-param-changed.exp (test_command_param_changed):
diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index 8b1facb..80f7032 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -389,6 +389,19 @@ gdb_test_multiple "" "$test" {
}
}
+set test "complete help aliases"
+send_gdb "help user-define\t"
+gdb_test_multiple "" "$test" {
+ -re "^help user-defined $" {
+ send_gdb "\n"
+ gdb_test_multiple "" "$test" {
+ -re "$gdb_prompt $" {
+ pass "$test"
+ }
+ }
+ }
+}
+
# These tests used to try completing the shorter "p b-a".
# Unfortunately, on some systems, there are .o files in system