diff src/window.c @ 3785:3455cbb3339d

Don't let the 'B' interactive spec default to buffers viewed in any visible frame. * buffer.c (Fother_buffer): Pass Qvisible as the second argument to Fget_buffer_window. * window.c (Qvisible): New symbol. (window_loop): In GET_BUFFER_WINDOW case, if frames is Qvisible, ignore non-visible frames. (Fget_buffer_window): Expand doc string to mention that Qvisible is an interesting value for FRAME argument. (syms_of_window): Init and staticpro Qvisible. * lisp.h (Qvisible): New declaration.
author Jim Blandy <jimb@redhat.com>
date Thu, 17 Jun 1993 00:39:37 +0000
parents bde2da377085
children c267c2431d92
line wrap: on
line diff
--- a/src/window.c	Thu Jun 17 00:16:29 1993 +0000
+++ b/src/window.c	Thu Jun 17 00:39:37 1993 +0000
@@ -30,6 +30,7 @@
 #include "keyboard.h"
 
 Lisp_Object Qwindowp, Qwindow_live_p;
+Lisp_Object Qvisible;
 
 Lisp_Object Fnext_window (), Fdelete_window (), Fselect_window ();
 Lisp_Object Fset_window_buffer (), Fsplit_window (), Frecenter ();
@@ -1057,8 +1058,10 @@
 
 /* Look at all windows, performing an operation specified by TYPE
    with argument OBJ.
-   If FRAMES is Qt, look at all frames, if Qnil, look at just the selected
-   frame.  If FRAMES is a frame, just look at windows on that frame.
+   If FRAMES is Qt, look at all frames;
+                Qvisible, look at visible frames (GET_BUFFER_WINDOW only);
+                Qnil, look at just the selected frame;
+	        a frame, just look at windows on that frame.
    If MINI is non-zero, perform the operation on minibuffer windows too.
 */
 
@@ -1126,6 +1129,8 @@
   best_window = Qnil;
   for (;;)
     {
+      FRAME_PTR w_frame = XFRAME (WINDOW_FRAME (XWINDOW (w)));
+
       /* Pick the next window now, since some operations will delete
 	 the current window.  */
 #ifdef MULTI_FRAME
@@ -1137,17 +1142,16 @@
 	   Or we know this isn't a MULTI_FRAME Emacs, so who cares?  */
 	next_window = Fnext_window (w, mini ? Qt : Qnil, Qt);
 
-      if (!MINI_WINDOW_P (XWINDOW (w))
+      if (! MINI_WINDOW_P (XWINDOW (w))
 	  || (mini && minibuf_level > 0))
 	switch (type)
 	  {
 	  case GET_BUFFER_WINDOW:
-#if 0
-	    /* Ignore invisible and iconified frames.  */
-	    if (! FRAME_VISIBLE_P (XFRAME (WINDOW_FRAME (XWINDOW (w))))
-		|| FRAME_ICONIFIED_P (XFRAME (WINDOW_FRAME (XWINDOW (w)))))
+	    /* Perhaps ignore invisible and iconified frames.  */
+	    if (EQ (frames, Qvisible)
+		&& (! FRAME_VISIBLE_P (w_frame)
+		    || FRAME_ICONIFIED_P (w_frame)))
 	      break;
-#endif
 	    if (XBUFFER (XWINDOW (w)->buffer) == XBUFFER (obj))
 	      return w;
 	    break;
@@ -1272,8 +1276,9 @@
 
 DEFUN ("get-buffer-window", Fget_buffer_window, Sget_buffer_window, 1, 2, 0,
   "Return a window currently displaying BUFFER, or nil if none.\n\
-If optional argument FRAMES is t, search all frames.  If FRAME is a\n\
-frame, search only that frame.\n")
+If optional argument FRAME is t, search all frames.\n\
+If FRAME is `visible', search all visible frames.\n\
+If FRAME is a frame, search only that frame.\n")
   (buffer, frame)
     Lisp_Object buffer, frame;
 {
@@ -2896,6 +2901,9 @@
   Qwindow_live_p = intern ("window-live-p");
   staticpro (&Qwindow_live_p);
 
+  Qvisible = intern ("Qvisible");
+  staticpro (&Qvisible);
+
 #ifndef MULTI_FRAME
   /* Make sure all windows get marked */
   staticpro (&minibuf_window);