diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 983bbdb547..05b6f66dea 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2012-11-20 Mike Frysinger + + * 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 * completer.c (count_struct_fields): Remove. diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index 6e0f0dee47..3de01d5836 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 b88bd8b7e8..8eb86ba84b 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 0815711fdb..4d6b0d1c7e 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 04821e64d8..907bec3660 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-11-20 Mike Frysinger + + * gdb.base/completion.exp: Add test for help aliases completion. + 2012-11-20 Yao Qi * 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 8b1facb1ab..80f703251c 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