help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Problem quoting expression to be eval'ed by emacsclient


From: Eli Zaretskii
Subject: Re: Problem quoting expression to be eval'ed by emacsclient
Date: Fri, 25 Oct 2013 16:47:03 +0300

> From: "Sebastien Vauban" <sva-news@mygooglest.com>
> 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?  If
so, /usr/bin/emacsclient is a Cygwin build of emacsclient, right?
Then what kind of emacsclient is in ~/bin?

> 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.

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".  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.

> - 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.

> - Cygwin (/usr/bin) is second in my PATH, after ~/bin

Why do you need Cygwin executables on your PATH?

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.

> 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.

As for the v23 vs v24 emacsclient issue, you could have emacsclient23
and emacsclient24 (scripts, aliases, whatever) to DTRT for each one.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]