diff options
| author | Stefan Monnier | 2002-09-18 12:19:57 +0000 |
|---|---|---|
| committer | Stefan Monnier | 2002-09-18 12:19:57 +0000 |
| commit | ca0c725020b78ca0ec2ea38b13e4903a8ea44f59 (patch) | |
| tree | 41370a7d8d85888c56fa61f63b480b88b7db397a /lisp/server.el | |
| parent | adf8363c7d90de2506350cd0dd7128228a4d0c00 (diff) | |
| download | emacs-ca0c725020b78ca0ec2ea38b13e4903a8ea44f59.tar.gz emacs-ca0c725020b78ca0ec2ea38b13e4903a8ea44f59.zip | |
(server-done): Fix harmlessly wrong arg to save-buffer.
(server-switch-buffer): Only select a different window if
next-buffer is non-nil. Don't switch in a dedicated window.
If next-buffer is already displayed, reuse that window.
Diffstat (limited to 'lisp/server.el')
| -rw-r--r-- | lisp/server.el | 69 |
1 files changed, 38 insertions, 31 deletions
diff --git a/lisp/server.el b/lisp/server.el index bfebf2fcb92..67aaaee3806 100644 --- a/lisp/server.el +++ b/lisp/server.el | |||
| @@ -147,10 +147,9 @@ this way." | |||
| 147 | (setq minor-mode-alist (cons '(server-buffer-clients " Server") minor-mode-alist))) | 147 | (setq minor-mode-alist (cons '(server-buffer-clients " Server") minor-mode-alist))) |
| 148 | 148 | ||
| 149 | (defvar server-existing-buffer nil | 149 | (defvar server-existing-buffer nil |
| 150 | "Non-nil means a buffer existed before the Emacs server was asked visit it. | 150 | "Non-nil means the buffer existed before the server was asked to visit it. |
| 151 | This means that the server should not kill the buffer when you say you | 151 | This means that the server should not kill the buffer when you say you |
| 152 | are done with it in the server. This variable is local in each buffer | 152 | are done with it in the server.") |
| 153 | where it is set.") | ||
| 154 | (make-variable-buffer-local 'server-existing-buffer) | 153 | (make-variable-buffer-local 'server-existing-buffer) |
| 155 | 154 | ||
| 156 | ;; If a *server* buffer exists, | 155 | ;; If a *server* buffer exists, |
| @@ -447,7 +446,7 @@ specifically for the clients and did not exist before their request for it." | |||
| 447 | (if (and (buffer-modified-p) | 446 | (if (and (buffer-modified-p) |
| 448 | buffer-file-name | 447 | buffer-file-name |
| 449 | (y-or-n-p (concat "Save file " buffer-file-name "? "))) | 448 | (y-or-n-p (concat "Save file " buffer-file-name "? "))) |
| 450 | (save-buffer buffer))) | 449 | (save-buffer))) |
| 451 | (server-buffer-done buffer))))) | 450 | (server-buffer-done buffer))))) |
| 452 | 451 | ||
| 453 | ;; Ask before killing a server buffer. | 452 | ;; Ask before killing a server buffer. |
| @@ -517,34 +516,42 @@ Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it." | |||
| 517 | ;; if we have already killed one temp-file server buffer. | 516 | ;; if we have already killed one temp-file server buffer. |
| 518 | ;; This means we should avoid the final "switch to some other buffer" | 517 | ;; This means we should avoid the final "switch to some other buffer" |
| 519 | ;; since we've already effectively done that. | 518 | ;; since we've already effectively done that. |
| 520 | (cond ((and (windowp server-window) | 519 | (if (null next-buffer) |
| 521 | (window-live-p server-window)) | 520 | (if server-clients |
| 522 | (select-window server-window)) | 521 | (server-switch-buffer (nth 1 (car server-clients)) killed-one) |
| 523 | ((framep server-window) | 522 | (unless (or killed-one |
| 524 | (if (not (frame-live-p server-window)) | 523 | (window-dedicated-p (selected-window))) |
| 525 | (setq server-window (make-frame))) | 524 | (switch-to-buffer (other-buffer)))) |
| 526 | (select-window (frame-selected-window server-window)))) | 525 | (if (not (buffer-name next-buffer)) |
| 527 | (if (window-minibuffer-p (selected-window)) | 526 | ;; If NEXT-BUFFER is a dead buffer, remove the server records for it |
| 528 | (select-window (next-window nil 'nomini 0))) | ||
| 529 | ;; Move to a non-dedicated window, if we have one. | ||
| 530 | (when (window-dedicated-p (selected-window)) | ||
| 531 | (select-window (get-window-with-predicate | ||
| 532 | (lambda (w) (not (window-dedicated-p w))) | ||
| 533 | 'nomini 'visible (selected-window)))) | ||
| 534 | (set-window-dedicated-p (selected-window) nil) | ||
| 535 | (if next-buffer | ||
| 536 | (if (and (bufferp next-buffer) | ||
| 537 | (buffer-name next-buffer)) | ||
| 538 | (switch-to-buffer next-buffer) | ||
| 539 | ;; If NEXT-BUFFER is a dead buffer, | ||
| 540 | ;; remove the server records for it | ||
| 541 | ;; and try the next surviving server buffer. | 527 | ;; and try the next surviving server buffer. |
| 542 | (apply 'server-switch-buffer | 528 | (apply 'server-switch-buffer (server-buffer-done next-buffer)) |
| 543 | (server-buffer-done next-buffer))) | 529 | ;; OK, we know next-buffer is live, let's display and select it. |
| 544 | (if server-clients | 530 | (let ((win (get-buffer-window next-buffer 0))) |
| 545 | (server-switch-buffer (nth 1 (car server-clients)) killed-one) | 531 | (if (and win (not server-window)) |
| 546 | (if (not killed-one) | 532 | ;; The buffer is already displayed: just reuse the window. |
| 547 | (switch-to-buffer (other-buffer)))))) | 533 | (let ((frame (window-frame win))) |
| 534 | (if (eq (frame-visible-p frame) 'icon) | ||
| 535 | (raise-frame frame)) | ||
| 536 | (select-window win) | ||
| 537 | (set-buffer next-buffer)) | ||
| 538 | ;; Otherwise, let's find an appropriate window. | ||
| 539 | (cond ((and (windowp server-window) | ||
| 540 | (window-live-p server-window)) | ||
| 541 | (select-window server-window)) | ||
| 542 | ((framep server-window) | ||
| 543 | (if (not (frame-live-p server-window)) | ||
| 544 | (setq server-window (make-frame))) | ||
| 545 | (select-window (frame-selected-window server-window)))) | ||
| 546 | (if (window-minibuffer-p (selected-window)) | ||
| 547 | (select-window (next-window nil 'nomini 0))) | ||
| 548 | ;; Move to a non-dedicated window, if we have one. | ||
| 549 | (when (window-dedicated-p (selected-window)) | ||
| 550 | (select-window (get-window-with-predicate | ||
| 551 | (lambda (w) (not (window-dedicated-p w))) | ||
| 552 | 'nomini 'visible (selected-window)))) | ||
| 553 | (set-window-dedicated-p (selected-window) nil) | ||
| 554 | (switch-to-buffer next-buffer)))))) | ||
| 548 | 555 | ||
| 549 | (global-set-key "\C-x#" 'server-edit) | 556 | (global-set-key "\C-x#" 'server-edit) |
| 550 | 557 | ||