]> git.eshelyaron.com Git - emacs.git/commitdiff
(enum window_loop): Add REDISPLAY_BUFFER_WINDOWS.
authorKim F. Storm <storm@cua.dk>
Sun, 23 Nov 2003 21:47:24 +0000 (21:47 +0000)
committerKim F. Storm <storm@cua.dk>
Sun, 23 Nov 2003 21:47:24 +0000 (21:47 +0000)
(window_loop): Handle REDISPLAY_BUFFER_WINDOWS.
(Fforce_window_update): New defun.
(syms_of_window): Defsubr it.
(Fset_window_margins, Fset_window_fringes): Doc fix.

src/window.c

index e20dc2ae037f49e598f329630a96aa15c773c796..3c0f3a1743961a368a50cfed2c69d879077bd03f 100644 (file)
@@ -1829,6 +1829,7 @@ enum window_loop
   DELETE_BUFFER_WINDOWS,       /* Arg is buffer */
   GET_LARGEST_WINDOW,
   UNSHOW_BUFFER,               /* Arg is buffer */
+  REDISPLAY_BUFFER_WINDOWS,    /* Arg is buffer */
   CHECK_ALL_WINDOWS
 };
 
@@ -2027,6 +2028,14 @@ window_loop (type, obj, mini, frames)
              }
            break;
 
+         case REDISPLAY_BUFFER_WINDOWS:
+           if (EQ (w->buffer, obj))
+             {
+               mark_window_display_accurate (window, 0);
+               best_window = window;
+             }
+           break;
+
            /* Check for a window that has a killed buffer.  */
          case CHECK_ALL_WINDOWS:
            if (! NILP (w->buffer)
@@ -3428,6 +3437,46 @@ displayed.  */)
   return display_buffer_1 (window);
 }
 
+
+DEFUN ("force-window-update", Fforce_window_update, Sforce_window_update,
+       0, 1, 0,
+       doc: /* Force redisplay of all windows.
+If optional arg OBJECT is a window, force redisplay of that window only.
+If OBJECT is a buffer or buffer name, force redisplay of all windows 
+displaying that buffer.  */)
+     (object)
+     Lisp_Object object;
+{
+  if (NILP (object))
+    {
+      windows_or_buffers_changed++;
+      return Qt;
+    }
+
+  if (WINDOWP (object))
+    {
+      mark_window_display_accurate (object, 0);
+      return Qt;
+    }
+    
+  if (STRINGP (object))
+    object = Fget_buffer (object);
+  if (BUFFERP (object) && !NILP (XBUFFER (object)->name))
+    {
+      /* Walk all windows looking for buffer, and force update
+        of each of those windows.  */
+
+      object = window_loop (REDISPLAY_BUFFER_WINDOWS, object, 0, Qvisible);
+      return NILP (object) ? Qnil : Qt;
+    }
+
+  /* If nothing suitable was found, just return.
+     We could signal an error, but this feature will typically be used
+     asynchronously in timers or process sentinels, so we don't.  */
+  return Qnil;
+}
+
+
 void
 temp_output_buffer_show (buf)
      register Lisp_Object buf;
@@ -5844,11 +5893,11 @@ usage: (save-window-excursion BODY ...)  */)
 DEFUN ("set-window-margins", Fset_window_margins, Sset_window_margins,
        2, 3, 0,
        doc: /* Set width of marginal areas of window WINDOW.
-If window is nil, set margins of the currently selected window.
-First parameter LEFT-WIDTH specifies the number of character
-cells to reserve for the left marginal area.  Second parameter
-RIGHT-WIDTH does the same for the right marginal area.
-A nil width parameter means no margin.  */)
+If WINDOW is nil, set margins of the currently selected window.
+Second arg LEFT-WIDTH specifies the number of character cells to
+reserve for the left marginal area.  Optional third arg RIGHT-WIDTH
+does the same for the right marginal area.  A nil width parameter
+means no margin.  */)
      (window, left, right)
      Lisp_Object window, left, right;
 {
@@ -5910,17 +5959,14 @@ as nil.  */)
 DEFUN ("set-window-fringes", Fset_window_fringes, Sset_window_fringes,
        2, 4, 0,
        doc: /* Set the fringe widths of window WINDOW.
-
 If WINDOW is nil, set the fringe widths of the currently selected
 window.
-
-The second parameter LEFT-WIDTH specifies the number of pixels to
-reserve for the left fringe.  The third parameter RIGHT-WIDTH
-specifies the right fringe width.  If a fringe width parameter is nil,
-that means to use the frame's default fringe width.  Default fringe
-widths can be set with the command `set-fringe-style'.
-
-If the fourth parameter OUTSIDE-MARGINS is non-nil, draw the fringes
+Second arg LEFT-WIDTH specifies the number of pixels to reserve for
+the left fringe.  Optional third arg RIGHT-WIDTH specifies the right
+fringe width.  If a fringe width arg is nil, that means to use the
+frame's default fringe width.  Default fringe widths can be set with
+the command `set-fringe-style'.
+If optional fourth arg OUTSIDE-MARGINS is non-nil, draw the fringes
 outside of the display margins.  By default, fringes are drawn between
 display marginal areas and the text area.  */)
      (window, left, right, outside_margins)
@@ -6605,6 +6651,7 @@ This variable automatically becomes buffer-local when set.  */);
   defsubr (&Sspecial_display_p);
   defsubr (&Ssame_window_p);
   defsubr (&Sdisplay_buffer);
+  defsubr (&Sforce_window_update);
   defsubr (&Ssplit_window);
   defsubr (&Senlarge_window);
   defsubr (&Sshrink_window);