[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 0f4acb3 115/348: Make swiper-all async
From: |
Oleh Krehel |
Subject: |
[elpa] master 0f4acb3 115/348: Make swiper-all async |
Date: |
Sat, 8 Apr 2017 11:03:39 -0400 (EDT) |
branch: master
commit 0f4acb30d8a2650b44878108b317d1142ad6c4c3
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>
Make swiper-all async
* swiper.el (swiper-all-function): New defun.
(swiper--all-format-function): New defun.
(swiper-all): Update.
(swiper-multi-action-2): Update.
---
swiper.el | 106 +++++++++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 85 insertions(+), 21 deletions(-)
diff --git a/swiper.el b/swiper.el
index 6644afb..713e11c 100644
--- a/swiper.el
+++ b/swiper.el
@@ -670,18 +670,79 @@ Run `swiper' for those buffers."
:unwind #'swiper--cleanup
:caller 'swiper-multi))
+(defun swiper-all-function (str)
+ (if (and (< (length str) 3))
+ (counsel-more-chars 3)
+ (let ((buffers (cl-remove-if-not
+ (lambda (b)
+ (or (buffer-file-name b)
+ (eq (with-current-buffer b
+ major-mode) 'dired-mode)))
+ (buffer-list)))
+ (re (funcall ivy--regex-function str))
+ cands
+ match)
+ (dolist (buffer buffers)
+ (with-current-buffer buffer
+ (save-excursion
+ (goto-char (point-min))
+ (while (re-search-forward re nil t)
+ (setq match (concat
+ " "
+ (buffer-substring
+ (line-beginning-position)
+ (line-end-position))))
+ (put-text-property
+ 0 1 'buffer
+ (buffer-name)
+ match)
+ (let ((lns (format "%-4d " (line-number-at-pos))))
+ (put-text-property 0 1 'swiper-line-number lns match)
+ (put-text-property 0 1 'display lns match))
+ (push match cands)))))
+ (setq ivy--old-cands (nreverse cands)))))
+
+(defun swiper--all-format-function (cands)
+ (let* ((ww (window-width))
+ (col2 1)
+ (cands-with-buffer
+ (mapcar (lambda (s)
+ (let ((buffer (get-text-property 0 'buffer s)))
+ (setq col2 (max col2 (length buffer)))
+ (cons s buffer))) cands))
+ (col1 (- ww 6 col2)))
+ (setq cands
+ (mapcar (lambda (x)
+ (if (cdr x)
+ (let ((s (ivy--truncate-string (car x) col1)))
+ (concat
+ s
+ (make-string
+ (max 0
+ (- ww (string-width s) (length (cdr x)) 4))
+ ?\ )
+ (cdr x)))
+ (car x)))
+ cands-with-buffer))
+ (ivy--format-function-generic
+ (lambda (str)
+ (ivy--add-face str 'ivy-current-match))
+ (lambda (str)
+ str)
+ cands
+ "\n")))
+
(defun swiper-all ()
"Run `swiper' for all opened buffers."
(interactive)
- (ivy-read "Swiper: " (swiper--multi-candidates
- (cl-remove-if-not
- #'buffer-file-name
- (buffer-list)))
- :action 'swiper-multi-action-2
- :unwind #'swiper--cleanup
- :update-fn (lambda ()
- (swiper-multi-action-2 ivy--current))
- :caller 'swiper-multi))
+ (let ((ivy-format-function #'swiper--all-format-function))
+ (ivy-read "Swiper: " 'swiper-all-function
+ :action 'swiper-multi-action-2
+ :unwind #'swiper--cleanup
+ :update-fn (lambda ()
+ (swiper-multi-action-2 ivy--current))
+ :dynamic-collection t
+ :caller 'swiper-multi)))
(defun swiper--multi-candidates (buffers)
(let* ((ww (window-width))
@@ -734,18 +795,21 @@ Run `swiper' for those buffers."
(delete-minibuffer-contents))))
(defun swiper-multi-action-2 (x)
- (let ((buf-space (get-text-property (1- (length x)) 'display x)))
- (with-ivy-window
- (when (string-match "\\` *\\([^ ]+\\)\\'" buf-space)
- (switch-to-buffer (match-string 1 buf-space))
- (goto-char (point-min))
- (forward-line (1- (read (get-text-property 0 'swiper-line-number x))))
- (re-search-forward
- (ivy--regex ivy-text)
- (line-end-position) t)
- (unless (eq ivy-exit 'done)
- (swiper--cleanup)
- (swiper--add-overlays (ivy--regex ivy-text)))))))
+ (when (> (length x) 0)
+ (let ((buffer-name (get-text-property 0 'buffer x)))
+ (when buffer-name
+ (with-ivy-window
+ (switch-to-buffer buffer-name)
+ (goto-char (point-min))
+ (forward-line (1- (read (get-text-property 0 'swiper-line-number
x))))
+ (re-search-forward
+ (ivy--regex ivy-text)
+ (line-end-position) t)
+ (isearch-range-invisible (line-beginning-position)
+ (line-end-position))
+ (unless (eq ivy-exit 'done)
+ (swiper--cleanup)
+ (swiper--add-overlays (ivy--regex ivy-text))))))))
(provide 'swiper)
- [elpa] master 027fbac 114/348: swiper.el (swiper-multi-action-2): Fix swiper-all, (continued)
- [elpa] master 027fbac 114/348: swiper.el (swiper-multi-action-2): Fix swiper-all, Oleh Krehel, 2017/04/08
- [elpa] master d6cf677 077/348: ivy.el (ivy-prompt): Add warning, Oleh Krehel, 2017/04/08
- [elpa] master 9bd79da 074/348: ivy.el (ivy-set-prompt): New API, Oleh Krehel, 2017/04/08
- [elpa] master 72dcca5 082/348: ivy.el (ivy-push-view): Work properly for dired-mode, Oleh Krehel, 2017/04/08
- [elpa] master 3d7e1ef 083/348: ivy.el (ivy--switch-buffer-action): Improve, Oleh Krehel, 2017/04/08
- [elpa] master 055e7b8 102/348: counsel.el (counsel-git-grep-cmd-history): Update default, Oleh Krehel, 2017/04/08
- [elpa] master 7e188d5 100/348: counsel.el (counsel-git-grep): Customize re-builder, Oleh Krehel, 2017/04/08
- [elpa] master 1da8b6c 086/348: Fix foo!bar syntax for swiper, Oleh Krehel, 2017/04/08
- [elpa] master 57c0f5e 095/348: ivy.el (ivy-set-view-recur): Account for mulitple same kind splits, Oleh Krehel, 2017/04/08
- [elpa] master c84b681 109/348: ivy.el (ivy-switch-buffer): Reset index to 0 on input, Oleh Krehel, 2017/04/08
- [elpa] master 0f4acb3 115/348: Make swiper-all async,
Oleh Krehel <=
- [elpa] master 81e14ce 111/348: counsel.el (counsel-semantic): Fix warnings, Oleh Krehel, 2017/04/08
- [elpa] master 9e87993 113/348: ivy.el (ivy-state): directory field stores default-directory, Oleh Krehel, 2017/04/08
- [elpa] master 1fa9a28 118/348: Ensure regex is a sting, Oleh Krehel, 2017/04/08
- [elpa] master 70a5360 127/348: counsel.el (counsel-git-grep-proj-function): Use greedy regex, Oleh Krehel, 2017/04/08
- [elpa] master 83f7ae6 129/348: counsel.el (counsel-yank-pop): Fix candidates not showing sometimes, Oleh Krehel, 2017/04/08
- [elpa] master 8f282a5 136/348: counsel.el (counsel-git-grep-action): Reveal text in outlines, Oleh Krehel, 2017/04/08
- [elpa] master bc96feb 141/348: ivy.el (ivy--recompute-index): Update condition, Oleh Krehel, 2017/04/08
- [elpa] master 45e29af 147/348: counsel.el: Fix compile warning, Oleh Krehel, 2017/04/08
- [elpa] master 04c2160 151/348: Replace references to evil-jumper with evil-jumps, Oleh Krehel, 2017/04/08
- [elpa] master c2974a5 154/348: Depend on Emacs 24.3, since user-error is used, Oleh Krehel, 2017/04/08