summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/isearch.el13
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 <eliz@gnu.org>
+
+ * 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 <m00naticus@gmail.com>
* 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))