From: Jonas Bernoulli <jonas@bernoul.li>
To: Eli Zaretskii <eliz@gnu.org>
Cc: stefankangas@gmail.com, emacs-devel@gnu.org, rms@gnu.org
Subject: Re: Adding with-editor to Emacs?
Date: Fri, 01 Sep 2023 22:23:43 +0200 [thread overview]
Message-ID: <87a5u5wskw.fsf@bernoul.li> (raw)
In-Reply-To: <837cp9bur7.fsf@gnu.org>
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Jonas Bernoulli <jonas@bernoul.li>
>> Cc: emacs-devel@gnu.org, rms@gnu.org
>> Date: Fri, 01 Sep 2023 19:44:53 +0200
>>
>> Eli Zaretskii <eliz@gnu.org> writes:
>> - It implements a "sleeping editor". This is a shell script, which
>> outputs a request on stdout and then waits to be told to return.
>> With-editor use a process filter too look for that output and when
>> it sees it, it responds in a similar fashion to server.el. This
>> is useful because makes it possible to do this over Tramp. (I
>> believe this could also be done using regular emacsclient+server.el,
>> but that is difficult to setup and a security risk if not done
>> correctly.
>
> If we want a better/safer client-server connections for remote hosts,
> it should be handled in Tramp, I think.
Probably and it would be great if Tramp did handle that, but I don't
even use Tramp except when users report that there is an issue when
using Tramp with one of my packages. So I am not the right person to
implement it there, but if Michael were to tackle this, then maybe I
would have some insights that could be useful. Or not.
>> - It provides some convenience functionality to use this from various
>> shells running inside Emacs.
>
> Can you provide details? The above is too terse for me to understand
> the functionality.
Essentially what it does is "export EDITOR=emacsclient" without as if
that line existed in the shells init file. When summarized like that,
this is of course a bit of a silly feature -- users can just put that
line in their init file instead. (Also I should point out that I did
not actually want to add support for this, but got talked into it.)
The reason why people wanted me to this is that simply using
"emacsclient" as the value turned out not to be good enough.
>> > Emacs knows very well where to find its corresponding emacsclient.
>>
>> I wasn't aware of that. How can I make use of that knowledge? I.e.,
>> is there a function that answers the question "what is the path of the
>> emacsclient that was installed with this version of emacs"?
>
> When Emacs runs installed, emacsclient is in the same directory where
> we install the Emacs binary, so emacsclient should be in
> invocation-directory.
"I have seen things you wouldn't believe..."
I wish this was true, but unfortunately keep coming up with new and
innovative ways of not doing that. The worst platform is macOS, but I
also had to add a special case for Debian. Users or distributions may
install emacs in a weird location, and then symlink emacs onto $PATH
(but without doing the same for emacsclient). It is also possible to
install multiple versions of emacs in the same directory and append
version strings to the installed binaries. To select one of these
versions a user/distribution may add a symlink named symlink in the
same directory. One may or may not do the same for emacsclient. If
emacsclient isn't a symlink, then an ancient emacsclient may still be
leftover from an earlier manual installed that was not properly
uninstalled. ...
> If Emacs runs uninstalled, emacsclient is in ../lib-src/ relative to
> invocation-directory. Whether Emacs runs installed or not is
> determined by the value of installation-directory: if it's nil, Emacs
> runs installed.
... and that too.
> There could be a complication if the programs were renamed when
> installed (see TRANSFORM in the top-level Makefile). When that
> happens, emacsclient's name is also TRANSFORMed in the same way. You
> can find out what was the actual name under which Emacs was invoked
> from the value of invocation-name, and then apply the same TRANSFORM
> to the name of emacsclient.
>
>> > Why is there a need for a separate library?
>>
>> I agree that there theoretically isn't a need for this library, but it
>> turned out that just setting EDITOR=emacsclient in the environment of
>> the sub process also doesn't cut it, because for many users (who never
>> use emacsclient directly), would have to add some configuration to make
>> it work. The core and original functionality provided by with-editor,
>> is making the configuration unnecessary by using heuristics.
>
> Can you elaborate on the configuration that is needed? I always
> thought that emacsclient worked for everybody OOTB.
Sadly that isn't the case, see above.
Normally these complications are the user's problem. They may not even
use emacsclient. If they don't actively choose to use emacsclient, they
will never know it is actually broken for them. If they try to use it
and it doesn't work, they can decide whether it is worth trying to
figure out to work around those mistakes. If they want to use it but
cannot fix it for themselves, they can contact the people who packaged
Emacs for them.
For me the situation was different, I started with something like this
in one of my packages, effectively forcing users to use "emacsclient":
(let ((process-environment process-environment))
(setenv "EDITOR"
(expand-file-name "emacsclient" invocation-directory))
(call-process "git" nil nil nil "commit"))
Like you I assumed this was a solved problem.
And then the "I cannot commit anymore" reports started pouring in.
I decided to implement with-editor, and to once in a while add a new
heuristic to detect the correct emacsclient, instead of having to
support users 1on1 for evermore, to figure out how exactly emacsclient
isn't located and/or named what it is supposed to be, in their
particular case.
>> > (I couldn't find the beginning of this discussion, so maybe I missed
>> > some of the relevant context, in which case I apologize.)
>>
>> The text I quoted, was the very beginning of this discussion.
>
> Yes, but did RMS write anything that you haven't quoted?
Except
> [[[ To any NSA and FBI agents reading my email: please consider ]]]
> [[[ whether defending the US Constitution against all enemies, ]]]
> [[[ foreign or domestic, requires you to follow Snowden's example. ]]]
and the signature?
No, the text I quoted is all of it.
next prev parent reply other threads:[~2023-09-01 20:23 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <85msy98sni.fsf@elpa.gnu.org>
[not found] ` <E1qbslO-0006oK-RA@fencepost.gnu.org>
2023-09-01 14:38 ` Adding with-editor to Emacs? Jonas Bernoulli
2023-09-01 16:12 ` Eli Zaretskii
2023-09-01 17:25 ` Jim Porter
2023-09-01 17:44 ` Jonas Bernoulli
2023-09-01 18:42 ` Eli Zaretskii
2023-09-01 20:23 ` Jonas Bernoulli [this message]
2023-09-02 6:19 ` Eli Zaretskii
2023-09-02 18:12 ` Jonas Bernoulli
2023-09-02 18:57 ` Eli Zaretskii
2023-09-02 21:04 ` Jonas Bernoulli
2023-09-03 17:02 ` Lynn Winebarger
2023-09-03 17:21 ` Eli Zaretskii
2023-09-03 18:21 ` Lynn Winebarger
2023-09-03 18:37 ` Eli Zaretskii
2023-09-02 19:56 ` Stefan Kangas
2023-09-02 21:26 ` Jonas Bernoulli
2023-09-02 23:07 ` Stefan Kangas
2023-09-03 5:00 ` Eli Zaretskii
2023-09-02 11:39 ` Michael Albinus
2023-09-02 16:52 ` Jonas Bernoulli
2023-10-17 10:23 ` Michael Albinus
2023-10-17 17:18 ` Manuel Giraud via Emacs development discussions.
2023-10-17 18:09 ` Michael Albinus
2023-10-17 19:26 ` Manuel Giraud via Emacs development discussions.
2023-09-03 14:36 ` Manuel Giraud via Emacs development discussions.
2023-09-03 15:34 ` Eli Zaretskii
2023-09-03 18:54 ` Manuel Giraud via Emacs development discussions.
2023-09-03 19:26 ` Eli Zaretskii
2023-09-04 8:21 ` Manuel Giraud via Emacs development discussions.
2023-09-04 12:18 ` Eli Zaretskii
2023-09-04 12:44 ` Manuel Giraud via Emacs development discussions.
2023-09-04 13:18 ` Manuel Giraud via Emacs development discussions.
2023-09-06 0:59 ` Richard Stallman
2023-09-05 0:27 ` Richard Stallman
2023-09-15 21:59 ` Björn Bidar
2023-09-17 23:03 ` Richard Stallman
2023-09-18 8:59 ` Philip Kaludercic
2023-09-20 18:35 ` Richard Stallman
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87a5u5wskw.fsf@bernoul.li \
--to=jonas@bernoul.li \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=rms@gnu.org \
--cc=stefankangas@gmail.com \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).