diff options
Diffstat (limited to 'gdb/completer.c')
-rw-r--r-- | gdb/completer.c | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/gdb/completer.c b/gdb/completer.c index 45adc62..9183e2a 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -84,29 +84,30 @@ char *line_completion_function (const char *text, int matches, readline library sees one in any of the current completion strings, it thinks that the string needs to be quoted and automatically supplies a leading quote. */ -static char *gdb_completer_command_word_break_characters = +static const char gdb_completer_command_word_break_characters[] = " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,"; /* When completing on file names, we remove from the list of word break characters any characters that are commonly used in file names, such as '-', '+', '~', etc. Otherwise, readline displays incorrect completion candidates. */ -#ifdef HAVE_DOS_BASED_FILE_SYSTEM /* MS-DOS and MS-Windows use colon as part of the drive spec, and most programs support @foo style response files. */ -static char *gdb_completer_file_name_break_characters = " \t\n*|\"';?><@"; +static const char gdb_completer_file_name_break_characters[] = +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + " \t\n*|\"';?><@"; #else -static char *gdb_completer_file_name_break_characters = " \t\n*|\"';:?><"; + " \t\n*|\"';:?><"; #endif /* Characters that can be used to quote completion strings. Note that we can't include '"' because the gdb C parser treats such quoted sequences as strings. */ -static char *gdb_completer_quote_characters = "'"; +static const char gdb_completer_quote_characters[] = "'"; /* Accessor for some completer data that may interest other files. */ -char * +const char * get_gdb_completer_quote_characters (void) { return gdb_completer_quote_characters; @@ -652,16 +653,26 @@ expression_completer (struct cmd_list_element *ignore, /* See definition in completer.h. */ void +set_rl_completer_word_break_characters (const char *break_chars) +{ + rl_completer_word_break_characters = (char *) break_chars; +} + +/* See definition in completer.h. */ + +void set_gdb_completion_word_break_characters (completer_ftype *fn) { + const char *break_chars; + /* So far we are only interested in differentiating filename completers from everything else. */ if (fn == filename_completer) - rl_completer_word_break_characters - = gdb_completer_file_name_break_characters; + break_chars = gdb_completer_file_name_break_characters; else - rl_completer_word_break_characters - = gdb_completer_command_word_break_characters; + break_chars = gdb_completer_command_word_break_characters; + + set_rl_completer_word_break_characters (break_chars); } /* Here are some useful test cases for completion. FIXME: These @@ -743,8 +754,8 @@ complete_line_internal (const char *text, then we will switch to the special word break set for command strings, which leaves out the '-' character used in some commands. */ - rl_completer_word_break_characters = - current_language->la_word_break_characters(); + set_rl_completer_word_break_characters + (current_language->la_word_break_characters()); /* Decide whether to complete on a list of gdb commands or on symbols. */ @@ -821,8 +832,8 @@ complete_line_internal (const char *text, } /* Ensure that readline does the right thing with respect to inserting quotes. */ - rl_completer_word_break_characters = - gdb_completer_command_word_break_characters; + set_rl_completer_word_break_characters + (gdb_completer_command_word_break_characters); } } else @@ -848,8 +859,8 @@ complete_line_internal (const char *text, /* Ensure that readline does the right thing with respect to inserting quotes. */ - rl_completer_word_break_characters = - gdb_completer_command_word_break_characters; + set_rl_completer_word_break_characters + (gdb_completer_command_word_break_characters); } else if (reason == handle_help) list = NULL; @@ -857,8 +868,8 @@ complete_line_internal (const char *text, { if (reason != handle_brkchars) list = complete_on_enum (c->enums, p, word); - rl_completer_word_break_characters = - gdb_completer_command_word_break_characters; + set_rl_completer_word_break_characters + (gdb_completer_command_word_break_characters); } else { @@ -879,8 +890,8 @@ complete_line_internal (const char *text, && strchr (gdb_completer_file_name_break_characters, p[-1]) == NULL; p--) ; - rl_completer_word_break_characters = - gdb_completer_file_name_break_characters; + set_rl_completer_word_break_characters + (gdb_completer_file_name_break_characters); } if (reason == handle_brkchars && c->completer_handle_brkchars != NULL) @@ -913,8 +924,8 @@ complete_line_internal (const char *text, /* Ensure that readline does the right thing with respect to inserting quotes. */ - rl_completer_word_break_characters = - gdb_completer_command_word_break_characters; + set_rl_completer_word_break_characters + (gdb_completer_command_word_break_characters); } } else if (reason == handle_help) @@ -947,8 +958,8 @@ complete_line_internal (const char *text, p[-1]) == NULL; p--) ; - rl_completer_word_break_characters = - gdb_completer_file_name_break_characters; + set_rl_completer_word_break_characters + (gdb_completer_file_name_break_characters); } if (reason == handle_brkchars && c->completer_handle_brkchars != NULL) |