From 272d4594343349a713f7d8967d90ae2413ecbc30 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 13 Jun 2019 00:06:53 +0100 Subject: Introduce complete_nested_command_line This adds a completion helper routine that makes it possible for a command that takes another command as argument, such as "frame apply all COMMAND" as "thread apply all COMMAND", to complete on COMMAND, and have the completion machinery recurse and complete COMMAND as if you tried to complete "(gdb) COMMAND". I.e., we'll be able to complete like this, for example: (gdb) thread apply all -[TAB] -c -ascending -q -s (gdb) thread apply all -ascending frame apply all -[TAB] -c -limit -past-entry -past-main -q -s (gdb) thread apply all -ascending frame apply all -past-main print -[TAB] -address -elements -pretty -symbol -array -null-stop -repeats -union -array-indexes -object -static-members -vtbl (gdb) thread apply all -ascending frame apply all -past-main print glo[TAB] global1 global2 Above, the completer function understands that "thread apply all" is a command, and then parses "-ascending" successfully and understand that the rest of the string is "thread apply all"'s operand. And then, the process repeats for the "frame apply" command, and on and on. gdb/ChangeLog: 2019-06-13 Pedro Alves * completer.c (complete_nested_command_line): New. (gdb_completion_word_break_characters_throw): Add assertion. * completer.h (complete_nested_command_line): Declare. --- gdb/completer.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'gdb/completer.h') diff --git a/gdb/completer.h b/gdb/completer.h index 58fe84f..9f8ec47 100644 --- a/gdb/completer.h +++ b/gdb/completer.h @@ -611,6 +611,18 @@ extern completion_list complete_source_filenames (const char *text); extern void complete_expression (completion_tracker &tracker, const char *text, const char *word); +/* Called by custom word point completers that want to recurse into + the completion machinery to complete a command. Used to complete + COMMAND in "thread apply all COMMAND", for example. Note that + unlike command_completer, this fully recurses into the proper + completer for COMMAND, so that e.g., + + (gdb) thread apply all print -[TAB] + + does the right thing and show the print options. */ +extern void complete_nested_command_line (completion_tracker &tracker, + const char *text); + extern const char *skip_quoted_chars (const char *, const char *, const char *); -- cgit v1.1