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