-(defvar swiper--len 0
- "The last length of `helm-input' for which an anchoring was made.")
-
-(defun swiper--update-input ()
- "Update selection."
- (with-current-buffer swiper--buffer
- (let ((re (swiper--regex))
- (we (window-end nil t)))
- (while swiper--overlays
- (delete-overlay (pop swiper--overlays)))
- (when (> (length helm-input) 1)
- (save-excursion
- (goto-char (window-start))
- (while (ignore-errors (re-search-forward re we t))
- (let ((i 0))
- (while (<= i swiper--subexps)
- (when (match-beginning i)
- (let ((overlay (make-overlay (match-beginning i)
- (match-end i)))
- (face
- (cond ((zerop swiper--subexps)
- (caddr swiper-faces))
- ((zerop i)
- (car swiper-faces))
- (t
- (nth (1+ (mod (1- i) (1- (length swiper-faces))))
- swiper-faces)))))
- (push overlay swiper--overlays)
- (overlay-put overlay 'face face)
- (overlay-put overlay 'priority i)
- (incf i))))))))))
- (when (/= (length helm-input) swiper--len)
- (setq swiper--len (length helm-input))
- (swiper--reanchor)))
-
-(defun swiper--binary (beg end)
- "Find anchor between BEG and END."
- (if (<= (- end beg) 10)
- (let ((min 1000)
- n
- ln
- d)
- (goto-char (point-min))
- (forward-line (1- beg))
- (while (< beg end)
- (beginning-of-line)
- (setq n (read (current-buffer)))
- (when (< (setq d (abs (- n swiper--anchor))) min)
- (setq min d)
- (setq ln beg))
- (incf beg)
- (forward-line 1))
- (goto-char (point-min))
- (when ln
- (forward-line (1- ln))))
- (let ((mid (+ beg (/ (- end beg) 2))))
- (goto-char (point-min))
- (forward-line mid)
- (beginning-of-line)
- (let ((n (read (current-buffer))))
- (if (> n swiper--anchor)
- (swiper--binary beg mid)
- (swiper--binary mid end))))))
-
-(defun swiper--update-sel ()
- "Update selection."
- (let* ((re (swiper--regex))
- (str (buffer-substring-no-properties
- (line-beginning-position)
- (line-end-position)))