Mercurial > emacs
changeset 64111:a948ecc89102
(initialize_w32_display): Detect when the console
dimensions are insane, and default to 80x25 instead.
(w32_use_full_screen_buffer): default to NIL.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Wed, 06 Jul 2005 21:35:43 +0000 |
parents | 8640e1fdbf57 |
children | c0c8dc644c56 |
files | src/w32console.c |
diffstat | 1 files changed, 19 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/w32console.c Wed Jul 06 19:03:21 2005 +0000 +++ b/src/w32console.c Wed Jul 06 21:35:43 2005 +0000 @@ -635,7 +635,24 @@ 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 */ @@ -691,7 +708,7 @@ 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);