I changed the Subject to something more flashy to get some
responses... :-)
I think this patch fixes the problems associated with widening. Please
try it out. Hopefully some redisplay expert will comment. Ben?
If the experts agree (and it's not too late) this can go into 21.0,
but I don't want to carry the responsibility for messing up redisplay
alone! :-)
speaking of redisplay: is the rewrite project still alive (has it ever
been alive)???
Are there any other ideas out there how to speed up redisplay?
Gunnar
Index: src/redisplay.c
===================================================================
RCS file: /usr/CVSroot/XEmacs/xemacs-20/src/redisplay.c,v
retrieving revision 1.55
diff -u -r1.55 redisplay.c
--- redisplay.c 1998/06/30 06:36:00 1.55
+++ redisplay.c 1998/09/10 21:43:46
@@ -5066,7 +5066,10 @@
temporary change to the echo area. */
&& !(MINI_WINDOW_P (w) && f->buffers_changed)
&& !f->frame_changed
- && !truncation_changed)
+ && !truncation_changed
+ /* check whether start is really at the begining of a line GE */
+ && (!w->start_at_line_beg || beginning_of_line_p (b, startp))
+ )
{
/* Check if the cursor has actually moved. */
if (EQ (Fmarker_buffer (w->last_point[CURRENT_DISP]), w->buffer)
Index: src/window.c
===================================================================
RCS file: /usr/CVSroot/XEmacs/xemacs-20/src/window.c,v
retrieving revision 1.41
diff -u -r1.41 window.c
--- window.c 1998/06/30 06:36:06 1.41
+++ window.c 1998/09/10 21:44:07
@@ -1633,7 +1633,9 @@
CHECK_INT_COERCE_MARKER (pos);
set_marker_restricted (w->start[CURRENT_DISP], pos, w->buffer);
/* this is not right, but much easier than doing what is right. */
- w->start_at_line_beg = 0;
+ /* w->start_at_line_beg = 0; */
+ /* WTF is the above supposed to mean? GE */
+ w->start_at_line_beg = beginning_of_line_p (XBUFFER (w->buffer), XINT (pos));
if (NILP (noforce))
w->force_start = 1;
w->redo_modeline = 1;
@@ -3163,7 +3165,9 @@
make_int (XBUFFER (buffer)->last_window_start),
buffer);
Fset_marker (w->sb_point, w->start[CURRENT_DISP], buffer);
- w->start_at_line_beg = 0;
+ /* set start_at_line_beg correctly. GE */
+ w->start_at_line_beg = beginning_of_line_p (XBUFFER (buffer),
+ XBUFFER (buffer)->last_window_start);
w->force_start = 0; /* Lucid fix */
SET_LAST_MODIFIED (w, 1);
SET_LAST_FACECHANGE (w);