25#include "gdbsupport/gdb_signals.h"
41#include "readline/readline.h"
55 gdb::unique_xmalloc_ptr<char> lcd)
82 return strcmp (
m_name.get (), str) == 0;
88 return htab_hash_string (
m_name.get ());
94 gdb::unique_xmalloc_ptr<char>
m_name;
97 gdb::unique_xmalloc_ptr<char>
m_lcd;
163" \t\n!@#$%^&*()+=|~`}{[]\"';:?/><,";
172#ifdef HAVE_DOS_BASED_FILE_SYSTEM
197 const char *text,
const char *
prefix)
206 const char *text,
const char *word)
213 gdb::unique_xmalloc_ptr<char> p_rl
214 (rl_filename_completion_function (text, subsequent_name));
224 const char *p = p_rl.get ();
225 if (p[strlen (p) - 1] ==
'~')
237 rl_completer_word_break_characters =
"";
247 const char *text,
const char *word)
277 const char *line_buffer)
279 int scan, end, delimiter, pass_next, isbrk;
281 const char *brkchars;
282 int point = strlen (line_buffer);
299 brkchars = info->word_break_characters;
301 if (info->quote_characters != NULL)
306 for (
scan = pass_next = 0;
320 if (quote_char !=
'\'' && line_buffer[
scan] ==
'\\')
326 if (quote_char !=
'\0')
330 if (line_buffer[
scan] == quote_char)
338 else if (strchr (info->quote_characters, line_buffer[
scan]))
341 quote_char = line_buffer[
scan];
347 if (point == end && quote_char ==
'\0')
354 scan = line_buffer[point];
356 if (strchr (brkchars,
scan) != 0)
362 scan = line_buffer[point];
366 isbrk = strchr (brkchars,
scan) != 0;
372 if (info->basic_quote_characters
373 && strchr (info->basic_quote_characters,
scan)
374 && (end - point) > 1)
386 return line_buffer + point;
395 const char *word_break_characters,
400 info.word_break_characters = word_break_characters;
402 info.basic_quote_characters = rl_basic_quote_characters;
449 if (
strncmp_iw (word, lcd, strlen (lcd)) == 0)
452 size_t wordlen = strlen (word);
453 if (word[wordlen - 1] ==
' ')
475 int quote_char =
'\0';
505 const char *text,
const char *word)
510 int quoted = *text ==
'\'' || *text ==
'"';
511 int quote_char =
'\0';
512 const char *colon = NULL;
513 char *file_to_match = NULL;
514 const char *symbol_start = text;
515 const char *orig_text = text;
518 for (p = text; *p !=
'\0'; ++p)
520 if (*p ==
'\\' && p[1] ==
'\'')
522 else if (*p ==
'\'' || *p ==
'"')
526 while (*p !=
'\0' && *p != quote_found)
528 if (*p ==
'\\' && p[1] == quote_found)
533 if (*p == quote_found)
538#if HAVE_DOS_BASED_FILE_SYSTEM
542 else if (p < text + 3 && *p ==
':' && p == text + 1 + quoted)
545 else if (*p ==
':' && !colon)
548 symbol_start = p + 1;
551 symbol_start = p + 1;
562 file_to_match = (
char *)
xmalloc (colon - text + 1);
563 strncpy (file_to_match, text, colon - text);
564 file_to_match[colon - text] =
'\0';
566 for (s = file_to_match + (colon - text);
569 if (*s ==
':' || *s == quote_char)
582 xfree (file_to_match);
586 size_t text_len = strlen (text);
616 for (
const auto &fn_up: fn_list)
618 char *fn = fn_up.get ();
619 memmove (fn, fn + (word - text), strlen (fn) + 1 - (word - text));
641 size_t text_len = strlen (text);
702 return string != NULL ? string :
"";
719 bool needs_arg =
true;
763 gdb_assert_not_reached (
"unhandled explicit_location_match_type");
777 size_t wordlen = strlen (word);
778 const char *
keyword = word + wordlen;
780 if (wordlen > 0 &&
keyword[-1] !=
' ')
796 else if (wordlen > 0 &&
keyword[-1] ==
' ')
817 const char *
const *keywords,
const char **text_p)
819 const char *text = *text_p;
820 const char *after = skip_to_space (text);
821 size_t len = after - text;
823 if (text[len] !=
' ')
827 for (
int i = 0; keywords[i] != NULL; i++)
829 if (strncmp (keywords[i], text, len) == 0)
860 const char *quoted_arg_start,
861 const char *quoted_arg_end)
880 if (quoted_arg_start != NULL && quoted_arg_end != NULL)
882 if (quoted_arg_end[1] ==
'\0')
904 else if (quoted_arg_end[1] ==
' ')
929 const char *text,
const char * )
931 int found_probe_option = -1;
937 if (text[0] ==
'-' && text[1] ==
'p')
940 const char *option_text = text;
943 const char *copy = text;
998 else if (locspec !=
nullptr)
1031 if ((text[0] ==
'-' || text[0] ==
'\0')
1038 if (found_probe_option == -1)
1051 const char *word_ignored)
1062 const char *text,
const char *word)
1065 std::unique_ptr<expr_completion_base> expr_completer;
1073 catch (
const gdb_exception_error &except)
1079 gdb_assert ((exp ==
nullptr) == (expr_completer ==
nullptr));
1080 if (expr_completer !=
nullptr
1081 && expr_completer->complete (exp.get (), tracker))
1094 const char *text,
const char *word)
1104 rl_completer_word_break_characters = (
char *) break_chars;
1112 const char *text,
const char *word)
1179 const char *command,
const char *word,
1180 const char *cmd_args,
1184 const char *p = cmd_args;
1214 brkchars_fn (c, tracker, p, word);
1235 const char *line_buffer,
int point,
1240 int ignore_help_classes;
1257 tmp_command = (
char *) alloca (point + 1);
1263 strncpy (tmp_command, line_buffer, point);
1264 tmp_command[point] =
'\0';
1267 gdb_assert (text == NULL);
1275 word = tmp_command + point - strlen (text);
1279 p = skip_spaces (p);
1293 while (*p ==
' ' || *p ==
'\t')
1314 if (q != tmp_command + point)
1330 word, ignore_help_classes);
1336 ignore_help_classes);
1348 if (p == tmp_command + point)
1353 if (p[-1] ==
' ' || p[-1] ==
'\t')
1363 ignore_help_classes);
1384 tmp_command, word, p,
1398 while (q > tmp_command)
1411 ignore_help_classes);
1439 tmp_command, word, p,
1452 const char *line_buffer,
int point,
1459 catch (
const gdb_exception_error &except)
1461 if (except.error != MAX_COMPLETIONS_REACHED_ERROR)
1471#define INITIAL_COMPLETION_HTAB_SIZE 200
1497 static auto entry_eq_func
1498 = [] (
const void *first,
const void *second) ->
int
1504 const char *name_str = (
const char *) second;
1506 return entry->is_name_eq (name_str);
1511 static auto entry_hash_func
1512 = [] (
const void *arg) -> hashval_t
1516 return entry->hash_name ();
1521 entry_hash_func, entry_eq_func,
1522 htab_delete_entry<completion_hash_entry>,
1537 (gdb::unique_xmalloc_ptr<char>
name,
1539 const char *text,
const char *word)
1549 hashval_t hash = htab_hash_string (
name.get ());
1552 if (*slot == HTAB_EMPTY_ENTRY)
1554 const char *match_for_lcd_str = NULL;
1556 if (match_for_lcd != NULL)
1557 match_for_lcd_str = match_for_lcd->
finish ();
1559 if (match_for_lcd_str == NULL)
1560 match_for_lcd_str =
name.get ();
1562 gdb::unique_xmalloc_ptr<char> lcd
1565 size_t lcd_len = strlen (lcd.get ());
1581 const char *text,
const char *word)
1584 throw_error (MAX_COMPLETIONS_REACHED_ERROR, _(
"Max completions reached."));
1592 for (
auto &candidate : list)
1601 hashval_t hash = htab_hash_string (
name);
1616 const char *text,
const char *word)
1626 else if (word > text)
1629 newobj = xstrdup (match_name + (word - text));
1634 size_t len = strlen (match_name);
1635 newobj = (
char *)
xmalloc (text - word + len + 1);
1636 memcpy (newobj, word, text - word);
1637 memcpy (newobj + (text - word), match_name, len + 1);
1645gdb::unique_xmalloc_ptr<char>
1647 const char *text,
const char *word)
1651 newobj = xstrdup (match_name);
1652 return gdb::unique_xmalloc_ptr<char> (newobj);
1657gdb::unique_xmalloc_ptr<char>
1659 const char *text,
const char *word)
1663 return std::move (match_name);
1664 return gdb::unique_xmalloc_ptr<char> (newobj);
1670complete (
const char *line,
char const **word,
int *quote_char)
1681 *word = line + strlen (line);
1693 tracker = &tracker_handle_brkchars;
1696 complete_line (tracker_handle_completions, *word, line, strlen (line));
1697 tracker = &tracker_handle_completions;
1700 catch (
const gdb_exception &ex)
1723 const char *text,
const char *line_buffer,
int point)
1736 const char *text,
const char *word)
1747 const char *text,
const char *word)
1758 const char *text,
const char *word)
1760 size_t len = strlen (word);
1762 const char *signame;
1764 for (signum = GDB_SIGNAL_FIRST; signum != GDB_SIGNAL_LAST; ++signum)
1767 if (signum == GDB_SIGNAL_0)
1770 signame = gdb_signal_to_name ((
enum gdb_signal) signum);
1773 if (!signame || strcmp (signame,
"?") == 0)
1776 if (strncasecmp (signame, word, len) == 0)
1796 const char *text,
const char *word,
1797 reg_completer_targets targets)
1799 size_t len = strlen (word);
1815 if (*
name !=
'\0' && strncmp (word,
name, len) == 0)
1824 name = group->name ();
1825 if (strncmp (word,
name, len) == 0)
1836 const char *text,
const char *word)
1848 const char *text,
const char *word)
1859 const char *text,
const char *word)
1915 gdb_assert (rl_point >= 0 && rl_point < strlen (rl_line_buffer));
1919 rl_completer_quote_characters = NULL;
1931 rl_basic_quote_characters = NULL;
1934 return (
char *) (
char *) rl_completer_word_break_characters;
1947 catch (
const gdb_exception &ex)
1963 size_t point = strlen (text);
1978 info.basic_quote_characters = rl_basic_quote_characters;
2002 const char *new_match = entry->get_lcd ();
2005 (new_match[i] !=
'\0'
2034 = [] (
void **slot,
void *info) ->
int
2085 const char *p_orig = orig;
2086 const char *orig_end = orig + orig_len;
2087 const char *p_lcd = lcd;
2090 while (p_orig < orig_end)
2094 while (p_orig < orig_end && *p_orig ==
' ')
2096 p_lcd = skip_spaces (p_lcd);
2113 while (*p_lcd !=
'\0')
2116 return xstrdup (res.c_str ());
2127 if (element_count == 0)
2131 char **match_list = XNEWVEC (
char *, 1 + element_count + 1);
2147 match_list[0] = reconcat (match_list[0], match_list[0],
2148 buf, (
char *) NULL);
2149 match_list[1] = NULL;
2154 char *match = match_list[0];
2155 bool completion_suppress_append
2157 || (match[0] !=
'\0'
2158 && match[strlen (match) - 1] ==
' '));
2167 list_builder (
char **ml)
2178 list_builder builder (match_list);
2183 = [] (
void **slot,
void *info) ->
int
2186 list_builder *state = (list_builder *) info;
2188 state->match_list[state->index] = entry->release_name ();
2195 match_list[builder.index] = NULL;
2204 : match_list (NULL), number_matches (0),
2205 completion_suppress_append (false)
2211 size_t number_matches_,
2212 bool completion_suppress_append_)
2213 : match_list (match_list_),
2214 number_matches (number_matches_),
2215 completion_suppress_append (completion_suppress_append_)
2228 : match_list (rhs.match_list),
2229 number_matches (rhs.number_matches)
2231 rhs.match_list = NULL;
2232 rhs.number_matches = 0;
2312 rl_line_buffer, rl_point);
2338 rl_attempted_completion_over = 1;
2349 catch (
const gdb_exception &ex)
2364 const char *breakchars)
2366 char quote_char =
'\0';
2369 if (quotechars == NULL)
2372 if (breakchars == NULL)
2377 if (quote_char !=
'\0')
2380 if (*
scan == quote_char)
2387 else if (strchr (quotechars, *
scan))
2392 else if (strchr (breakchars, *
scan))
2417 return _(
"*** List may be truncated, max-completions reached. ***");
2437#if defined (HANDLE_MULTIBYTE)
2438#define MB_INVALIDCH(x) ((x) == (size_t)-1 || (x) == (size_t)-2)
2439#define MB_NULLWCH(x) ((x) == 0)
2442#define ELLIPSIS_LEN 3
2457 RL_SETSTATE (RL_STATE_MOREINPUT);
2458 c = displayer->
read_key (displayer);
2459 RL_UNSETSTATE (RL_STATE_MOREINPUT);
2461 if (c ==
'y' || c ==
'Y' || c ==
' ')
2463 if (c ==
'n' || c ==
'N' || c == RUBOUT)
2465 if (c == ABORT_CHAR || c < 0)
2474 if (for_pager && (c == NEWLINE || c == RETURN))
2476 if (for_pager && (c ==
'q' || c ==
'Q'))
2478 displayer->
beep (displayer);
2496 displayer->
puts (displayer,
"--More--");
2497 displayer->
flush (displayer);
2516 return (stat (filename, &finfo) == 0 && S_ISDIR (finfo.st_mode));
2535 if (rl_filename_completion_desired == 0)
2538 temp = strrchr (pathname,
'/');
2539#if defined (__MSDOS__)
2540 if (temp == 0 && ISALPHA ((
unsigned char)pathname[0]) && pathname[1] ==
':')
2541 temp = pathname + 1;
2544 if (temp == 0 || *temp ==
'\0')
2550 else if (temp[1] ==
'\0')
2552 for (x = temp - 1; x > pathname; x--)
2555 return ((*x ==
'/') ? x + 1 : pathname);
2568#if defined (HANDLE_MULTIBYTE)
2574 left = strlen (
string) + 1;
2575 memset (&ps, 0,
sizeof (mbstate_t));
2581 if (
CTRL_CHAR (
string[pos]) ||
string[pos] == RUBOUT)
2588#if defined (HANDLE_MULTIBYTE)
2589 clen = mbrtowc (&wc,
string + pos, left - pos, &ps);
2590 if (MB_INVALIDCH (clen))
2594 memset (&ps, 0,
sizeof (mbstate_t));
2596 else if (MB_NULLWCH (clen))
2602 width += (w >= 0) ? w : 1;
2624#if defined (HANDLE_MULTIBYTE)
2631 end = to_print + strlen (to_print) + 1;
2632 memset (&ps, 0,
sizeof (mbstate_t));
2639 if (to_print[prefix_bytes] ==
'\0')
2646 ellipsis = (to_print[prefix_bytes] ==
'.') ?
'_' :
'.';
2648 displayer->
putch (displayer, ellipsis);
2652 s = to_print + prefix_bytes;
2657 displayer->
putch (displayer,
'^');
2658 displayer->
putch (displayer, UNCTRL (*s));
2661#if defined (HANDLE_MULTIBYTE)
2662 memset (&ps, 0,
sizeof (mbstate_t));
2665 else if (*s == RUBOUT)
2667 displayer->
putch (displayer,
'^');
2668 displayer->
putch (displayer,
'?');
2671#if defined (HANDLE_MULTIBYTE)
2672 memset (&ps, 0,
sizeof (mbstate_t));
2677#if defined (HANDLE_MULTIBYTE)
2678 tlen = mbrtowc (&wc, s, end - s, &ps);
2679 if (MB_INVALIDCH (tlen))
2683 memset (&ps, 0,
sizeof (mbstate_t));
2685 else if (MB_NULLWCH (tlen))
2690 width = (w >= 0) ? w : 1;
2692 for (w = 0; w < tlen; ++w)
2693 displayer->
putch (displayer, s[w]);
2695 printed_len += width;
2697 displayer->
putch (displayer, *s);
2716 int printed_len, extension_char, slen, tlen;
2717 char *s, c, *new_full_pathname;
2719 extern int _rl_complete_mark_directories;
2722 printed_len =
gdb_fnprint (to_print, prefix_bytes, displayer);
2724#if defined (VISIBLE_STATS)
2725 if (rl_filename_completion_desired && (rl_visible_stats || _rl_complete_mark_directories))
2727 if (rl_filename_completion_desired && _rl_complete_mark_directories)
2733 if (to_print != full_pathname)
2737 to_print[-1] =
'\0';
2744 if (full_pathname == 0 || *full_pathname == 0)
2746 else if (full_pathname[0] !=
'/')
2748 else if (full_pathname[1] == 0)
2750 else if (full_pathname[1] ==
'/' && full_pathname[2] == 0)
2754 s = tilde_expand (dn);
2755 if (rl_directory_completion_hook)
2756 (*rl_directory_completion_hook) (&s);
2759 tlen = strlen (to_print);
2760 new_full_pathname = (
char *)
xmalloc (slen + tlen + 2);
2761 strcpy (new_full_pathname, s);
2762 if (s[slen - 1] ==
'/')
2765 new_full_pathname[slen] =
'/';
2766 new_full_pathname[slen] =
'/';
2767 strcpy (new_full_pathname + slen + 1, to_print);
2769#if defined (VISIBLE_STATS)
2770 if (rl_visible_stats)
2771 extension_char = stat_char (new_full_pathname);
2775 extension_char =
'/';
2777 xfree (new_full_pathname);
2782 s = tilde_expand (full_pathname);
2783#if defined (VISIBLE_STATS)
2784 if (rl_visible_stats)
2785 extension_char = stat_char (s);
2789 extension_char =
'/';
2795 displayer->
putch (displayer, extension_char);
2809 return displayer->
width;
2816typedef int QSFUNC (
const void *,
const void *);
2826 int count, limit, printed_len, lines, cols;
2827 int i, j, k, l, common_length, sind;
2833 common_length = sind = 0;
2837 temp = strrchr (t,
'/');
2839 sind = temp ? strlen (temp) : strlen (t);
2844 common_length = sind = 0;
2851 if (limit != 1 && (limit * max == cols))
2855 if (cols < displayer->width && limit < 0)
2864 count = (len + (limit - 1)) / limit;
2871 if (rl_ignore_completion_duplicates == 0 && rl_sort_completion_matches)
2874 displayer->
crlf (displayer);
2880 for (i = 1; i <= count; i++)
2882 for (j = 0, l = i; j < limit; j++)
2884 if (l > len || matches[l] == 0)
2893 for (k = 0; k < max - printed_len; k++)
2894 displayer->
putch (displayer,
' ');
2898 displayer->
crlf (displayer);
2900 if (page_completions && lines >= (displayer->
height - 1) && i < count)
2911 for (i = 1; matches[i]; i++)
2918 if (i && (limit > 1) && (i % limit) == 0)
2920 displayer->
crlf (displayer);
2922 if (page_completions && lines >= displayer->
height - 1)
2930 for (k = 0; k < max - printed_len; k++)
2931 displayer->
putch (displayer,
' ');
2934 displayer->
crlf (displayer);
2957 if (rl_completion_query_items > 0 && len >= rl_completion_query_items)
2965 displayer->
crlf (displayer);
2967 xsnprintf (msg,
sizeof (msg),
2968 "Display all %d possibilities? (y or n)", len);
2969 displayer->
puts (displayer, msg);
2970 displayer->
flush (displayer);
2974 displayer->
crlf (displayer);
2988 displayer->
puts (displayer, message);
2989 displayer->
crlf (displayer);
3000Set maximum number of completion candidates."), _(
"\
3001Show maximum number of completion candidates."), _(
"\
3002Use this to limit the number of candidates considered\n\
3003during completion. Specifying \"unlimited\" or -1\n\
3004disables limiting. Note that setting either no limit or\n\
3005a very large limit can make completion slow."),
void * xcalloc(size_t number, size_t size)
void * xrealloc(void *ptr, size_t size)
struct gdbarch * get_current_arch(void)
hashval_t hash_name() const
gdb::unique_xmalloc_ptr< char > m_lcd
completion_hash_entry(gdb::unique_xmalloc_ptr< char > name, gdb::unique_xmalloc_ptr< char > lcd)
bool is_name_eq(const char *str) const
gdb::unique_xmalloc_ptr< char > m_name
void discard_completions()
void set_custom_word_point(int point)
char * m_lowest_common_denominator
bool completes_to_completion_word(const char *word)
void recompute_lowest_common_denominator()
void add_completion(gdb::unique_xmalloc_ptr< char > name, completion_match_for_lcd *match_for_lcd=NULL, const char *text=NULL, const char *word=NULL)
bool have_completions() const
void set_quote_char(int quote_char)
void add_completions(completion_list &&list)
size_t m_lowest_common_denominator_max_length
void advance_custom_word_point_by(int len)
void set_suppress_append_ws(bool suppress)
bool use_custom_word_point() const
bool m_lowest_common_denominator_valid
bool m_lowest_common_denominator_unique
void remove_completion(const char *name)
void set_use_custom_word_point(bool enable)
bool suppress_append_ws() const
int custom_word_point() const
void recompute_lcd_visitor(completion_hash_entry *entry)
completion_result build_completion_result(const char *text, int start, int end)
bool maybe_add_completion(gdb::unique_xmalloc_ptr< char > name, completion_match_for_lcd *match_for_lcd, const char *text, const char *word)
struct cmd_list_element * showlist
struct cmd_list_element * cmdlist
struct cmd_list_element * setlist
void complete_on_cmdlist(struct cmd_list_element *list, completion_tracker &tracker, const char *text, const char *word, int ignore_help_classes)
bool valid_cmd_char_p(int c)
struct cmd_list_element * lookup_cmd_1(const char **text, struct cmd_list_element *clist, struct cmd_list_element **result_list, std::string *default_args, int ignore_help_classes, bool lookup_for_completion_p)
set_show_commands add_setshow_zuinteger_unlimited_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
void complete_on_enum(completion_tracker &tracker, const char *const *enumlist, const char *text, const char *word)
#define CMD_LIST_AMBIGUOUS
void completer_ftype(struct cmd_list_element *, completion_tracker &tracker, const char *text, const char *word)
void completer_handle_brkchars_ftype(struct cmd_list_element *, completion_tracker &tracker, const char *text, const char *word)
int QSFUNC(const void *, const void *)
void reggroup_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
static char * gdb_completion_word_break_characters_throw()
void gdb_display_match_list(char **matches, int len, int max, const struct match_list_displayer *displayer)
int _rl_print_completions_horizontally
char ** gdb_rl_attempted_completion_function(const char *text, int start, int end)
static void command_completer_handle_brkchars(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
static void complete_explicit_location_spec(completion_tracker &tracker, location_spec *locspec, const char *text, const language_defn *language, const char *quoted_arg_start, const char *quoted_arg_end)
void signal_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
static const char * advance_to_completion_word(completion_tracker &tracker, const char *word_break_characters, const char *text)
const char * skip_quoted_chars(const char *str, const char *quotechars, const char *breakchars)
static const char gdb_completer_file_name_break_characters[]
static const char gdb_completer_quote_characters[]
static int gdb_fnprint(const char *to_print, int prefix_bytes, const struct match_list_displayer *displayer)
void complete_expression(completion_tracker &tracker, const char *text, const char *word)
void command_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
static void complete_files_symbols(completion_tracker &tracker, const char *text, const char *word)
const char * skip_quoted(const char *str)
#define INITIAL_COMPLETION_HTAB_SIZE
const char * completion_find_completion_word(completion_tracker &tracker, const char *text, int *quote_char)
static int gdb_path_isdir(const char *filename)
EXTERN_C int _rl_qsort_string_compare(const void *, const void *)
explicit_location_match_type
static const char gdb_completer_command_word_break_characters[]
gdb::unique_xmalloc_ptr< char > make_completion_match_str(const char *match_name, const char *text, const char *word)
void complete_line(completion_tracker &tracker, const char *text, const char *line_buffer, int point)
static void reg_or_group_completer_1(completion_tracker &tracker, const char *text, const char *word, reg_completer_targets targets)
static char ** gdb_rl_attempted_completion_function_throw(const char *text, int start, int end)
void noop_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *prefix)
static int gdb_fnwidth(const char *string)
completer_handle_brkchars_ftype * completer_handle_brkchars_func_for_completer(completer_ftype *fn)
void expression_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
char * gdb_completion_word_break_characters()
static void location_completer_handle_brkchars(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word_ignored)
const char * get_max_completions_reached_message(void)
static void default_completer_handle_brkchars(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
static int gdb_complete_get_screenwidth(const struct match_list_displayer *displayer)
static int gdb_display_match_list_pager(int lines, const struct match_list_displayer *displayer)
void _initialize_completer()
static void collect_explicit_location_matches(completion_tracker &tracker, location_spec *locspec, enum explicit_location_match_type what, const char *word, const struct language_defn *language)
static const char * string_or_empty(const char *string)
static void complete_line_internal(completion_tracker &tracker, const char *text, const char *line_buffer, int point, complete_line_internal_reason reason)
static int gdb_print_filename(char *to_print, char *full_pathname, int prefix_bytes, const struct match_list_displayer *displayer)
const char * advance_to_expression_complete_word_point(completion_tracker &tracker, const char *text)
static char * gdb_printable_part(char *pathname)
static void complete_line_internal_1(completion_tracker &tracker, const char *text, const char *line_buffer, int point, complete_line_internal_reason reason)
const char * advance_to_filename_complete_word_point(completion_tracker &tracker, const char *text)
int _rl_completion_prefix_display_length
static gdb_completer_state current_completion
void complete_nested_command_line(completion_tracker &tracker, const char *text)
DEF_ENUM_FLAGS_TYPE(enum reg_completer_target, reg_completer_targets)
static int gdb_get_y_or_n(int for_pager, const struct match_list_displayer *displayer)
static void complete_line_internal_normal_command(completion_tracker &tracker, const char *command, const char *word, const char *cmd_args, complete_line_internal_reason reason, struct cmd_list_element *c)
completion_result complete(const char *line, char const **word, int *quote_char)
static const char *const explicit_options[]
static void complete_address_and_linespec_locations(completion_tracker &tracker, const char *text, symbol_name_match_type match_type)
void location_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *)
void reg_or_group_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
completion_list complete_source_filenames(const char *text)
@ complete_register_names
@ complete_reggroup_names
static const char *const probe_options[]
static const char * gdb_rl_find_completion_word(struct gdb_rl_completion_word_info *info, int *qc, int *dp, const char *line_buffer)
const char * get_gdb_completer_quote_characters(void)
static char * expand_preserving_ws(const char *orig, size_t orig_len, const char *lcd)
void set_rl_completer_word_break_characters(const char *break_chars)
void filename_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
static void filename_completer_handle_brkchars(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
static char gdb_custom_word_point_brkchars[2]
static const char * gdb_org_rl_basic_quote_characters
static char * make_completion_match_str_1(const char *match_name, const char *text, const char *word)
void symbol_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
static int skip_keyword(completion_tracker &tracker, const char *const *keywords, const char **text_p)
static int gdb_display_match_list_1(char **matches, int len, int max, const struct match_list_displayer *displayer)
complete_line_internal_reason
gdb::unique_xmalloc_ptr< char > make_completion_match_str(const char *match_name, const char *text, const char *word)
std::vector< gdb::unique_xmalloc_ptr< char > > completion_list
std::unique_ptr< expression > expression_up
expression_up parse_expression_for_completion(const char *, std::unique_ptr< expr_completion_base > *completer)
const struct language_defn * current_language
const char *const linespec_keywords[]
void linespec_complete_label(completion_tracker &tracker, const struct language_defn *language, const char *source_filename, const char *function_name, symbol_name_match_type func_name_match_type, const char *label_name)
void linespec_complete(completion_tracker &tracker, const char *text, symbol_name_match_type match_type)
void linespec_complete_function(completion_tracker &tracker, const char *function, symbol_name_match_type func_match_type, const char *source_filename)
const explicit_location_spec * as_explicit_location_spec(const location_spec *locspec)
location_spec_up string_to_explicit_location_spec(const char **argp, const struct language_defn *language, explicit_completion_info *completion_info)
std::unique_ptr< location_spec > location_spec_up
static void scan(growable_macro_buffer *dest, shared_macro_buffer *src, struct macro_name_list *no_loop, const macro_scope &scope)
#define prefix(a, b, R, do)
const std::vector< const reggroup * > & gdbarch_reggroups(struct gdbarch *gdbarch)
void(* func)(remote_target *remote, char *)
struct cmd_list_element ** subcommands
completer_handle_brkchars_ftype * completer_handle_brkchars
completer_ftype * completer
const char *const * enums
unsigned int allow_unknown
bool completion_suppress_append
char ** release_match_list()
const char * quoted_arg_end
const char * quoted_arg_start
bool saw_explicit_location_spec_option
symbol_name_match_type func_name_match_type
completion_tracker * tracker
const char * quote_characters
const char * word_break_characters
const char * basic_quote_characters
virtual const char * word_break_characters(void) const
mld_erase_entire_line_ftype * erase_entire_line
mld_read_key_ftype * read_key
void collect_file_symbol_completion_matches(completion_tracker &tracker, complete_symbol_mode mode, symbol_name_match_type name_match_type, const char *text, const char *word, const char *srcfile)
completion_list make_source_files_completion_list(const char *text, const char *word)
void collect_symbol_completion_matches(completion_tracker &tracker, complete_symbol_mode mode, symbol_name_match_type name_match_type, const char *text, const char *word)
const char * user_reg_map_regnum_to_name(struct gdbarch *gdbarch, int regnum)
int strncmp_iw(const char *string1, const char *string2, size_t string2_len)