summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJim Blandy <jimb@redhat.com>1993-06-17 00:39:37 +0000
committerJim Blandy <jimb@redhat.com>1993-06-17 00:39:37 +0000
commit75d8f6686c49706c474ac485c1786cea73a1b7c7 (patch)
tree483efbe7450ff22723590ed848fdda1d69a41416 /src
parent2b0f4ba538126e4ebcda851d5acac2b6fbf47c96 (diff)
downloademacs-75d8f6686c49706c474ac485c1786cea73a1b7c7.tar.gz
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.
Diffstat (limited to 'src')
-rw-r--r--src/buffer.c2
-rw-r--r--src/lisp.h2
-rw-r--r--src/window.c28
3 files changed, 20 insertions, 12 deletions
diff --git a/src/buffer.c b/src/buffer.c
index b19cfcaa737..f2d6ca37e74 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -585,7 +585,7 @@ If BUFFER is omitted or nil, some interesting buffer is returned.")
if (XSTRING (XBUFFER (buf)->name)->data[0] == ' ')
continue;
if (NILP (visible_ok))
- tem = Fget_buffer_window (buf, Qnil);
+ tem = Fget_buffer_window (buf, Qvisible);
else
tem = Qnil;
if (NILP (tem))
diff --git a/src/lisp.h b/src/lisp.h
index 7acf63d6be9..0969bfb8f41 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1213,7 +1213,7 @@ extern Lisp_Object get_keyelt (), get_keymap();
extern Lisp_Object Fvertical_motion (), Findent_to (), Fcurrent_column ();
/* defined in window.c */
-extern Lisp_Object Qwindowp, Qwindow_live_p;
+extern Lisp_Object Qwindowp, Qwindow_live_p, Qvisible;
extern Lisp_Object Fget_buffer_window ();
extern Lisp_Object Fsave_window_excursion ();
extern Lisp_Object Fset_window_configuration (), Fcurrent_window_configuration ();
diff --git a/src/window.c b/src/window.c
index d7e91560d7c..4c182a6924d 100644
--- a/src/window.c
+++ b/src/window.c
@@ -30,6 +30,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#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 @@ argument ALL_FRAMES is non-nil, cycle through all frames.")
/* 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 @@ window_loop (type, obj, mini, frames)
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 @@ window_loop (type, obj, mini, frames)
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 @@ frame, search only that frame.\n")
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 @@ syms_of_window ()
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);