diff options
author | Richard M. Stallman <rms@gnu.org> | 1998-05-05 00:39:35 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1998-05-05 00:39:35 +0000 |
commit | 599f9a5c4c39522630c1ee2cfe4d3830b45e8d7a (patch) | |
tree | 55803a26901e5971f440af43b61677b5af216e63 /lisp/server.el | |
parent | 2eb4bdca8a0ed370b55f2553d72529c427ed504d (diff) | |
download | emacs-599f9a5c4c39522630c1ee2cfe4d3830b45e8d7a.tar.gz |
(server-buffer-done): Bind server-kill-buffer-running
around places that might kill the buffer.
Do something reasonable if server-done-hook kills the buffer.
(server-kill-buffer-running): Doc fix.
(server-kill-buffer): Do nothing unless server-buffer-clients.
(server-done): Doc fix.
(server-buffer-done): Test of for-killing was backwards.
Diffstat (limited to 'lisp/server.el')
-rw-r--r-- | lisp/server.el | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/lisp/server.el b/lisp/server.el index d46156d15e7..5a8720e377e 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -299,7 +299,8 @@ so don't mark these buffers specially, just visit them normally." "Mark BUFFER as \"done\" for its client(s). This buries the buffer, then returns a list of the form (NEXT-BUFFER KILLED). NEXT-BUFFER is another server buffer, as a suggestion for what to select next, -or nil. KILLED is t if we killed BUFFER (because it was a temp file)." +or nil. KILLED is t if we killed BUFFER +\(typically, because it was visiting a temp file)." (let ((running (eq (process-status server-process) 'run)) (next-buffer nil) (killed nil) @@ -332,16 +333,24 @@ or nil. KILLED is t if we killed BUFFER (because it was a temp file)." (setq server-clients (delq client server-clients)))) (setq old-clients (cdr old-clients))) (if (and (bufferp buffer) (buffer-name buffer)) - (progn + ;; We may or may not kill this buffer; + ;; if we do, do not call server-buffer-done recursively + ;; from kill-buffer-hook. + (let ((server-kill-buffer-running t)) (save-excursion (set-buffer buffer) (setq server-buffer-clients nil) (run-hooks 'server-done-hook)) - (if for-killing + ;; Notice whether server-done-hook killed the buffer. + (if (null (buffer-name buffer)) + (setq killed t) + ;; Don't bother killing or burying the buffer + ;; when we are called from kill-buffer. + (unless for-killing (if (server-temp-file-p buffer) (progn (kill-buffer buffer) (setq killed t)) - (bury-buffer buffer))))) + (bury-buffer buffer)))))) (list next-buffer killed))) (defun server-temp-file-p (buffer) @@ -358,7 +367,8 @@ are considered temporary." "Offer to save current buffer, mark it as \"done\" for clients. This buries the buffer, then returns a list of the form (NEXT-BUFFER KILLED). NEXT-BUFFER is another server buffer, as a suggestion for what to select next, -or nil. KILLED is t if we killed the BUFFER (because it was a temp file)." +or nil. KILLED is t if we killed BUFFER +\(typically, because it was visiting a temp file)." (let ((buffer (current-buffer))) (if server-buffer-clients (progn @@ -400,7 +410,7 @@ or nil. KILLED is t if we killed the BUFFER (because it was a temp file)." (add-hook 'kill-emacs-query-functions 'server-kill-emacs-query-function) (defvar server-kill-buffer-running nil - "Non-nil while `server-kill-buffer' is running.") + "Non-nil while `server-kill-buffer' or `server-buffer-done' is running.") ;; When a buffer is killed, inform the clients. (add-hook 'kill-buffer-hook 'server-kill-buffer) @@ -408,9 +418,10 @@ or nil. KILLED is t if we killed the BUFFER (because it was a temp file)." ;; Prevent infinite recursion if user has made server-done-hook ;; call kill-buffer. (or server-kill-buffer-running - (let ((server-kill-buffer-running t)) - (when server-process - (server-buffer-done (current-buffer) t))))) + (and server-buffer-clients + (let ((server-kill-buffer-running t)) + (when server-process + (server-buffer-done (current-buffer) t)))))) (defun server-edit (&optional arg) "Switch to next server editing buffer; say \"Done\" for current buffer. |