From 63c94c2003b3b9aaf8756b5e9bd8f7a5058b62a7 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 23 Nov 2001 17:21:55 +0000 Subject: [PATCH] (IT_clear_screen): If the frame's faces are not yet realized, use the initial screen colors to clear the screen. --- src/ChangeLog | 5 +++++ src/msdos.c | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0f9b2feaba0..7152a261810 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2001-11-23 Eli Zaretskii + + * 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 * sysdep.c (child_setup_tty): Don't clear ICRNL or INLCR. diff --git a/src/msdos.c b/src/msdos.c index 79ac0b9026c..a3aadd9a603 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -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, ""); - 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.") -- 2.39.2