emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master e953099 89/90: Make counsel-locate use a process


From: Oleh Krehel
Subject: [elpa] master e953099 89/90: Make counsel-locate use a process
Date: Tue, 30 Jun 2015 07:29:42 +0000

branch: master
commit e9530990914c1d81889269b4a8365b8003625557
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    Make counsel-locate use a process
    
    * counsel.el (counsel-locate-function): Update.
    (counsel--async-command): New defun.
    (counsel--async-sentinel): New defun.
    (counsel-locate): Switch to :action, thus allowing "C-M-n" and `ivy-resume'.
    
    * swiper.el: Bump version.
---
 counsel.el |   37 ++++++++++++++++++++++++++++++++-----
 swiper.el  |    2 +-
 2 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/counsel.el b/counsel.el
index acc4ca5..94c8608 100644
--- a/counsel.el
+++ b/counsel.el
@@ -401,16 +401,43 @@ Skip some dotfiles unless `ivy-text' requires them."
   (if (< (length str) 3)
       (list ""
             (format "%d chars more" (- 3 (length ivy-text))))
-    (split-string
-     (shell-command-to-string (concat "locate -i -l 20 --regex " (ivy--regex 
str))) "\n" t)))
+    (counsel--async-command
+     (concat "locate -i --regex " (ivy--regex str)))))
+
+(defun counsel--async-command (cmd)
+  (let* ((counsel--process " *counsel*")
+         (proc (get-process counsel--process))
+         (buff (get-buffer counsel--process)))
+    (when proc
+      (delete-process proc))
+    (when buff
+      (kill-buffer buff))
+    (setq proc (start-process-shell-command
+                counsel--process
+                counsel--process
+                cmd))
+    (set-process-sentinel proc #'counsel--async-sentinel)))
+
+(defun counsel--async-sentinel (process event)
+  (if (string= event "finished\n")
+      (progn
+        (with-current-buffer (process-buffer process)
+          (setq ivy--all-candidates (split-string (buffer-string) "\n" t))
+          (setq ivy--old-cands ivy--all-candidates))
+        (ivy--insert-minibuffer
+         (ivy--format ivy--all-candidates)))
+    (if (string= event "exited abnormally with code 1\n")
+        (message "Error"))))
 
 ;;;###autoload
 (defun counsel-locate ()
   "Call locate."
   (interactive)
-  (let ((val (ivy-read "pattern: " 'counsel-locate-function)))
-    (when val
-      (find-file val))))
+  (ivy-read "pattern: " nil
+            :dynamic-collection #'counsel-locate-function
+            :action (lambda (val)
+                      (when val
+                        (find-file val)))))
 
 (defun counsel--generic (completion-fn)
   "Complete thing at point with COMPLETION-FN."
diff --git a/swiper.el b/swiper.el
index 9ce5864..1975ae2 100644
--- a/swiper.el
+++ b/swiper.el
@@ -4,7 +4,7 @@
 
 ;; Author: Oleh Krehel <address@hidden>
 ;; URL: https://github.com/abo-abo/swiper
-;; Version: 0.4.1
+;; Version: 0.5.1
 ;; Package-Requires: ((emacs "24.1"))
 ;; Keywords: matching
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]