"Store the time when a new process was started.
Or the time of the last minibuffer update.")
+(defvar counsel--async-start nil
+ "Store the time when a new process was started.
+Or the time of the last minibuffer update.")
+
+(defvar counsel--async-duration nil
+ "Store the time in seconds between starting a process and
+ receiving all candidates.")
+
(defvar counsel--async-exit-code-plist nil
"Associates exit codes with reasons.")
counsel--process
counsel--process
cmd))
- (setq counsel--async-time (current-time))
+ (setq counsel--async-start
+ (setq counsel--async-time (current-time)))
(set-process-sentinel proc (or process-sentinel #'counsel--async-sentinel))
(set-process-filter proc (or process-filter #'counsel--async-filter))))
(ivy--set-candidates
(ivy--sort-maybe
cands))
+ (setq counsel--async-duration
+ (time-to-seconds (time-since counsel--async-start)))
(let ((re (funcall ivy--regex-function ivy-text)))
(unless (stringp re)
(setq re (caar re)))
(defun counsel-grep-action (x)
(with-ivy-window
(swiper--cleanup)
- (when (string-match "\\`\\([0-9]+\\):\\(.*\\)\\'" x)
- (let ((file-name counsel--git-grep-dir)
- (line-number (match-string-no-properties 1 x)))
+ (let ((default-directory (file-name-directory counsel--git-grep-dir))
+ file-name line-number)
+ (when (cond ((string-match "\\`\\([0-9]+\\):\\(.*\\)\\'" x)
+ (setq file-name counsel--git-grep-dir)
+ (setq line-number (match-string-no-properties 1 x)))
+ ((string-match "\\`\\([^:]+\\):\\([0-9]+\\):\\(.*\\)\\'" x)
+ (setq file-name (match-string-no-properties 1 x))
+ (setq line-number (match-string-no-properties 2 x)))
+ (t nil))
(find-file file-name)
(goto-char (point-min))
(forward-line (1- (string-to-number line-number)))
(re-search-forward (ivy--regex ivy-text t) (line-end-position) t)
(if (eq ivy-exit 'done)
(swiper--ensure-visible)
- (unless (eq ivy-exit 'done)
- (isearch-range-invisible (line-beginning-position)
- (line-end-position))
- (swiper--add-overlays (ivy--regex ivy-text))))))))
+ (isearch-range-invisible (line-beginning-position)
+ (line-end-position))
+ (swiper--add-overlays (ivy--regex ivy-text)))))))
(defun counsel-grep-occur ()
"Generate a custom occur buffer for `counsel-grep'."
;;** `counsel-expression-history'
;;;###autoload
(defun counsel-expression-history ()
+ "Select an element of `read-expression-history'.
+And insert it into the minibuffer. Useful during
+`eval-expression'"
(interactive)
(let ((enable-recursive-minibuffers t))
(ivy-read "Expr: " (delete-dups read-expression-history)