Clean up "completer_handle_brkchars" callback handling
[deliverable/binutils-gdb.git] / gdb / completer.c
CommitLineData
c5f0f3d0 1/* Line completion stuff for GDB, the GNU debugger.
61baf725 2 Copyright (C) 2000-2017 Free Software Foundation, Inc.
c5f0f3d0
FN
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
a9762ec7 8 the Free Software Foundation; either version 3 of the License, or
c5f0f3d0
FN
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
a9762ec7 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c5f0f3d0
FN
18
19#include "defs.h"
20#include "symtab.h"
21#include "gdbtypes.h"
22#include "expression.h"
9c3f90bd 23#include "filenames.h" /* For DOSish file names. */
51065942 24#include "language.h"
de0bea00 25#include "gdb_signals.h"
71c24708
AA
26#include "target.h"
27#include "reggroups.h"
28#include "user-regs.h"
51f0e40d 29#include "arch-utils.h"
87f0e720 30#include "location.h"
c5f0f3d0 31
18a642a1
AC
32#include "cli/cli-decode.h"
33
03717487
MS
34/* FIXME: This is needed because of lookup_cmd_1 (). We should be
35 calling a hook instead so we eliminate the CLI dependency. */
c5f0f3d0
FN
36#include "gdbcmd.h"
37
c94fdfd0 38/* Needed for rl_completer_word_break_characters() and for
38017ce8 39 rl_filename_completion_function. */
dbda9972 40#include "readline/readline.h"
c5f0f3d0
FN
41
42/* readline defines this. */
43#undef savestring
44
45#include "completer.h"
46
87f0e720
KS
47/* An enumeration of the various things a user might
48 attempt to complete for a location. */
49
50enum explicit_location_match_type
51{
52 /* The filename of a source file. */
53 MATCH_SOURCE,
54
55 /* The name of a function or method. */
56 MATCH_FUNCTION,
57
58 /* The name of a label. */
59 MATCH_LABEL
60};
61
9c3f90bd 62/* Prototypes for local functions. */
38017ce8 63static
03717487
MS
64char *line_completion_function (const char *text, int matches,
65 char *line_buffer,
d75b5104 66 int point);
c5f0f3d0
FN
67
68/* readline uses the word breaks for two things:
69 (1) In figuring out where to point the TEXT parameter to the
70 rl_completion_entry_function. Since we don't use TEXT for much,
aff410f1
MS
71 it doesn't matter a lot what the word breaks are for this purpose,
72 but it does affect how much stuff M-? lists.
c5f0f3d0
FN
73 (2) If one of the matches contains a word break character, readline
74 will quote it. That's why we switch between
51065942 75 current_language->la_word_break_characters() and
c5f0f3d0 76 gdb_completer_command_word_break_characters. I'm not sure when
aff410f1
MS
77 we need this behavior (perhaps for funky characters in C++
78 symbols?). */
c5f0f3d0
FN
79
80/* Variables which are necessary for fancy command line editing. */
c5f0f3d0
FN
81
82/* When completing on command names, we remove '-' from the list of
83 word break characters, since we use it in command names. If the
84 readline library sees one in any of the current completion strings,
aff410f1
MS
85 it thinks that the string needs to be quoted and automatically
86 supplies a leading quote. */
67cb5b2d 87static const char gdb_completer_command_word_break_characters[] =
c5f0f3d0
FN
88" \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,";
89
90/* When completing on file names, we remove from the list of word
91 break characters any characters that are commonly used in file
92 names, such as '-', '+', '~', etc. Otherwise, readline displays
93 incorrect completion candidates. */
7830cf6f
EZ
94/* MS-DOS and MS-Windows use colon as part of the drive spec, and most
95 programs support @foo style response files. */
67cb5b2d
PA
96static const char gdb_completer_file_name_break_characters[] =
97#ifdef HAVE_DOS_BASED_FILE_SYSTEM
98 " \t\n*|\"';?><@";
7830cf6f 99#else
67cb5b2d 100 " \t\n*|\"';:?><";
7830cf6f 101#endif
c5f0f3d0 102
aff410f1
MS
103/* Characters that can be used to quote completion strings. Note that
104 we can't include '"' because the gdb C parser treats such quoted
105 sequences as strings. */
67cb5b2d 106static const char gdb_completer_quote_characters[] = "'";
c5f0f3d0 107\f
9c3f90bd 108/* Accessor for some completer data that may interest other files. */
c5f0f3d0 109
67cb5b2d 110const char *
c5f0f3d0
FN
111get_gdb_completer_quote_characters (void)
112{
113 return gdb_completer_quote_characters;
114}
115
d75b5104
EZ
116/* Line completion interface function for readline. */
117
118char *
38017ce8 119readline_line_completion_function (const char *text, int matches)
d75b5104 120{
aff410f1
MS
121 return line_completion_function (text, matches,
122 rl_line_buffer, rl_point);
d75b5104
EZ
123}
124
aff410f1
MS
125/* This can be used for functions which don't want to complete on
126 symbols but don't want to complete on anything else either. */
49c4e619 127VEC (char_ptr) *
aff410f1 128noop_completer (struct cmd_list_element *ignore,
6f937416 129 const char *text, const char *prefix)
d75b5104
EZ
130{
131 return NULL;
132}
133
c5f0f3d0 134/* Complete on filenames. */
6e1dbf8c 135
49c4e619 136VEC (char_ptr) *
aff410f1 137filename_completer (struct cmd_list_element *ignore,
6f937416 138 const char *text, const char *word)
c5f0f3d0 139{
c5f0f3d0 140 int subsequent_name;
49c4e619 141 VEC (char_ptr) *return_val = NULL;
c5f0f3d0
FN
142
143 subsequent_name = 0;
144 while (1)
145 {
1e8189fb 146 char *p, *q;
c5504eaf 147
38017ce8 148 p = rl_filename_completion_function (text, subsequent_name);
c5f0f3d0 149 if (p == NULL)
49c4e619 150 break;
c5f0f3d0 151 /* We need to set subsequent_name to a non-zero value before the
aff410f1
MS
152 continue line below, because otherwise, if the first file
153 seen by GDB is a backup file whose name ends in a `~', we
154 will loop indefinitely. */
c5f0f3d0 155 subsequent_name = 1;
aff410f1
MS
156 /* Like emacs, don't complete on old versions. Especially
157 useful in the "source" command. */
c5f0f3d0 158 if (p[strlen (p) - 1] == '~')
1e8189fb
MS
159 {
160 xfree (p);
161 continue;
162 }
c5f0f3d0 163
1e8189fb
MS
164 if (word == text)
165 /* Return exactly p. */
49c4e619 166 q = p;
1e8189fb
MS
167 else if (word > text)
168 {
169 /* Return some portion of p. */
224c3ddb 170 q = (char *) xmalloc (strlen (p) + 5);
1e8189fb 171 strcpy (q, p + (word - text));
1e8189fb
MS
172 xfree (p);
173 }
174 else
175 {
176 /* Return some of TEXT plus p. */
224c3ddb 177 q = (char *) xmalloc (strlen (p) + (text - word) + 5);
1e8189fb
MS
178 strncpy (q, word, text - word);
179 q[text - word] = '\0';
180 strcat (q, p);
1e8189fb
MS
181 xfree (p);
182 }
49c4e619 183 VEC_safe_push (char_ptr, return_val, q);
c5f0f3d0
FN
184 }
185#if 0
aff410f1
MS
186 /* There is no way to do this just long enough to affect quote
187 inserting without also affecting the next completion. This
188 should be fixed in readline. FIXME. */
489f0516 189 /* Ensure that readline does the right thing
c5f0f3d0
FN
190 with respect to inserting quotes. */
191 rl_completer_word_break_characters = "";
192#endif
193 return return_val;
194}
195
6e1dbf8c
PA
196/* The corresponding completer_handle_brkchars
197 implementation. */
198
199static void
200filename_completer_handle_brkchars (struct cmd_list_element *ignore,
201 const char *text, const char *word)
202{
203 set_rl_completer_word_break_characters
204 (gdb_completer_file_name_break_characters);
205}
206
87f0e720 207/* Complete on linespecs, which might be of two possible forms:
c94fdfd0
EZ
208
209 file:line
210 or
211 symbol+offset
212
aff410f1
MS
213 This is intended to be used in commands that set breakpoints
214 etc. */
215
87f0e720
KS
216static VEC (char_ptr) *
217linespec_location_completer (struct cmd_list_element *ignore,
218 const char *text, const char *word)
c94fdfd0 219{
49c4e619
TT
220 int n_syms, n_files, ix;
221 VEC (char_ptr) *fn_list = NULL;
222 VEC (char_ptr) *list = NULL;
6f937416 223 const char *p;
c94fdfd0
EZ
224 int quote_found = 0;
225 int quoted = *text == '\'' || *text == '"';
226 int quote_char = '\0';
6f937416 227 const char *colon = NULL;
c94fdfd0 228 char *file_to_match = NULL;
6f937416
PA
229 const char *symbol_start = text;
230 const char *orig_text = text;
c94fdfd0
EZ
231 size_t text_len;
232
59be2b6a 233 /* Do we have an unquoted colon, as in "break foo.c:bar"? */
c94fdfd0
EZ
234 for (p = text; *p != '\0'; ++p)
235 {
236 if (*p == '\\' && p[1] == '\'')
237 p++;
238 else if (*p == '\'' || *p == '"')
239 {
240 quote_found = *p;
241 quote_char = *p++;
242 while (*p != '\0' && *p != quote_found)
243 {
244 if (*p == '\\' && p[1] == quote_found)
245 p++;
246 p++;
247 }
248
249 if (*p == quote_found)
250 quote_found = 0;
251 else
9c3f90bd 252 break; /* Hit the end of text. */
c94fdfd0
EZ
253 }
254#if HAVE_DOS_BASED_FILE_SYSTEM
255 /* If we have a DOS-style absolute file name at the beginning of
256 TEXT, and the colon after the drive letter is the only colon
257 we found, pretend the colon is not there. */
258 else if (p < text + 3 && *p == ':' && p == text + 1 + quoted)
259 ;
260#endif
261 else if (*p == ':' && !colon)
262 {
263 colon = p;
264 symbol_start = p + 1;
265 }
51065942 266 else if (strchr (current_language->la_word_break_characters(), *p))
c94fdfd0
EZ
267 symbol_start = p + 1;
268 }
269
270 if (quoted)
271 text++;
272 text_len = strlen (text);
273
274 /* Where is the file name? */
275 if (colon)
276 {
277 char *s;
278
279 file_to_match = (char *) xmalloc (colon - text + 1);
bbfa2517
YQ
280 strncpy (file_to_match, text, colon - text);
281 file_to_match[colon - text] = '\0';
c94fdfd0
EZ
282 /* Remove trailing colons and quotes from the file name. */
283 for (s = file_to_match + (colon - text);
284 s > file_to_match;
285 s--)
286 if (*s == ':' || *s == quote_char)
287 *s = '\0';
288 }
289 /* If the text includes a colon, they want completion only on a
290 symbol name after the colon. Otherwise, we need to complete on
291 symbols as well as on files. */
292 if (colon)
293 {
294 list = make_file_symbol_completion_list (symbol_start, word,
295 file_to_match);
296 xfree (file_to_match);
297 }
298 else
299 {
300 list = make_symbol_completion_list (symbol_start, word);
301 /* If text includes characters which cannot appear in a file
302 name, they cannot be asking for completion on files. */
1f20ed91
MS
303 if (strcspn (text,
304 gdb_completer_file_name_break_characters) == text_len)
c94fdfd0
EZ
305 fn_list = make_source_files_completion_list (text, text);
306 }
307
49c4e619
TT
308 n_syms = VEC_length (char_ptr, list);
309 n_files = VEC_length (char_ptr, fn_list);
310
311 /* Catenate fn_list[] onto the end of list[]. */
312 if (!n_syms)
313 {
314 VEC_free (char_ptr, list); /* Paranoia. */
315 list = fn_list;
316 fn_list = NULL;
317 }
318 else
319 {
6f937416
PA
320 char *fn;
321
322 for (ix = 0; VEC_iterate (char_ptr, fn_list, ix, fn); ++ix)
323 VEC_safe_push (char_ptr, list, fn);
49c4e619
TT
324 VEC_free (char_ptr, fn_list);
325 }
c94fdfd0 326
c94fdfd0
EZ
327 if (n_syms && n_files)
328 {
49c4e619 329 /* Nothing. */
c94fdfd0
EZ
330 }
331 else if (n_files)
332 {
6f937416
PA
333 char *fn;
334
c94fdfd0
EZ
335 /* If we only have file names as possible completion, we should
336 bring them in sync with what rl_complete expects. The
337 problem is that if the user types "break /foo/b TAB", and the
338 possible completions are "/foo/bar" and "/foo/baz"
339 rl_complete expects us to return "bar" and "baz", without the
340 leading directories, as possible completions, because `word'
341 starts at the "b". But we ignore the value of `word' when we
342 call make_source_files_completion_list above (because that
343 would not DTRT when the completion results in both symbols
344 and file names), so make_source_files_completion_list returns
345 the full "/foo/bar" and "/foo/baz" strings. This produces
346 wrong results when, e.g., there's only one possible
347 completion, because rl_complete will prepend "/foo/" to each
348 candidate completion. The loop below removes that leading
349 part. */
6f937416 350 for (ix = 0; VEC_iterate (char_ptr, list, ix, fn); ++ix)
c94fdfd0 351 {
6f937416
PA
352 memmove (fn, fn + (word - text),
353 strlen (fn) + 1 - (word - text));
c94fdfd0 354 }
c94fdfd0
EZ
355 }
356 else if (!n_syms)
357 {
358 /* No completions at all. As the final resort, try completing
359 on the entire text as a symbol. */
360 list = make_symbol_completion_list (orig_text, word);
361 }
362
363 return list;
364}
365
87f0e720
KS
366/* A helper function to collect explicit location matches for the given
367 LOCATION, which is attempting to match on WORD. */
368
369static VEC (char_ptr) *
370collect_explicit_location_matches (struct event_location *location,
371 enum explicit_location_match_type what,
372 const char *word)
373{
374 VEC (char_ptr) *matches = NULL;
67994074
KS
375 const struct explicit_location *explicit_loc
376 = get_explicit_location (location);
87f0e720
KS
377
378 switch (what)
379 {
380 case MATCH_SOURCE:
381 {
67994074
KS
382 const char *text = (explicit_loc->source_filename == NULL
383 ? "" : explicit_loc->source_filename);
87f0e720
KS
384
385 matches = make_source_files_completion_list (text, word);
386 }
387 break;
388
389 case MATCH_FUNCTION:
390 {
67994074
KS
391 const char *text = (explicit_loc->function_name == NULL
392 ? "" : explicit_loc->function_name);
87f0e720 393
67994074 394 if (explicit_loc->source_filename != NULL)
87f0e720 395 {
67994074
KS
396 const char *filename = explicit_loc->source_filename;
397
398 matches = make_file_symbol_completion_list (text, word, filename);
87f0e720
KS
399 }
400 else
401 matches = make_symbol_completion_list (text, word);
402 }
403 break;
404
405 case MATCH_LABEL:
406 /* Not supported. */
407 break;
408
409 default:
410 gdb_assert_not_reached ("unhandled explicit_location_match_type");
411 }
412
413 return matches;
414}
415
416/* A convenience macro to (safely) back up P to the previous word. */
417
418static const char *
419backup_text_ptr (const char *p, const char *text)
420{
421 while (p > text && isspace (*p))
422 --p;
423 for (; p > text && !isspace (p[-1]); --p)
424 ;
425
426 return p;
427}
428
429/* A completer function for explicit locations. This function
430 completes both options ("-source", "-line", etc) and values. */
431
432static VEC (char_ptr) *
433explicit_location_completer (struct cmd_list_element *ignore,
434 struct event_location *location,
435 const char *text, const char *word)
436{
437 const char *p;
438 VEC (char_ptr) *matches = NULL;
439
440 /* Find the beginning of the word. This is necessary because
441 we need to know if we are completing an option name or value. We
442 don't get the leading '-' from the completer. */
443 p = backup_text_ptr (word, text);
444
445 if (*p == '-')
446 {
447 /* Completing on option name. */
448 static const char *const keywords[] =
449 {
450 "source",
451 "function",
452 "line",
453 "label",
454 NULL
455 };
456
457 /* Skip over the '-'. */
458 ++p;
459
460 return complete_on_enum (keywords, p, p);
461 }
462 else
463 {
464 /* Completing on value (or unknown). Get the previous word to see what
465 the user is completing on. */
466 size_t len, offset;
467 const char *new_word, *end;
468 enum explicit_location_match_type what;
67994074
KS
469 struct explicit_location *explicit_loc
470 = get_explicit_location (location);
87f0e720
KS
471
472 /* Backup P to the previous word, which should be the option
473 the user is attempting to complete. */
474 offset = word - p;
475 end = --p;
476 p = backup_text_ptr (p, text);
477 len = end - p;
478
479 if (strncmp (p, "-source", len) == 0)
480 {
481 what = MATCH_SOURCE;
67994074 482 new_word = explicit_loc->source_filename + offset;
87f0e720
KS
483 }
484 else if (strncmp (p, "-function", len) == 0)
485 {
486 what = MATCH_FUNCTION;
67994074 487 new_word = explicit_loc->function_name + offset;
87f0e720
KS
488 }
489 else if (strncmp (p, "-label", len) == 0)
490 {
491 what = MATCH_LABEL;
67994074 492 new_word = explicit_loc->label_name + offset;
87f0e720
KS
493 }
494 else
495 {
496 /* The user isn't completing on any valid option name,
497 e.g., "break -source foo.c [tab]". */
498 return NULL;
499 }
500
501 /* If the user hasn't entered a search expression, e.g.,
502 "break -function <TAB><TAB>", new_word will be NULL, but
503 search routines require non-NULL search words. */
504 if (new_word == NULL)
505 new_word = "";
506
507 /* Now gather matches */
508 matches = collect_explicit_location_matches (location, what, new_word);
509 }
510
511 return matches;
512}
513
514/* A completer for locations. */
515
516VEC (char_ptr) *
517location_completer (struct cmd_list_element *ignore,
518 const char *text, const char *word)
519{
520 VEC (char_ptr) *matches = NULL;
521 const char *copy = text;
87f0e720 522
ffc2605c
TT
523 event_location_up location = string_to_explicit_location (&copy,
524 current_language,
525 1);
87f0e720 526 if (location != NULL)
ffc2605c
TT
527 matches = explicit_location_completer (ignore, location.get (),
528 text, word);
87f0e720
KS
529 else
530 {
531 /* This is an address or linespec location.
532 Right now both of these are handled by the (old) linespec
533 completer. */
534 matches = linespec_location_completer (ignore, text, word);
535 }
536
537 return matches;
538}
539
1c71341a
TT
540/* Helper for expression_completer which recursively adds field and
541 method names from TYPE, a struct or union type, to the array
49c4e619 542 OUTPUT. */
65d12d83 543static void
49c4e619 544add_struct_fields (struct type *type, VEC (char_ptr) **output,
65d12d83
TT
545 char *fieldname, int namelen)
546{
547 int i;
b32d97f3 548 int computed_type_name = 0;
0d5cff50 549 const char *type_name = NULL;
65d12d83 550
f168693b 551 type = check_typedef (type);
65d12d83
TT
552 for (i = 0; i < TYPE_NFIELDS (type); ++i)
553 {
554 if (i < TYPE_N_BASECLASSES (type))
49c4e619 555 add_struct_fields (TYPE_BASECLASS (type, i),
aff410f1 556 output, fieldname, namelen);
9ae8282d 557 else if (TYPE_FIELD_NAME (type, i))
65d12d83 558 {
9ae8282d
TT
559 if (TYPE_FIELD_NAME (type, i)[0] != '\0')
560 {
aff410f1
MS
561 if (! strncmp (TYPE_FIELD_NAME (type, i),
562 fieldname, namelen))
49c4e619
TT
563 VEC_safe_push (char_ptr, *output,
564 xstrdup (TYPE_FIELD_NAME (type, i)));
9ae8282d
TT
565 }
566 else if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION)
567 {
568 /* Recurse into anonymous unions. */
49c4e619 569 add_struct_fields (TYPE_FIELD_TYPE (type, i),
aff410f1 570 output, fieldname, namelen);
9ae8282d 571 }
65d12d83
TT
572 }
573 }
1c71341a
TT
574
575 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
576 {
0d5cff50 577 const char *name = TYPE_FN_FIELDLIST_NAME (type, i);
c5504eaf 578
1c71341a
TT
579 if (name && ! strncmp (name, fieldname, namelen))
580 {
b32d97f3
TT
581 if (!computed_type_name)
582 {
583 type_name = type_name_no_tag (type);
584 computed_type_name = 1;
585 }
1c71341a 586 /* Omit constructors from the completion list. */
907af001 587 if (!type_name || strcmp (type_name, name))
49c4e619 588 VEC_safe_push (char_ptr, *output, xstrdup (name));
1c71341a
TT
589 }
590 }
65d12d83
TT
591}
592
593/* Complete on expressions. Often this means completing on symbol
594 names, but some language parsers also have support for completing
595 field names. */
49c4e619 596VEC (char_ptr) *
aff410f1 597expression_completer (struct cmd_list_element *ignore,
6f937416 598 const char *text, const char *word)
65d12d83 599{
c92817ce 600 struct type *type = NULL;
6f937416 601 char *fieldname;
2f68a895 602 enum type_code code = TYPE_CODE_UNDEF;
65d12d83
TT
603
604 /* Perform a tentative parse of the expression, to see whether a
605 field completion is required. */
606 fieldname = NULL;
492d29ea 607 TRY
c92817ce 608 {
2f68a895 609 type = parse_expression_for_completion (text, &fieldname, &code);
c92817ce 610 }
492d29ea
PA
611 CATCH (except, RETURN_MASK_ERROR)
612 {
613 return NULL;
614 }
615 END_CATCH
616
65d12d83
TT
617 if (fieldname && type)
618 {
619 for (;;)
620 {
f168693b 621 type = check_typedef (type);
aa006118 622 if (TYPE_CODE (type) != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type))
65d12d83
TT
623 break;
624 type = TYPE_TARGET_TYPE (type);
625 }
626
627 if (TYPE_CODE (type) == TYPE_CODE_UNION
628 || TYPE_CODE (type) == TYPE_CODE_STRUCT)
629 {
65d12d83 630 int flen = strlen (fieldname);
49c4e619 631 VEC (char_ptr) *result = NULL;
65d12d83 632
49c4e619 633 add_struct_fields (type, &result, fieldname, flen);
a0b7aece 634 xfree (fieldname);
65d12d83
TT
635 return result;
636 }
637 }
2f68a895
TT
638 else if (fieldname && code != TYPE_CODE_UNDEF)
639 {
640 VEC (char_ptr) *result;
641 struct cleanup *cleanup = make_cleanup (xfree, fieldname);
642
643 result = make_symbol_completion_type (fieldname, fieldname, code);
644 do_cleanups (cleanup);
645 return result;
646 }
a0b7aece 647 xfree (fieldname);
65d12d83 648
aff410f1 649 /* Not ideal but it is what we used to do before... */
eb17d413 650 return linespec_location_completer (ignore, text, word);
65d12d83
TT
651}
652
7d793aa9
SDJ
653/* See definition in completer.h. */
654
67cb5b2d
PA
655void
656set_rl_completer_word_break_characters (const char *break_chars)
657{
658 rl_completer_word_break_characters = (char *) break_chars;
659}
660
661/* See definition in completer.h. */
662
7d793aa9
SDJ
663void
664set_gdb_completion_word_break_characters (completer_ftype *fn)
665{
67cb5b2d
PA
666 const char *break_chars;
667
7d793aa9
SDJ
668 /* So far we are only interested in differentiating filename
669 completers from everything else. */
670 if (fn == filename_completer)
67cb5b2d 671 break_chars = gdb_completer_file_name_break_characters;
7d793aa9 672 else
67cb5b2d
PA
673 break_chars = gdb_completer_command_word_break_characters;
674
675 set_rl_completer_word_break_characters (break_chars);
7d793aa9
SDJ
676}
677
78b13106
PA
678/* Complete on symbols. */
679
680VEC (char_ptr) *
681symbol_completer (struct cmd_list_element *ignore,
682 const char *text, const char *word)
683{
684 return make_symbol_completion_list (text, word);
685}
686
aff410f1
MS
687/* Here are some useful test cases for completion. FIXME: These
688 should be put in the test suite. They should be tested with both
689 M-? and TAB.
c5f0f3d0
FN
690
691 "show output-" "radix"
692 "show output" "-radix"
693 "p" ambiguous (commands starting with p--path, print, printf, etc.)
694 "p " ambiguous (all symbols)
695 "info t foo" no completions
696 "info t " no completions
697 "info t" ambiguous ("info target", "info terminal", etc.)
698 "info ajksdlfk" no completions
699 "info ajksdlfk " no completions
700 "info" " "
701 "info " ambiguous (all info commands)
702 "p \"a" no completions (string constant)
703 "p 'a" ambiguous (all symbols starting with a)
704 "p b-a" ambiguous (all symbols starting with a)
705 "p b-" ambiguous (all symbols)
706 "file Make" "file" (word break hard to screw up here)
707 "file ../gdb.stabs/we" "ird" (needs to not break word at slash)
708 */
709
67c296a2
PM
710typedef enum
711{
712 handle_brkchars,
713 handle_completions,
714 handle_help
715}
716complete_line_internal_reason;
717
6e1dbf8c
PA
718/* Helper for complete_line_internal to simplify it. */
719
720static VEC (char_ptr) *
721complete_line_internal_normal_command (const char *command, const char *word,
722 const char *cmd_args,
723 complete_line_internal_reason reason,
724 struct cmd_list_element *c)
725{
726 const char *p = cmd_args;
727
728 if (c->completer == filename_completer)
729 {
730 /* Many commands which want to complete on file names accept
731 several file names, as in "run foo bar >>baz". So we don't
732 want to complete the entire text after the command, just the
733 last word. To this end, we need to find the beginning of the
734 file name by starting at `word' and going backwards. */
735 for (p = word;
736 p > command
737 && strchr (gdb_completer_file_name_break_characters,
738 p[-1]) == NULL;
739 p--)
740 ;
741 }
742
743 if (reason == handle_brkchars)
744 {
745 completer_handle_brkchars_ftype *brkchars_fn;
746
747 if (c->completer_handle_brkchars != NULL)
748 brkchars_fn = c->completer_handle_brkchars;
749 else
750 {
751 brkchars_fn
752 = (completer_handle_brkchars_func_for_completer
753 (c->completer));
754 }
755
756 brkchars_fn (c, p, word);
757 }
758
759 if (reason != handle_brkchars && c->completer != NULL)
760 return (*c->completer) (c, p, word);
761 return NULL;
762}
67c296a2
PM
763
764/* Internal function used to handle completions.
765
c5f0f3d0
FN
766
767 TEXT is the caller's idea of the "word" we are looking at.
768
aff410f1
MS
769 LINE_BUFFER is available to be looked at; it contains the entire
770 text of the line. POINT is the offset in that line of the cursor.
771 You should pretend that the line ends at POINT.
67c296a2
PM
772
773 REASON is of type complete_line_internal_reason.
774
775 If REASON is handle_brkchars:
aff410f1
MS
776 Preliminary phase, called by gdb_completion_word_break_characters
777 function, is used to determine the correct set of chars that are
778 word delimiters depending on the current command in line_buffer.
779 No completion list should be generated; the return value should be
780 NULL. This is checked by an assertion in that function.
67c296a2
PM
781
782 If REASON is handle_completions:
783 Main phase, called by complete_line function, is used to get the list
784 of posible completions.
785
786 If REASON is handle_help:
787 Special case when completing a 'help' command. In this case,
14032a66 788 once sub-command completions are exhausted, we simply return NULL.
67c296a2 789 */
14032a66 790
49c4e619 791static VEC (char_ptr) *
aff410f1 792complete_line_internal (const char *text,
6f937416 793 const char *line_buffer, int point,
67c296a2 794 complete_line_internal_reason reason)
c5f0f3d0 795{
49c4e619 796 VEC (char_ptr) *list = NULL;
6f937416
PA
797 char *tmp_command;
798 const char *p;
ace21957 799 int ignore_help_classes;
c5f0f3d0
FN
800 /* Pointer within tmp_command which corresponds to text. */
801 char *word;
802 struct cmd_list_element *c, *result_list;
803
aff410f1
MS
804 /* Choose the default set of word break characters to break
805 completions. If we later find out that we are doing completions
806 on command strings (as opposed to strings supplied by the
807 individual command completer functions, which can be any string)
808 then we will switch to the special word break set for command
809 strings, which leaves out the '-' character used in some
810 commands. */
67cb5b2d
PA
811 set_rl_completer_word_break_characters
812 (current_language->la_word_break_characters());
c5f0f3d0 813
aff410f1
MS
814 /* Decide whether to complete on a list of gdb commands or on
815 symbols. */
83d31a92
TT
816 tmp_command = (char *) alloca (point + 1);
817 p = tmp_command;
c5f0f3d0 818
ace21957
MF
819 /* The help command should complete help aliases. */
820 ignore_help_classes = reason != handle_help;
821
83d31a92
TT
822 strncpy (tmp_command, line_buffer, point);
823 tmp_command[point] = '\0';
824 /* Since text always contains some number of characters leading up
825 to point, we can find the equivalent position in tmp_command
826 by subtracting that many characters from the end of tmp_command. */
827 word = tmp_command + point - strlen (text);
c5f0f3d0 828
83d31a92
TT
829 if (point == 0)
830 {
831 /* An empty line we want to consider ambiguous; that is, it
832 could be any command. */
1427fe5e 833 c = CMD_LIST_AMBIGUOUS;
83d31a92
TT
834 result_list = 0;
835 }
836 else
837 {
ace21957 838 c = lookup_cmd_1 (&p, cmdlist, &result_list, ignore_help_classes);
83d31a92 839 }
c5f0f3d0 840
83d31a92
TT
841 /* Move p up to the next interesting thing. */
842 while (*p == ' ' || *p == '\t')
843 {
844 p++;
845 }
c5f0f3d0 846
83d31a92
TT
847 if (!c)
848 {
849 /* It is an unrecognized command. So there are no
850 possible completions. */
851 list = NULL;
852 }
1427fe5e 853 else if (c == CMD_LIST_AMBIGUOUS)
83d31a92 854 {
6f937416 855 const char *q;
83d31a92
TT
856
857 /* lookup_cmd_1 advances p up to the first ambiguous thing, but
858 doesn't advance over that thing itself. Do so now. */
859 q = p;
860 while (*q && (isalnum (*q) || *q == '-' || *q == '_'))
861 ++q;
862 if (q != tmp_command + point)
c5f0f3d0 863 {
83d31a92
TT
864 /* There is something beyond the ambiguous
865 command, so there are no possible completions. For
866 example, "info t " or "info t foo" does not complete
867 to anything, because "info t" can be "info target" or
868 "info terminal". */
c5f0f3d0
FN
869 list = NULL;
870 }
83d31a92 871 else
c5f0f3d0 872 {
83d31a92
TT
873 /* We're trying to complete on the command which was ambiguous.
874 This we can deal with. */
875 if (result_list)
c5f0f3d0 876 {
67c296a2
PM
877 if (reason != handle_brkchars)
878 list = complete_on_cmdlist (*result_list->prefixlist, p,
ace21957 879 word, ignore_help_classes);
c5f0f3d0
FN
880 }
881 else
882 {
67c296a2 883 if (reason != handle_brkchars)
ace21957
MF
884 list = complete_on_cmdlist (cmdlist, p, word,
885 ignore_help_classes);
c5f0f3d0 886 }
489f0516 887 /* Ensure that readline does the right thing with respect to
83d31a92 888 inserting quotes. */
67cb5b2d
PA
889 set_rl_completer_word_break_characters
890 (gdb_completer_command_word_break_characters);
c5f0f3d0 891 }
83d31a92
TT
892 }
893 else
894 {
895 /* We've recognized a full command. */
896
897 if (p == tmp_command + point)
c5f0f3d0 898 {
aff410f1
MS
899 /* There is no non-whitespace in the line beyond the
900 command. */
c5f0f3d0 901
83d31a92 902 if (p[-1] == ' ' || p[-1] == '\t')
c5f0f3d0 903 {
aff410f1
MS
904 /* The command is followed by whitespace; we need to
905 complete on whatever comes after command. */
83d31a92 906 if (c->prefixlist)
c5f0f3d0 907 {
83d31a92
TT
908 /* It is a prefix command; what comes after it is
909 a subcommand (e.g. "info "). */
67c296a2 910 if (reason != handle_brkchars)
ace21957
MF
911 list = complete_on_cmdlist (*c->prefixlist, p, word,
912 ignore_help_classes);
c5f0f3d0 913
489f0516 914 /* Ensure that readline does the right thing
9c3f90bd 915 with respect to inserting quotes. */
67cb5b2d
PA
916 set_rl_completer_word_break_characters
917 (gdb_completer_command_word_break_characters);
c5f0f3d0 918 }
67c296a2 919 else if (reason == handle_help)
14032a66 920 list = NULL;
c5f0f3d0
FN
921 else if (c->enums)
922 {
67c296a2
PM
923 if (reason != handle_brkchars)
924 list = complete_on_enum (c->enums, p, word);
67cb5b2d
PA
925 set_rl_completer_word_break_characters
926 (gdb_completer_command_word_break_characters);
c5f0f3d0
FN
927 }
928 else
929 {
83d31a92
TT
930 /* It is a normal command; what comes after it is
931 completed by the command's completer function. */
6e1dbf8c
PA
932 list = complete_line_internal_normal_command (tmp_command,
933 word, p,
934 reason, c);
c5f0f3d0
FN
935 }
936 }
83d31a92
TT
937 else
938 {
939 /* The command is not followed by whitespace; we need to
aff410f1 940 complete on the command itself, e.g. "p" which is a
83d31a92
TT
941 command itself but also can complete to "print", "ptype"
942 etc. */
6f937416 943 const char *q;
83d31a92
TT
944
945 /* Find the command we are completing on. */
946 q = p;
947 while (q > tmp_command)
948 {
949 if (isalnum (q[-1]) || q[-1] == '-' || q[-1] == '_')
950 --q;
951 else
952 break;
953 }
954
67c296a2 955 if (reason != handle_brkchars)
ace21957
MF
956 list = complete_on_cmdlist (result_list, q, word,
957 ignore_help_classes);
83d31a92 958
489f0516 959 /* Ensure that readline does the right thing
9c3f90bd 960 with respect to inserting quotes. */
67cb5b2d
PA
961 set_rl_completer_word_break_characters
962 (gdb_completer_command_word_break_characters);
83d31a92
TT
963 }
964 }
67c296a2 965 else if (reason == handle_help)
14032a66 966 list = NULL;
83d31a92
TT
967 else
968 {
969 /* There is non-whitespace beyond the command. */
970
971 if (c->prefixlist && !c->allow_unknown)
972 {
973 /* It is an unrecognized subcommand of a prefix command,
974 e.g. "info adsfkdj". */
975 list = NULL;
976 }
977 else if (c->enums)
978 {
67c296a2
PM
979 if (reason != handle_brkchars)
980 list = complete_on_enum (c->enums, p, word);
83d31a92
TT
981 }
982 else
983 {
984 /* It is a normal command. */
6e1dbf8c
PA
985 list = complete_line_internal_normal_command (tmp_command,
986 word, p,
987 reason, c);
83d31a92
TT
988 }
989 }
990 }
991
992 return list;
993}
ef0b411a
GB
994
995/* See completer.h. */
996
997int max_completions = 200;
998
999/* See completer.h. */
1000
1001completion_tracker_t
1002new_completion_tracker (void)
1003{
1004 if (max_completions <= 0)
1005 return NULL;
1006
1007 return htab_create_alloc (max_completions,
1008 htab_hash_string, (htab_eq) streq,
1009 NULL, xcalloc, xfree);
1010}
1011
1012/* Cleanup routine to free a completion tracker and reset the pointer
1013 to NULL. */
1014
1015static void
1016free_completion_tracker (void *p)
1017{
9a3c8263 1018 completion_tracker_t *tracker_ptr = (completion_tracker_t *) p;
ef0b411a
GB
1019
1020 htab_delete (*tracker_ptr);
1021 *tracker_ptr = NULL;
1022}
1023
1024/* See completer.h. */
1025
1026struct cleanup *
1027make_cleanup_free_completion_tracker (completion_tracker_t *tracker_ptr)
1028{
1029 if (*tracker_ptr == NULL)
1030 return make_cleanup (null_cleanup, NULL);
1031
1032 return make_cleanup (free_completion_tracker, tracker_ptr);
1033}
1034
1035/* See completer.h. */
1036
1037enum maybe_add_completion_enum
1038maybe_add_completion (completion_tracker_t tracker, char *name)
1039{
1040 void **slot;
1041
1042 if (max_completions < 0)
1043 return MAYBE_ADD_COMPLETION_OK;
1044 if (max_completions == 0)
1045 return MAYBE_ADD_COMPLETION_MAX_REACHED;
1046
1047 gdb_assert (tracker != NULL);
1048
1049 if (htab_elements (tracker) >= max_completions)
1050 return MAYBE_ADD_COMPLETION_MAX_REACHED;
1051
1052 slot = htab_find_slot (tracker, name, INSERT);
1053
1054 if (*slot != HTAB_EMPTY_ENTRY)
1055 return MAYBE_ADD_COMPLETION_DUPLICATE;
1056
1057 *slot = name;
1058
1059 return (htab_elements (tracker) < max_completions
1060 ? MAYBE_ADD_COMPLETION_OK
1061 : MAYBE_ADD_COMPLETION_OK_MAX_REACHED);
1062}
1063
1064void
1065throw_max_completions_reached_error (void)
1066{
1067 throw_error (MAX_COMPLETIONS_REACHED_ERROR, _("Max completions reached."));
1068}
1069
1070/* Generate completions all at once. Returns a vector of unique strings
1071 allocated with xmalloc. Returns NULL if there are no completions
1072 or if max_completions is 0. If max_completions is non-negative, this will
9a7e538e 1073 return at most max_completions strings.
83d31a92 1074
67c296a2
PM
1075 TEXT is the caller's idea of the "word" we are looking at.
1076
aff410f1
MS
1077 LINE_BUFFER is available to be looked at; it contains the entire
1078 text of the line.
67c296a2
PM
1079
1080 POINT is the offset in that line of the cursor. You
1081 should pretend that the line ends at POINT. */
14032a66 1082
49c4e619 1083VEC (char_ptr) *
1834676b 1084complete_line (const char *text, const char *line_buffer, int point)
14032a66 1085{
ef0b411a
GB
1086 VEC (char_ptr) *list;
1087 VEC (char_ptr) *result = NULL;
1088 struct cleanup *cleanups;
1089 completion_tracker_t tracker;
1090 char *candidate;
1091 int ix, max_reached;
1092
1093 if (max_completions == 0)
1094 return NULL;
1095 list = complete_line_internal (text, line_buffer, point,
1096 handle_completions);
1097 if (max_completions < 0)
1098 return list;
1099
1100 tracker = new_completion_tracker ();
1101 cleanups = make_cleanup_free_completion_tracker (&tracker);
1102 make_cleanup_free_char_ptr_vec (list);
1103
1104 /* Do a final test for too many completions. Individual completers may
1105 do some of this, but are not required to. Duplicates are also removed
1106 here. Otherwise the user is left scratching his/her head: readline and
1107 complete_command will remove duplicates, and if removal of duplicates
1108 there brings the total under max_completions the user may think gdb quit
1109 searching too early. */
1110
1111 for (ix = 0, max_reached = 0;
1112 !max_reached && VEC_iterate (char_ptr, list, ix, candidate);
1113 ++ix)
1114 {
1115 enum maybe_add_completion_enum add_status;
1116
1117 add_status = maybe_add_completion (tracker, candidate);
1118
1119 switch (add_status)
1120 {
1121 case MAYBE_ADD_COMPLETION_OK:
1122 VEC_safe_push (char_ptr, result, xstrdup (candidate));
1123 break;
1124 case MAYBE_ADD_COMPLETION_OK_MAX_REACHED:
1125 VEC_safe_push (char_ptr, result, xstrdup (candidate));
1126 max_reached = 1;
1127 break;
1128 case MAYBE_ADD_COMPLETION_MAX_REACHED:
1129 gdb_assert_not_reached ("more than max completions reached");
1130 case MAYBE_ADD_COMPLETION_DUPLICATE:
1131 break;
1132 }
1133 }
1134
1135 do_cleanups (cleanups);
1136
1137 return result;
14032a66
TT
1138}
1139
1140/* Complete on command names. Used by "help". */
6e1dbf8c 1141
49c4e619 1142VEC (char_ptr) *
aff410f1 1143command_completer (struct cmd_list_element *ignore,
6f937416 1144 const char *text, const char *word)
14032a66 1145{
aff410f1
MS
1146 return complete_line_internal (word, text,
1147 strlen (text), handle_help);
67c296a2
PM
1148}
1149
6e1dbf8c
PA
1150/* The corresponding completer_handle_brkchars implementation. */
1151
1152static void
1153command_completer_handle_brkchars (struct cmd_list_element *ignore,
1154 const char *text, const char *word)
1155{
1156 set_rl_completer_word_break_characters
1157 (gdb_completer_command_word_break_characters);
1158}
1159
de0bea00
MF
1160/* Complete on signals. */
1161
1162VEC (char_ptr) *
1163signal_completer (struct cmd_list_element *ignore,
6f937416 1164 const char *text, const char *word)
de0bea00 1165{
de0bea00
MF
1166 VEC (char_ptr) *return_val = NULL;
1167 size_t len = strlen (word);
570dc176 1168 int signum;
de0bea00
MF
1169 const char *signame;
1170
1171 for (signum = GDB_SIGNAL_FIRST; signum != GDB_SIGNAL_LAST; ++signum)
1172 {
1173 /* Can't handle this, so skip it. */
1174 if (signum == GDB_SIGNAL_0)
1175 continue;
1176
570dc176 1177 signame = gdb_signal_to_name ((enum gdb_signal) signum);
de0bea00
MF
1178
1179 /* Ignore the unknown signal case. */
1180 if (!signame || strcmp (signame, "?") == 0)
1181 continue;
1182
1183 if (strncasecmp (signame, word, len) == 0)
1184 VEC_safe_push (char_ptr, return_val, xstrdup (signame));
1185 }
1186
1187 return return_val;
1188}
1189
51f0e40d
AB
1190/* Bit-flags for selecting what the register and/or register-group
1191 completer should complete on. */
71c24708 1192
8d297bbf 1193enum reg_completer_target
51f0e40d
AB
1194 {
1195 complete_register_names = 0x1,
1196 complete_reggroup_names = 0x2
1197 };
8d297bbf 1198DEF_ENUM_FLAGS_TYPE (enum reg_completer_target, reg_completer_targets);
51f0e40d
AB
1199
1200/* Complete register names and/or reggroup names based on the value passed
1201 in TARGETS. At least one bit in TARGETS must be set. */
1202
1203static VEC (char_ptr) *
1204reg_or_group_completer_1 (struct cmd_list_element *ignore,
1205 const char *text, const char *word,
8d297bbf 1206 reg_completer_targets targets)
71c24708
AA
1207{
1208 VEC (char_ptr) *result = NULL;
1209 size_t len = strlen (word);
1210 struct gdbarch *gdbarch;
71c24708 1211 const char *name;
71c24708 1212
51f0e40d
AB
1213 gdb_assert ((targets & (complete_register_names
1214 | complete_reggroup_names)) != 0);
1215 gdbarch = get_current_arch ();
71c24708 1216
51f0e40d 1217 if ((targets & complete_register_names) != 0)
71c24708 1218 {
51f0e40d
AB
1219 int i;
1220
1221 for (i = 0;
1222 (name = user_reg_map_regnum_to_name (gdbarch, i)) != NULL;
1223 i++)
1224 {
1225 if (*name != '\0' && strncmp (word, name, len) == 0)
1226 VEC_safe_push (char_ptr, result, xstrdup (name));
1227 }
71c24708
AA
1228 }
1229
51f0e40d 1230 if ((targets & complete_reggroup_names) != 0)
71c24708 1231 {
51f0e40d
AB
1232 struct reggroup *group;
1233
1234 for (group = reggroup_next (gdbarch, NULL);
1235 group != NULL;
1236 group = reggroup_next (gdbarch, group))
1237 {
1238 name = reggroup_name (group);
1239 if (strncmp (word, name, len) == 0)
1240 VEC_safe_push (char_ptr, result, xstrdup (name));
1241 }
71c24708
AA
1242 }
1243
1244 return result;
1245}
1246
51f0e40d
AB
1247/* Perform completion on register and reggroup names. */
1248
1249VEC (char_ptr) *
1250reg_or_group_completer (struct cmd_list_element *ignore,
1251 const char *text, const char *word)
1252{
1253 return reg_or_group_completer_1 (ignore, text, word,
1254 (complete_register_names
1255 | complete_reggroup_names));
1256}
1257
1258/* Perform completion on reggroup names. */
1259
1260VEC (char_ptr) *
1261reggroup_completer (struct cmd_list_element *ignore,
1262 const char *text, const char *word)
1263{
1264 return reg_or_group_completer_1 (ignore, text, word,
1265 complete_reggroup_names);
1266}
71c24708 1267
6e1dbf8c
PA
1268/* The default completer_handle_brkchars implementation. */
1269
1270static void
1271default_completer_handle_brkchars (struct cmd_list_element *ignore,
1272 const char *text, const char *word)
1273{
1274 set_rl_completer_word_break_characters
1275 (current_language->la_word_break_characters ());
1276}
1277
1278/* See definition in completer.h. */
1279
1280completer_handle_brkchars_ftype *
1281completer_handle_brkchars_func_for_completer (completer_ftype *fn)
1282{
1283 if (fn == filename_completer)
1284 return filename_completer_handle_brkchars;
1285
1286 if (fn == command_completer)
1287 return command_completer_handle_brkchars;
1288
1289 return default_completer_handle_brkchars;
1290}
1291
67c296a2
PM
1292/* Get the list of chars that are considered as word breaks
1293 for the current command. */
1294
1295char *
1296gdb_completion_word_break_characters (void)
1297{
49c4e619 1298 VEC (char_ptr) *list;
c5504eaf 1299
67c296a2
PM
1300 list = complete_line_internal (rl_line_buffer, rl_line_buffer, rl_point,
1301 handle_brkchars);
1302 gdb_assert (list == NULL);
1303 return rl_completer_word_break_characters;
14032a66
TT
1304}
1305
aff410f1
MS
1306/* Generate completions one by one for the completer. Each time we
1307 are called return another potential completion to the caller.
1308 line_completion just completes on commands or passes the buck to
1309 the command's completer function, the stuff specific to symbol
1310 completion is in make_symbol_completion_list.
83d31a92
TT
1311
1312 TEXT is the caller's idea of the "word" we are looking at.
1313
aff410f1
MS
1314 MATCHES is the number of matches that have currently been collected
1315 from calling this completion function. When zero, then we need to
1316 initialize, otherwise the initialization has already taken place
1317 and we can just return the next potential completion string.
83d31a92 1318
aff410f1
MS
1319 LINE_BUFFER is available to be looked at; it contains the entire
1320 text of the line. POINT is the offset in that line of the cursor.
1321 You should pretend that the line ends at POINT.
83d31a92 1322
aff410f1
MS
1323 Returns NULL if there are no more completions, else a pointer to a
1324 string which is a possible completion, it is the caller's
1325 responsibility to free the string. */
83d31a92 1326
38017ce8 1327static char *
9c3f90bd
MS
1328line_completion_function (const char *text, int matches,
1329 char *line_buffer, int point)
83d31a92 1330{
49c4e619 1331 static VEC (char_ptr) *list = NULL; /* Cache of completions. */
9c3f90bd 1332 static int index; /* Next cached completion. */
83d31a92
TT
1333 char *output = NULL;
1334
1335 if (matches == 0)
1336 {
aff410f1
MS
1337 /* The caller is beginning to accumulate a new set of
1338 completions, so we need to find all of them now, and cache
1339 them for returning one at a time on future calls. */
83d31a92
TT
1340
1341 if (list)
1342 {
aff410f1
MS
1343 /* Free the storage used by LIST, but not by the strings
1344 inside. This is because rl_complete_internal () frees
1345 the strings. As complete_line may abort by calling
1346 `error' clear LIST now. */
49c4e619 1347 VEC_free (char_ptr, list);
c5f0f3d0 1348 }
83d31a92
TT
1349 index = 0;
1350 list = complete_line (text, line_buffer, point);
c5f0f3d0
FN
1351 }
1352
aff410f1 1353 /* If we found a list of potential completions during initialization
49c4e619
TT
1354 then dole them out one at a time. After returning the last one,
1355 return NULL (and continue to do so) each time we are called after
1356 that, until a new list is available. */
c5f0f3d0
FN
1357
1358 if (list)
1359 {
49c4e619 1360 if (index < VEC_length (char_ptr, list))
c5f0f3d0 1361 {
49c4e619 1362 output = VEC_index (char_ptr, list, index);
c5f0f3d0
FN
1363 index++;
1364 }
1365 }
1366
1367#if 0
1368 /* Can't do this because readline hasn't yet checked the word breaks
1369 for figuring out whether to insert a quote. */
1370 if (output == NULL)
aff410f1
MS
1371 /* Make sure the word break characters are set back to normal for
1372 the next time that readline tries to complete something. */
c5f0f3d0 1373 rl_completer_word_break_characters =
51065942 1374 current_language->la_word_break_characters();
c5f0f3d0
FN
1375#endif
1376
1377 return (output);
1378}
4e87b832
KD
1379
1380/* Skip over the possibly quoted word STR (as defined by the quote
b021a221
MS
1381 characters QUOTECHARS and the word break characters BREAKCHARS).
1382 Returns pointer to the location after the "word". If either
1383 QUOTECHARS or BREAKCHARS is NULL, use the same values used by the
1384 completer. */
c5f0f3d0 1385
d7561cbb
KS
1386const char *
1387skip_quoted_chars (const char *str, const char *quotechars,
1388 const char *breakchars)
c5f0f3d0
FN
1389{
1390 char quote_char = '\0';
d7561cbb 1391 const char *scan;
c5f0f3d0 1392
4e87b832
KD
1393 if (quotechars == NULL)
1394 quotechars = gdb_completer_quote_characters;
1395
1396 if (breakchars == NULL)
51065942 1397 breakchars = current_language->la_word_break_characters();
4e87b832 1398
c5f0f3d0
FN
1399 for (scan = str; *scan != '\0'; scan++)
1400 {
1401 if (quote_char != '\0')
1402 {
9c3f90bd 1403 /* Ignore everything until the matching close quote char. */
c5f0f3d0
FN
1404 if (*scan == quote_char)
1405 {
9c3f90bd 1406 /* Found matching close quote. */
c5f0f3d0
FN
1407 scan++;
1408 break;
1409 }
1410 }
4e87b832 1411 else if (strchr (quotechars, *scan))
c5f0f3d0 1412 {
aff410f1 1413 /* Found start of a quoted string. */
c5f0f3d0
FN
1414 quote_char = *scan;
1415 }
4e87b832 1416 else if (strchr (breakchars, *scan))
c5f0f3d0
FN
1417 {
1418 break;
1419 }
1420 }
4e87b832 1421
c5f0f3d0
FN
1422 return (scan);
1423}
1424
4e87b832
KD
1425/* Skip over the possibly quoted word STR (as defined by the quote
1426 characters and word break characters used by the completer).
9c3f90bd 1427 Returns pointer to the location after the "word". */
4e87b832 1428
d7561cbb
KS
1429const char *
1430skip_quoted (const char *str)
4e87b832
KD
1431{
1432 return skip_quoted_chars (str, NULL, NULL);
1433}
ef0b411a
GB
1434
1435/* Return a message indicating that the maximum number of completions
1436 has been reached and that there may be more. */
1437
1438const char *
1439get_max_completions_reached_message (void)
1440{
1441 return _("*** List may be truncated, max-completions reached. ***");
1442}
82083d6d
DE
1443\f
1444/* GDB replacement for rl_display_match_list.
1445 Readline doesn't provide a clean interface for TUI(curses).
1446 A hack previously used was to send readline's rl_outstream through a pipe
1447 and read it from the event loop. Bleah. IWBN if readline abstracted
1448 away all the necessary bits, and this is what this code does. It
1449 replicates the parts of readline we need and then adds an abstraction
1450 layer, currently implemented as struct match_list_displayer, so that both
1451 CLI and TUI can use it. We copy all this readline code to minimize
1452 GDB-specific mods to readline. Once this code performs as desired then
1453 we can submit it to the readline maintainers.
1454
1455 N.B. A lot of the code is the way it is in order to minimize differences
1456 from readline's copy. */
1457
1458/* Not supported here. */
1459#undef VISIBLE_STATS
1460
1461#if defined (HANDLE_MULTIBYTE)
1462#define MB_INVALIDCH(x) ((x) == (size_t)-1 || (x) == (size_t)-2)
1463#define MB_NULLWCH(x) ((x) == 0)
1464#endif
1465
1466#define ELLIPSIS_LEN 3
1467
1468/* gdb version of readline/complete.c:get_y_or_n.
1469 'y' -> returns 1, and 'n' -> returns 0.
1470 Also supported: space == 'y', RUBOUT == 'n', ctrl-g == start over.
1471 If FOR_PAGER is non-zero, then also supported are:
1472 NEWLINE or RETURN -> returns 2, and 'q' -> returns 0. */
1473
1474static int
1475gdb_get_y_or_n (int for_pager, const struct match_list_displayer *displayer)
1476{
1477 int c;
1478
1479 for (;;)
1480 {
1481 RL_SETSTATE (RL_STATE_MOREINPUT);
1482 c = displayer->read_key (displayer);
1483 RL_UNSETSTATE (RL_STATE_MOREINPUT);
1484
1485 if (c == 'y' || c == 'Y' || c == ' ')
1486 return 1;
1487 if (c == 'n' || c == 'N' || c == RUBOUT)
1488 return 0;
1489 if (c == ABORT_CHAR || c < 0)
1490 {
1491 /* Readline doesn't erase_entire_line here, but without it the
1492 --More-- prompt isn't erased and neither is the text entered
1493 thus far redisplayed. */
1494 displayer->erase_entire_line (displayer);
1495 /* Note: The arguments to rl_abort are ignored. */
1496 rl_abort (0, 0);
1497 }
1498 if (for_pager && (c == NEWLINE || c == RETURN))
1499 return 2;
1500 if (for_pager && (c == 'q' || c == 'Q'))
1501 return 0;
1502 displayer->beep (displayer);
1503 }
1504}
1505
1506/* Pager function for tab-completion.
1507 This is based on readline/complete.c:_rl_internal_pager.
1508 LINES is the number of lines of output displayed thus far.
1509 Returns:
1510 -1 -> user pressed 'n' or equivalent,
1511 0 -> user pressed 'y' or equivalent,
1512 N -> user pressed NEWLINE or equivalent and N is LINES - 1. */
1513
1514static int
1515gdb_display_match_list_pager (int lines,
1516 const struct match_list_displayer *displayer)
1517{
1518 int i;
1519
1520 displayer->puts (displayer, "--More--");
1521 displayer->flush (displayer);
1522 i = gdb_get_y_or_n (1, displayer);
1523 displayer->erase_entire_line (displayer);
1524 if (i == 0)
1525 return -1;
1526 else if (i == 2)
1527 return (lines - 1);
1528 else
1529 return 0;
1530}
1531
1532/* Return non-zero if FILENAME is a directory.
1533 Based on readline/complete.c:path_isdir. */
1534
1535static int
1536gdb_path_isdir (const char *filename)
1537{
1538 struct stat finfo;
1539
1540 return (stat (filename, &finfo) == 0 && S_ISDIR (finfo.st_mode));
1541}
1542
1543/* Return the portion of PATHNAME that should be output when listing
1544 possible completions. If we are hacking filename completion, we
1545 are only interested in the basename, the portion following the
1546 final slash. Otherwise, we return what we were passed. Since
1547 printing empty strings is not very informative, if we're doing
1548 filename completion, and the basename is the empty string, we look
1549 for the previous slash and return the portion following that. If
1550 there's no previous slash, we just return what we were passed.
1551
1552 Based on readline/complete.c:printable_part. */
1553
1554static char *
1555gdb_printable_part (char *pathname)
1556{
1557 char *temp, *x;
1558
1559 if (rl_filename_completion_desired == 0) /* don't need to do anything */
1560 return (pathname);
1561
1562 temp = strrchr (pathname, '/');
5836a818 1563#if defined (__MSDOS__)
82083d6d
DE
1564 if (temp == 0 && ISALPHA ((unsigned char)pathname[0]) && pathname[1] == ':')
1565 temp = pathname + 1;
1566#endif
1567
1568 if (temp == 0 || *temp == '\0')
1569 return (pathname);
1570 /* If the basename is NULL, we might have a pathname like '/usr/src/'.
1571 Look for a previous slash and, if one is found, return the portion
1572 following that slash. If there's no previous slash, just return the
1573 pathname we were passed. */
1574 else if (temp[1] == '\0')
1575 {
1576 for (x = temp - 1; x > pathname; x--)
1577 if (*x == '/')
1578 break;
1579 return ((*x == '/') ? x + 1 : pathname);
1580 }
1581 else
1582 return ++temp;
1583}
1584
1585/* Compute width of STRING when displayed on screen by print_filename.
1586 Based on readline/complete.c:fnwidth. */
1587
1588static int
1589gdb_fnwidth (const char *string)
1590{
1591 int width, pos;
1592#if defined (HANDLE_MULTIBYTE)
1593 mbstate_t ps;
1594 int left, w;
1595 size_t clen;
1596 wchar_t wc;
1597
1598 left = strlen (string) + 1;
1599 memset (&ps, 0, sizeof (mbstate_t));
1600#endif
1601
1602 width = pos = 0;
1603 while (string[pos])
1604 {
1605 if (CTRL_CHAR (string[pos]) || string[pos] == RUBOUT)
1606 {
1607 width += 2;
1608 pos++;
1609 }
1610 else
1611 {
1612#if defined (HANDLE_MULTIBYTE)
1613 clen = mbrtowc (&wc, string + pos, left - pos, &ps);
1614 if (MB_INVALIDCH (clen))
1615 {
1616 width++;
1617 pos++;
1618 memset (&ps, 0, sizeof (mbstate_t));
1619 }
1620 else if (MB_NULLWCH (clen))
1621 break;
1622 else
1623 {
1624 pos += clen;
1625 w = wcwidth (wc);
1626 width += (w >= 0) ? w : 1;
1627 }
1628#else
1629 width++;
1630 pos++;
1631#endif
1632 }
1633 }
1634
1635 return width;
1636}
1637
1638/* Print TO_PRINT, one matching completion.
1639 PREFIX_BYTES is number of common prefix bytes.
1640 Based on readline/complete.c:fnprint. */
1641
1642static int
1643gdb_fnprint (const char *to_print, int prefix_bytes,
1644 const struct match_list_displayer *displayer)
1645{
1646 int printed_len, w;
1647 const char *s;
1648#if defined (HANDLE_MULTIBYTE)
1649 mbstate_t ps;
1650 const char *end;
1651 size_t tlen;
1652 int width;
1653 wchar_t wc;
1654
1655 end = to_print + strlen (to_print) + 1;
1656 memset (&ps, 0, sizeof (mbstate_t));
1657#endif
1658
1659 printed_len = 0;
1660
1661 /* Don't print only the ellipsis if the common prefix is one of the
1662 possible completions */
1663 if (to_print[prefix_bytes] == '\0')
1664 prefix_bytes = 0;
1665
1666 if (prefix_bytes)
1667 {
1668 char ellipsis;
1669
1670 ellipsis = (to_print[prefix_bytes] == '.') ? '_' : '.';
1671 for (w = 0; w < ELLIPSIS_LEN; w++)
1672 displayer->putch (displayer, ellipsis);
1673 printed_len = ELLIPSIS_LEN;
1674 }
1675
1676 s = to_print + prefix_bytes;
1677 while (*s)
1678 {
1679 if (CTRL_CHAR (*s))
1680 {
1681 displayer->putch (displayer, '^');
1682 displayer->putch (displayer, UNCTRL (*s));
1683 printed_len += 2;
1684 s++;
1685#if defined (HANDLE_MULTIBYTE)
1686 memset (&ps, 0, sizeof (mbstate_t));
1687#endif
1688 }
1689 else if (*s == RUBOUT)
1690 {
1691 displayer->putch (displayer, '^');
1692 displayer->putch (displayer, '?');
1693 printed_len += 2;
1694 s++;
1695#if defined (HANDLE_MULTIBYTE)
1696 memset (&ps, 0, sizeof (mbstate_t));
1697#endif
1698 }
1699 else
1700 {
1701#if defined (HANDLE_MULTIBYTE)
1702 tlen = mbrtowc (&wc, s, end - s, &ps);
1703 if (MB_INVALIDCH (tlen))
1704 {
1705 tlen = 1;
1706 width = 1;
1707 memset (&ps, 0, sizeof (mbstate_t));
1708 }
1709 else if (MB_NULLWCH (tlen))
1710 break;
1711 else
1712 {
1713 w = wcwidth (wc);
1714 width = (w >= 0) ? w : 1;
1715 }
1716 for (w = 0; w < tlen; ++w)
1717 displayer->putch (displayer, s[w]);
1718 s += tlen;
1719 printed_len += width;
1720#else
1721 displayer->putch (displayer, *s);
1722 s++;
1723 printed_len++;
1724#endif
1725 }
1726 }
1727
1728 return printed_len;
1729}
1730
1731/* Output TO_PRINT to rl_outstream. If VISIBLE_STATS is defined and we
1732 are using it, check for and output a single character for `special'
1733 filenames. Return the number of characters we output.
1734 Based on readline/complete.c:print_filename. */
1735
1736static int
1737gdb_print_filename (char *to_print, char *full_pathname, int prefix_bytes,
1738 const struct match_list_displayer *displayer)
1739{
1740 int printed_len, extension_char, slen, tlen;
a121b7c1
PA
1741 char *s, c, *new_full_pathname;
1742 const char *dn;
82083d6d
DE
1743 extern int _rl_complete_mark_directories;
1744
1745 extension_char = 0;
1746 printed_len = gdb_fnprint (to_print, prefix_bytes, displayer);
1747
1748#if defined (VISIBLE_STATS)
1749 if (rl_filename_completion_desired && (rl_visible_stats || _rl_complete_mark_directories))
1750#else
1751 if (rl_filename_completion_desired && _rl_complete_mark_directories)
1752#endif
1753 {
1754 /* If to_print != full_pathname, to_print is the basename of the
1755 path passed. In this case, we try to expand the directory
1756 name before checking for the stat character. */
1757 if (to_print != full_pathname)
1758 {
1759 /* Terminate the directory name. */
1760 c = to_print[-1];
1761 to_print[-1] = '\0';
1762
1763 /* If setting the last slash in full_pathname to a NUL results in
1764 full_pathname being the empty string, we are trying to complete
1765 files in the root directory. If we pass a null string to the
1766 bash directory completion hook, for example, it will expand it
1767 to the current directory. We just want the `/'. */
1768 if (full_pathname == 0 || *full_pathname == 0)
1769 dn = "/";
1770 else if (full_pathname[0] != '/')
1771 dn = full_pathname;
1772 else if (full_pathname[1] == 0)
1773 dn = "//"; /* restore trailing slash to `//' */
1774 else if (full_pathname[1] == '/' && full_pathname[2] == 0)
1775 dn = "/"; /* don't turn /// into // */
1776 else
1777 dn = full_pathname;
1778 s = tilde_expand (dn);
1779 if (rl_directory_completion_hook)
1780 (*rl_directory_completion_hook) (&s);
1781
1782 slen = strlen (s);
1783 tlen = strlen (to_print);
1784 new_full_pathname = (char *)xmalloc (slen + tlen + 2);
1785 strcpy (new_full_pathname, s);
1786 if (s[slen - 1] == '/')
1787 slen--;
1788 else
1789 new_full_pathname[slen] = '/';
1790 new_full_pathname[slen] = '/';
1791 strcpy (new_full_pathname + slen + 1, to_print);
1792
1793#if defined (VISIBLE_STATS)
1794 if (rl_visible_stats)
1795 extension_char = stat_char (new_full_pathname);
1796 else
1797#endif
1798 if (gdb_path_isdir (new_full_pathname))
1799 extension_char = '/';
1800
1801 xfree (new_full_pathname);
1802 to_print[-1] = c;
1803 }
1804 else
1805 {
1806 s = tilde_expand (full_pathname);
1807#if defined (VISIBLE_STATS)
1808 if (rl_visible_stats)
1809 extension_char = stat_char (s);
1810 else
1811#endif
1812 if (gdb_path_isdir (s))
1813 extension_char = '/';
1814 }
1815
1816 xfree (s);
1817 if (extension_char)
1818 {
1819 displayer->putch (displayer, extension_char);
1820 printed_len++;
1821 }
1822 }
1823
1824 return printed_len;
1825}
1826
1827/* GDB version of readline/complete.c:complete_get_screenwidth. */
1828
1829static int
1830gdb_complete_get_screenwidth (const struct match_list_displayer *displayer)
1831{
1832 /* Readline has other stuff here which it's not clear we need. */
1833 return displayer->width;
1834}
1835
56000a98
PA
1836extern int _rl_completion_prefix_display_length;
1837extern int _rl_print_completions_horizontally;
1838
1839EXTERN_C int _rl_qsort_string_compare (const void *, const void *);
1840typedef int QSFUNC (const void *, const void *);
1841
82083d6d 1842/* GDB version of readline/complete.c:rl_display_match_list.
ef0b411a
GB
1843 See gdb_display_match_list for a description of MATCHES, LEN, MAX.
1844 Returns non-zero if all matches are displayed. */
82083d6d 1845
ef0b411a 1846static int
82083d6d
DE
1847gdb_display_match_list_1 (char **matches, int len, int max,
1848 const struct match_list_displayer *displayer)
1849{
1850 int count, limit, printed_len, lines, cols;
1851 int i, j, k, l, common_length, sind;
1852 char *temp, *t;
1853 int page_completions = displayer->height != INT_MAX && pagination_enabled;
82083d6d
DE
1854
1855 /* Find the length of the prefix common to all items: length as displayed
1856 characters (common_length) and as a byte index into the matches (sind) */
1857 common_length = sind = 0;
1858 if (_rl_completion_prefix_display_length > 0)
1859 {
1860 t = gdb_printable_part (matches[0]);
1861 temp = strrchr (t, '/');
1862 common_length = temp ? gdb_fnwidth (temp) : gdb_fnwidth (t);
1863 sind = temp ? strlen (temp) : strlen (t);
1864
1865 if (common_length > _rl_completion_prefix_display_length && common_length > ELLIPSIS_LEN)
1866 max -= common_length - ELLIPSIS_LEN;
1867 else
1868 common_length = sind = 0;
1869 }
1870
1871 /* How many items of MAX length can we fit in the screen window? */
1872 cols = gdb_complete_get_screenwidth (displayer);
1873 max += 2;
1874 limit = cols / max;
1875 if (limit != 1 && (limit * max == cols))
1876 limit--;
1877
1878 /* If cols == 0, limit will end up -1 */
1879 if (cols < displayer->width && limit < 0)
1880 limit = 1;
1881
1882 /* Avoid a possible floating exception. If max > cols,
1883 limit will be 0 and a divide-by-zero fault will result. */
1884 if (limit == 0)
1885 limit = 1;
1886
1887 /* How many iterations of the printing loop? */
1888 count = (len + (limit - 1)) / limit;
1889
1890 /* Watch out for special case. If LEN is less than LIMIT, then
1891 just do the inner printing loop.
1892 0 < len <= limit implies count = 1. */
1893
1894 /* Sort the items if they are not already sorted. */
1895 if (rl_ignore_completion_duplicates == 0 && rl_sort_completion_matches)
1896 qsort (matches + 1, len, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare);
1897
1898 displayer->crlf (displayer);
1899
1900 lines = 0;
1901 if (_rl_print_completions_horizontally == 0)
1902 {
1903 /* Print the sorted items, up-and-down alphabetically, like ls. */
1904 for (i = 1; i <= count; i++)
1905 {
1906 for (j = 0, l = i; j < limit; j++)
1907 {
1908 if (l > len || matches[l] == 0)
1909 break;
1910 else
1911 {
1912 temp = gdb_printable_part (matches[l]);
1913 printed_len = gdb_print_filename (temp, matches[l], sind,
1914 displayer);
1915
1916 if (j + 1 < limit)
1917 for (k = 0; k < max - printed_len; k++)
1918 displayer->putch (displayer, ' ');
1919 }
1920 l += count;
1921 }
1922 displayer->crlf (displayer);
1923 lines++;
1924 if (page_completions && lines >= (displayer->height - 1) && i < count)
1925 {
1926 lines = gdb_display_match_list_pager (lines, displayer);
1927 if (lines < 0)
ef0b411a 1928 return 0;
82083d6d
DE
1929 }
1930 }
1931 }
1932 else
1933 {
1934 /* Print the sorted items, across alphabetically, like ls -x. */
1935 for (i = 1; matches[i]; i++)
1936 {
1937 temp = gdb_printable_part (matches[i]);
1938 printed_len = gdb_print_filename (temp, matches[i], sind, displayer);
1939 /* Have we reached the end of this line? */
1940 if (matches[i+1])
1941 {
1942 if (i && (limit > 1) && (i % limit) == 0)
1943 {
1944 displayer->crlf (displayer);
1945 lines++;
1946 if (page_completions && lines >= displayer->height - 1)
1947 {
1948 lines = gdb_display_match_list_pager (lines, displayer);
1949 if (lines < 0)
ef0b411a 1950 return 0;
82083d6d
DE
1951 }
1952 }
1953 else
1954 for (k = 0; k < max - printed_len; k++)
1955 displayer->putch (displayer, ' ');
1956 }
1957 }
1958 displayer->crlf (displayer);
1959 }
ef0b411a
GB
1960
1961 return 1;
82083d6d
DE
1962}
1963
1964/* Utility for displaying completion list matches, used by both CLI and TUI.
1965
1966 MATCHES is the list of strings, in argv format, LEN is the number of
05cdcf3d
DE
1967 strings in MATCHES, and MAX is the length of the longest string in
1968 MATCHES. */
82083d6d
DE
1969
1970void
1971gdb_display_match_list (char **matches, int len, int max,
1972 const struct match_list_displayer *displayer)
1973{
ef0b411a
GB
1974 /* Readline will never call this if complete_line returned NULL. */
1975 gdb_assert (max_completions != 0);
1976
1977 /* complete_line will never return more than this. */
1978 if (max_completions > 0)
1979 gdb_assert (len <= max_completions);
1980
82083d6d
DE
1981 if (rl_completion_query_items > 0 && len >= rl_completion_query_items)
1982 {
1983 char msg[100];
1984
1985 /* We can't use *query here because they wait for <RET> which is
1986 wrong here. This follows the readline version as closely as possible
1987 for compatibility's sake. See readline/complete.c. */
1988
1989 displayer->crlf (displayer);
1990
1991 xsnprintf (msg, sizeof (msg),
1992 "Display all %d possibilities? (y or n)", len);
1993 displayer->puts (displayer, msg);
1994 displayer->flush (displayer);
1995
1996 if (gdb_get_y_or_n (0, displayer) == 0)
1997 {
1998 displayer->crlf (displayer);
1999 return;
2000 }
2001 }
2002
ef0b411a
GB
2003 if (gdb_display_match_list_1 (matches, len, max, displayer))
2004 {
2005 /* Note: MAX_COMPLETIONS may be -1 or zero, but LEN is always > 0. */
2006 if (len == max_completions)
2007 {
2008 /* The maximum number of completions has been reached. Warn the user
2009 that there may be more. */
2010 const char *message = get_max_completions_reached_message ();
2011
2012 displayer->puts (displayer, message);
2013 displayer->crlf (displayer);
2014 }
2015 }
2016}
2017\f
2018extern initialize_file_ftype _initialize_completer; /* -Wmissing-prototypes */
2019
2020void
2021_initialize_completer (void)
2022{
2023 add_setshow_zuinteger_unlimited_cmd ("max-completions", no_class,
2024 &max_completions, _("\
2025Set maximum number of completion candidates."), _("\
2026Show maximum number of completion candidates."), _("\
2027Use this to limit the number of candidates considered\n\
2028during completion. Specifying \"unlimited\" or -1\n\
2029disables limiting. Note that setting either no limit or\n\
2030a very large limit can make completion slow."),
2031 NULL, NULL, &setlist, &showlist);
82083d6d 2032}
This page took 1.12795 seconds and 4 git commands to generate.