I completely understand and respect your decision to go in a different direction than my draft implementation of this new feature, but I thought it might be helpful for you to compare my ideas to your own proposed implementation as you go forward. Because my proposed implementation mirrors the current implementation of the `window-scroll-functions` hook, `xdisp.c` performs all of the necessary checking to see whether the user's function attached to the `window-start-end-hook` changes the buffer in such a way that requires further work on the part of redisplay. Attached is the revised edition of my new animal, whose proposed buffer-local usage is as follows: (setq scroll-conservatively 101) (setq window-start-end-var t) (defun window-start-end-fn (win start end pbol-start peol-end) (message "win: %s | start: %s | end: %s | peol-start: %s | peol-end: %s" win start end pbol-start peol-end)) (add-hook 'window-start-end-hook 'window-start-end-fn nil t)