diff options
Diffstat (limited to '.config/emacs/modules/bd--minibuffer.el')
-rw-r--r-- | .config/emacs/modules/bd--minibuffer.el | 54 |
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) |