]> git.eshelyaron.com Git - emacs.git/commitdiff
In server-unselect-display don't inadvertently kill current buffer. (Bug#10729)
authorMartin Rudalics <rudalics@gmx.at>
Wed, 8 Feb 2012 08:02:17 +0000 (09:02 +0100)
committerMartin Rudalics <rudalics@gmx.at>
Wed, 8 Feb 2012 08:02:17 +0000 (09:02 +0100)
* server.el (server-unselect-display): Don't inadvertently kill
the current buffer.  (Bug#10729)

lisp/ChangeLog
lisp/server.el

index 9cda0d38acb508a8a8cf222b669fe4b1399883d8..06f55e23e24f44ac2769a0fb3f3a8e267f712c3f 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-08  Martin Rudalics  <rudalics@gmx.at>
+
+       * server.el (server-unselect-display): Don't inadvertently kill
+       the current buffer.  (Bug#10729)
+
 2012-02-08  Glenn Morris  <rgm@gnu.org>
 
        * progmodes/sql.el (sql-port, sql-connection-alist, sql-list-all)
index a08f971e88cc32281488ca39d9200ae8f7bedcec..79858e6d83e9f715f8967f2e7f2e8166dcc99d44 100644 (file)
@@ -399,16 +399,18 @@ If CLIENT is non-nil, add a description of it to the logged message."
     ;; visible.  If not (which can happen if the user's customizations call
     ;; pop-to-buffer etc.), delete it to avoid preserving the connection after
     ;; the last real frame is deleted.
-    (if (and (eq (frame-first-window frame)
-                 (next-window (frame-first-window frame) 'nomini))
-             (eq (window-buffer (frame-first-window frame))
-                 (frame-parameter frame 'server-dummy-buffer)))
-        ;; The temp frame still only shows one buffer, and that is the
-        ;; internal temp buffer.
-        (delete-frame frame)
-      (set-frame-parameter frame 'visibility t))
-    (kill-buffer (frame-parameter frame 'server-dummy-buffer))
-    (set-frame-parameter frame 'server-dummy-buffer nil)))
+
+    ;; Rewritten to avoid inadvertently killing the current buffer after
+    ;; `delete-frame' removed FRAME (Bug#10729).
+    (let ((buffer (frame-parameter frame 'server-dummy-buffer)))
+      (if (and (one-window-p 'nomini frame)
+              (eq (window-buffer (frame-first-window frame)) buffer))
+         ;; The temp frame still only shows one buffer, and that is the
+         ;; internal temp buffer.
+         (delete-frame frame)
+       (set-frame-parameter frame 'visibility t)
+       (set-frame-parameter frame 'server-dummy-buffer nil))
+      (kill-buffer buffer))))
 
 (defun server-handle-delete-frame (frame)
   "Delete the client connection when the emacsclient frame is deleted.