Subject: Re: bug#10192: Emacs 24.0.92 windows build, fatal error with M-< or M->

From: Eli Zaretskii <[email-masked]>
Date: Sat, 03 Dec 2011 12:05:44 +0200

> Date: Sat, 03 Dec 2011 03:33:19 -0500
> From: Da Zhang <[email-masked]>
> 
> The system quit with fatal error after  running this code:
> ;; for smooth scrolling and disabling the automatical recentering of emacs when moving the cursor
> (setq-default scroll-margin 0
>        scroll-conservatively 0
>        scroll-up-aggressively 0.01
>        scroll-down-aggressively 0.01)

This should be fixed now (revision 106588 on the trunk).

If you can rebuild Emacs, the patch is below.  If you cannot rebuild,
set scroll-margin to 1, it should avoid the crashes.  (A better
solution is below, read on.)

By the way, if these customizations were needed to prevent Emacs from
recentering the display, you can now do it like this:

  (setq scroll-conservatively 101)

That is, set this single variable to a value larger than 100.  Then
Emacs will never recenter (and the crashes you had will also
disappear, even if you don't rebuild).  In previous versions of Emacs,
all kinds of weird tricks, such as the strange settings of
scroll-up-aggressively you show above, were necessary to prevent
recentering.  But in Emacs 24, no recentering will ever happen if
scroll-conservatively is set to a large number.

Here's the patch to prevent aborts with your original customizations:

=== modified file 'src/xdisp.c'
--- src/xdisp.c	2011-12-03 07:59:23 +0000
+++ src/xdisp.c	2011-12-03 09:55:27 +0000
@@ -15617,7 +15617,7 @@ redisplay_window (Lisp_Object window, in
 	      pt_offset = float_amount * WINDOW_BOX_TEXT_HEIGHT (w);
 	      if (pt_offset == 0 && float_amount > 0)
 		pt_offset = 1;
-	      if (pt_offset)
+	      if (pt_offset && margin > 0)
 		margin -= 1;
 	    }
 	  /* Compute how much to move the window start backward from