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. consult-ripgrep
).
(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))))
The above 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.
Conclusion
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.