Commit 13d5c73f authored by Chong Yidong's avatar Chong Yidong
Browse files

(follow-calculate-first-window-start-from-below): Avoid looping

forever if vertical-motion returns an unexpected value.
parent a2227e21
......@@ -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)))
(let ((done nil)
(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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment