aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2002-09-18 12:19:57 +0000
committerStefan Monnier2002-09-18 12:19:57 +0000
commitca0c725020b78ca0ec2ea38b13e4903a8ea44f59 (patch)
tree41370a7d8d85888c56fa61f63b480b88b7db397a
parentadf8363c7d90de2506350cd0dd7128228a4d0c00 (diff)
downloademacs-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.
-rw-r--r--lisp/server.el69
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.
151This means that the server should not kill the buffer when you say you 151This means that the server should not kill the buffer when you say you
152are done with it in the server. This variable is local in each buffer 152are done with it in the server.")
153where 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