mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-23 13:21:43 +08:00
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.
This commit is contained in:
parent
f3a8a979bb
commit
7f51f2cd58
@ -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 ()
|
||||
|
@ -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. */
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user