From 53dfb51f55bf66bb939505c60d12952dd64820a7 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Sat, 8 May 2021 14:22:30 +0200 Subject: Don't delete socket on server exit if it was passed in * lisp/server.el (server-sentinel): Don't delete the socket if it was passed in to Emacs (bug#47511). --- lisp/server.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'lisp/server.el') diff --git a/lisp/server.el b/lisp/server.el index 220694f6cbf..17332a2b0a1 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -413,9 +413,14 @@ If CLIENT is non-nil, add a description of it to the logged message." ;; for possible servers before doing anything, so it *should* be ours. (and (process-contact proc :server) (eq (process-status proc) 'closed) + ;; If this variable is non-nil, the socket was passed in to + ;; Emacs, and not created by Emacs itself (for instance, + ;; created by systemd). In that case, don't delete the socket. + (not internal--daemon-sockname) (ignore-errors (delete-file (process-get proc :server-file)))) - (server-log (format "Status changed to %s: %s" (process-status proc) msg) proc) + (server-log (format "Status changed to %s: %s" + (process-status proc) msg) proc) (server-delete-client proc)) (defun server--on-display-p (frame display) -- cgit v1.2.3 From 9136c064d66a1d4ea69472ffe25662a8874f7ba6 Mon Sep 17 00:00:00 2001 From: Harald Hanche-Olsen Date: Fri, 4 Jun 2021 11:09:46 +0200 Subject: Add a new `server-edit-abort' command * doc/emacs/misc.texi (Invoking emacsclient): Document it (bug#11358). * lisp/server.el (server-edit): Mention it in the doc string. (server-edit-abort): New command. Copyright-paperwork-exempt: yes --- doc/emacs/misc.texi | 6 ++++++ etc/NEWS | 6 ++++++ lisp/server.el | 15 ++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) (limited to 'lisp/server.el') diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index c8027792505..aed9fa9c665 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -1864,6 +1864,12 @@ it to exit. Programs that use @env{EDITOR} usually wait for the editor---in this case @command{emacsclient}---to exit before doing something else. +@findex server-edit-abort + If you want to abandon the edit instead, use the @kbd{M-x +server-edit-abort} command. This sends a message back to the +@command{emacsclient} program, telling it to exit, but doesn't save +any files. + You can also call @command{emacsclient} with multiple file name arguments: @samp{emacsclient @var{file1} @var{file2} ...} tells the Emacs server to visit @var{file1}, @var{file2}, and so forth. Emacs diff --git a/etc/NEWS b/etc/NEWS index 675925906cb..c272d279b8e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -510,6 +510,12 @@ When emacsclient connects, Emacs will (by default) output a message about how to exit the client frame. If 'server-client-instructions' is set to nil, this message is inhibited. ++++ +*** New command 'server-edit-abort'. +This command (not bound to any key by default) can be used to abort +an edit instead of marking it as "Done" (which the 'C-x #' command +does). + ** Perl mode --- diff --git a/lisp/server.el b/lisp/server.el index 17332a2b0a1..3205ba182ee 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1603,7 +1603,9 @@ prevent a backup for it.) The variable `server-temp-file-regexp' controls which filenames are considered temporary. If invoked with a prefix argument, or if there is no server process running, -starts server process and that is all. Invoked by \\[server-edit]." +starts server process and that is all. Invoked by \\[server-edit]. + +To abort an edit instead of saying \"Done\", use \\[server-edit-abort]." (interactive "P") (cond ((or arg @@ -1613,6 +1615,17 @@ starts server process and that is all. Invoked by \\[server-edit]." (server-clients (apply #'server-switch-buffer (server-done))) (t (message "No server editing buffers exist")))) +(defun server-edit-abort () + "Abort editing the current client buffer." + (interactive) + (if server-clients + (mapc (lambda (proc) + (server-send-string + proc (concat "-error " + (server-quote-arg "Aborted by the user")))) + server-clients) + (message "This buffer has no clients"))) + (defun server-switch-buffer (&optional next-buffer killed-one filepos this-frame-only) "Switch to another buffer, preferably one that has a client. -- cgit v1.2.3 From b16b4d730e0535484393aa8c01744fc609e61d92 Mon Sep 17 00:00:00 2001 From: Peter Oliver Date: Tue, 22 Jun 2021 15:21:33 +0200 Subject: If the daemon’s TTY is our only frame, create a new frame MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * server.el (server-process-filter): If there won't be a current frame to use, fall back to trying to create a new one (bug#11033). --- lisp/server.el | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'lisp/server.el') diff --git a/lisp/server.el b/lisp/server.el index 3205ba182ee..ac5db197f3e 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1308,7 +1308,17 @@ The following commands are accepted by the client: frame-parameters)) ;; When resuming on a tty, tty-name is nil. (tty-name - (server-create-tty-frame tty-name tty-type proc)))) + (server-create-tty-frame tty-name tty-type proc)) + + ;; If there won't be a current frame to use, fall + ;; back to trying to create a new one. + ((and use-current-frame + (daemonp) + (null (cdr (frame-list))) + (eq (selected-frame) terminal-frame) + display) + (setq tty-name nil tty-type nil) + (server-select-display display)))) (process-put proc 'continuation -- cgit v1.2.3