[C] Fix unwanted point moveage in VM

Michael Sperber sperber at informatik.uni-tuebingen.de
Fri Sep 7 04:35:02 EDT 2007


Marcus Harnisch <marcus.harnisch at gmx.net> writes:

> Michael Sperber <sperber at informatik.uni-tuebingen.de> writes:
>> I vaguely suspect that's my fault (i.e. the window-config rewrite).  I
>> don't use VM: It would greatly help if you could provide "instructions
>> for dummies" to reproduce the problem, i.e. of the form:
>>
>> do M-x vm RET
>
> [...]
> enter a folder with (> (frame-height)) messages
>
> C-x 1       ; see more of the summary
>
> move point to a message far down in the summary
>
> SPACE       ; display message
>
> watch how summary window shrinks to make space for message body. The
> message number at the top of the summary window is the same as
> before. point is re-centered in current (shrunk) summary window.

OK, I've found this one.  The reason is that VM uses
`delete-other-windows' in the process of recreating the correct window
configuration. ``delete-other-windows' tries to minimize redisplay and
thus keeps the top of the summary windows at the same place as before.
As the point is now offscreen, redisplay adjusts the point.  However, we
want to keep the current point.  I already encountered this problem when
rewriting the window configurations, and there's a function there that
already does the right thing.

(This window-point stuff and the interaction with redisplay is just
hideous.  It took me a few hours to track this down.)

I'll hopefully be able to look into the flicker problem next week.

2007-09-07  Mike Sperber  <mike at xemacs.org>

	* tapestry.el (tapestry-set-window-map): Use
	`frame-reduce-to-one-window' instead of `delete-other-windows' to
	keep the point from moving inadvertently.

-- 
Cheers =8-} Mike
Friede, Völkerverständigung und überhaupt blabla
-------------- next part --------------
Index: tapestry.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/vm/tapestry.el,v
retrieving revision 1.5
diff -u -r1.5 tapestry.el
--- tapestry.el	3 Sep 2003 00:43:45 -0000	1.5
+++ tapestry.el	7 Sep 2007 08:29:13 -0000
@@ -205,7 +205,11 @@
 	  root-window )
       (if (tapestry-windows-match-map map map-width map-height)
 	  (tapestry-first-window)
-	(delete-other-windows)
+	(if (fboundp 'frame-reduce-to-one-window)
+	    (frame-reduce-to-one-window (selected-frame))
+	  ;; `delete-other-windows' may cause the window point to move
+	  ;; as it tries to minimize redisplay
+	  (delete-other-windows))
 	(setq root-window (selected-window))
 	(tapestry-apply-window-map map map-width map-height root-window)
 	(setq tapestry-windows-changed t)


More information about the XEmacs-Beta mailing list