Subject: bug#73728: 29.3; Specifing an --alternate-editor for emacscleintw.exe with custom --init-directory does not work on Windows

From: Eli Zaretskii <[email-masked]>
Date: Thu, 10 Oct 2024 14:39:55 +0300

> Date: Thu, 10 Oct 2024 08:56:43 +0200
> From:  Jonas Großekathöfer via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <[email-masked]>
> 
> I want emacsclientw.exe to start up an emacs daemon with a custom --init-directory in case no server is
> running. For that case, I think, I need to explicitly set the value for the "--alternate-editor"-flag to something
> like:
> 
> -a "%UserProfile%\bin\emacs-29.3\bin\runemacs.exe --init-directory
> %APPDATA%\Dotfiles\emacs\.emacs.d\"

Can you explain why you need a custom --init-directory in that case?

> However, doing so results in the following error: "file name or argument required". This is also true when
> specifing a relative path (i.e. AppData\Dotfiles\emacs\.emacs.d\).
> 
> After some more trials with single and/or double qoutes (details see below), I got the impression that this
> behavior is unlikely intentional. And I am somewhat confident, that more then one oy my many attempts
> should've been successful. (Note that I raised this issue first here:
> https://emacs.stackexchange.com/a/82355/30098)
> 
> For completeness, the full comand ("Target") I am trying to run is: 
> 
> %UserProfile%\bin\emacs-29.3\bin\emacsclientw.exe -a '%UserProfile%\bin\emacs-29.3\bin\runemacs.exe -
> -init-directory "AppData\Dotfiles\emacs\.emacs.d\"' -n -c --server-file
> %APPDATA%\Dotfiles\emacs\.emacs.d\server\server 
> 
> that command starts in
> 
> %UserProfile%
> 
> ATM, I have as a work around a shortcut to emacscleintw.exe without an -a flag. Before using it, I once have
> to run:
> 
> %UserProfile%\bin\emacs-29.3\bin\runemacs.exe --daemon ----init-directory
> %APPDATA%\Dotfiles\emacs\.emacs.d\
> 
> Obviously, I would rather have to have it all in one place.
> 
> And here are the Details, regarding the use of quotes with or without relative path for --init-directory:
> 
> For the several options using quotes, I got the following problems, depending on whether I put single or
> double quoutes for the whole argument or just the path:
> 
> Double quotes around the argmument and single quotes for the path, using the full path:
> 
> -a "%UserProfile%\bin\emacs-29.3\bin\runemacs.exe --init-directory
> '%APPDATA%\Dotfiles\emacs\.emacs.d\'"
> 
> --> Warning: "Warning (initialization): Unable to create `user-emacs-directory'
> (c:/Users/gross20/'C:/Users/gross20/AppData/Roaming/Dotfiles/emacs/.emacs.d/'/)."
> 
> Single quotes around the argmument and double quotes for the path, using the full path:
> 
> -a '%UserProfile%\bin\emacs-29.3\bin\runemacs.exe --init-directory
> "%APPDATA%\Dotfiles\emacs\.emacs.d\"'
> 
> --> Error: Try --help for more information
> 
> Double quotes around the argmument and single quotes for the path, using a relative path:
> 
> -a "%UserProfile%\bin\emacs-29.3\bin\runemacs.exe --init-directory
> 'AppData\Roaming\Dotfiles\emacs\.emacs.d\'"
> 
> --> Strarts without errors or warning, but the user-emacs-directory is
> "c:/Users/XXX/'AppData/Roaming/Dotfiles/emacs/.emacs.d/'/" (Note the single quote in the folder name for
> AppData)
> 
> Single quotes around the argmument and single quotes for the path, using a relative path:
> 
> -a '%UserProfile%\bin\emacs-29.3\bin\runemacs.exe --init-directory "AppData\Dotfiles\emacs\.emacs.d\"'
> 
> --> Error: Try --help for more information

Don't use single quotes, they are not supported by Windows.

But I admit I don't understand why you needed nested quotes at all.
What happens if you use double quotes around the entire argument of
the -a option?