X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/4fc5845fe896177307f553d8af0d48834206c060..0cf79a3ba2bd3047e875a51edc6358955c0c3a49:/src/w32console.c diff --git a/src/w32console.c b/src/w32console.c index 70578f58c6..0fc652bf55 100644 --- a/src/w32console.c +++ b/src/w32console.c @@ -1,5 +1,6 @@ /* Terminal hooks for GNU Emacs on the Microsoft W32 API. - Copyright (C) 1992, 1999 Free Software Foundation, Inc. + Copyright (C) 1992, 1999, 2002, 2003, 2004, + 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -635,7 +636,24 @@ initialize_w32_display (void) meta_key = 1; char_attr_normal = info.wAttributes; - if (w32_use_full_screen_buffer) + /* Determine if the info returned by GetConsoleScreenBufferInfo + is realistic. Old MS Telnet servers used to only fill out + the dwSize portion, even modern one fill the whole struct with + garbage when using non-MS telnet clients. */ + if ((w32_use_full_screen_buffer + && (info.dwSize.Y < 20 || info.dwSize.Y > 100 + || info.dwSize.X < 40 || info.dwSize.X > 200)) + || (!w32_use_full_screen_buffer + && (info.srWindow.Bottom - info.srWindow.Top < 20 + || info.srWindow.Bottom - info.srWindow.Top > 100 + || info.srWindow.Right - info.srWindow.Left < 40 + || info.srWindow.Right - info.srWindow.Left > 100))) + { + FRAME_LINES (SELECTED_FRAME ()) = 25; + SET_FRAME_COLS (SELECTED_FRAME (), 80); + } + + else if (w32_use_full_screen_buffer) { FRAME_LINES (SELECTED_FRAME ()) = info.dwSize.Y; /* lines per page */ SET_FRAME_COLS (SELECTED_FRAME (), info.dwSize.X); /* characters per line */ @@ -687,11 +705,11 @@ syms_of_ntterm () DEFVAR_BOOL ("w32-use-full-screen-buffer", &w32_use_full_screen_buffer, doc: /* Non-nil means make terminal frames use the full screen buffer dimensions. -This is desirable when running Emacs over telnet, and is the default. +This is desirable when running Emacs over telnet. A value of nil means use the current console window dimensions; this may be preferrable when working directly at the console with a large scroll-back buffer. */); - w32_use_full_screen_buffer = 1; + w32_use_full_screen_buffer = 0; defsubr (&Sset_screen_color); defsubr (&Sset_cursor_size);