GNU bug report logs - #21730
25.0.50; Random errors in redisplay--pre-redisplay-functions

Previous Next

Package: emacs;

Reported by: Michael Welsh Duggan <mwd <at> md5i.com>

Date: Thu, 22 Oct 2015 04:05:02 UTC

Severity: normal

Found in version 25.0.50

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Philipp Stephani <p.stephani2 <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 21730 <at> debbugs.gnu.org, mwd <at> md5i.com
Subject: bug#21730: 25.0.50; Random errors in redisplay--pre-redisplay-functions
Date: Wed, 14 Sep 2016 18:43:13 +0000
[Message part 1 (text/plain, inline)]
Eli Zaretskii <eliz <at> gnu.org> schrieb am Mi., 14. Sep. 2016 um 19:11 Uhr:

>
> > Given that replacing (bobp) with (= point 1) does solve this bug, the
> documentation of pre-redisplay-functions
> > must be incorrect, i.e. the current buffer is not the buffer of the
> window passed as argument. I think the only
> > way how this can happen is that a previous entry in
> pre-redisplay-functions has changed the current buffer.
> > Probably the implementation of redisplay--pre-redisplay-functions should
> be changed from
> > (with-current-buffer (window-buffer win)
> > (run-hook-with-args 'pre-redisplay-functions win))
> > to
> > (run-hook-wrapped 'pre-redisplay-functions
> > (lambda (func) (with-current-buffer (window-buffer win)
> > (funcall func win)
> > nil))
> > or so.
> >
> > So we might try the following: Replace
> redisplay--pre-redisplay-functions (and indeed, all hooks that
> > document anything about the current buffer) as above. Then add
> (cl-assert (eq (current-buffer)
> > (window-buffer window)) to cursor-sensor--detect and remove code such as
> (window-point window), because
> > that must be equal to (point). WDYT? Or am I misunderstanding something?
>
> Since the problem that caused the patch to be reverted was with
> narrowing, why not simply use
>
>   (= point (with-current-buffer (window-buffer window) (point-min)))
>
> instead of
>
>   (= point 1)
>
> ?
>
>
This has the same issues as described above.  There's more code in
cursor-sensor--detect that assumes (eq (current-buffer) (window-buffer
window)), e.g. the form (get-char-property point 'cursor-sensor-functions).
Therefore (= point (with-current-buffer (window-buffer window)
(point-min))) must be the same as (bobp).
Another mystery is the stack trace entry
"run-hook-with-args(cursor-sensor--detect #<window 224 on *Group*>)". How
can cursor-sensor--detect be the first argument to run-hook-with-args?
Shouldn't it always be pre-redisplay-functions?
[Message part 2 (text/html, inline)]

This bug report was last modified 7 years and 304 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.