dotfiles/emacs-lisp/cosult.org
Magic_RB 1e7db50b3e
Define compat-string-width for consult
Signed-off-by: Magic_RB <magic_rb@redalder.org>
2023-02-02 15:07:05 +01:00

2.3 KiB

Consult

#

Consult provides practical commands based on the Emacs completion function completing-read. Completion allows you to quickly select an item from a list of candidates.

  (use-package consult
    :straight t
    :bind (("C-x b" . consult-buffer)
           ("C-x 4 b" . consult-buffer-other-window)
           ("C-x 5 b" . consult-buffer-other-frame)
           ;; M-s bindings (search-map)
           ("M-s r" . consult-ripgrep)
           ("M-s f" . consult-find))
    :init
    (defun compat-string-width (&rest args)
      (apply #'string-width args))
    (setq
     consult-project-root-function #'projectile-project-root
     consult-ripgrep-args "rg --null --line-buffered --color=never --max-columns=1000 --path-separator /   --smart-case --no-heading --line-number --hidden ."
     consult-find-args "find ."))

Also enable fd support, as that ignores paths listed in .gitignore unlike find..

  (use-package consult-fd
    :no-require t
    :after (consult)
    :init
    (defvar consult--fd-command "fd")
    (defun consult--fd-builder (input)
      (unless consult--fd-command
        (setq consult--fd-command
              (if (eq 0 (call-process-shell-command "fdfind"))
                  "fdfind"
                "fd")))
      (pcase-let* ((`(,arg . ,opts) (consult--command-split input))
                   (`(,re . ,hl) (funcall consult--regexp-compiler
                                          arg 'extended t)))
        (when re
          (list :command (append
                          (list consult--fd-command
                                "--color=never" "--full-path"
                                (consult--join-regexps re 'extended))
                          opts)
                :highlight hl))))

    (defun consult-fd (&optional dir initial)
      (interactive "P")
      (let* ((prompt-dir (consult--directory-prompt "Fd" dir))
             (default-directory (cdr prompt-dir)))
        (find-file (consult--find (car prompt-dir) #'consult--fd-builder initial)))))