diff options
| author | Richard M. Stallman | 1995-03-11 20:32:48 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1995-03-11 20:32:48 +0000 |
| commit | 9184aafbcde0d14e40ca0d20b435f8a409f3d1a4 (patch) | |
| tree | b976b59ba228bae0477ef8811be1efe80af48ccd | |
| parent | 4cd51172ca923cf882dc951319fbd5806f34031f (diff) | |
| download | emacs-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.el | 32 |
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). |
| 243 | Buries the buffer, and returns another server buffer | 243 | This buries the buffer, then returns a list of the form (NEXT-BUFFER KILLED). |
| 244 | as a suggestion for what to select next." | 244 | NEXT-BUFFER is another server buffer, as a suggestion for what to select next, |
| 245 | or 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. |
| 296 | Then bury it, and return a suggested buffer to select next." | 299 | This buries the buffer, then returns a list of the form (NEXT-BUFFER KILLED). |
| 300 | NEXT-BUFFER is another server buffer, as a suggestion for what to select next, | ||
| 301 | or 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. |
| 358 | Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it." | 363 | Arg 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 | ||