From e9530990914c1d81889269b4a8365b8003625557 Mon Sep 17 00:00:00 2001 From: Oleh Krehel Date: Tue, 30 Jun 2015 09:15:47 +0200 Subject: [PATCH] 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 acc4ca5bd..94c8608ee 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 9ce586481..1975ae2d0 100644 --- a/swiper.el +++ b/swiper.el @@ -4,7 +4,7 @@ ;; Author: Oleh Krehel ;; URL: https://github.com/abo-abo/swiper -;; Version: 0.4.1 +;; Version: 0.5.1 ;; Package-Requires: ((emacs "24.1")) ;; Keywords: matching -- 2.39.2