Subject: bug#71935: split-string-and-unquote mishandles dired-listing-switches with '

From: Eli Zaretskii <[email-masked]>
Date: Thu, 04 Jul 2024 21:34:22 +0300

> From: Juri Linkov <[email-masked]>
> Cc: [email-masked]
> Date: Thu, 04 Jul 2024 21:12:01 +0300
> 
> >> >> 1. (setopt dired-listing-switches "-al --block-size='1")
> >> >> 2. C-x d /tmp/*
> >> 
> >> This part of insert-directory is used only in case of 1-2 above,
> >> i.e. for wildcard '/tmp/*'.  In this case the value of 'switches'
> >> is "--dired -N -al --block-size='1", and 'shell-quote-argument'
> >> returns "--dired\\ -N\\ -al\\ --block-size\\=\\'1" that fails.
> >
> > I meant to call shell-quote-argument on each option, before they are
> > concatenated.
> 
> But switches are never unconcatenated in a list,
> they come from the string:
> 
>   (setopt dired-listing-switches "-al --block-size='1")

If they are a single string, split it with split-string-and-unquote,
then concatenate after running each one through shell-quote-argument.
If they are a list of strings, quote each one before concatenating
with mapconcat.