summaryrefslogtreecommitdiff
path: root/gdb/completer.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2008-07-11 15:07:52 +0000
committerTom Tromey <tromey@redhat.com>2008-07-11 15:07:52 +0000
commit8968e8efcfc6eb81f73c04d0d29be5b91bf0191e (patch)
tree4158726907ac551d5d7b2734e6a77d1294e442dd /gdb/completer.c
parent71ec2d11c4ae225cbb442ab2429ad84349608fca (diff)
downloadgdb-8968e8efcfc6eb81f73c04d0d29be5b91bf0191e.tar.gz
gdb
* completer.c (complete_line_internal): New function, from complete_line. Add 'for_help' parameter. (complete_line): Use it. (command_completer): Move later. Rewrite. gdb/testsuite * gdb.base/completion.exp: Add 'help' completion test.
Diffstat (limited to 'gdb/completer.c')
-rw-r--r--gdb/completer.c41
1 files changed, 29 insertions, 12 deletions
diff --git a/gdb/completer.c b/gdb/completer.c
index 62f0b694fa3..e7ee817aa89 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -429,14 +429,6 @@ expression_completer (char *text, char *word)
return location_completer (p, word);
}
-/* Complete on command names. Used by "help". */
-char **
-command_completer (char *text, char *word)
-{
- return complete_on_cmdlist (cmdlist, text, word);
-}
-
-
/* Here are some useful test cases for completion. FIXME: These should
be put in the test suite. They should be tested with both M-? and TAB.
@@ -467,10 +459,16 @@ command_completer (char *text, char *word)
LINE_BUFFER is available to be looked at; it contains the entire text
of the line. POINT is the offset in that line of the cursor. You
- should pretend that the line ends at POINT. */
-
-char **
-complete_line (const char *text, char *line_buffer, int point)
+ should pretend that the line ends at POINT.
+
+ FOR_HELP is true when completing a 'help' command. In this case,
+ once sub-command completions are exhausted, we simply return NULL.
+ When FOR_HELP is false, we will call a sub-command's completion
+ function. */
+
+static char **
+complete_line_internal (const char *text, char *line_buffer, int point,
+ int for_help)
{
char **list = NULL;
char *tmp_command, *p;
@@ -583,6 +581,8 @@ complete_line (const char *text, char *line_buffer, int point)
rl_completer_word_break_characters =
gdb_completer_command_word_break_characters;
}
+ else if (for_help)
+ list = NULL;
else if (c->enums)
{
list = complete_on_enum (c->enums, p, word);
@@ -650,6 +650,8 @@ complete_line (const char *text, char *line_buffer, int point)
gdb_completer_command_word_break_characters;
}
}
+ else if (for_help)
+ list = NULL;
else
{
/* There is non-whitespace beyond the command. */
@@ -695,6 +697,21 @@ complete_line (const char *text, char *line_buffer, int point)
return list;
}
+/* Like complete_line_internal, but always passes 0 for FOR_HELP. */
+
+char **
+complete_line (const char *text, char *line_buffer, int point)
+{
+ return complete_line_internal (text, line_buffer, point, 0);
+}
+
+/* Complete on command names. Used by "help". */
+char **
+command_completer (char *text, char *word)
+{
+ return complete_line_internal (word, text, strlen (text), 1);
+}
+
/* Generate completions one by one for the completer. Each time we are
called return another potential completion to the caller.
line_completion just completes on commands or passes the buck to the