diff options
| author | Christian Cleberg <[email protected]> | 2026-02-02 23:01:06 -0600 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-02-02 23:01:06 -0600 |
| commit | 183e254cf09a4be360adf3bc189f8983ad199a1f (patch) | |
| tree | 251f763834e8e2c91c35ea37908ef740b6e1d933 /content | |
| parent | 848f1523f501ed979781c46d1cbaa4ab09264fda (diff) | |
| download | cleberg.net-183e254cf09a4be360adf3bc189f8983ad199a1f.tar.gz cleberg.net-183e254cf09a4be360adf3bc189f8983ad199a1f.tar.bz2 cleberg.net-183e254cf09a4be360adf3bc189f8983ad199a1f.zip | |
publish post: emacs-carnival-2026-02-completion
Diffstat (limited to 'content')
| -rw-r--r-- | content/blog/2026-02-02-emacs-carnival-2026-02-completion.org | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/content/blog/2026-02-02-emacs-carnival-2026-02-completion.org b/content/blog/2026-02-02-emacs-carnival-2026-02-completion.org new file mode 100644 index 0000000..0356007 --- /dev/null +++ b/content/blog/2026-02-02-emacs-carnival-2026-02-completion.org @@ -0,0 +1,160 @@ +#+date: <2026-02-02 18:40:21> +#+title: Emacs Carnival: "Completion" +#+description: My response to the Emacs Carnival post for February 2026. +#+slug: emacs-carnival-2026-02-completion + +I'm having a great time with the Emacs Carnival, as it has inspired me to write +two posts in such a short time. It's been a much needed inspiration to write +during my busy season at work. + +Anyway, let's get to it. The topic today is [[https://www.emacswiki.org/emacs/CategoryCompletion][Completion]]: the magical thing that +turns someone like me, who cannot remember long lists of commands to save my +life, from an illiterate to a literate programmer. + +* Defining Custom Abbreviations + +While you can define [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Abbrevs.html][abbrevs]] dynamically in the buffer with ~C-x a g~ (which +generally saves abbrevs to ~/.emacs.d/abbrev_defs~), I prefer to define my +abbreviations directly within my ~config.el~ file. + +This allows for better portability between my machines, as well as clearer +configuration for myself. + +To create a new abbrev, I simply open ~~/.config/doom/config.el~ and add a new one +to the list below. + +#+begin_src elisp +;; Abbreviations +(setq-default abbrev-mode t) +(define-abbrev-table 'global-abbrev-table + '( + ;; ("abbreviation" "expansion") + ("omw" "on my way") + ("eml" "[email protected]") + ("shrg" "¯\_(ツ)_/¯") + ("teh" "the") + ("xtoday" "" (lambda () (insert (format-time-string "%Y-%m-%d %H:%M:%S")))) + ("xnow" "" (lambda () (insert (format-time-string "%H:%M:%S")))) + )) +#+end_src + +Now, I can type something like ~xtoday~ in my buffer and get the fully formatted +time string, like so: ~2026-02-02 21:52:55~. + +~¯\_(ツ)_/¯~ + +This comes in handy most at work, where I need to constantly use acronyms and +take shorthand notes to fill-out phrases that I'm, unfortunately, required to +re-use constantly. Looking at you, "completeness and accuracy of the data". + +* Doom Configuration + +I have played around with a few different completion options for my purposes and +have settled on the following packages. + +Here is how I have my ~:completion~, ~:tools~, and ~:lang~ modules toggled in +~~/.config/doom/init.el~: + +#+begin_src elisp +(doom! :input + :completion + (corfu +orderless) ; complete with cap(f), cape and a flying feather! + vertico ; the search engine of the future + + :checkers + syntax ; tasing you for every semicolon you forget + (spell +flyspell) ; tasing you for misspelling mispelling + grammar ; tasing grammar mistake every you make + + :tools + (lsp +eglot) ; M-x vscode + + :lang + data ; config/data formats + emacs-lisp ; drown in parentheses + json ; At least it ain't XML + javascript ; all(hope(abandon(ye(who(enter(here)))))) + markdown ; writing docs for people to ignore + (org +dragndrop ; drag & drop images/files into org + +hugo ; use this if you plan to use weblorg/hugo for your site + +journal ; daily logging + +noter ; for annotating PDFs (great for research) + +roam2) ; Zettelkasten note-taking + python ; beautiful is better than ugly + sh ; she sells {ba,z,fi}sh shells on the C xor + + :config + (default +bindings +smartparens)) +#+end_src + +With his setup, I am able to get a wonderful IDE-level experience within Emacs +and without the bloat of a traditional IDE. It's the perfect balance of speed +and power for my work and hobbies. + +** [[https://github.com/minad/vertico][vertico]] + [[https://github.com/minad/marginalia][marginalia]] + +Vertico is wonderful for finding files (~SPC .~) or running commands (~SPC :~). It +provides a clean, vertical interface for the minibuffer. + +Marginalia works wonderfully with Vertico, as it provides marginalia to the +minibuffer commands within the command selection buffer. + +#+caption: Vertico: Command +[[https://img.cleberg.net/blog/20260202-emacs-carnival-2026-02-completion/vertico-commands.webp]] + +#+caption: Vertico: Files +[[https://img.cleberg.net/blog/20260202-emacs-carnival-2026-02-completion/vertico-files.webp]] + +** [[https://github.com/oantolin/orderless][orderless]] + +Orderless is a game changer. As I mentioned above, I'm terrible with +memorization. Therefore, I use this package and am able to search with multiple +out-of-order terms to find a result in my Vertico searches. + +#+caption: Orderless +[[https://img.cleberg.net/blog/20260202-emacs-carnival-2026-02-completion/orderless.webp]] + +** [[https://github.com/minad/corfu][corfu]] + +For code completion, I’ve swapped out the venerable Company mode for Corfu. It’s +faster, stays out of my way until I need it, and uses a small popup that feels +right at home in a terminal or a GUI. + +#+caption: Corfu +[[https://img.cleberg.net/blog/20260202-emacs-carnival-2026-02-completion/python.webp]] + +** [[https://github.com/joaotavora/eglot][eglot]] + +To actually "know" what my code is doing, I use LSP (Language Server Protocol). +I've enabled the ~+eglot~ flag in Doom because Eglot is now built into Emacs core +and tends to be a bit more stable and performant for my Python and JavaScript +workflows. + +** [[https://github.com/leotaku/flycheck-aspell?tab=readme-ov-file][flyspell]] + +Flyspell is the last piece to my puzzle, as it allows for easy help in +correcting grammar errors within the buffer. I combine ~flypell~ + ~syntax~ + +~grammar~ for ultimate writing guidance. Whether or not I choose to follow that +guidance is another story entirely. + +#+caption: Flyspell +[[https://img.cleberg.net/blog/20260202-emacs-carnival-2026-02-completion/suggestions.webp]] + +* Looking Forward + +I know this is just the tip of the iceberg, so I've made a list of packages I +want to dive into deeper in the future: + +- ~tempel~ +- ~yasnippet~ +- ~consult~ +- ~embark~ +- ~cape~ +- ~kind-icon~ +- ~prescient.el~ + +Completion and expansion utilities are phenomenal and have been one of the +larger tools in my development and writing. + +Want to participate in the Emacs Carnival or read more posts? Visit the main +[[https://www.emacswiki.org/emacs/Carnival][Carnival]] page on the Emacs Wiki to learn more. |
