From 9faf591a66aa0c5ab4522f2077c170b79e95c9ec Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 24 Nov 2014 15:32:14 +0200 Subject: [PATCH] Fix bug #19157 with incorrect hscroll during I-search. lisp/isearch.el (isearch-update): Don't assume pos-visible-in-window-p will return nil when point is hscrolled out of view. --- lisp/ChangeLog | 6 ++++++ lisp/isearch.el | 13 ++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c3a01dac664..26376afe239 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2014-11-24 Eli Zaretskii + + * isearch.el (isearch-update): Don't assume + pos-visible-in-window-p will return nil when point is hscrolled + out of view. (Bug#19157) + 2014-11-20 Andrey Kotlarski * net/eww.el (eww-browse-url): Optionally create new eww buffer. diff --git a/lisp/isearch.el b/lisp/isearch.el index f0ce7050e78..c3e473a2ba6 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -974,10 +974,17 @@ The last thing it does is to run `isearch-update-post-hook'." (other-window 1)) (goto-char found-point)) ;; Keep same hscrolling as at the start of the search when possible - (let ((current-scroll (window-hscroll))) + (let ((current-scroll (window-hscroll)) + visible-p) (set-window-hscroll (selected-window) isearch-start-hscroll) - (unless (pos-visible-in-window-p) - (set-window-hscroll (selected-window) current-scroll)))) + (setq visible-p (pos-visible-in-window-p nil nil t)) + (if (or (not visible-p) + ;; When point is not visible because of hscroll, + ;; pos-visible-in-window-p returns non-nil, but + ;; the X coordinate it returns is 1 pixel beyond + ;; the last visible one. + (>= (car visible-p) (window-body-width nil t))) + (set-window-hscroll (selected-window) current-scroll)))) (if isearch-other-end (if (< isearch-other-end (point)) ; isearch-forward? (isearch-highlight isearch-other-end (point)) -- 2.39.5