mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-25 07:28:20 +00:00
(follow-calculate-first-window-start-from-below): Avoid looping
forever if vertical-motion returns an unexpected value.
This commit is contained in:
parent
a2227e215c
commit
13d5c73fb0
@ -1208,22 +1208,25 @@ should be a member of WINDOWS, starts at position START."
|
||||
(setq win (or win (selected-window)))
|
||||
(setq start (or start (window-start win)))
|
||||
(save-excursion
|
||||
(let ((done nil)
|
||||
win-start
|
||||
res)
|
||||
(let (done win-start res opoint)
|
||||
;; Always calculate what happens when no line is displayed in the first
|
||||
;; window. (The `previous' res is needed below!)
|
||||
(goto-char guess)
|
||||
(vertical-motion 0 (car windows))
|
||||
(setq res (point))
|
||||
(while (not done)
|
||||
(setq opoint (point))
|
||||
(if (not (= (vertical-motion -1 (car windows)) -1))
|
||||
;; Hit roof!
|
||||
(setq done t res (point-min))
|
||||
(setq win-start (follow-calc-win-start windows (point) win))
|
||||
(cond ((= win-start start) ; Perfect match, use this value
|
||||
(setq done t)
|
||||
(setq res (point)))
|
||||
(cond ((>= (point) opoint)
|
||||
;; In some pathological cases, vertical-motion may
|
||||
;; return -1 even though point has not decreased. In
|
||||
;; that case, avoid looping forever.
|
||||
(setq done t res (point)))
|
||||
((= win-start start) ; Perfect match, use this value
|
||||
(setq done t res (point)))
|
||||
((< win-start start) ; Walked to far, use preious result
|
||||
(setq done t))
|
||||
(t ; Store result for next iteration
|
||||
|
Loading…
Reference in New Issue
Block a user