aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2023-10-20 14:20:35 +0100
committerAndrew Burgess <aburgess@redhat.com>2023-11-08 11:18:39 +0000
commit7f51f2cd5866d485898fd4b60827fa3643252b71 (patch)
tree530a97d88bb5c7d1fddcb0f0523d2ec805953a9a
parentf3a8a979bbed4f9462761638a57136fcb38bad68 (diff)
downloadbinutils-7f51f2cd5866d485898fd4b60827fa3643252b71.zip
binutils-7f51f2cd5866d485898fd4b60827fa3643252b71.tar.gz
binutils-7f51f2cd5866d485898fd4b60827fa3643252b71.tar.bz2
gdb: make skip_over_slash_fmt available outside printcmd.c
Move the function skip_over_slash_fmt into completer.c, and make it extern, with a declaration in completer.h. This is a refactor in order to support the next commit. I've not changed any of the code in skip_over_slash_fmt. There should be no user visible changes after this commit.
-rw-r--r--gdb/completer.c53
-rw-r--r--gdb/completer.h17
-rw-r--r--gdb/printcmd.c65
3 files changed, 70 insertions, 65 deletions
diff --git a/gdb/completer.c b/gdb/completer.c
index 8942a3f..d5799c0 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -2991,6 +2991,59 @@ gdb_display_match_list (char **matches, int len, int max,
}
}
+/* See completer.h. */
+
+bool
+skip_over_slash_fmt (completion_tracker &tracker, const char **args)
+{
+ const char *text = *args;
+
+ if (text[0] == '/')
+ {
+ bool in_fmt;
+ tracker.set_use_custom_word_point (true);
+
+ if (text[1] == '\0')
+ {
+ /* The user tried to complete after typing just the '/' character
+ of the /FMT string. Step the completer past the '/', but we
+ don't offer any completions. */
+ in_fmt = true;
+ ++text;
+ }
+ else
+ {
+ /* The user has typed some characters after the '/', we assume
+ this is a complete /FMT string, first skip over it. */
+ text = skip_to_space (text);
+
+ if (*text == '\0')
+ {
+ /* We're at the end of the input string. The user has typed
+ '/FMT' and asked for a completion. Push an empty
+ completion string, this will cause readline to insert a
+ space so the user now has '/FMT '. */
+ in_fmt = true;
+ tracker.add_completion (make_unique_xstrdup (text));
+ }
+ else
+ {
+ /* The user has already typed things after the /FMT, skip the
+ whitespace and return false. Whoever called this function
+ should then try to complete what comes next. */
+ in_fmt = false;
+ text = skip_spaces (text);
+ }
+ }
+
+ tracker.advance_custom_word_point_by (text - *args);
+ *args = text;
+ return in_fmt;
+ }
+
+ return false;
+}
+
void _initialize_completer ();
void
_initialize_completer ()
diff --git a/gdb/completer.h b/gdb/completer.h
index 67d2fbf..d96c4b5 100644
--- a/gdb/completer.h
+++ b/gdb/completer.h
@@ -657,6 +657,23 @@ extern const char *skip_quoted_chars (const char *, const char *,
extern const char *skip_quoted (const char *);
+/* Called from command completion function to skip over /FMT
+ specifications, allowing the rest of the line to be completed. Returns
+ true if the /FMT is at the end of the current line and there is nothing
+ left to complete, otherwise false is returned.
+
+ In either case *ARGS can be updated to point after any part of /FMT that
+ is present.
+
+ This function is designed so that trying to complete '/' will offer no
+ completions, the user needs to insert the format specification
+ themselves. Trying to complete '/FMT' (where FMT is any non-empty set
+ of alpha-numeric characters) will cause readline to insert a single
+ space, setting the user up to enter the expression. */
+
+extern bool skip_over_slash_fmt (completion_tracker &tracker,
+ const char **args);
+
/* Maximum number of candidates to consider before the completer
bails by throwing MAX_COMPLETIONS_REACHED_ERROR. Negative values
disable limiting. */
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 06cc531..c5e6a81 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -1380,71 +1380,6 @@ print_command_1 (const char *args, int voidprint)
}
}
-/* Called from command completion function to skip over /FMT
- specifications, allowing the rest of the line to be completed. Returns
- true if the /FMT is at the end of the current line and there is nothing
- left to complete, otherwise false is returned.
-
- In either case *ARGS can be updated to point after any part of /FMT that
- is present.
-
- This function is designed so that trying to complete '/' will offer no
- completions, the user needs to insert the format specification
- themselves. Trying to complete '/FMT' (where FMT is any non-empty set
- of alpha-numeric characters) will cause readline to insert a single
- space, setting the user up to enter the expression. */
-
-static bool
-skip_over_slash_fmt (completion_tracker &tracker, const char **args)
-{
- const char *text = *args;
-
- if (text[0] == '/')
- {
- bool in_fmt;
- tracker.set_use_custom_word_point (true);
-
- if (text[1] == '\0')
- {
- /* The user tried to complete after typing just the '/' character
- of the /FMT string. Step the completer past the '/', but we
- don't offer any completions. */
- in_fmt = true;
- ++text;
- }
- else
- {
- /* The user has typed some characters after the '/', we assume
- this is a complete /FMT string, first skip over it. */
- text = skip_to_space (text);
-
- if (*text == '\0')
- {
- /* We're at the end of the input string. The user has typed
- '/FMT' and asked for a completion. Push an empty
- completion string, this will cause readline to insert a
- space so the user now has '/FMT '. */
- in_fmt = true;
- tracker.add_completion (make_unique_xstrdup (text));
- }
- else
- {
- /* The user has already typed things after the /FMT, skip the
- whitespace and return false. Whoever called this function
- should then try to complete what comes next. */
- in_fmt = false;
- text = skip_spaces (text);
- }
- }
-
- tracker.advance_custom_word_point_by (text - *args);
- *args = text;
- return in_fmt;
- }
-
- return false;
-}
-
/* See valprint.h. */
void