From: "Sebastien Vauban" <sva-news-D0wtAvR13HarG/iDocfnWg@public.gmane.org>
To: help-gnu-emacs-mXXj517/zsQ@public.gmane.org
Subject: Re: Problem quoting expression to be eval'ed by emacsclient
Date: Wed, 30 Oct 2013 10:59:24 +0100 [thread overview]
Message-ID: <86li1b84g3.fsf@somewhere.org> (raw)
In-Reply-To: mailman.4697.1382708854.10748.help-gnu-emacs@gnu.org
Eli Zaretskii wrote:
>> From: "Sebastien Vauban" <sva-news-D0wtAvR13HarG/iDocfnWg@public.gmane.org>
>> Date: Fri, 25 Oct 2013 14:37:28 +0200
>>
>>>> The above tests I made are from a Cygwin Zsh session.
>>>
>>> And emacsclient was a Cygwin build or a native build? If the latter, your
>>> problems could be due to this mix. (Your example works for me from cmd and
>>> even from MSYS Bash.)
>>
>> That does indeed makes a difference:
>>
>> --8<---------------cut here---------------start------------->8---
>> $ emacsclient -e "(message \"hello\")"
>>
>> *ERROR*: End of file during parsing
>> --8<---------------cut here---------------end--------------->8---
>>
>> --8<---------------cut here---------------start------------->8---
>> $ /usr/bin/emacsclient -e "(message \"hello\")"
>> /usr/bin/emacsclient: can't find socket; have you started the server?
>> To start the server in Emacs, type "M-x server-start".
>> "hello"
>> --8<---------------cut here---------------end--------------->8---
>
> I'm confused: didn't you say that /usr/bin is a Cygwin directory?
Yes, it is.
> If so, /usr/bin/emacsclient is a Cygwin build of emacsclient, right?
Right.
> Then what kind of emacsclient is in ~/bin?
That was answered later in my post; ~/bin/emacsclient is the following script:
--8<---------------cut here---------------start------------->8---
"C:/Program Files (x86)/emacs-trunk/bin/emacsclient" $@
--8<---------------cut here---------------end--------------->8---
That's (mostly) a way to bypass the Cygwin emacsclient, as ~/bin is before
/usr/bin in my PATH environment variable:
--8<---------------cut here---------------start------------->8---
/cygdrive/d/Users/sva/bin
/cygdrive/d/Users/sva/winbin
...
/usr/bin
...
/cygdrive/c/Windows/system32
/cygdrive/c/Windows
...
--8<---------------cut here---------------end--------------->8---
IOW, a way to be able to instruct which "real" emacsclient program I want to
invoke when I type emacsclient in a shell, without the need to play with the
PATH environment variable.
>> However, that still leaves me with the following problem:
>>
>> How can I work in a correct shell on Windows (read: not `cmd.exe'), and
>> edit in my graphical Emacs w32?
>
> My best advice is to avoid that combination entirely. It's just too
> fragile and replete of subtle "issues".
>
> Let me turn the table and ask why do you need to invoke emacsclient
> from the shell command line? Why not simply visit the file from the
> running Emacs? (You do have an Emacs session running at all times,
> right?) emacsclient is mainly for letting other programs ask Emacs to
> edit a file. Since the w32 Emacs does not support multiple tty
> devices in the same session, even invoking "emacsclient -t" bu hand
> doesn't make sense when the server is the w32 Emacs. So I wonder why
> do you use this at all.
You're right asking such questions about the "why". It sometimes can be very
enlightening.
So, here, in my case, I almost only use `emacsclient' from "sendpatch", a shell
script (I wrote) which automates the sending of a diff per email, for other
colleagues to review and see what we commit in our SVN server.
High-level, what sendpatch does is the following:
1. it makes a patch file with the output of "svn diff",
2. asks for an email subject,
3. launches the preferred EDITOR of the user to let him write a more complete
commit message,
4. commits the diff in SVN, and
5. sends the "review" on a mailing list.
In my case, EDITOR is `emacsclient'. For other colleagues, it can be `vi' or
some such.
That script is written in Bash; it heavily relies on standard Unix commands
such as `cut', `grep', `head', `awk', etc.
> Another pertinent question is: why not use the Cygwin build of Emacs?
> It does support GUI sessions, and can even be built with the w32
> graphics as its "toolkit".
(... searching for more info about this...)
You're talking of the Cygwin package emacs-w32, right?
I wasn't aware of it. I will give it a try...
I thought that the graphical Cygwin Emacs was only a X-version (installed via
the Cygwin package emacs-X11, IIUC).
> If you use a Cygwin Emacs and emacsclient from the Cygwin shell, I don't
> expect you to have any problems with quoting.
>
> But if, for some reason, you must use this crazy mix, then I suggest
> to at least switch to the MSYS Bash. It is friendlier to native
> programs than Cygwin shells, although you will have problems there as
> well.
But I'd loose Zsh, right? OK, honestly, apart using `M-q' (to type another
command in the middle of a long command) and `vared' (to interactively a edit
variable), I don't really use special Zsh features either.
>> - an Emacs server must be contacted by an `emacsclient' of the same release
>
> This is not really accurate. It's just that the format of the server
> file changed between Emacs 23 and 24, so you cannot mix client and
> server that are on different sides of that schism.
Thanks for the precision.
>> - Cygwin (/usr/bin) is second in my PATH, after ~/bin
>
> Why do you need Cygwin executables on your PATH?
You mean from PATH as seen in a CMD shell? Or from a Bash shell?
I need the Cygwin executables them all the time in my Bash sessions.
And I need the Cygwin executables from Emacs as well (for the `M-x
find-grep-dired' or `M-x rgrep' commands, among others, which I use quite
extensively -- `rgrep', at least). And, there, I need them to be before the
default Windows executable, because of `find' (which also exist in
c:\Windows\system32).
Though, it's certainly possible to `setq' a couple (or a lot?) of vars to avoid
adding C:/cygwin/bin to the PATH. Is it that you're talking about?
> And what kind of programs are in ~/bin?
>
>> I currently have a small `~/bin/emacsclient' script (one-liner) which allows me
>> to set the full path to the right `emacsclient' without having to fiddle with
>> the PATH environment variable (as that requires me to quit my shell, and start
>> a new one):
>>
>> --8<---------------cut here---------------start------------->8---
>> "C:/Program Files (x86)/emacs-trunk/bin/emacsclient" $@
>> --8<---------------cut here---------------end--------------->8---
>>
>> This is a hack.
>
> I don't see anything wrong with such a script. But it only works
> around the PATH problem, it does nothing to alleviate the subtle
> incompatibilities between native Windows executables and Cygwin/MSYS
> executables.
Rigth. And these are subtle incompatibilities about which I was unaware up to a
couple of days ago...
>> Indeed, I'd like to be able to launch whichever Emacs version
>> (clicking on one of the many versions I have on my Windows desktop), and that
>> launching `emacsclient' in the shell would work in all contexts.
>
> See above: I don't understand why you are invoking emacsclient in the
> first place.
I hope you now do.
> As for the v23 vs v24 emacsclient issue, you could have emacsclient23
> and emacsclient24 (scripts, aliases, whatever) to DTRT for each one.
Yes, but the question arises from the fact that `sendpatch' has no way to
detect (does it?) which Emacs server version is currently running, so which
`emacsclient' it has to call.
Thanks for your help!
Best regards,
Seb
--
Sebastien Vauban
next prev parent reply other threads:[~2013-10-30 9:59 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-23 8:33 Problem quoting expression to be eval'ed by emacsclient Sebastien Vauban
2013-10-23 8:52 ` Thorsten Jolitz
2013-10-23 14:07 ` Tassilo Horn
2013-10-23 15:33 ` Eli Zaretskii
[not found] ` <mailman.4544.1382542407.10748.help-gnu-emacs@gnu.org>
2013-10-23 21:56 ` Sebastien Vauban
2013-10-24 2:52 ` Eli Zaretskii
[not found] ` <mailman.4580.1382583151.10748.help-gnu-emacs@gnu.org>
2013-10-25 12:37 ` Sebastien Vauban
2013-10-25 13:47 ` Eli Zaretskii
[not found] ` <mailman.4697.1382708854.10748.help-gnu-emacs@gnu.org>
2013-10-30 9:59 ` Sebastien Vauban [this message]
2013-10-30 11:38 ` Stefan Monnier
2013-10-30 18:55 ` Eli Zaretskii
[not found] ` <mailman.4965.1383133220.10748.help-gnu-emacs@gnu.org>
2013-11-07 15:37 ` Sebastien Vauban
[not found] ` <mailman.4986.1383159329.10748.help-gnu-emacs@gnu.org>
2013-11-07 15:44 ` Sebastien Vauban
2013-10-23 10:14 ` Andreas Röhler
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=86li1b84g3.fsf@somewhere.org \
--to=sva-news-d0wtavr13harg/idocfnwg@public.gmane.org \
--cc=help-gnu-emacs-mXXj517/zsQ@public.gmane.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.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.