diff options
Diffstat (limited to 'lisp/server.el')
-rw-r--r-- | lisp/server.el | 34 |
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. |