all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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


  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.