From: Andrew Burgess <aburgess@redhat.com>
To: gdb-patches@sourceware.org
Cc: Andrew Burgess <aburgess@redhat.com>
Subject: [PATCHv6 09/14] gdb: implement readline rl_directory_rewrite_hook callback
Date: Fri, 30 Aug 2024 12:33:49 +0100 [thread overview]
Message-ID: <57af3bf38f0b7fb55d2e68f0adf1aa43e5d78322.1725017349.git.aburgess@redhat.com> (raw)
In-Reply-To: <cover.1725017349.git.aburgess@redhat.com>
Implement the readline rl_directory_rewrite_hook callback function,
this is used when readline needs to offer completions from within a
directory. The important thing is that this function should remove
any escaping, this allows GDB to correctly offer completions in
situations like this:
(gdb) file /tmp/directory\ with\ spaces/<TAB><TAB>
Note the escaping in 'directory\ with\ spaces'. Without the
rl_directory_rewrite_hook callback readline will try to open a
directory literally called '/tmp/directory\ with\ spaces' which
obviously doesn't exist.
There are tests added to cover this new functionality.
---
gdb/completer.c | 21 +++++++++++++++++++
.../gdb.base/filename-completion.exp | 12 +++++++++++
2 files changed, 33 insertions(+)
diff --git a/gdb/completer.c b/gdb/completer.c
index b0e999ef514..b80649c5260 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -321,6 +321,26 @@ gdb_completer_file_name_dequote (char *filename, int quote_char)
return strdup (tmp.c_str ());
}
+/* Implement readline's rl_directory_rewrite_hook. Remove any quoting from
+ the string *DIRNAME,update *DIRNAME, and return non-zero. If *DIRNAME
+ doesn't need updating then return zero. See readline docs for more
+ information. */
+
+static int
+gdb_completer_directory_rewrite (char **dirname)
+{
+ if (!rl_completion_found_quote)
+ return 0;
+
+ int quote_char = rl_completion_quote_character;
+ char *new_dirname
+ = gdb_completer_file_name_dequote (*dirname, quote_char);
+ free (*dirname);
+ *dirname = new_dirname;
+
+ return 1;
+}
+
/* Apply character escaping to the filename in TEXT and return a newly
allocated buffer containing the possibly updated filename.
@@ -3416,6 +3436,7 @@ _initialize_completer ()
rl_filename_quote_characters = " \t\n\\\"'";
rl_filename_dequoting_function = gdb_completer_file_name_dequote;
rl_filename_quoting_function = gdb_completer_file_name_quote;
+ rl_directory_rewrite_hook = gdb_completer_directory_rewrite;
add_setshow_zuinteger_unlimited_cmd ("max-completions", no_class,
&max_completions, _("\
diff --git a/gdb/testsuite/gdb.base/filename-completion.exp b/gdb/testsuite/gdb.base/filename-completion.exp
index a4b411c1c67..cf00d007ca7 100644
--- a/gdb/testsuite/gdb.base/filename-completion.exp
+++ b/gdb/testsuite/gdb.base/filename-completion.exp
@@ -170,6 +170,11 @@ proc run_quoting_and_escaping_tests { root } {
set dq "\\\""
}
+ test_gdb_complete_unique "${cmd} ${qc}${root}/bb2/dir${sp}1/" \
+ "${cmd} ${qc}${root}/bb2/dir${sp}1/unique${sp}file${qc}" " " \
+ false \
+ "expand a unique file name in a directory containing a space"
+
test_gdb_complete_filename_multiple "$cmd ${qc}${root}/bb2/" \
"d" "ir${sp}" {
"dir 1/"
@@ -177,6 +182,13 @@ proc run_quoting_and_escaping_tests { root } {
} "" "${qc}" false \
"expand multiple directory names containing spaces"
+ test_gdb_complete_filename_multiple "${cmd} ${qc}${root}/bb2/dir${sp}2/" \
+ "f" "ile${sp}" {
+ "file 1"
+ "file 2"
+ } "" "${qc}" false \
+ "expand contents of a directory containing a space"
+
test_gdb_complete_filename_multiple "$cmd ${qc}${root}/aaa/" \
"a" "a${sp}" {
"aa bb"
--
2.25.4
next prev parent reply other threads:[~2024-08-30 11:37 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-29 11:42 [PATCH 0/6] Further filename completion improvements Andrew Burgess
2024-03-29 11:42 ` [PATCH 1/6] gdb: improve escaping when completing filenames Andrew Burgess
2024-03-30 23:48 ` Lancelot SIX
2024-03-29 11:42 ` [PATCH 2/6] gdb: move display of completion results into completion_result class Andrew Burgess
2024-03-29 12:14 ` Eli Zaretskii
2024-03-30 23:30 ` Lancelot SIX
2024-03-31 5:49 ` Eli Zaretskii
2024-04-12 17:24 ` Andrew Burgess
2024-04-12 18:42 ` Eli Zaretskii
2024-04-12 22:20 ` Andrew Burgess
2024-04-13 6:36 ` Eli Zaretskii
2024-04-13 9:09 ` Andrew Burgess
2024-04-13 9:46 ` Eli Zaretskii
2024-04-12 17:31 ` Andrew Burgess
2024-03-29 11:42 ` [PATCH 3/6] gdb: simplify completion_result::print_matches Andrew Burgess
2024-03-30 23:48 ` Lancelot SIX
2024-03-29 11:42 ` [PATCH 4/6] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-03-30 23:49 ` Lancelot SIX
2024-03-31 5:55 ` Eli Zaretskii
2024-04-12 17:42 ` Andrew Burgess
2024-04-12 18:44 ` Eli Zaretskii
2024-04-12 22:29 ` Andrew Burgess
2024-04-13 6:39 ` Eli Zaretskii
2024-03-29 11:42 ` [PATCH 5/6] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-03-29 11:42 ` [PATCH 6/6] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-04-20 9:10 ` [PATCHv2 0/8] Further filename completion improvements Andrew Burgess
2024-04-20 9:10 ` [PATCHv2 1/8] gdb/doc: document how filename arguments are formatted Andrew Burgess
2024-04-20 9:44 ` Eli Zaretskii
2024-04-27 10:01 ` Andrew Burgess
2024-04-27 10:06 ` Eli Zaretskii
2024-04-29 9:10 ` Andrew Burgess
2024-04-20 9:10 ` [PATCHv2 2/8] gdb: split apart two different types of filename completion Andrew Burgess
2024-04-20 9:10 ` [PATCHv2 3/8] gdb: improve escaping when completing filenames Andrew Burgess
2024-04-20 9:10 ` [PATCHv2 4/8] gdb: move display of completion results into completion_result class Andrew Burgess
2024-04-20 9:10 ` [PATCHv2 5/8] gdb: simplify completion_result::print_matches Andrew Burgess
2024-04-20 9:10 ` [PATCHv2 6/8] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-04-20 9:10 ` [PATCHv2 7/8] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-04-20 9:10 ` [PATCHv2 8/8] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-06-05 13:36 ` [PATCHv3 0/7] Further filename completion improvements Andrew Burgess
2024-06-05 13:36 ` [PATCHv3 1/7] gdb: split apart two different types of filename completion Andrew Burgess
2024-06-06 16:18 ` Tom Tromey
2024-06-17 13:05 ` Andrew Burgess
2024-06-05 13:36 ` [PATCHv3 2/7] gdb: improve escaping when completing filenames Andrew Burgess
2024-06-05 13:36 ` [PATCHv3 3/7] gdb: move display of completion results into completion_result class Andrew Burgess
2024-06-06 16:19 ` Tom Tromey
2024-06-05 13:36 ` [PATCHv3 4/7] gdb: simplify completion_result::print_matches Andrew Burgess
2024-06-05 13:36 ` [PATCHv3 5/7] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-06-06 16:14 ` Tom Tromey
2024-06-17 13:29 ` Andrew Burgess
2024-06-05 13:36 ` [PATCHv3 6/7] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-06-05 13:36 ` [PATCHv3 7/7] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-06-06 16:24 ` [PATCHv3 0/7] Further filename completion improvements Tom Tromey
2024-07-04 14:20 ` [PATCHv4 00/14] " Andrew Burgess
2024-07-04 14:20 ` [PATCHv4 01/14] gdb: split apart two different types of filename completion Andrew Burgess
2024-07-04 14:20 ` [PATCHv4 02/14] gdb: deprecated filename_completer and associated functions Andrew Burgess
2024-07-04 14:20 ` [PATCHv4 03/14] gdb: improve escaping when completing filenames Andrew Burgess
2024-07-04 14:20 ` [PATCHv4 04/14] gdb: move display of completion results into completion_result class Andrew Burgess
2024-07-04 14:21 ` [PATCHv4 05/14] gdb: simplify completion_result::print_matches Andrew Burgess
2024-07-04 14:21 ` [PATCHv4 06/14] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-07-04 14:21 ` [PATCHv4 07/14] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-07-04 14:21 ` [PATCHv4 08/14] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-07-04 14:21 ` [PATCHv4 09/14] gdb: implement readline rl_directory_rewrite_hook callback Andrew Burgess
2024-07-04 14:21 ` [PATCHv4 10/14] gdb: new extract_single_filename_arg helper function Andrew Burgess
2024-07-04 14:21 ` [PATCHv4 11/14] gdb: extend completion of quoted filenames to work in brkchars phase Andrew Burgess
2024-07-04 14:21 ` [PATCHv4 12/14] gdb: add remove-symbol-file command completion Andrew Burgess
2024-07-04 15:38 ` Eli Zaretskii
2024-07-04 14:21 ` [PATCHv4 13/14] gdb: allow quoted filenames for commands that have custom completion Andrew Burgess
2024-07-04 15:42 ` Eli Zaretskii
2024-08-20 17:18 ` Andrew Burgess
2024-07-04 14:21 ` [PATCHv4 14/14] gdb: 'target ...' commands now expect quoted/escaped filenames Andrew Burgess
2024-07-04 15:34 ` Eli Zaretskii
2024-08-20 17:10 ` [PATCHv5 00/14] Further filename completion improvements Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 01/14] gdb: split apart two different types of filename completion Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 02/14] gdb: deprecated filename_completer and associated functions Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 03/14] gdb: improve escaping when completing filenames Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 04/14] gdb: move display of completion results into completion_result class Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 05/14] gdb: simplify completion_result::print_matches Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 06/14] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 07/14] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 08/14] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 09/14] gdb: implement readline rl_directory_rewrite_hook callback Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 10/14] gdb: new extract_single_filename_arg helper function Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 11/14] gdb: extend completion of quoted filenames to work in brkchars phase Andrew Burgess
2024-08-20 17:10 ` [PATCHv5 12/14] gdb: add remove-symbol-file command completion Andrew Burgess
2024-08-20 18:46 ` Eli Zaretskii
2024-08-20 17:10 ` [PATCHv5 13/14] gdb: allow quoted filenames for commands that have custom completion Andrew Burgess
2024-08-20 18:47 ` Eli Zaretskii
2024-08-20 17:10 ` [PATCHv5 14/14] gdb: 'target ...' commands now expect quoted/escaped filenames Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 00/14] Further filename completion improvements Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 01/14] gdb: split apart two different types of filename completion Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 02/14] gdb: deprecated filename_completer and associated functions Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 03/14] gdb: improve escaping when completing filenames Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 04/14] gdb: move display of completion results into completion_result class Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 05/14] gdb: simplify completion_result::print_matches Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 06/14] gdb: add match formatter mechanism for 'complete' command output Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 07/14] gdb: apply escaping to filenames in 'complete' results Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 08/14] gdb: improve gdb_rl_find_completion_word for quoted words Andrew Burgess
2024-08-30 11:33 ` Andrew Burgess [this message]
2024-08-30 11:33 ` [PATCHv6 10/14] gdb: new extract_single_filename_arg helper function Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 11/14] gdb: extend completion of quoted filenames to work in brkchars phase Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 12/14] gdb: add remove-symbol-file command completion Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 13/14] gdb: allow quoted filenames for commands that have custom completion Andrew Burgess
2024-08-30 11:33 ` [PATCHv6 14/14] gdb: 'target ...' commands now expect quoted/escaped filenames Andrew Burgess
2024-09-07 19:57 ` [PATCHv6 00/14] Further filename completion improvements Andrew Burgess
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=57af3bf38f0b7fb55d2e68f0adf1aa43e5d78322.1725017349.git.aburgess@redhat.com \
--to=aburgess@redhat.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox