]> git.eshelyaron.com Git - emacs.git/commitdiff
(IT_clear_screen): If the frame's faces are not yet
authorEli Zaretskii <eliz@gnu.org>
Fri, 23 Nov 2001 17:21:55 +0000 (17:21 +0000)
committerEli Zaretskii <eliz@gnu.org>
Fri, 23 Nov 2001 17:21:55 +0000 (17:21 +0000)
realized, use the initial screen colors to clear the screen.

src/ChangeLog
src/msdos.c

index 0f9b2feaba00ce764cbe79181bf3fd0695df8a6f..7152a261810e91fc049b367e66b06d3c9fb42a21 100644 (file)
@@ -1,3 +1,8 @@
+2001-11-23  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * msdos.c (IT_clear_screen): If the frame's faces are not yet
+       realized, use the initial screen colors to clear the screen.
+
 2001-11-19  Richard M. Stallman  <rms@gnu.org>
 
        * sysdep.c (child_setup_tty): Don't clear ICRNL or INLCR.
index 79ac0b9026cde148247df699e8ed88065eb51fdb..a3aadd9a603d061f1924179b0a7b3b374805771c 100644 (file)
@@ -414,6 +414,8 @@ extern int unibyte_display_via_language_environment;
 
 Lisp_Object Qbar;
 
+static int initial_screen_colors[2];
+
 #if __DJGPP__ > 1
 /* Update the screen from a part of relocated DOS/V screen buffer which
    begins at OFFSET and includes COUNT characters.  */
@@ -1801,7 +1803,16 @@ IT_clear_screen (void)
 {
   if (termscript)
     fprintf (termscript, "<CLR:SCR>");
-  IT_set_face (0);
+  /* We are sometimes called (from clear_garbaged_frames) when a new
+     frame is being created, but its faces are not yet realized.  In
+     such a case we cannot call IT_set_face, since it will fail to find
+     any valid faces and will abort.  Instead, use the initial screen
+     colors; that should mimic what a Unix tty does, which simply clears
+     the screen with whatever default colors are in use.  */
+  if (FACE_FROM_ID (SELECTED_FRAME (), DEFAULT_FACE_ID) == NULL)
+    ScreenAttrib = (initial_screen_colors[0] << 4) | initial_screen_colors[1];
+  else
+    IT_set_face (0);
   mouse_off ();
   ScreenClear ();
   if (screen_virtual_segment)
@@ -2299,9 +2310,6 @@ IT_set_terminal_window (int foo)
 
 /* Remember the screen colors of the curent frame, to serve as the
    default colors for newly-created frames.  */
-
-static int initial_screen_colors[2];
-
 DEFUN ("msdos-remember-default-colors", Fmsdos_remember_default_colors,
        Smsdos_remember_default_colors, 1, 1, 0,
   "Remember the screen colors of the current frame.")