diff options
author | Pedro Alves <palves@redhat.com> | 2019-06-13 00:06:52 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2019-06-13 00:06:52 +0100 |
commit | 00b56dbe7016bc33f882525a47faab943fdeda9a (patch) | |
tree | ddf551efcbf295a750aaa6880eee2704b579b37e /gdb/completer.c | |
parent | e4c4ac46e8e7ef92311181f85b193af369897151 (diff) | |
download | gdb-00b56dbe7016bc33f882525a47faab943fdeda9a.zip gdb-00b56dbe7016bc33f882525a47faab943fdeda9a.tar.gz gdb-00b56dbe7016bc33f882525a47faab943fdeda9a.tar.bz2 |
Fix latent bug in custom word point completion handling
Without this fix, if we switch the "print" completer to custom word
point handling, we regress gdb.base/completion.exp like this:
(gdb) p "break1.c FAIL: gdb.base/completion.exp: complete 'p "break1' (timeout)
The problem is that completing an expression that starts with double
quotes, and resolves to a filename, like this:
(gdb) p "break1[TAB]
would change from this, with current master:
(gdb) p "break1.c"|
^^^^^^^^^^|
\- cursor here
to this:
(gdb) p "break1.c |
^^^^^^^^^^|
\- quote replaced by space
The issue is that completer.c:advance_to_completion_word misses
telling the completion tracker to emulate readline's handling of
completing a string when rl_find_completion_word returns a delimiter.
This commit fixes the latent bug.
gdb/ChangeLog:
2019-06-13 Pedro Alves <palves@redhat.com>
* completer.c (advance_to_completion_word): Handle delimiters.
Diffstat (limited to 'gdb/completer.c')
-rw-r--r-- | gdb/completer.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gdb/completer.c b/gdb/completer.c index d4773f2..03d0d0e 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -365,11 +365,18 @@ advance_to_expression_complete_word_point (completion_tracker &tracker, info.quote_characters = gdb_completer_quote_characters; info.basic_quote_characters = rl_basic_quote_characters; + int delimiter; const char *start - = gdb_rl_find_completion_word (&info, NULL, NULL, text); + = gdb_rl_find_completion_word (&info, NULL, &delimiter, text); tracker.advance_custom_word_point_by (start - text); + if (delimiter) + { + tracker.set_quote_char (delimiter); + tracker.set_suppress_append_ws (true); + } + return start; } |