[OS X Emacs] "with-current-buffer" issues

David Reitter david.reitter at gmail.com
Thu Jun 24 22:57:48 EDT 2010

On Jun 24, 2010, at 9:01 PM, James Harkins wrote:

> On 6/25/10 5:21 AM, David Reitter wrote:
>> I think I figured out what the problem is, and the patch below should address this.
>> Could you try it out?
> Hmm... I'm on aquamacs 1.9, can't find that bit in one-buffer-one-frame.el.

Ah, so we need to fix that in the 1.x series as well.  The patch is below.  Please let me know if it works well.

> But, usually I have several buffers in the same frame so, is one-buffer-one-frame relevant?

Yes, one-buffer-one-frame.el, apart from providing this mode, does much of Aquamacs' frame handling.

- David

http://aquamacs.org -- Aquamacs: Emacs on Mac OS X
http://aquamacs.org/donate -- Could we help you? Return the favor and support the Aquamacs Project!

diff --git a/aquamacs/src/site-lisp/one-buffer-one-frame.el b/aquamacs/src/site-lisp/one-buffer-one-frame.el
index d1b7a80..95a3bcb 100644
--- a/aquamacs/src/site-lisp/one-buffer-one-frame.el
+++ b/aquamacs/src/site-lisp/one-buffer-one-frame.el
@@ -629,16 +629,18 @@ even if it's the only visible frame."
 (defun aquamacs-delete-frame (&optional frame)
-  (condition-case nil 
-      (delete-frame (or frame (selected-frame)))
-    (error   
-     (let ((f (or frame (selected-frame))))
-       (run-hook-with-args 'delete-frame-functions f)
-       (make-frame-invisible f t)
-       ;; select messages to it gets any input
-       (if (find-all-frames-internal (get-buffer "*Messages*"))
-	   (select-frame (car (find-all-frames-internal 
-			       (get-buffer "*Messages*"))))))))) 
+  (with-current-buffer (current-buffer) ; delete-frame changes current buffer
+    ;; current buffer must be preserved (e.g., for other kill-buffer-hook functions)
+    (condition-case nil 
+	(delete-frame (or frame (selected-frame)))
+      (error   
+       (let ((f (or frame (selected-frame))))
+	 (run-hook-with-args 'delete-frame-functions f)
+	 (make-frame-invisible f t)
+	 ;; select messages to it gets any input
+	 (if (find-all-frames-internal (get-buffer "*Messages*"))
+	     (select-frame (car (find-all-frames-internal 
+				 (get-buffer "*Messages*"))))))))))
 ;; delete window when buffer is killed
 ;; but only do so if aquamacs opened a new frame&window for

More information about the MacOSX-Emacs mailing list