[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-26 a22820a: Avoid aborts in cm.c due to too small TT
From: |
Eli Zaretskii |
Subject: |
[Emacs-diffs] emacs-26 a22820a: Avoid aborts in cm.c due to too small TTY frame |
Date: |
Mon, 12 Feb 2018 13:04:03 -0500 (EST) |
branch: emacs-26
commit a22820a31c191451334eec101125f7b621d6dbc0
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>
Avoid aborts in cm.c due to too small TTY frame
* src/frame.c (frame_windows_min_size): Limit TTY frames to a
minimum height large enough to allow for a menu bar, the mode
line, one text line and one echo-area line. This avoids aborts in
cm.c:cmcheckmagic. (Bug#30320)
---
src/frame.c | 31 +++++++++++++++++++++++--------
1 file changed, 23 insertions(+), 8 deletions(-)
diff --git a/src/frame.c b/src/frame.c
index d5b080d..a86f051 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -341,7 +341,9 @@ DEFUN ("frame-windows-min-size", Fframe_windows_min_size,
* of `window-min-height' (`window-min-width' if HORIZONTAL is non-nil).
* With IGNORE non-nil the values of these variables are ignored.
*
- * In either case, never return a value less than 1.
+ * In either case, never return a value less than 1. For TTY frames,
+ * additionally limit the minimum frame height to a value large enough
+ * to support the menu bar, the mode line, and the echo area.
*/
static int
frame_windows_min_size (Lisp_Object frame, Lisp_Object horizontal,
@@ -349,6 +351,7 @@ frame_windows_min_size (Lisp_Object frame, Lisp_Object
horizontal,
{
struct frame *f = XFRAME (frame);
Lisp_Object par_size;
+ int retval;
if ((!NILP (horizontal)
&& NUMBERP (par_size = get_frame_param (f, Qmin_width)))
@@ -361,15 +364,27 @@ frame_windows_min_size (Lisp_Object frame, Lisp_Object
horizontal,
if (min_size < 1)
min_size = 1;
- return (NILP (pixelwise)
- ? min_size
- : min_size * (NILP (horizontal)
- ? FRAME_LINE_HEIGHT (f)
- : FRAME_COLUMN_WIDTH (f)));
+ retval = (NILP (pixelwise)
+ ? min_size
+ : min_size * (NILP (horizontal)
+ ? FRAME_LINE_HEIGHT (f)
+ : FRAME_COLUMN_WIDTH (f)));
}
else
- return XINT (call4 (Qframe_windows_min_size, frame, horizontal,
- ignore, pixelwise));
+ retval = XINT (call4 (Qframe_windows_min_size, frame, horizontal,
+ ignore, pixelwise));
+ /* Don't allow too small height of text-mode frames, or else cm.c
+ might abort in cmcheckmagic. */
+ if ((FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)) && NILP (horizontal))
+ {
+ int min_height = (FRAME_MENU_BAR_LINES (f)
+ + FRAME_WANTS_MODELINE_P (f)
+ + 2); /* one text line and one echo-area line */
+ if (retval < min_height)
+ retval = min_height;
+ }
+
+ return retval;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-26 a22820a: Avoid aborts in cm.c due to too small TTY frame,
Eli Zaretskii <=