branch: master
commit 82a317ce813d7364774dcf44bd432f363e878bea
Author: Oleh Krehel <[email protected]>
Commit: Oleh Krehel <[email protected]>
Make swiper compatible with visual-line-mode
* swiper.el (swiper--candidates): Use `end-of-visual-line' and
`line-move' appropriately.
(swiper--update-input-ivy):
(swiper--action): Use `line-move' instead of `forward-line'.
(swiper--add-overlays): Update.
Fixes #227
---
swiper.el | 28 ++++++++++++++++++++--------
1 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/swiper.el b/swiper.el
index 1b2d906..cfc80cd 100644
--- a/swiper.el
+++ b/swiper.el
@@ -201,14 +201,18 @@
(swiper-font-lock-ensure)
(while (< (point) (point-max))
(let ((str (concat " " (buffer-substring
- (line-beginning-position)
- (line-end-position)))))
+ (point)
+ (if visual-line-mode
+ (save-excursion
+ (end-of-visual-line)
+ (point))
+ (line-end-position))))))
(put-text-property 0 1 'display
(format swiper--format-spec
(cl-incf line-number))
str)
(push str candidates))
- (forward-line 1))
+ (line-move 1))
(nreverse candidates))))))
(defvar swiper--opoint 1
@@ -318,7 +322,7 @@ When non-nil, INITIAL-INPUT is the initial search pattern."
(goto-char (point-min))
(when (cl-plusp num)
(goto-char (point-min))
- (forward-line (1- num))
+ (line-move (1- num))
(if (and (equal ivy-text "")
(>= swiper--opoint (line-beginning-position))
(<= swiper--opoint (line-end-position)))
@@ -334,9 +338,17 @@ When non-nil, INITIAL-INPUT is the initial search pattern."
(defun swiper--add-overlays (re &optional beg end)
"Add overlays for RE regexp in visible part of the current buffer.
BEG and END, when specified, are the point bounds."
- (let ((ov (make-overlay
- (line-beginning-position)
- (1+ (line-end-position)))))
+ (let ((ov (if visual-line-mode
+ (make-overlay
+ (save-excursion
+ (beginning-of-visual-line)
+ (point))
+ (save-excursion
+ (end-of-visual-line)
+ (point)))
+ (make-overlay
+ (line-beginning-position)
+ (1+ (line-end-position))))))
(overlay-put ov 'face 'swiper-line-face)
(overlay-put ov 'window (ivy-state-window ivy-last))
(push ov swiper--overlays)
@@ -377,7 +389,7 @@ BEG and END, when specified, are the point bounds."
(if (null x)
(user-error "No candidates")
(goto-char (point-min))
- (forward-line (1- (read (get-text-property 0 'display x))))
+ (line-move (1- (read (get-text-property 0 'display x))))
(re-search-forward
(ivy--regex input) (line-end-position) t)
(swiper--ensure-visible)