unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Trey Ethan Harris <treyharris@gmail.com>
To: 13697@debbugs.gnu.org
Subject: bug#13697: Reopening
Date: Wed, 3 Apr 2019 17:01:38 -0400	[thread overview]
Message-ID: <CALKJ+EvWOenkEXDweudrwacnRyRpRF=rc1HFW_Ygega79c6Wmw@mail.gmail.com> (raw)
In-Reply-To: <xyliatcvo9.fsf@fencepost.gnu.org>

[-- Attachment #1: Type: text/plain, Size: 2498 bytes --]

As described in the Emacs Stack Exchange question,
https://emacs.stackexchange.com/questions/32692/daemon-mode-defer-interactive-prompts-on-startup/
, this bug seems to be applicable and should be reopened.

Many people seem to be attempting to run `emacs --daemon` as part of their
system on login startup--mostly as a way to improve emacsclient
initialization time when Emacs is first needed--but they run into trouble
because systemd or other startup system or the GUI login process is
non-interactive. If Emacs attempts to interact in any way at startup time,
then the daemon startup hangs.

There is no way AFAIK to respond to such an interaction--the Emacs server
hasn't started yet, so emacsclient can't be used.

The issue can exacerbate system issues, especially after abnormal exit. If
the user uses the empty-string form of ALTERATE_EDITOR, they may
unwittingly start up multiple Emacs daemons that will all hang at the same
point in startup. If they so configure their startup system with a watchdog
functionality, they may repeatedly kill and restart the Emacs daemon, doing
nothing but drawing useless CPU and IO.

One can workaround the issue in a piecemeal fashion by overriding or
advising functions in startup packages that may interact (for instance,
advising `desktop-restore-file-buffer` so that it will not block if the
daemon is being restarted from a crash and a desktop lockfile still
exists). However, this is not a general solution--one can never know for
certain from where an interaction might arise.

Of course Emacs itself can't supply a 100% solution--the user could always
put something in initialization which blocks on interaction, even if it's
specific Elisp to do so or a call out to a shell program.

But Emacs _could,_ I think, provide a 99% solution:

1. Intercept interaction functions like `yes-or-no-p` and password prompts
running in asynchronous threads, allowing them to block their thread
2. Automatically convert interaction in other threads into a warning failure
3. Continue execution of other threads so that the server can start
4. Upon first connection with an emacsclient, display the warnings
(presumably by popping up *Warnings*) so that the user is aware of what may
have failed in initialization due to inability to interact
5. Take the user through the queued blocked threads so they can complete
the threaded interactions.

I have tried to do this in a pure user-side Elisp way, but I don't think
it's possible without Emacs' assistance.

[-- Attachment #2: Type: text/html, Size: 4227 bytes --]

  reply	other threads:[~2019-04-03 21:01 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-12 17:02 bug#13697: A way to tell if Emacs can interact with the user Glenn Morris
2019-04-03 21:01 ` Trey Ethan Harris [this message]
2019-04-03 22:56   ` Noam Postavsky
2019-04-03 23:25     ` Trey Ethan Harris
2019-04-04 12:59   ` bug#13697: Reopening Eli Zaretskii
2021-02-13  9:31 ` bug#13697: A way to tell if Emacs can interact with the user Glenn Morris
2021-02-13 11:38   ` Lars Ingebrigtsen

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='CALKJ+EvWOenkEXDweudrwacnRyRpRF=rc1HFW_Ygega79c6Wmw@mail.gmail.com' \
    --to=treyharris@gmail.com \
    --cc=13697@debbugs.gnu.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 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).