From ca73ec71d5747d2c0c68b8b562cee3bb80b773ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Fri, 12 Jun 2026 18:49:48 +0200 Subject: [PATCH] selection: escape quotes in file names being DnD:ed on the command line Closes #2363 --- CHANGELOG.md | 2 ++ selection.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cde48392..f1820317 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -104,6 +104,8 @@ has been enabled, or foot is using 10-bit surface ([#2370][2370]). * Kitty text-size protocol: fix crash when text is zero-length ([#2364][2364]). +* Escape quotes in file names being DnD:ed on the command line + ([#2363][2363]). [2353]: https://codeberg.org/dnkl/foot/issues/2353 [2352]: https://codeberg.org/dnkl/foot/issues/2352 diff --git a/selection.c b/selection.c index 4a62369d..dad81994 100644 --- a/selection.c +++ b/selection.c @@ -2098,7 +2098,16 @@ decode_one_uri(struct clipboard_receive *ctx, char *uri, size_t len) if (ctx->quote_paths) ctx->cb("'", 1, ctx->user); - ctx->cb(path, strlen(path), ctx->user); + char *path_remaining = path; + for (char *next_quote = strchr(path_remaining, '\''); + next_quote != NULL; + path_remaining = next_quote + 1, + next_quote = strchr(path_remaining, '\'')) + { + ctx->cb(path_remaining, next_quote - path_remaining, ctx->user); + ctx->cb("\\'", 2, ctx->user); + } + ctx->cb(path_remaining, strlen(path_remaining), ctx->user); if (ctx->quote_paths) ctx->cb("'", 1, ctx->user);