1 /* Line completion stuff for GDB, the GNU debugger. 2 Copyright (C) 2000-2013 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_assert.h" 26 #include "exceptions.h" 27 #include "gdb_signals.h" 28 29 #include "cli/cli-decode.h" 30 31 /* FIXME: This is needed because of lookup_cmd_1 (). We should be 32 calling a hook instead so we eliminate the CLI dependency. */ 33 #include "gdbcmd.h" 34 35 /* Needed for rl_completer_word_break_characters() and for 36 rl_filename_completion_function. */ 37 #include "readline/readline.h" 38 39 /* readline defines this. */ 40 #undef savestring 41 42 #include "completer.h" 43 44 /* Prototypes for local functions. */ 45 static 46 char *line_completion_function (const char *text, int matches, 47 char *line_buffer, 48 int point); 49 50 /* readline uses the word breaks for two things: 51 (1) In figuring out where to point the TEXT parameter to the 52 rl_completion_entry_function. Since we don't use TEXT for much, 53 it doesn't matter a lot what the word breaks are for this purpose, 54 but it does affect how much stuff M-? lists. 55 (2) If one of the matches contains a word break character, readline 56 will quote it. That's why we switch between 57 current_language->la_word_break_characters() and 58 gdb_completer_command_word_break_characters. I'm not sure when 59 we need this behavior (perhaps for funky characters in C++ 60 symbols?). */ 61 62 /* Variables which are necessary for fancy command line editing. */ 63 64 /* When completing on command names, we remove '-' from the list of 65 word break characters, since we use it in command names. If the 66 readline library sees one in any of the current completion strings, 67 it thinks that the string needs to be quoted and automatically 68 supplies a leading quote. */ 69 static char *gdb_completer_command_word_break_characters = 70 " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,"; 71 72 /* When completing on file names, we remove from the list of word 73 break characters any characters that are commonly used in file 74 names, such as '-', '+', '~', etc. Otherwise, readline displays 75 incorrect completion candidates. */ 76 #ifdef HAVE_DOS_BASED_FILE_SYSTEM 77 /* MS-DOS and MS-Windows use colon as part of the drive spec, and most 78 programs support @foo style response files. */ 79 static char *gdb_completer_file_name_break_characters = " \t\n*|\"';?><@"; 80 #else 81 static char *gdb_completer_file_name_break_characters = " \t\n*|\"';:?><"; 82 #endif 83 84 /* Characters that can be used to quote completion strings. Note that 85 we can't include '"' because the gdb C parser treats such quoted 86 sequences as strings. */ 87 static char *gdb_completer_quote_characters = "'"; 88 89 /* Accessor for some completer data that may interest other files. */ 90 91 char * 92 get_gdb_completer_quote_characters (void) 93 { 94 return gdb_completer_quote_characters; 95 } 96 97 /* Line completion interface function for readline. */ 98 99 char * 100 readline_line_completion_function (const char *text, int matches) 101 { 102 return line_completion_function (text, matches, 103 rl_line_buffer, rl_point); 104 } 105 106 /* This can be used for functions which don't want to complete on 107 symbols but don't want to complete on anything else either. */ 108 VEC (char_ptr) * 109 noop_completer (struct cmd_list_element *ignore, 110 char *text, char *prefix) 111 { 112 return NULL; 113 } 114 115 /* Complete on filenames. */ 116 VEC (char_ptr) * 117 filename_completer (struct cmd_list_element *ignore, 118 char *text, char *word) 119 { 120 int subsequent_name; 121 VEC (char_ptr) *return_val = NULL; 122 123 subsequent_name = 0; 124 while (1) 125 { 126 char *p, *q; 127 128 p = rl_filename_completion_function (text, subsequent_name); 129 if (p == NULL) 130 break; 131 /* We need to set subsequent_name to a non-zero value before the 132 continue line below, because otherwise, if the first file 133 seen by GDB is a backup file whose name ends in a `~', we 134 will loop indefinitely. */ 135 subsequent_name = 1; 136 /* Like emacs, don't complete on old versions. Especially 137 useful in the "source" command. */ 138 if (p[strlen (p) - 1] == '~') 139 { 140 xfree (p); 141 continue; 142 } 143 144 if (word == text) 145 /* Return exactly p. */ 146 q = p; 147 else if (word > text) 148 { 149 /* Return some portion of p. */ 150 q = xmalloc (strlen (p) + 5); 151 strcpy (q, p + (word - text)); 152 xfree (p); 153 } 154 else 155 { 156 /* Return some of TEXT plus p. */ 157 q = xmalloc (strlen (p) + (text - word) + 5); 158 strncpy (q, word, text - word); 159 q[text - word] = '\0'; 160 strcat (q, p); 161 xfree (p); 162 } 163 VEC_safe_push (char_ptr, return_val, q); 164 } 165 #if 0 166 /* There is no way to do this just long enough to affect quote 167 inserting without also affecting the next completion. This 168 should be fixed in readline. FIXME. */ 169 /* Ensure that readline does the right thing 170 with respect to inserting quotes. */ 171 rl_completer_word_break_characters = ""; 172 #endif 173 return return_val; 174 } 175 176 /* Complete on locations, which might be of two possible forms: 177 178 file:line 179 or 180 symbol+offset 181 182 This is intended to be used in commands that set breakpoints 183 etc. */ 184 185 VEC (char_ptr) * 186 location_completer (struct cmd_list_element *ignore, 187 char *text, char *word) 188 { 189 int n_syms, n_files, ix; 190 VEC (char_ptr) *fn_list = NULL; 191 VEC (char_ptr) *list = NULL; 192 char *p; 193 int quote_found = 0; 194 int quoted = *text == '\'' || *text == '"'; 195 int quote_char = '\0'; 196 char *colon = NULL; 197 char *file_to_match = NULL; 198 char *symbol_start = text; 199 char *orig_text = text; 200 size_t text_len; 201 202 /* Do we have an unquoted colon, as in "break foo.c:bar"? */ 203 for (p = text; *p != '\0'; ++p) 204 { 205 if (*p == '\\' && p[1] == '\'') 206 p++; 207 else if (*p == '\'' || *p == '"') 208 { 209 quote_found = *p; 210 quote_char = *p++; 211 while (*p != '\0' && *p != quote_found) 212 { 213 if (*p == '\\' && p[1] == quote_found) 214 p++; 215 p++; 216 } 217 218 if (*p == quote_found) 219 quote_found = 0; 220 else 221 break; /* Hit the end of text. */ 222 } 223 #if HAVE_DOS_BASED_FILE_SYSTEM 224 /* If we have a DOS-style absolute file name at the beginning of 225 TEXT, and the colon after the drive letter is the only colon 226 we found, pretend the colon is not there. */ 227 else if (p < text + 3 && *p == ':' && p == text + 1 + quoted) 228 ; 229 #endif 230 else if (*p == ':' && !colon) 231 { 232 colon = p; 233 symbol_start = p + 1; 234 } 235 else if (strchr (current_language->la_word_break_characters(), *p)) 236 symbol_start = p + 1; 237 } 238 239 if (quoted) 240 text++; 241 text_len = strlen (text); 242 243 /* Where is the file name? */ 244 if (colon) 245 { 246 char *s; 247 248 file_to_match = (char *) xmalloc (colon - text + 1); 249 strncpy (file_to_match, text, colon - text + 1); 250 /* Remove trailing colons and quotes from the file name. */ 251 for (s = file_to_match + (colon - text); 252 s > file_to_match; 253 s--) 254 if (*s == ':' || *s == quote_char) 255 *s = '\0'; 256 } 257 /* If the text includes a colon, they want completion only on a 258 symbol name after the colon. Otherwise, we need to complete on 259 symbols as well as on files. */ 260 if (colon) 261 { 262 list = make_file_symbol_completion_list (symbol_start, word, 263 file_to_match); 264 xfree (file_to_match); 265 } 266 else 267 { 268 list = make_symbol_completion_list (symbol_start, word); 269 /* If text includes characters which cannot appear in a file 270 name, they cannot be asking for completion on files. */ 271 if (strcspn (text, 272 gdb_completer_file_name_break_characters) == text_len) 273 fn_list = make_source_files_completion_list (text, text); 274 } 275 276 n_syms = VEC_length (char_ptr, list); 277 n_files = VEC_length (char_ptr, fn_list); 278 279 /* Catenate fn_list[] onto the end of list[]. */ 280 if (!n_syms) 281 { 282 VEC_free (char_ptr, list); /* Paranoia. */ 283 list = fn_list; 284 fn_list = NULL; 285 } 286 else 287 { 288 for (ix = 0; VEC_iterate (char_ptr, fn_list, ix, p); ++ix) 289 VEC_safe_push (char_ptr, list, p); 290 VEC_free (char_ptr, fn_list); 291 } 292 293 if (n_syms && n_files) 294 { 295 /* Nothing. */ 296 } 297 else if (n_files) 298 { 299 /* If we only have file names as possible completion, we should 300 bring them in sync with what rl_complete expects. The 301 problem is that if the user types "break /foo/b TAB", and the 302 possible completions are "/foo/bar" and "/foo/baz" 303 rl_complete expects us to return "bar" and "baz", without the 304 leading directories, as possible completions, because `word' 305 starts at the "b". But we ignore the value of `word' when we 306 call make_source_files_completion_list above (because that 307 would not DTRT when the completion results in both symbols 308 and file names), so make_source_files_completion_list returns 309 the full "/foo/bar" and "/foo/baz" strings. This produces 310 wrong results when, e.g., there's only one possible 311 completion, because rl_complete will prepend "/foo/" to each 312 candidate completion. The loop below removes that leading 313 part. */ 314 for (ix = 0; VEC_iterate (char_ptr, list, ix, p); ++ix) 315 { 316 memmove (p, p + (word - text), 317 strlen (p) + 1 - (word - text)); 318 } 319 } 320 else if (!n_syms) 321 { 322 /* No completions at all. As the final resort, try completing 323 on the entire text as a symbol. */ 324 list = make_symbol_completion_list (orig_text, word); 325 } 326 327 return list; 328 } 329 330 /* Helper for expression_completer which recursively adds field and 331 method names from TYPE, a struct or union type, to the array 332 OUTPUT. */ 333 static void 334 add_struct_fields (struct type *type, VEC (char_ptr) **output, 335 char *fieldname, int namelen) 336 { 337 int i; 338 int computed_type_name = 0; 339 const char *type_name = NULL; 340 341 CHECK_TYPEDEF (type); 342 for (i = 0; i < TYPE_NFIELDS (type); ++i) 343 { 344 if (i < TYPE_N_BASECLASSES (type)) 345 add_struct_fields (TYPE_BASECLASS (type, i), 346 output, fieldname, namelen); 347 else if (TYPE_FIELD_NAME (type, i)) 348 { 349 if (TYPE_FIELD_NAME (type, i)[0] != '\0') 350 { 351 if (! strncmp (TYPE_FIELD_NAME (type, i), 352 fieldname, namelen)) 353 VEC_safe_push (char_ptr, *output, 354 xstrdup (TYPE_FIELD_NAME (type, i))); 355 } 356 else if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION) 357 { 358 /* Recurse into anonymous unions. */ 359 add_struct_fields (TYPE_FIELD_TYPE (type, i), 360 output, fieldname, namelen); 361 } 362 } 363 } 364 365 for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i) 366 { 367 const char *name = TYPE_FN_FIELDLIST_NAME (type, i); 368 369 if (name && ! strncmp (name, fieldname, namelen)) 370 { 371 if (!computed_type_name) 372 { 373 type_name = type_name_no_tag (type); 374 computed_type_name = 1; 375 } 376 /* Omit constructors from the completion list. */ 377 if (!type_name || strcmp (type_name, name)) 378 VEC_safe_push (char_ptr, *output, xstrdup (name)); 379 } 380 } 381 } 382 383 /* Complete on expressions. Often this means completing on symbol 384 names, but some language parsers also have support for completing 385 field names. */ 386 VEC (char_ptr) * 387 expression_completer (struct cmd_list_element *ignore, 388 char *text, char *word) 389 { 390 struct type *type = NULL; 391 char *fieldname, *p; 392 volatile struct gdb_exception except; 393 enum type_code code = TYPE_CODE_UNDEF; 394 395 /* Perform a tentative parse of the expression, to see whether a 396 field completion is required. */ 397 fieldname = NULL; 398 TRY_CATCH (except, RETURN_MASK_ERROR) 399 { 400 type = parse_expression_for_completion (text, &fieldname, &code); 401 } 402 if (except.reason < 0) 403 return NULL; 404 if (fieldname && type) 405 { 406 for (;;) 407 { 408 CHECK_TYPEDEF (type); 409 if (TYPE_CODE (type) != TYPE_CODE_PTR 410 && TYPE_CODE (type) != TYPE_CODE_REF) 411 break; 412 type = TYPE_TARGET_TYPE (type); 413 } 414 415 if (TYPE_CODE (type) == TYPE_CODE_UNION 416 || TYPE_CODE (type) == TYPE_CODE_STRUCT) 417 { 418 int flen = strlen (fieldname); 419 VEC (char_ptr) *result = NULL; 420 421 add_struct_fields (type, &result, fieldname, flen); 422 xfree (fieldname); 423 return result; 424 } 425 } 426 else if (fieldname && code != TYPE_CODE_UNDEF) 427 { 428 VEC (char_ptr) *result; 429 struct cleanup *cleanup = make_cleanup (xfree, fieldname); 430 431 result = make_symbol_completion_type (fieldname, fieldname, code); 432 do_cleanups (cleanup); 433 return result; 434 } 435 xfree (fieldname); 436 437 /* Commands which complete on locations want to see the entire 438 argument. */ 439 for (p = word; 440 p > text && p[-1] != ' ' && p[-1] != '\t'; 441 p--) 442 ; 443 444 /* Not ideal but it is what we used to do before... */ 445 return location_completer (ignore, p, word); 446 } 447 448 /* Here are some useful test cases for completion. FIXME: These 449 should be put in the test suite. They should be tested with both 450 M-? and TAB. 451 452 "show output-" "radix" 453 "show output" "-radix" 454 "p" ambiguous (commands starting with p--path, print, printf, etc.) 455 "p " ambiguous (all symbols) 456 "info t foo" no completions 457 "info t " no completions 458 "info t" ambiguous ("info target", "info terminal", etc.) 459 "info ajksdlfk" no completions 460 "info ajksdlfk " no completions 461 "info" " " 462 "info " ambiguous (all info commands) 463 "p \"a" no completions (string constant) 464 "p 'a" ambiguous (all symbols starting with a) 465 "p b-a" ambiguous (all symbols starting with a) 466 "p b-" ambiguous (all symbols) 467 "file Make" "file" (word break hard to screw up here) 468 "file ../gdb.stabs/we" "ird" (needs to not break word at slash) 469 */ 470 471 typedef enum 472 { 473 handle_brkchars, 474 handle_completions, 475 handle_help 476 } 477 complete_line_internal_reason; 478 479 480 /* Internal function used to handle completions. 481 482 483 TEXT is the caller's idea of the "word" we are looking at. 484 485 LINE_BUFFER is available to be looked at; it contains the entire 486 text of the line. POINT is the offset in that line of the cursor. 487 You should pretend that the line ends at POINT. 488 489 REASON is of type complete_line_internal_reason. 490 491 If REASON is handle_brkchars: 492 Preliminary phase, called by gdb_completion_word_break_characters 493 function, is used to determine the correct set of chars that are 494 word delimiters depending on the current command in line_buffer. 495 No completion list should be generated; the return value should be 496 NULL. This is checked by an assertion in that function. 497 498 If REASON is handle_completions: 499 Main phase, called by complete_line function, is used to get the list 500 of posible completions. 501 502 If REASON is handle_help: 503 Special case when completing a 'help' command. In this case, 504 once sub-command completions are exhausted, we simply return NULL. 505 */ 506 507 static VEC (char_ptr) * 508 complete_line_internal (const char *text, 509 char *line_buffer, int point, 510 complete_line_internal_reason reason) 511 { 512 VEC (char_ptr) *list = NULL; 513 char *tmp_command, *p; 514 int ignore_help_classes; 515 /* Pointer within tmp_command which corresponds to text. */ 516 char *word; 517 struct cmd_list_element *c, *result_list; 518 519 /* Choose the default set of word break characters to break 520 completions. If we later find out that we are doing completions 521 on command strings (as opposed to strings supplied by the 522 individual command completer functions, which can be any string) 523 then we will switch to the special word break set for command 524 strings, which leaves out the '-' character used in some 525 commands. */ 526 rl_completer_word_break_characters = 527 current_language->la_word_break_characters(); 528 529 /* Decide whether to complete on a list of gdb commands or on 530 symbols. */ 531 tmp_command = (char *) alloca (point + 1); 532 p = tmp_command; 533 534 /* The help command should complete help aliases. */ 535 ignore_help_classes = reason != handle_help; 536 537 strncpy (tmp_command, line_buffer, point); 538 tmp_command[point] = '\0'; 539 /* Since text always contains some number of characters leading up 540 to point, we can find the equivalent position in tmp_command 541 by subtracting that many characters from the end of tmp_command. */ 542 word = tmp_command + point - strlen (text); 543 544 if (point == 0) 545 { 546 /* An empty line we want to consider ambiguous; that is, it 547 could be any command. */ 548 c = CMD_LIST_AMBIGUOUS; 549 result_list = 0; 550 } 551 else 552 { 553 c = lookup_cmd_1 (&p, cmdlist, &result_list, ignore_help_classes); 554 } 555 556 /* Move p up to the next interesting thing. */ 557 while (*p == ' ' || *p == '\t') 558 { 559 p++; 560 } 561 562 if (!c) 563 { 564 /* It is an unrecognized command. So there are no 565 possible completions. */ 566 list = NULL; 567 } 568 else if (c == CMD_LIST_AMBIGUOUS) 569 { 570 char *q; 571 572 /* lookup_cmd_1 advances p up to the first ambiguous thing, but 573 doesn't advance over that thing itself. Do so now. */ 574 q = p; 575 while (*q && (isalnum (*q) || *q == '-' || *q == '_')) 576 ++q; 577 if (q != tmp_command + point) 578 { 579 /* There is something beyond the ambiguous 580 command, so there are no possible completions. For 581 example, "info t " or "info t foo" does not complete 582 to anything, because "info t" can be "info target" or 583 "info terminal". */ 584 list = NULL; 585 } 586 else 587 { 588 /* We're trying to complete on the command which was ambiguous. 589 This we can deal with. */ 590 if (result_list) 591 { 592 if (reason != handle_brkchars) 593 list = complete_on_cmdlist (*result_list->prefixlist, p, 594 word, ignore_help_classes); 595 } 596 else 597 { 598 if (reason != handle_brkchars) 599 list = complete_on_cmdlist (cmdlist, p, word, 600 ignore_help_classes); 601 } 602 /* Ensure that readline does the right thing with respect to 603 inserting quotes. */ 604 rl_completer_word_break_characters = 605 gdb_completer_command_word_break_characters; 606 } 607 } 608 else 609 { 610 /* We've recognized a full command. */ 611 612 if (p == tmp_command + point) 613 { 614 /* There is no non-whitespace in the line beyond the 615 command. */ 616 617 if (p[-1] == ' ' || p[-1] == '\t') 618 { 619 /* The command is followed by whitespace; we need to 620 complete on whatever comes after command. */ 621 if (c->prefixlist) 622 { 623 /* It is a prefix command; what comes after it is 624 a subcommand (e.g. "info "). */ 625 if (reason != handle_brkchars) 626 list = complete_on_cmdlist (*c->prefixlist, p, word, 627 ignore_help_classes); 628 629 /* Ensure that readline does the right thing 630 with respect to inserting quotes. */ 631 rl_completer_word_break_characters = 632 gdb_completer_command_word_break_characters; 633 } 634 else if (reason == handle_help) 635 list = NULL; 636 else if (c->enums) 637 { 638 if (reason != handle_brkchars) 639 list = complete_on_enum (c->enums, p, word); 640 rl_completer_word_break_characters = 641 gdb_completer_command_word_break_characters; 642 } 643 else 644 { 645 /* It is a normal command; what comes after it is 646 completed by the command's completer function. */ 647 if (c->completer == filename_completer) 648 { 649 /* Many commands which want to complete on 650 file names accept several file names, as 651 in "run foo bar >>baz". So we don't want 652 to complete the entire text after the 653 command, just the last word. To this 654 end, we need to find the beginning of the 655 file name by starting at `word' and going 656 backwards. */ 657 for (p = word; 658 p > tmp_command 659 && strchr (gdb_completer_file_name_break_characters, p[-1]) == NULL; 660 p--) 661 ; 662 rl_completer_word_break_characters = 663 gdb_completer_file_name_break_characters; 664 } 665 else if (c->completer == location_completer) 666 { 667 /* Commands which complete on locations want to 668 see the entire argument. */ 669 for (p = word; 670 p > tmp_command 671 && p[-1] != ' ' && p[-1] != '\t'; 672 p--) 673 ; 674 } 675 if (reason != handle_brkchars && c->completer != NULL) 676 list = (*c->completer) (c, p, word); 677 } 678 } 679 else 680 { 681 /* The command is not followed by whitespace; we need to 682 complete on the command itself, e.g. "p" which is a 683 command itself but also can complete to "print", "ptype" 684 etc. */ 685 char *q; 686 687 /* Find the command we are completing on. */ 688 q = p; 689 while (q > tmp_command) 690 { 691 if (isalnum (q[-1]) || q[-1] == '-' || q[-1] == '_') 692 --q; 693 else 694 break; 695 } 696 697 if (reason != handle_brkchars) 698 list = complete_on_cmdlist (result_list, q, word, 699 ignore_help_classes); 700 701 /* Ensure that readline does the right thing 702 with respect to inserting quotes. */ 703 rl_completer_word_break_characters = 704 gdb_completer_command_word_break_characters; 705 } 706 } 707 else if (reason == handle_help) 708 list = NULL; 709 else 710 { 711 /* There is non-whitespace beyond the command. */ 712 713 if (c->prefixlist && !c->allow_unknown) 714 { 715 /* It is an unrecognized subcommand of a prefix command, 716 e.g. "info adsfkdj". */ 717 list = NULL; 718 } 719 else if (c->enums) 720 { 721 if (reason != handle_brkchars) 722 list = complete_on_enum (c->enums, p, word); 723 } 724 else 725 { 726 /* It is a normal command. */ 727 if (c->completer == filename_completer) 728 { 729 /* See the commentary above about the specifics 730 of file-name completion. */ 731 for (p = word; 732 p > tmp_command 733 && strchr (gdb_completer_file_name_break_characters, 734 p[-1]) == NULL; 735 p--) 736 ; 737 rl_completer_word_break_characters = 738 gdb_completer_file_name_break_characters; 739 } 740 else if (c->completer == location_completer) 741 { 742 for (p = word; 743 p > tmp_command 744 && p[-1] != ' ' && p[-1] != '\t'; 745 p--) 746 ; 747 } 748 if (reason != handle_brkchars && c->completer != NULL) 749 list = (*c->completer) (c, p, word); 750 } 751 } 752 } 753 754 return list; 755 } 756 /* Generate completions all at once. Returns a vector of strings. 757 Each element is allocated with xmalloc. It can also return NULL if 758 there are no completions. 759 760 TEXT is the caller's idea of the "word" we are looking at. 761 762 LINE_BUFFER is available to be looked at; it contains the entire 763 text of the line. 764 765 POINT is the offset in that line of the cursor. You 766 should pretend that the line ends at POINT. */ 767 768 VEC (char_ptr) * 769 complete_line (const char *text, char *line_buffer, int point) 770 { 771 return complete_line_internal (text, line_buffer, 772 point, handle_completions); 773 } 774 775 /* Complete on command names. Used by "help". */ 776 VEC (char_ptr) * 777 command_completer (struct cmd_list_element *ignore, 778 char *text, char *word) 779 { 780 return complete_line_internal (word, text, 781 strlen (text), handle_help); 782 } 783 784 /* Complete on signals. */ 785 786 VEC (char_ptr) * 787 signal_completer (struct cmd_list_element *ignore, 788 char *text, char *word) 789 { 790 VEC (char_ptr) *return_val = NULL; 791 size_t len = strlen (word); 792 enum gdb_signal signum; 793 const char *signame; 794 795 for (signum = GDB_SIGNAL_FIRST; signum != GDB_SIGNAL_LAST; ++signum) 796 { 797 /* Can't handle this, so skip it. */ 798 if (signum == GDB_SIGNAL_0) 799 continue; 800 801 signame = gdb_signal_to_name (signum); 802 803 /* Ignore the unknown signal case. */ 804 if (!signame || strcmp (signame, "?") == 0) 805 continue; 806 807 if (strncasecmp (signame, word, len) == 0) 808 VEC_safe_push (char_ptr, return_val, xstrdup (signame)); 809 } 810 811 return return_val; 812 } 813 814 /* Get the list of chars that are considered as word breaks 815 for the current command. */ 816 817 char * 818 gdb_completion_word_break_characters (void) 819 { 820 VEC (char_ptr) *list; 821 822 list = complete_line_internal (rl_line_buffer, rl_line_buffer, rl_point, 823 handle_brkchars); 824 gdb_assert (list == NULL); 825 return rl_completer_word_break_characters; 826 } 827 828 /* Generate completions one by one for the completer. Each time we 829 are called return another potential completion to the caller. 830 line_completion just completes on commands or passes the buck to 831 the command's completer function, the stuff specific to symbol 832 completion is in make_symbol_completion_list. 833 834 TEXT is the caller's idea of the "word" we are looking at. 835 836 MATCHES is the number of matches that have currently been collected 837 from calling this completion function. When zero, then we need to 838 initialize, otherwise the initialization has already taken place 839 and we can just return the next potential completion string. 840 841 LINE_BUFFER is available to be looked at; it contains the entire 842 text of the line. POINT is the offset in that line of the cursor. 843 You should pretend that the line ends at POINT. 844 845 Returns NULL if there are no more completions, else a pointer to a 846 string which is a possible completion, it is the caller's 847 responsibility to free the string. */ 848 849 static char * 850 line_completion_function (const char *text, int matches, 851 char *line_buffer, int point) 852 { 853 static VEC (char_ptr) *list = NULL; /* Cache of completions. */ 854 static int index; /* Next cached completion. */ 855 char *output = NULL; 856 857 if (matches == 0) 858 { 859 /* The caller is beginning to accumulate a new set of 860 completions, so we need to find all of them now, and cache 861 them for returning one at a time on future calls. */ 862 863 if (list) 864 { 865 /* Free the storage used by LIST, but not by the strings 866 inside. This is because rl_complete_internal () frees 867 the strings. As complete_line may abort by calling 868 `error' clear LIST now. */ 869 VEC_free (char_ptr, list); 870 } 871 index = 0; 872 list = complete_line (text, line_buffer, point); 873 } 874 875 /* If we found a list of potential completions during initialization 876 then dole them out one at a time. After returning the last one, 877 return NULL (and continue to do so) each time we are called after 878 that, until a new list is available. */ 879 880 if (list) 881 { 882 if (index < VEC_length (char_ptr, list)) 883 { 884 output = VEC_index (char_ptr, list, index); 885 index++; 886 } 887 } 888 889 #if 0 890 /* Can't do this because readline hasn't yet checked the word breaks 891 for figuring out whether to insert a quote. */ 892 if (output == NULL) 893 /* Make sure the word break characters are set back to normal for 894 the next time that readline tries to complete something. */ 895 rl_completer_word_break_characters = 896 current_language->la_word_break_characters(); 897 #endif 898 899 return (output); 900 } 901 902 /* Skip over the possibly quoted word STR (as defined by the quote 903 characters QUOTECHARS and the word break characters BREAKCHARS). 904 Returns pointer to the location after the "word". If either 905 QUOTECHARS or BREAKCHARS is NULL, use the same values used by the 906 completer. */ 907 908 char * 909 skip_quoted_chars (char *str, char *quotechars, char *breakchars) 910 { 911 char quote_char = '\0'; 912 char *scan; 913 914 if (quotechars == NULL) 915 quotechars = gdb_completer_quote_characters; 916 917 if (breakchars == NULL) 918 breakchars = current_language->la_word_break_characters(); 919 920 for (scan = str; *scan != '\0'; scan++) 921 { 922 if (quote_char != '\0') 923 { 924 /* Ignore everything until the matching close quote char. */ 925 if (*scan == quote_char) 926 { 927 /* Found matching close quote. */ 928 scan++; 929 break; 930 } 931 } 932 else if (strchr (quotechars, *scan)) 933 { 934 /* Found start of a quoted string. */ 935 quote_char = *scan; 936 } 937 else if (strchr (breakchars, *scan)) 938 { 939 break; 940 } 941 } 942 943 return (scan); 944 } 945 946 /* Skip over the possibly quoted word STR (as defined by the quote 947 characters and word break characters used by the completer). 948 Returns pointer to the location after the "word". */ 949 950 char * 951 skip_quoted (char *str) 952 { 953 return skip_quoted_chars (str, NULL, NULL); 954 } 955