aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1995-03-11 20:32:48 +0000
committerRichard M. Stallman1995-03-11 20:32:48 +0000
commit9184aafbcde0d14e40ca0d20b435f8a409f3d1a4 (patch)
treeb976b59ba228bae0477ef8811be1efe80af48ccd
parent4cd51172ca923cf882dc951319fbd5806f34031f (diff)
downloademacs-9184aafbcde0d14e40ca0d20b435f8a409f3d1a4.tar.gz
emacs-9184aafbcde0d14e40ca0d20b435f8a409f3d1a4.zip
(server-buffer-done): Return a list
(NEXT-BUFFER KILLED). KILLED is t if we killed the buffer. (server-edit): Values from server-done is now list of args for server-switch-buffer. (server-switch-buffer): Likewise. (server-switch-buffer): New optional arg KILLED-ONE. Avoid the other-buffer at the end in that case.
-rw-r--r--lisp/server.el32
1 files changed, 21 insertions, 11 deletions
diff --git a/lisp/server.el b/lisp/server.el
index f50b88cbeea..e62d4affbfc 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -240,10 +240,12 @@ FILES is an alist whose elements are (FILENAME LINENUMBER)."
240 240
241(defun server-buffer-done (buffer) 241(defun server-buffer-done (buffer)
242 "Mark BUFFER as \"done\" for its client(s). 242 "Mark BUFFER as \"done\" for its client(s).
243Buries the buffer, and returns another server buffer 243This buries the buffer, then returns a list of the form (NEXT-BUFFER KILLED).
244as a suggestion for what to select next." 244NEXT-BUFFER is another server buffer, as a suggestion for what to select next,
245or nil. KILLED is t if we killed BUFFER (because it was a temp file)."
245 (let ((running (eq (process-status server-process) 'run)) 246 (let ((running (eq (process-status server-process) 'run))
246 (next-buffer nil) 247 (next-buffer nil)
248 (killed nil)
247 (old-clients server-clients)) 249 (old-clients server-clients))
248 (while old-clients 250 (while old-clients
249 (let ((client (car old-clients))) 251 (let ((client (car old-clients)))
@@ -277,9 +279,10 @@ as a suggestion for what to select next."
277 (setq server-buffer-clients nil) 279 (setq server-buffer-clients nil)
278 (run-hooks 'server-done-hook)) 280 (run-hooks 'server-done-hook))
279 (if (server-temp-file-p buffer) 281 (if (server-temp-file-p buffer)
280 (kill-buffer buffer) 282 (progn (kill-buffer buffer)
283 (setq killed t))
281 (bury-buffer buffer)))) 284 (bury-buffer buffer))))
282 next-buffer)) 285 (list next-buffer killed)))
283 286
284(defun server-temp-file-p (buffer) 287(defun server-temp-file-p (buffer)
285 "Return non-nil if BUFFER contains a file considered temporary. 288 "Return non-nil if BUFFER contains a file considered temporary.
@@ -293,7 +296,9 @@ are considered temporary."
293 296
294(defun server-done () 297(defun server-done ()
295 "Offer to save current buffer, mark it as \"done\" for clients. 298 "Offer to save current buffer, mark it as \"done\" for clients.
296Then bury it, and return a suggested buffer to select next." 299This buries the buffer, then returns a list of the form (NEXT-BUFFER KILLED).
300NEXT-BUFFER is another server buffer, as a suggestion for what to select next,
301or nil. KILLED is t if we killed the BUFFER (because it was a temp file)."
297 (let ((buffer (current-buffer))) 302 (let ((buffer (current-buffer)))
298 (if server-buffer-clients 303 (if server-buffer-clients
299 (progn 304 (progn
@@ -351,11 +356,15 @@ starts server process and that is all. Invoked by \\[server-edit]."
351 (not server-process) 356 (not server-process)
352 (memq (process-status server-process) '(signal exit))) 357 (memq (process-status server-process) '(signal exit)))
353 (server-start nil) 358 (server-start nil)
354 (server-switch-buffer (server-done)))) 359 (apply 'server-switch-buffer (server-done))))
355 360
356(defun server-switch-buffer (next-buffer) 361(defun server-switch-buffer (next-buffer &optional killed-one)
357 "Switch to another buffer, preferably one that has a client. 362 "Switch to another buffer, preferably one that has a client.
358Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it." 363Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it."
364 ;; KILLED-ONE is t in a recursive call
365 ;; if we have already killed one temp-file server buffer.
366 ;; This means we should avoid the final "switch to some other buffer"
367 ;; since we've already effectively done that.
359 (cond ((and (windowp server-window) 368 (cond ((and (windowp server-window)
360 (window-live-p server-window)) 369 (window-live-p server-window))
361 (select-window server-window)) 370 (select-window server-window))
@@ -378,11 +387,12 @@ Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it."
378 ;; If NEXT-BUFFER is a dead buffer, 387 ;; If NEXT-BUFFER is a dead buffer,
379 ;; remove the server records for it 388 ;; remove the server records for it
380 ;; and try the next surviving server buffer. 389 ;; and try the next surviving server buffer.
381 (server-switch-buffer 390 (apply 'server-switch-buffer
382 (server-buffer-done next-buffer))) 391 (server-buffer-done next-buffer)))
383 (if server-clients 392 (if server-clients
384 (server-switch-buffer (nth 1 (car server-clients))) 393 (server-switch-buffer (nth 1 (car server-clients)) killed-one)
385 (switch-to-buffer (other-buffer))))) 394 (if (not killed-one)
395 (switch-to-buffer (other-buffer))))))
386 396
387(global-set-key "\C-x#" 'server-edit) 397(global-set-key "\C-x#" 'server-edit)
388 398