summaryrefslogtreecommitdiff
path: root/lisp/server.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/server.el')
-rw-r--r--lisp/server.el34
1 files changed, 31 insertions, 3 deletions
diff --git a/lisp/server.el b/lisp/server.el
index 220694f6cbf..ac5db197f3e 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)
@@ -1303,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
@@ -1598,7 +1613,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
@@ -1608,6 +1625,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.