Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Path with spaces in _canonical_paths



On Wed, Nov 23, 2022 at 2:24 PM Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx> wrote:
>
> Yes.  That's why the comment says s/$origpref/$canpref/ rather than
> s/$canpref/$origpref/ as the code in HEAD says.

Ah, I see.  The comment is explaining what the else-branch OUGHT to be
accomplishing, rather than what it actually IS doing.  That was not
clear.

> I'm not sure off the top of my head.  Perhaps that patch needs an extra
> ${(q)} somewhere?  Or perhaps we should add -Q to the if() codepath?
> What do callers expect?

Callers expect it in the form from the if-branch (what compadd
produces), so I think the else-branch needs some variant of (q).

Thomas, can you try this?

diff --git a/Completion/Unix/Type/_canonical_paths
b/Completion/Unix/Type/_canonical_paths
index a8fbbb524..1444bc165 100644
--- a/Completion/Unix/Type/_canonical_paths
+++ b/Completion/Unix/Type/_canonical_paths
@@ -42,7 +42,8 @@ _canonical_paths_add_paths () {
     # ### Ideally, this codepath would do what the 'if' above does,
     # ### but telling compadd to pretend the "word on the command line"
     # ### is ${"the word on the command line"/$origpref/$canpref}.
-    matches+=(${${(M)files:#$canpref*}/$canpref/$origpref})
+    # ### The following approximates that.
+    matches+=(${(q)${(M)files:#$canpref*}/$canpref/$origpref})
   fi

   for subdir in $expref?*(@); do




Messages sorted by: Reverse Date, Date, Thread, Author