When I first adopted the Consult package, I scanned the documentation and setup a basic configuration. I then went about using the basics and hacking functionality. I spent some time reviewing Consult’s documentation.
Below is the original
advice-add for my Consult configuration. The functionality was as follows: when I have text highlighted, use the highlighted text for my line search (e.g.
consult-line) and file search function (e.g.
(defun jf/consult-first-param-is-initial-text (consult-fn &rest rest) "Advising function around CONSULT-FN. The CONSULT-FN's first parameter should be the initial text. When there's an active region, use that as the first parameter for CONSULT-FN. Otherwise, use an empty string the first parameter. This function handles the REST of the parameters." (interactive) (apply consult-fn (when (use-region-p) (buffer-substring (region-beginning) (region-end))) rest)) (defun jf/consult-ripgrep-wrapper (consult-fn &optional dir given-initial) "Advising function around CONSULT-FN. DIR and GIVEN-INITIAL match the method signature of `consult-wrapper'." (interactive "P") (let ((initial (list (or given-initial (when (use-region-p) (buffer-substring (region-beginning) (region-end))))))) (apply consult-fn dir initial))) (advice-add #'consult-line :around #'jf/consult-first-param-is-initial-text '((name . "wrapper"))) (advice-add #'consult-ripgrep :around #'jf/consult-ripgrep-wrapper '((name . "wrapper"))))
After reading the Consult README, I removed my customization and added the following:
(consult-customize consult-line consult-ripgrep :initial (when (use-region-p) (buffer-substring-no-properties (region-beginning) (region-end))))
consult-customize duplicates many lines of code I had previously written.
There are three distinct benefits:
- I’m following the documented pattern of customization.
- I’m not over-riding a method and relying on stable method signatures.
- I’m writing less code.
Put another way, Daniel Mendler has implemented Consult to be extensible.
I also took this time to review other functionality; learning about consult history functionality. When I run
consult-ripgrep, I can invoke
consult-history (which I’ve bound to
C-c h). This then shows past searches and lets me pick from them.
I’ve been spending time actively thinking about how I’m using my editor:
- Shifting key bindings to ease how my fingers stretch and move.
- Reading package customization options.
- Practicing new to me navigation shortcuts (looking at you Avy 📖).
Why? Because more than ever my writing is my thinking. And improving my reflexes on moving throughout my editor helps reduce mental friction; which for me reduces fatigue and increases the chances of retention during long-running tasks.