diff lisp/subr.el @ 83488:f47495b26508

Fix ediff problems. (Reported by Dan Nicolaescu.) * lisp/subr.el (with-selected-frame): Make sure the current buffer is restored as well. * src/xfns.c (Fx_create_frame): Use `store_frame_param' to set `window-system' frame parameter, and make sure it overrides any user-supplied setting. * src/xfns.c (x_icon): Disable redundant call to `x_wm_set_window_state'. (Also applied in CVS.) * lisp/faces.el (x-create-frame-with-faces): Don't make frame visible until we are done setting up all its parameters. * lisp/ediff-wind.el (ediff-setup-windows-automatic): New function. (ediff-window-setup-function): Use it as default. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-528
author Karoly Lorentey <lorentey@elte.hu>
date Sun, 12 Mar 2006 04:12:31 +0000
parents 8976b9f5eda1
children 81f2d90dee68
line wrap: on
line diff
--- a/lisp/subr.el	Fri Mar 10 11:23:32 2006 +0000
+++ b/lisp/subr.el	Sun Mar 12 04:12:31 2006 +0000
@@ -2130,12 +2130,17 @@
 The value returned is the value of the last form in BODY.
 See also `with-temp-buffer'."
   (declare (indent 1) (debug t))
-  `(let ((save-selected-frame (selected-frame)))
-     (unwind-protect
-	 (progn (select-frame ,frame)
-		,@body)
-       (if (frame-live-p save-selected-frame)
-	   (select-frame save-selected-frame)))))
+  (let ((old-frame (make-symbol "old-frame"))
+	(old-buffer (make-symbol "old-buffer")))
+    `(let ((,old-frame (selected-frame))
+	   (,old-buffer (current-buffer)))
+       (unwind-protect
+	   (progn (select-frame ,frame)
+		  ,@body)
+	 (if (frame-live-p ,old-frame)
+	     (select-frame ,old-frame))
+	 (if (buffer-live-p ,old-buffer)
+	     (set-buffer ,old-buffer))))))
 
 (defmacro with-temp-file (file &rest body)
   "Create a new buffer, evaluate BODY there, and write the buffer to FILE.