gdb: include help aliases in help command completion
There are a bunch of aliases that get used with help, but the current command completion logic does not include those when doing completions. Since the framework is already mostly in place, extend complete_on_cmdlist slightly to pass down the ignore_help_classes flag like is done with the existing lookup command logic. Now you can do: (gdb) help use<tab> and get back: (gdb) help user-defined Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
ec6632d76b
commit
ace2195744
|
@ -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>
|
2012-11-20 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* completer.c (count_struct_fields): Remove.
|
* completer.c (count_struct_fields): Remove.
|
||||||
|
|
|
@ -1726,7 +1726,8 @@ lookup_cmd_composition (char *text,
|
||||||
"oobar"; if WORD is "baz/foo", return "baz/foobar". */
|
"oobar"; if WORD is "baz/foo", return "baz/foobar". */
|
||||||
|
|
||||||
VEC (char_ptr) *
|
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;
|
struct cmd_list_element *ptr;
|
||||||
VEC (char_ptr) *matchlist = NULL;
|
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)
|
for (ptr = list; ptr; ptr = ptr->next)
|
||||||
if (!strncmp (ptr->name, text, textlen)
|
if (!strncmp (ptr->name, text, textlen)
|
||||||
&& !ptr->abbrev_flag
|
&& !ptr->abbrev_flag
|
||||||
&& (ptr->func
|
&& (!ignore_help_classes || ptr->func
|
||||||
|| ptr->prefixlist))
|
|| ptr->prefixlist))
|
||||||
{
|
{
|
||||||
char *match;
|
char *match;
|
||||||
|
|
|
@ -216,7 +216,7 @@ extern struct cmd_list_element *add_info (char *,
|
||||||
extern struct cmd_list_element *add_info_alias (char *, char *, int);
|
extern struct cmd_list_element *add_info_alias (char *, char *, int);
|
||||||
|
|
||||||
extern VEC (char_ptr) *complete_on_cmdlist (struct cmd_list_element *,
|
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,
|
extern VEC (char_ptr) *complete_on_enum (const char *const *enumlist,
|
||||||
char *, char *);
|
char *, char *);
|
||||||
|
|
|
@ -501,6 +501,7 @@ complete_line_internal (const char *text,
|
||||||
{
|
{
|
||||||
VEC (char_ptr) *list = NULL;
|
VEC (char_ptr) *list = NULL;
|
||||||
char *tmp_command, *p;
|
char *tmp_command, *p;
|
||||||
|
int ignore_help_classes;
|
||||||
/* Pointer within tmp_command which corresponds to text. */
|
/* Pointer within tmp_command which corresponds to text. */
|
||||||
char *word;
|
char *word;
|
||||||
struct cmd_list_element *c, *result_list;
|
struct cmd_list_element *c, *result_list;
|
||||||
|
@ -520,6 +521,9 @@ complete_line_internal (const char *text,
|
||||||
tmp_command = (char *) alloca (point + 1);
|
tmp_command = (char *) alloca (point + 1);
|
||||||
p = tmp_command;
|
p = tmp_command;
|
||||||
|
|
||||||
|
/* The help command should complete help aliases. */
|
||||||
|
ignore_help_classes = reason != handle_help;
|
||||||
|
|
||||||
strncpy (tmp_command, line_buffer, point);
|
strncpy (tmp_command, line_buffer, point);
|
||||||
tmp_command[point] = '\0';
|
tmp_command[point] = '\0';
|
||||||
/* Since text always contains some number of characters leading up
|
/* Since text always contains some number of characters leading up
|
||||||
|
@ -536,7 +540,7 @@ complete_line_internal (const char *text,
|
||||||
}
|
}
|
||||||
else
|
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. */
|
/* Move p up to the next interesting thing. */
|
||||||
|
@ -577,12 +581,13 @@ complete_line_internal (const char *text,
|
||||||
{
|
{
|
||||||
if (reason != handle_brkchars)
|
if (reason != handle_brkchars)
|
||||||
list = complete_on_cmdlist (*result_list->prefixlist, p,
|
list = complete_on_cmdlist (*result_list->prefixlist, p,
|
||||||
word);
|
word, ignore_help_classes);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (reason != handle_brkchars)
|
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
|
/* Ensure that readline does the right thing with respect to
|
||||||
inserting quotes. */
|
inserting quotes. */
|
||||||
|
@ -608,7 +613,8 @@ complete_line_internal (const char *text,
|
||||||
/* It is a prefix command; what comes after it is
|
/* It is a prefix command; what comes after it is
|
||||||
a subcommand (e.g. "info "). */
|
a subcommand (e.g. "info "). */
|
||||||
if (reason != handle_brkchars)
|
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
|
/* Ensure that readline does the right thing
|
||||||
with respect to inserting quotes. */
|
with respect to inserting quotes. */
|
||||||
|
@ -679,7 +685,8 @@ complete_line_internal (const char *text,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reason != handle_brkchars)
|
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
|
/* Ensure that readline does the right thing
|
||||||
with respect to inserting quotes. */
|
with respect to inserting quotes. */
|
||||||
|
|
|
@ -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>
|
2012-11-20 Yao Qi <yao@codesourcery.com>
|
||||||
|
|
||||||
* gdb.mi/mi-cmd-param-changed.exp (test_command_param_changed):
|
* gdb.mi/mi-cmd-param-changed.exp (test_command_param_changed):
|
||||||
|
|
|
@ -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".
|
# These tests used to try completing the shorter "p b-a".
|
||||||
# Unfortunately, on some systems, there are .o files in system
|
# Unfortunately, on some systems, there are .o files in system
|
||||||
|
|
Loading…
Reference in New Issue