summaryrefslogtreecommitdiff
path: root/.config/emacs/modules/bd--minibuffer.el
diff options
context:
space:
mode:
Diffstat (limited to '.config/emacs/modules/bd--minibuffer.el')
-rw-r--r--.config/emacs/modules/bd--minibuffer.el54
1 files changed, 36 insertions, 18 deletions
diff --git a/.config/emacs/modules/bd--minibuffer.el b/.config/emacs/modules/bd--minibuffer.el
index 2827cff..9ae4dbb 100644
--- a/.config/emacs/modules/bd--minibuffer.el
+++ b/.config/emacs/modules/bd--minibuffer.el
@@ -3,6 +3,9 @@
;;; Code:
+(require 'f)
+
+
(defvar bd/navigate-recent-display-number 6
"The number of recent buffers that show up in bd/navigate.")
(defvar bd/blacklisted-buffer-regexp-list
@@ -116,24 +119,39 @@ selection commands.")
(selector-recentf-source))))
(keymap-global-set "C-x b" 'bd/navigate)
-(use-package vertico
- :init
- (vertico-mode)
- :custom
- (vertico-reverse-mode)
- (vertico-cycle t))
-
-(use-package consult
- :bind (("H-s d" . consult-find)
- ("H-s c" . consult-locate)
- ("H-s g" . consult-grep)
- ("H-s G" . consult-git-grep)
- ("H-s r" . consult-ripgrep)
- ("H-s l" . consult-line)
- ("H-s i" . consult-info)
- ("H-s L" . consult-line-multi)
- ("H-s k" . consult-keep-lines)
- ("H-s u" . consult-focus-lines)))
+(defun bd/get-directory-dwim ()
+ "Returns the directory you always wanted."
+ (or (when (project-current)
+ (project-root (project-current))) ;; git
+ (locate-dominating-file "." "Makefile") ;; make
+ (locate-dominating-file "." "manifest.scm") ;; guix
+ default-directory))
+
+(defun bd/selector-rg ()
+ "Sources for lines found via grep (or a clone)."
+ (interactive)
+ (let ((query (read-string "rg: ")))
+ (defun conv (x)
+ (cons (car x) (cons (- (string-to-number (cadr x)) 1) (caddr x))))
+ (defun all-in-file (key list)
+ (--map (to-candidate (cdr it)) (--filter (s-equals? key (car it)) list)))
+ (defun to-candidate (x)
+ (selector-candidate-create (cdr x) :value (car x)))
+ (let* ((dir (expand-file-name (bd/get-directory-dwim)))
+ (result (with-temp-buffer
+ (call-process "rg" nil t nil "-n" "-." query dir)
+ (buffer-string)))
+ (lines (--map (conv (s-split-up-to ":" it 2)) (--filter (not (s-blank? it)) (s-split "\n" result))))
+ (files (-uniq (-map #'car lines)))
+ (sources (--map (selector-source-create
+ it
+ :candidates (all-in-file it lines)
+ :actions (selector-file-contents-actions it))
+ files)))
+ (when (not (null sources))
+ (selector sources)))))
+(keymap-global-set "C-z s" 'bd/selector-rg)
+(keymap-global-set "M-x" 'selector-M-x)
(provide 'bd--minibuffer)