<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/custom-pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0"><channel><title>Kristoffer Balintona — #Guide</title><description>Entries tagged with &quot;Guide&quot;</description><link>https://kristofferbalintona.me/</link><language>en-us</language><image><url>https://kristofferbalintona.me/favicon-rss.png</url><title>Kristoffer Balintona — #Guide</title><link>https://kristofferbalintona.me</link></image><item><title>Surprisingly, Emacs on Android is pretty good</title><link>https://kristofferbalintona.me/posts/202505291938/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202505291938/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#the-good-and-bad-what-to-expect-on-android&quot;&gt;The good and bad: what to expect on Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#installation&quot;&gt;Installation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#option-1&quot;&gt;Option 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#recommended-installation&quot;&gt;Option 2 (recommended)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#configuring-an-android-specific-emacs&quot;&gt;Configuring an Android-specific Emacs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#necessary-reading-the-manual&quot;&gt;Necessary reading: the manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#how-to-configure-your-initel-on-a-mobile-device&quot;&gt;How to configure your &lt;code&gt;init.el&lt;/code&gt; on a mobile device?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#first-step-a-better-ui-for-touchscreens&quot;&gt;First step: A Better UI for touchscreens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#android-specific-commands&quot;&gt;Android-specific Commands and Options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#virtual-keyboards&quot;&gt;Use a Special virtual keyboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#fonts&quot;&gt;Fonts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#tip-you-can-remap-the-volume-buttons&quot;&gt;Tip: You can remap the volume buttons&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#conclusion&quot;&gt;Conclusion&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bonus-my-wish-list&quot;&gt;Bonus: My wish list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recently I got around to making steps toward a better mobile-PC workflow. Until now, I’ve pretty much exclusively been using the community-developed &lt;a href=&quot;https://github.com/orgzly-revived/orgzly-android-revived&quot;&gt;orgzly-revived&lt;/a&gt; app on Android. My intention was to use orgzly-revived for simple todo management and another app for more note-taking purposes—but I could never find another app I was happy with on Android. But I happened to remember reading good things about the &lt;em&gt;native&lt;/em&gt; Emacs app on Android a few months ago. So I tried it out… and was immediately sold!&lt;/p&gt;
&lt;h2&gt;The good and bad: what to expect on Android &lt;a href=&quot;#the-good-and-bad-what-to-expect-on-android&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;First, let’s make sure our expectations are tempered: Emacs on Android won’t be as pleasant as the full desktop experience.&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; Of course. A phone’s screen is tiny, and unless you have a physical keyboard connected, you’ll have to manage with a virtual one (see &lt;a href=&quot;#virtual-keyboards&quot;&gt;Use a Special virtual keyboard&lt;/a&gt;). On top of that:&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;Tooling&lt;/dt&gt;&lt;dd&gt;To have non-Emacs programs available, you have to install Emacs in a particular way with Termux to expose Termux’s binaries to Emacs. (See &lt;a href=&quot;#recommended-installation&quot;&gt;the recommended way to install Emacs&lt;/a&gt;.) The initial set up is longer, but it’s worth it.&lt;/dd&gt;&lt;dt&gt;File paths&lt;/dt&gt;&lt;dd&gt;Android “sandboxes” each app. You can think of each app having their own “section” of the file system that they can read or write to (unless they are given explicit access to that outside directory; see &lt;code&gt;info &quot;(emacs) Android Document Providers&quot;&lt;/code&gt;). As such, one finds themselves fiddling with the obnoxiously long Android file paths if they want to, for instance, access their notes directory that is outside the Emacs app sandbox.&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; This is a minor inconvenience though.&lt;/dd&gt;&lt;dt&gt;Writing to the file system&lt;/dt&gt;&lt;dd&gt;Relatively speaking, writing to the file system can be long sometimes. Not too long, but long nonetheless, As far as I’ve experienced, this has only been the case when saving files that are outside the Emacs sandbox.&lt;/dd&gt;&lt;/dl&gt;
&lt;p&gt;So, really, the situation is pretty good!&lt;/p&gt;
&lt;p&gt;And finally: YMMV on other Android devices. My current phone is the OnePlus 7 Pro running Android version 12.&lt;/p&gt;
&lt;h2&gt;Installation &lt;a href=&quot;#installation&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Option 1 &lt;a href=&quot;#option-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The first option is as easy as it can get, but you won’t have a way to access other CLI tools:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the &lt;a href=&quot;https://f-droid.org/&quot;&gt;F-droid&lt;/a&gt; app store. For the layperson who doesn’t know what it is: it’s basically an alternative to the Play Store. Some apps that can’t be on the Play Store (fact check, maybe link tk) are there.&lt;/li&gt;
&lt;li&gt;Download the &lt;a href=&quot;https://f-droid.org/en/packages/org.gnu.emacs/&quot;&gt;Emacs&lt;/a&gt; app.&lt;/li&gt;
&lt;li&gt;Open Emacs! The version of Emacs as I write this that is available is Emacs 30.1.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Using Emacs this way is totally possible if all you need is elisp. But if you need other tools, like git, I recommend the second way to install Emacs.&lt;/p&gt;
&lt;h3&gt;Option 2 (recommended) &lt;a href=&quot;#recommended-installation&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This option makes other CLI tools accessible to the Emacs Android application container. It is a little bit more of a hassle.&lt;/p&gt;
&lt;p&gt;The method is &lt;a href=&quot;https://sourceforge.net/projects/android-ports-for-gnu-emacs/files/termux/&quot;&gt;outlined in this SourceForge repository&lt;/a&gt;. In essence, inside the &lt;code&gt;termux/&lt;/code&gt; directory of this SourceForge repository are modified Emacs .apk files. These .apk files allow the Emacs app container to access the Termux (explain what Termux is tk) app container, meaning the CLI tools installed with Termux will become accessible to Emacs. But the installation is specific; read the instructions detailed inside that repository. I will outline them briefly below, but be careful if you are reading this in the future, for the instructions could have changed relevantly.&lt;/p&gt;
&lt;p&gt;In short,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Delete any existing Emacs or Termux apps.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensure you have enabled the setting that allows you to install third-party apps (i.e., non-Play Store apps) on your phone.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Termux. Don’t open Termux yet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the .apk file appropriate to your phone. There are various .apk files for different versions of Emacs and devices.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Emacs through this .apk.  (If your phone refuses to install the .apk, you might have selected the wrong type of .apk file for your device. So try different .apk files for the same Emacs version.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In Termux, run &lt;code&gt;pkg update &amp;amp;&amp;amp; pkg upgrade&lt;/code&gt;. Say “yes” to each of the prompts.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Emacs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a &lt;code&gt;~/.emacs.d/early-init.el&lt;/code&gt; and place the following inside of it:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setenv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;PATH&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/data/data/com.termux/files/usr/bin&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                       &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getenv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;PATH&lt;/span&gt;&lt;span&gt;&quot;))&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/data/data/com.termux/files/usr/bin&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; exec-path&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And you’re done! Programs installed through Termux will be made accessible to Emacs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Configuring an Android-specific Emacs &lt;a href=&quot;#configuring-an-android-specific-emacs&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Necessary reading: the manual &lt;a href=&quot;#necessary-reading-the-manual&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Chances are that you don’t know that the Emacs manual has its own section for the Android system: &lt;code&gt;(info &quot;(emacs) Android&quot;)&lt;/code&gt;. Before anything, I highly recommend you peruse this section, returning to and reading more deeply specific parts as you see fit. In particular, I found the following Info nodes essential:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;(info &quot;(emacs) Android File System&quot;)&lt;/code&gt; (This one is particularly important if you wan to understand what the &lt;code&gt;~/&lt;/code&gt; path means for Emacs.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(info &quot;(emacs) Android Document Providers&quot;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(info &quot;(emacs) Android Fonts&quot;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(info &quot;(emacs) Android Windowing&quot;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A lot of the information here is found directly inside these Info pages.&lt;/p&gt;
&lt;p&gt;Additionally, I also think reading about Emacs’ facilities for touchscreens and virtual keyboards (bet you didn’t know this was in the manual either!) is essential: &lt;code&gt;(info &quot;(emacs) Other Input&quot;)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Moments like these are truly a testament to Emacs’ dedication to an accessible editor.&lt;/p&gt;
&lt;h3&gt;How to configure your &lt;code&gt;init.el&lt;/code&gt; on a mobile device? &lt;a href=&quot;#how-to-configure-your-initel-on-a-mobile-device&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Later I’ll explain how you make typing code on a touchscreen device easier by installing &lt;a href=&quot;#virtual-keyboards&quot;&gt;a handy virtual keyboard&lt;/a&gt;. But I highly recommend that until you’ve settled on a configuration you’re willing to type out that you &lt;strong&gt;heavily utilize the customize interface&lt;/strong&gt;. This means accessing the Customize interfaces via the tool-bar&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; buttons then using your touchscreen to tap the buttons available in &lt;code&gt;customize-mode&lt;/code&gt; buffers. (Then, if you prefer, after setting many options with Customize, you can refactor the options Customize put in your &lt;code&gt;init.el&lt;/code&gt; into e.g. use-package forms.)&lt;/p&gt;
&lt;p&gt;If you haven’t used Customize much before, you can check out the available Customize commands via &lt;code&gt;C-h a&lt;/code&gt; (&lt;code&gt;apropos-command&lt;/code&gt;), search for “customize.” The most useful commands are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;customize-group&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;customize-option&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;customize-face&lt;/code&gt;,&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;First step: A Better UI for touchscreens &lt;a href=&quot;#first-step-a-better-ui-for-touchscreens&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The very first thing I did when I opened Emacs was enable these minor modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;modifier-bar-mode&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tool-bar-mode&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;and set &lt;code&gt;tool-bar-position&lt;/code&gt; to &lt;code&gt;‘bottom&lt;/code&gt;, placing it closer to where my fingers and the virtual keyboard are.&lt;/p&gt;
&lt;p&gt;Desktop users might have disabled these years ago in favor of keyboard-centric workflow, but they are awesome for touchscreens in my opinion.&lt;/p&gt;
&lt;h3&gt;Android-specific Commands and Options &lt;a href=&quot;#android-specific-commands&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There are a few built-in Android commands and options you should be aware of. (Pro tip: one can &lt;code&gt;M-x Info-index&lt;/code&gt; or press &lt;code&gt;i&lt;/code&gt; in the Emacs Info manual, itself accessible via &lt;code&gt;C-h r&lt;/code&gt;, or &lt;code&gt;M-x info-emacs-manual&lt;/code&gt;, then search for the string “android” to find all the specific mentions off “Android.”)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Commands:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;android-request-directory-access&lt;/code&gt; to request access to file paths of other apps&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;and its inverse, &lt;code&gt;android-relinquish-directory-access&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Options:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;android-pass-multimedia-buttons-to-system&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;android-intercept-control-space&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;touch-screen-display-keyboard&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;(and more not useful to me).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, don’t forget to let Emacs display over other apps. This is a device setting, not an Emacs one.&lt;/p&gt;
&lt;h3&gt;Use a Special virtual keyboard &lt;a href=&quot;#virtual-keyboards&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Unless you have a physical keyboard connected to your mobile device, typing will be a pain. For that, we install a virtual keyword that gives us easier access to modifier keys, function keys, arrow keys, and symbols. As far as I know, there are currently two main options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://f-droid.org/packages/org.pocketworkstation.pckeyboard/&quot;&gt;Hacker’s Keyboard&lt;/a&gt;, available in F-Droid.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=juloo.keyboard2&amp;amp;hl=en-US&amp;amp;pli=1&quot;&gt;Unexpected Keyboard&lt;/a&gt;, available in the Play Store.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Having briefly tried both, I personally prefer the latter. Though the former works just fine if you like it.&lt;/p&gt;
&lt;h3&gt;Fonts &lt;a href=&quot;#fonts&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You might want a set of fonts not already installed on your Android system. If that’s the case, you should read the &lt;code&gt;(info &quot;(emacs) Android Fonts&quot;)&lt;/code&gt; manual page.&lt;/p&gt;
&lt;p&gt;That page explains that if you want to install fonts for your user (in the Emacs app container), you should place them in &lt;code&gt;~/fonts/&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;#fn-5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt; Getting those fonts was somewhat cumbersome for me: I had to manually download them, unzip them with Termux, place them inside a directory Emacs had access to (see &lt;a href=&quot;#android-specific-commands&quot;&gt;Android-specific Commands and Options&lt;/a&gt;), then copy them to &lt;code&gt;~/fonts/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Note: in my experience, &lt;em&gt;fonts are not recursively checked inside this directory&lt;/em&gt;. That is, you should place your e.g. .ttf files inside that folder, not any subdirectories.&lt;/p&gt;
&lt;h3&gt;Tip: You can remap the volume buttons &lt;a href=&quot;#tip-you-can-remap-the-volume-buttons&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Volume buttons are un-mapped by default (see &lt;code&gt;android-pass-multimedia-buttons-to-system&lt;/code&gt;). That’s find with me, but if you feel inclined, you can rebind them to something else after setting &lt;code&gt;android-pass-multimedia-buttons-to-system&lt;/code&gt; appropriately. Some possibilities would be for navigation between headings, tk list more.&lt;/p&gt;
&lt;h2&gt;Conclusion &lt;a href=&quot;#conclusion&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In conclusion,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make heavy use of the Customize interface. (At least initially—after you’re comfy in Emacs, you can refactor it into a form more familiar to a desktop &lt;code&gt;init.el&lt;/code&gt;.)&lt;/li&gt;
&lt;li&gt;Enable minor modes and options specific to touchscreen-driven usage.&lt;/li&gt;
&lt;li&gt;Install a virtual keyboard to get access to modifiers, function keys, and more.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Right now I’ve achieved a set up I’m happy with. I migrated the portions of my configuration relevant to org, org-capture, and org-node, but in the future if I need more from Emacs-on-mobile, I’ll look to expand my config as necessary. (This includes version-controlling my &lt;code&gt;init.el&lt;/code&gt;.)&lt;/p&gt;
&lt;p&gt;And finally: YMMV on other Android devices. My current phone is the OnePlus 7 Pro running Android version 12.&lt;/p&gt;
&lt;h3&gt;Bonus: My wish list &lt;a href=&quot;#bonus-my-wish-list&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;dl&gt;&lt;dt&gt;Touchscreen gestures&lt;/dt&gt;&lt;dd&gt;There is the built-in strokes.el, but strokes.el, as far as I can tell, does not work for touchscreens. Additionally, significant changes would be required to its code base to make it compatible for touchscreens. So, for now, we have to settle with virtual keyboards…&lt;/dd&gt;&lt;dt&gt;Automatic keyboard/IME switching&lt;/dt&gt;&lt;dd&gt;Ideally, I’d have my special virtual keyboard be automatically selected using Emacs and deselected when not using Emacs. Right now, I have to manually switch to it. As far as I know, there is no easy way to accomplish this.&lt;/dd&gt;&lt;dt&gt;Larger tool bar and menu bar&lt;/dt&gt;&lt;dd&gt;The tool bar and menu bar are useful, but they’re also small. I wish they were larger and easier to tap.&lt;/dd&gt;&lt;/dl&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Although, some users might find benefits from “typing” via voice input…&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This is what I do: I use Syncthing to share my notes across devices. On my phone, they are located in &lt;code&gt;&quot;/content/storage/com.android.externalstorage.documents/primary:Org files/&lt;/code&gt;… quite a long file path.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;See &lt;a href=&quot;#android-specific-commands&quot;&gt;Android-specific Commands and Options&lt;/a&gt; for why to use the tool-bar tk.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-4&quot;&gt;[4]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I use this to access my files shared through Syncthing.&lt;/p&gt;  &lt;a href=&quot;#fnref-4&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-5&quot;&gt;[5]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Recall what &lt;code&gt;(info &quot;(emacs) Android File System&quot;)&lt;/code&gt; explains the “home” for the Emacs app container is.&lt;/p&gt;  &lt;a href=&quot;#fnref-5&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Thu, 29 May 2025 19:38:00 GMT</pubDate><category>Emacs</category><category>Android</category><category>Guide</category></item><item><title>Some Notes Setting Up Syncthing in NixOS</title><link>https://kristofferbalintona.me/posts/202505050319/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202505050319/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#the-configuration&quot;&gt;The configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#devices&quot;&gt;Devices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#folders&quot;&gt;Folders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#closing-remarks&quot;&gt;Closing remarks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#other-resources&quot;&gt;Other resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#changelog&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I recently got around to trying out NixOS. Part of that experience was setting up Syncthing, which I’ve used on the past on my machines and mobile phone to sync files related to note-taking.&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; It was a bit confusing since I had to fill-in-the-blanks for a few steps. Here, I write about a bit of the blanks I had to fill in myself, stuff that was not clear from the existing docs and forum posts I discovered.&lt;/p&gt;
&lt;h2&gt;The configuration &lt;a href=&quot;#the-configuration&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Below is the final NixOS configuration I have (with IDs elided for privacy) alongside commentary via comments:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;systemd&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;syncthing&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;environment&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;STNODEFAULTFOLDER&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;# Don&apos;t create default ~/Sync folder.  See https://wiki.nixos.org/wiki/Syncthing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;syncthing&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;openDefaultPorts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# I change the address SyncThing uses (which is also how you access the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# browser UI).  This is to avoid conflicts with the other SyncThing instances&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# I have on the same machine.  Namely, from different WSL2 instances.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;guiAddress&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;127.0.0.1:8385&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;krisbalintona&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;group&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;users&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;configDir&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/.config/syncthing&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Override all settings set from the GUI.  This is necessary if I don&apos;t want&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# to have changes made from the GUI apply.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;overrideDevices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;overrideFolders&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Settings: this is where you set up devices and folders&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;settings&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# Name of SyncThing instance on other machine&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OQHSZRL-L2TT7IC-7USSLNU-ST7JYML-FOO-BAR&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Elided for privacy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# Name of SyncThing instance on mobile device&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OVGYOBT-JPFQJKE-6CKRY7J-JULRCWK-FOO-BAR&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Elided for privacy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;k4vqh-foo&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;# The ID of a folder you&apos;d like to sync&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Agenda&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# Optional device-specific folder name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/Documents/org-database/agenda/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Share with these devices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch WSL2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;qtuzy-foo&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;# The ID of a folder you&apos;d like to sync&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Optional device-specific folder name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/Documents/org-database/notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Share with these devices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It was pretty straightforward to figure out the general settings for Syncthing by referencing &lt;a href=&quot;https://search.nixos.org/options?channel=unstable&quot;&gt;NixOS Search&lt;/a&gt;. The tricky part was the “devices” and “folders” section. What should I put there? Below are the important bits.&lt;/p&gt;
&lt;h2&gt;Devices &lt;a href=&quot;#devices&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;“Devices” are Machines/devices you’d like Syncthing to be aware of.&lt;/li&gt;
&lt;li&gt;Each machine has an ID.&lt;/li&gt;
&lt;li&gt;Each machine can optionally have a “label” (probably a human-readable name, like “Home computer”).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Looking at the relevant portion of my configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Name of SyncThing instance on other machine&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OQHSZRL-L2TT7IC-7USSLNU-ST7JYML-FOO-BAR&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Elided for privacy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# Name of SyncThing instance on mobile device&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OVGYOBT-JPFQJKE-6CKRY7J-JULRCWK-FOO-BAR&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Elided for privacy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This tells Syncthing that I have two devices:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;One labeled “G14 2024 Arch” with an ID of &lt;code&gt;&quot;OQHSZRL-L2TT7IC-7USSLNU-ST7JYML-FOO-BAR&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Another labeled “OnePlus 7 Pro” with an ID of &lt;code&gt;&quot;OVGYOBT-JPFQJKE-6CKRY7J-JULRCWK-FOO-BAR&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now that Syncthing is aware of these devices, I can reference them by their label later in the folders section to specify which folders should be shared to which devices.&lt;/p&gt;
&lt;h2&gt;Folders &lt;a href=&quot;#folders&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Folders are the directories you’d like Syncthing to be aware of.&lt;/li&gt;
&lt;li&gt;Each folder has an ID.&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Each folder may optionally have a label (probably a human-readable name, like “Agenda”). This is basically a nickname you give to the folder specific to the current device.&lt;/li&gt;
&lt;li&gt;Folders are only shared to devices specified for each folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Looking at the relevant portion of my configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;k4vqh-foo&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;# The ID of a folder you&apos;d like to sync&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Agenda&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;# Optional device-specific folder name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/Documents/org-database/agenda/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Share with these devices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch WSL2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;qtuzy-foo&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;# The ID of a folder you&apos;d like to sync&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# Optional device-specific folder name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/Documents/org-database/notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Share with these devices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This tells Syncthing that I want to share two folders:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Share folder &lt;code&gt;&quot;k4vqh-foo&quot;&lt;/code&gt;, whose label is “Agenda,” with two devices: the one labeled “G14 2024 Arch WSL2” and another labeled “OnePlus 7 Pro.”&lt;/li&gt;
&lt;li&gt;Share folder &lt;code&gt;&quot;qtuzy-foo&quot;&lt;/code&gt;, whose label is “Notes,” with two devices: the one labeled “G14 2024 Arch WSL2” and another labeled “OnePlus 7 Pro.”&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It is important that the “devices” section be specified, otherwise Syncthing will not sync those folders to other devices.&lt;/p&gt;
&lt;h2&gt;Closing remarks &lt;a href=&quot;#closing-remarks&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And with that, I was done!&lt;/p&gt;
&lt;p&gt;In sum:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Devices
&lt;ul&gt;
&lt;li&gt;“Devices” are Machines/devices you’d like Syncthing to be aware of.&lt;/li&gt;
&lt;li&gt;Each machine has an ID.&lt;/li&gt;
&lt;li&gt;Each machine can optionally have a “label” (probably a human-readable name, like “Home computer”).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Folders
&lt;ul&gt;
&lt;li&gt;Folders are the directories you’d like Syncthing to be aware of.&lt;/li&gt;
&lt;li&gt;Each folder has an ID.&lt;/li&gt;
&lt;li&gt;Each folder may optionally have a label (probably a human-readable name, like “Agenda”). This is basically a nickname you give to the folder specific to the current device.&lt;/li&gt;
&lt;li&gt;Folders are only shared to devices specified for each folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Simple, but it wasn’t obvious from the resources I encountered online, so I had to do some tinkering to figure it out myself.&lt;/p&gt;
&lt;p&gt;For those who heavily customize Syncthing, there are other NixOS options available to tweak. You can find them &lt;a href=&quot;https://search.nixos.org/options?channel=unstable&amp;amp;from=0&amp;amp;size=50&amp;amp;sort=relevance&amp;amp;type=packages&amp;amp;query=syncthing&quot;&gt;in the NixOS Search for options&lt;/a&gt;. Additionally, if you are trying to migrate an existing Syncthing configuration to Nix, then you can check out your config file at &lt;code&gt;~/.config/syncthing/config.xml&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; With this, you can see the value of every Syncthing setting (although the file will, of course, be in JSON format).&lt;/p&gt;
&lt;h2&gt;Other resources &lt;a href=&quot;#other-resources&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a href=&quot;https://wiki.nixos.org/wiki/Syncthing&quot;&gt;Syncthing - NixOS Wiki&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;General resource; good starting point.&lt;/dd&gt;&lt;dt&gt;&lt;a href=&quot;https://www.youtube.com/@vimjoyer&quot;&gt;Vimjoyer - YouTube&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;A fantastic visual resource of making full use of Nix and NixOS. Has some beginner-friendly videos, but most videos are for intermediate or advanced users, ones looking to explore the ecosystem, full potential of Nix, and already having a familiarity with navigating Nix.&lt;/dd&gt;&lt;/dl&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;May 17, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Add link to the &lt;a href=&quot;https://docs.syncthing.net/users/config.html&quot;&gt;Syncthing configuration file documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I use Emacs’s org-agenda to manage todos, and I’ve set up &lt;a href=&quot;https://github.com/orgzly-revived/orgzly-android-revived&quot;&gt;Orgzly Revived&lt;/a&gt; for basic creation and editing of org todos on my phone.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;You can see the ID of shared folders in the Syncthing GUI by expanding the collapsed info section a folder under the folders section of the GUI’s homepage.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Users can refer to the &lt;a href=&quot;https://docs.syncthing.net/users/config.html&quot;&gt;Syncthing configuration file documentation&lt;/a&gt; in order to understand the contents of this file.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Mon, 05 May 2025 03:19:00 GMT</pubDate><category>Nix</category><category>Guide</category></item><item><title>Citations in org-mode: Org-cite and Citar</title><link>https://kristofferbalintona.me/posts/202206142352/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202206142352/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#helpful-sources&quot;&gt;Helpful sources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-are-citation-systems&quot;&gt;What are citation systems?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org-cite&quot;&gt;Org-cite&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#understanding-org-cite-export-processors&quot;&gt;Understanding &lt;code&gt;org-cite&lt;/code&gt; export processors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#which-processor-should-i-use&quot;&gt;Which processor should I use?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#configuration&quot;&gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#usage&quot;&gt;Usage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#citar&quot;&gt;Citar&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#capturing-outdated&quot;&gt;Capturing (Outdated)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#h:20241106T044538.716623&quot;&gt;Advising &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; (Outdated)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#aesthetics&quot;&gt;Aesthetics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#other-interesting-packages&quot;&gt;Other interesting packages&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#zotero&quot;&gt;Zotero&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#embark&quot;&gt;Embark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org-roam-bibtex&quot;&gt;Org-roam-bibtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#citar-capf&quot;&gt;Citar-capf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org-ref&quot;&gt;Org-ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#changelog&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Summary &lt;a href=&quot;#summary&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Jul 20, 2023&lt;/span&gt;  &lt;/time&gt; Readers should be aware that some package-specific information in this article may be outdated. Thus, readers are advised from outright copying code in this article without verifying (e.g. reading docstrings) the intended behavior. Nevertheless, the concepts related to &lt;code&gt;org-cite&lt;/code&gt; and citation management should remain relevant and insightful.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;First, I’ll outline the broadest components to producing files in &lt;code&gt;org-mode&lt;/code&gt; with a citation system (e.g. &lt;code&gt;org-cite&lt;/code&gt;, &lt;code&gt;org-ref&lt;/code&gt;). Then I’ll introduce &lt;code&gt;org-cite&lt;/code&gt; and the differences between its &lt;code&gt;bibtex&lt;/code&gt;, &lt;code&gt;csl&lt;/code&gt;, and &lt;code&gt;basic&lt;/code&gt; export processors. Then, I will walk through my configuration for &lt;code&gt;org-cite&lt;/code&gt; and &lt;code&gt;citar&lt;/code&gt; (formerly &lt;code&gt;bibtex-actions&lt;/code&gt;). You can see a &lt;a href=&quot;https://gitlab.com/PreciousPudding/main-emacs/-/snippets/2351789&quot;&gt;gist/snippet of all the code present in this post here (alongside other additions of mine)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My goal is to plot the landscape, preparing you to understand other available sources which are more suited for a user already familiar with the landscape.&lt;/p&gt;
&lt;h2&gt;Helpful sources &lt;a href=&quot;#helpful-sources&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I recommend the following reading for more information regarding how &lt;code&gt;org-cite&lt;/code&gt; works:&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a href=&quot;https://orgmode.org/manual/Citation-handling.html#Citation-handling&quot;&gt;Citation handling (The Org Manual)&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;The first source you should visit should almost always be the manual (available within Emacs via &lt;code&gt;info&lt;/code&gt;, i.e. &lt;code&gt;M-x info&lt;/code&gt;). It covers the fundamentals to understanding how to use &lt;code&gt;org-cite&lt;/code&gt;. Isn’t well documented currently, but that will change in the future.&lt;/dd&gt;&lt;dt&gt;&lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html&quot;&gt;Org-cite guide by tecosaur&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;I’ll be referencing this frequently, for good reason.&lt;/dd&gt;&lt;/dl&gt;
&lt;h2&gt;What are citation systems? &lt;a href=&quot;#what-are-citation-systems&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There are roughly three moving parts to citation management.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The tool that produces the bibliography file.&lt;/strong&gt;&lt;br /&gt;
A bibliography file is where information regarding sources are stored. This almost always comes in the form of a &lt;a href=&quot;https://file.org/extension/bib&quot;&gt;.bib file&lt;/a&gt;; usually one is sufficient. There are various ways to create these files. Though you can manually create your own &lt;code&gt;.bib&lt;/code&gt; files, the most common way is exporting a Zotero library (see &lt;a href=&quot;#zotero&quot;&gt;Zotero&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The text processor.&lt;/strong&gt;&lt;br /&gt;
This is the software the user (you) directly writes in. In our case, it’s Emacs!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The “layer” from text to product.&lt;/strong&gt;&lt;br /&gt;
This is the code that lies in between your plain text writing and an output file (e.g. PDF). Sometimes this is identical to the text processor—in our case it isn’t. For instance, Microsoft Word is both a text editor and the producer of an output file, such as a PDF or a &lt;code&gt;.docx&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;org-cite&lt;/code&gt; lies closer to (3) because it is responsible for exporting citations, whereas &lt;code&gt;citar&lt;/code&gt; is closer to (2) because it is an interface for inserting citations into the buffer. A software like Zotero is responsible for (1).&lt;/p&gt;
&lt;h2&gt;Org-cite &lt;a href=&quot;#org-cite&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In around July of 2021, &lt;code&gt;org-cite&lt;/code&gt; was publicly released. &lt;code&gt;org-cite&lt;/code&gt; a library packaged with &lt;code&gt;org-mode&lt;/code&gt; that processes &lt;code&gt;org&lt;/code&gt; citations (e.g. &lt;code&gt;[cite:@wittgensteinTractatusLogicoPhilosophicus2021]&lt;/code&gt;). To those not familiar with another citation workflow (e.g. &lt;code&gt;biblatex&lt;/code&gt; in LaTeX), it is quite daunting to leap into citations in Emacs. This was certainly the case for me: I leapt into &lt;code&gt;org-mode&lt;/code&gt; citation integration with Zotero and LaTeX with no experience in &lt;code&gt;org&lt;/code&gt;, Zotero, or LaTeX! Nonetheless, &lt;code&gt;org-cite&lt;/code&gt; is quite simple once laid out. After reading this post or section, I recommend taking a look at tecosaur’s &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html&quot;&gt;fabulous guide&lt;/a&gt; to using &lt;code&gt;org-cite&lt;/code&gt;. His explanation of &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html#cite-syntax&quot;&gt;the citation styles of org-cite and their variants&lt;/a&gt; is particularly useful.&lt;/p&gt;
&lt;h3&gt;Understanding &lt;code&gt;org-cite&lt;/code&gt; export processors &lt;a href=&quot;#understanding-org-cite-export-processors&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The most crucial concept to &lt;code&gt;org-cite&lt;/code&gt; are “export processors.” Take a look at the following passage from the documentation for &lt;code&gt;org-cite-export-processors&lt;/code&gt; (as it is at the time of writing):&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;When non-nil, the value is an association list between export back-ends and&lt;br /&gt;
citation export processors:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    (BACK-END . PROCESSOR)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;where BACK-END is the name of an export back-end or t, and PROCESSOR is a&lt;br /&gt;
triplet following the pattern&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    (NAME BIBLIOGRAPHY-STYLE CITATION-STYLE)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There, NAME is the name of a registered citation processor providing export&lt;br /&gt;
functionality, as a symbol.  BIBLIOGRAPHY-STYLE (respectively CITATION-STYLE)&lt;br /&gt;
is the desired default style to use when printing a bibliography (respectively&lt;br /&gt;
exporting a citation), as a string or nil.  Both BIBLIOGRAPHY-STYLE and&lt;br /&gt;
CITATION-STYLE are optional.  NAME is mandatory.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;What this suggests is that different combinations of “processors,” “bibliography styles,” and “citation styles” can be configured to work with different &lt;code&gt;org-export&lt;/code&gt; backends. Presently, there are three processors available: &lt;code&gt;basic&lt;/code&gt;, &lt;code&gt;csl&lt;/code&gt;, &lt;code&gt;natbib&lt;/code&gt;, and &lt;code&gt;bibtex&lt;/code&gt;.  Though &lt;code&gt;org-cite&lt;/code&gt; citations will always follow the same format, &lt;strong&gt;the output text that is exported will change depending on the processor used&lt;/strong&gt;. I will go over these differences now, focusing primarily on the &lt;code&gt;bibtex&lt;/code&gt; and &lt;code&gt;csl&lt;/code&gt; backends&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The &lt;code&gt;bibtex&lt;/code&gt; processor can only be used with the &lt;code&gt;latex&lt;/code&gt; backend.&lt;/strong&gt; Using this processor exports citations using the &lt;a href=&quot;https://www.ctan.org/pkg/biblatex&quot;&gt;BibLaTex LaTeX package&lt;/a&gt;. That means that &lt;code&gt;[cite:@bradleyAppearanceRealityMetaphysical2011 82–5;]&lt;/code&gt; will export into a LaTeX command like &lt;code&gt;\cite[82–5]{bradleyAppearanceRealityMetaphysical2011}&lt;/code&gt;. Compiling the &lt;code&gt;org&lt;/code&gt; exported LaTeX file will in turn produce a PDF whose citations are handled by &lt;code&gt;biblatex&lt;/code&gt;. The end &lt;em&gt;citation style&lt;/em&gt; will be determined by the provided package options (e.g. &lt;code&gt;style=mla-new&lt;/code&gt;). Read the &lt;a href=&quot;https://www.ctan.org/pkg/biblatex&quot;&gt;biblatex documentation&lt;/a&gt; for more information (namely, section 3.1.1 in the February 2, 2022 version of the manual).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;natbib&lt;/code&gt; processor unsurprisingly uses the &lt;code&gt;natbib&lt;/code&gt; LaTeX package. &lt;code&gt;biblatex&lt;/code&gt; is slowly growing to replace the older &lt;code&gt;natbib&lt;/code&gt; package, though some users may circumstantially be limited to &lt;code&gt;natbib&lt;/code&gt;​—you can read more about the differences between &lt;code&gt;natbib&lt;/code&gt; and &lt;code&gt;biblatex&lt;/code&gt; &lt;a href=&quot;https://tex.stackexchange.com/a/25702&quot;&gt;here&lt;/a&gt;. I have not personally used the &lt;code&gt;natbib&lt;/code&gt;, but I suspect its usage is similar if not identical to the &lt;code&gt;bibtex&lt;/code&gt; processor.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;csl&lt;/code&gt; processor will use CSL to export citations. &lt;a href=&quot;https://en.wikipedia.org/wiki/Citation_Style_Language&quot;&gt;Citation Style Language&lt;/a&gt; (CSL) is a language used to instruct the formatting of citations and bibliographies; citation styles are provided by &lt;code&gt;.csl&lt;/code&gt; files. &lt;strong&gt;Most importantly, CSL is intended to be a universal standard for citation formatting.&lt;/strong&gt; Accordingly, &lt;code&gt;.csl&lt;/code&gt; supports essentially every output format.&lt;/p&gt;
&lt;p&gt;In sum:&lt;/p&gt;
&lt;img alt=&quot;diagram&quot; loading=&quot;lazy&quot; src=&quot;https://kristofferbalintona.me/d2/articles/202206141852--citations_in_org_mode_org_cite_and_citar/index-0.svg&quot; width=&quot;1198&quot; height=&quot;984&quot; /&gt;
&lt;h3&gt;Which processor should I use? &lt;a href=&quot;#which-processor-should-i-use&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The most common confusion comes from realizing that CSL can also export to LaTeX. So, when exporting to LaTeX: &lt;em&gt;should you use the &lt;code&gt;csl&lt;/code&gt; or &lt;code&gt;bibtex/natbib&lt;/code&gt; processor?&lt;/em&gt; The difference lies in whether or not you want to rely on the &lt;code&gt;biblatex&lt;/code&gt; package to manage exports.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The important difference is that &lt;code&gt;csl&lt;/code&gt; exports to &lt;em&gt;rendered text&lt;/em&gt;&lt;/strong&gt;. Rendered text is text whose end formatting will match that of &lt;code&gt;org&lt;/code&gt;’s, e.g. italic text in &lt;code&gt;org-mode&lt;/code&gt; will become wrapped in, say, &lt;code&gt;\emph{}&lt;/code&gt; in LaTeX. So, for instance, if I export &lt;code&gt;[cite:@bradleyAppearanceRealityMetaphysical2011 82–5;]&lt;/code&gt; into a LaTeX file using the &lt;code&gt;csl&lt;/code&gt; processor using a CSL file for the Modern Language Association (MLA) citation style, I will see the following in-text citation in the LaTeX file as: &lt;code&gt;(Bradley 82–85)&lt;/code&gt;​—if anything needed to be bold, italicized, etc., then that would be wrapped in the appropriate LaTeX command. Contrast that with the LaTeX command in the paragraphs above.&lt;/p&gt;
&lt;p&gt;So when it comes to exporting to LaTeX, &lt;em&gt;when wouldn’t rendered text be enough&lt;/em&gt;? If you want the most basic functionality, i.e. “Seeing in-text citations and bibliographies in my documents is enough,” then CSL will always cover you. However, if you want access to the more complex or nuanced facilities of &lt;code&gt;biblatex&lt;/code&gt;, use the &lt;code&gt;bibtex&lt;/code&gt; processor instead. &lt;code&gt;biblatex&lt;/code&gt; use cases include (i) using obscure or uncommon field and entry types and (ii) wanting “automation” in the citation variant. By (ii) I mean that &lt;code&gt;biblatex&lt;/code&gt; handles the variant whereas you must manually list the variant in the &lt;code&gt;org-cite&lt;/code&gt; citation when using CSL (see the above link to tecosaur’s guide).&lt;/p&gt;
&lt;p&gt;I will give an example. Basic MLA in-text citations following a &lt;code&gt;(AUTHOR PAGE)&lt;/code&gt; format. However, closely following MLA means that subsequent in-text citations from the same source should have a &lt;code&gt;(PAGE)&lt;/code&gt; format. Using the &lt;code&gt;csl&lt;/code&gt; processor, without specifying a style or variant in the &lt;code&gt;org-cite&lt;/code&gt; citation, will &lt;em&gt;always&lt;/em&gt; output the former formatting as rendered text; as &lt;a href=&quot;https://www.reddit.com/r/orgmode/comments/vchefn/comment/icgt0ql/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;r/bdarcus explains in his comment&lt;/a&gt;, CSL focuses on higher-level commands in order to be agnostic of output format. On the other hand, &lt;code&gt;org-cite&lt;/code&gt; will, by default, leverage the &lt;code&gt;\autocite&lt;/code&gt; command (see &lt;code&gt;org-cite-biblatex-styles&lt;/code&gt;). This tells &lt;code&gt;biblatex&lt;/code&gt; to &lt;strong&gt;change the variant when appropriate&lt;/strong&gt;. This is an immensely powerful upside to using the &lt;code&gt;bibtex&lt;/code&gt; processor—though it is minor in this particular case, this demonstrates the advantages of the &lt;code&gt;biblatex&lt;/code&gt; package. You can read more about the differences between CSL and &lt;code&gt;biblatex&lt;/code&gt; in this &lt;a href=&quot;https://tex.stackexchange.com/a/435004&quot;&gt;thorough StackExchange explanation&lt;/a&gt;. Of course, however, &lt;code&gt;biblatex&lt;/code&gt; is only available when exporting to LaTeX, whereas &lt;strong&gt;CSL can be used to export into any format&lt;/strong&gt; (e.g. HTML, Markdown, ODT, plain-text).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In sum&lt;/em&gt;, use the &lt;code&gt;bibtex&lt;/code&gt; processor &lt;strong&gt;when you are exporting to LaTeX and only LaTeX&lt;/strong&gt; and&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;want automatic selection of citation variants&lt;/li&gt;
&lt;li&gt;or have rare field or entry types in your &lt;code&gt;.bib&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Otherwise&lt;/em&gt;, use the &lt;code&gt;csl&lt;/code&gt; processor&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; (assuming you have a &lt;code&gt;.csl&lt;/code&gt; file for your desired citation style).&lt;/p&gt;
&lt;p&gt;Finally, it should be noted that &lt;strong&gt;the &lt;code&gt;csl&lt;/code&gt; and &lt;code&gt;bibtex&lt;/code&gt; processors use different locators in citations&lt;/strong&gt;. As explained in &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html#cite-syntax&quot;&gt;tecosaur’s guide&lt;/a&gt;, the &lt;code&gt;csl&lt;/code&gt; processor uses locators like &lt;code&gt;bk.&lt;/code&gt; and &lt;code&gt;vol.&lt;/code&gt;, so citations may look like &lt;code&gt;[cite/noauthor:See@mollisonNietzscheContraStoicism2018 pp. 28–9;@priestWhyItIrrational2001 pp. 14;]&lt;/code&gt;​—CSL processes these locators. On the other hand, a citation key’s suffix is &lt;em&gt;directly passed as an option to BibLaTeX commands&lt;/em&gt;, so an equivalent to the above would be &lt;code&gt;[cite/noauthor:See@mollisonNietzscheContraStoicism2018 28–9;@priestWhyItIrrational2001 14;]&lt;/code&gt;, which doesn’t have CSL locators.&lt;/p&gt;
&lt;h3&gt;Configuration &lt;a href=&quot;#configuration&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Luckily, the difficulty in &lt;code&gt;org-cite&lt;/code&gt; is only conceptually: configuring it is incredibly straightforward. There are two main variables that affect functionality. The first is crucial, and the second is useful to be aware of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;org-cite-global-bibliography&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org-cite-export-processors&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;org-cite-global-bibliography&lt;/code&gt; is the bare minimum to getting &lt;code&gt;org-cite&lt;/code&gt; ready to work. This should be a list of bibliography file (&lt;code&gt;.bib&lt;/code&gt;) paths. I have mine set to a list whose single element is a file that Zotero exports:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Actually, I set this value to &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;kb/bib-files&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, which is a list of file paths.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; I set that as the value of any variable that requires bibliography files,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; such as &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;citar&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, as you&apos;ll see below.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-global-bibliography&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/Documents/org-database/roam/references/master-lib.bib&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Alternatively, you can use the org-mode &lt;code&gt;#+BIBLIOGRAPHY:&lt;/code&gt; keyword to set this value per-file; it’s value should be a file path.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;org-cite-export-processors&lt;/code&gt; is useful as a means to tweak how you’d like &lt;code&gt;org-cite&lt;/code&gt; to export citations. You can also set a file-local value using the &lt;code&gt;#+CITE_EXPORT&lt;/code&gt; file keyword (e.g. &lt;code&gt;#+CITE_EXPORT: csl chicago-author-date.csl&lt;/code&gt;); see &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html#more-exporting&quot;&gt;this section in tecosaur’s guide&lt;/a&gt; for an example of how to set the processor, bibliography style, and citation style with this keyword. For a given backend&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;, you can choose how &lt;code&gt;org-cite&lt;/code&gt; exports it. For instance, here is mine:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-export-processors&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;md &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;csl &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;chicago-fullnote-bibliography.csl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;; Footnote reliant&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;latex biblatex&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;                                   &lt;/span&gt;&lt;span&gt;; For humanities&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;odt &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;csl &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;chicago-fullnote-bibliography.csl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;; Footnote reliant&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;csl &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;modern-language-association.csl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;; Fallback&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;As you can see, I have CSL be the default in every case aside from LaTeX. The styles can either be a file path or a file name in &lt;code&gt;org-cite-csl-styles-dir&lt;/code&gt;​—see &lt;a href=&quot;#zotero&quot;&gt;Zotero&lt;/a&gt; for how to easily acquire CSL files.&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; (I use LaTeX strictly for my academic papers, so I really enjoy &lt;code&gt;biblatex&lt;/code&gt;’s features.)&lt;/p&gt;
&lt;p&gt;I also choose to customize faces—I prefer the green faces that &lt;code&gt;org-ref&lt;/code&gt; uses:&lt;sup&gt;&lt;a href=&quot;#fn-5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom-face&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Have citation link faces look closer to as they were for &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-ref&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:foreground&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;DarkSeaGreen4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-key &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:foreground&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;forest green&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:slant&lt;/span&gt;&lt;span&gt; italic&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Usage &lt;a href=&quot;#usage&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Using &lt;code&gt;org-cite&lt;/code&gt; is incredibly simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;org-cite-insert&lt;/code&gt; to insert citations in &lt;code&gt;org&lt;/code&gt; files, and&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#+PRINT_BIBLIOGRAPHY:&lt;/code&gt; within a document to mark where the bibliography/references/works cited should be.&lt;sup&gt;&lt;a href=&quot;#fn-6&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Citar &lt;a href=&quot;#citar&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Using &lt;code&gt;org-cite&lt;/code&gt; is really simple. But many users will find the interface… too bare. &lt;a href=&quot;https://github.com/emacs-citar/citar&quot;&gt;Citar&lt;/a&gt; is, roughly, the foremost attempt to provide a pleasing frontend to &lt;code&gt;org-cite&lt;/code&gt;. It adds the &lt;code&gt;citar&lt;/code&gt; citation-insert processor. The following is the &lt;strong&gt;minimum&lt;/strong&gt; to start using &lt;code&gt;citar&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; citar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; The &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;:straight&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; keyword is not necessary. However, I do this to set a value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; for the &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;:includes&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; keyword. This keyword tells use-package that those&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; package(s) are provided by this package, and not to search for them on&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Melpa for download. Alternatively, you can set the &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;:straight&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; keyword to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; nil in those package(s) use-package declaration.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:straight&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar &lt;/span&gt;&lt;span&gt;:type&lt;/span&gt;&lt;span&gt; git &lt;/span&gt;&lt;span&gt;:host&lt;/span&gt;&lt;span&gt; github &lt;/span&gt;&lt;span&gt;:repo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;emacs-citar/citar&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:includes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-org&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; A list of bib files. A good idea would be having its value be identical to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; that of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-cite-global-bibliography&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;. For me, I have all my bib file(s)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; as a list of strings in &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;kb/bib-files&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-bibliography kb/bib-files&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Use &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;citar&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; with &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-cite&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; citar-org&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; oc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-insert-processor &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;citar)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-follow-processor &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;citar)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-activate-processor &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;citar))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can then set keybinds for common &lt;code&gt;citar&lt;/code&gt; commands. For example, in the &lt;code&gt;:general&lt;/code&gt; use-package keyword:&lt;sup&gt;&lt;a href=&quot;#fn-7&quot;&gt;[7]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;org-mode-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;:prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-c b&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;citar-insert-citation &lt;/span&gt;&lt;span&gt;:wk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Insert citation&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;citar-insert-reference &lt;/span&gt;&lt;span&gt;:wk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Insert reference&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;citar-open-notes &lt;/span&gt;&lt;span&gt;:wk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Open note&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you use &lt;code&gt;embark&lt;/code&gt; and &lt;code&gt;org-roam&lt;/code&gt; you can also set these variables:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-notes-paths &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; kb/roam-dir&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; List of directories for reference nodes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-open-note-function &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;orb-citar-edit-note)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Open notes in &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-roam&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-at-point-function &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;embark-act)&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;; Use &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;embark&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Capturing (Outdated) &lt;a href=&quot;#capturing-outdated&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Aug 19, 2023&lt;/span&gt;  &lt;/time&gt; The &lt;a href=&quot;https://github.com/emacs-citar/citar-org-roam&quot;&gt;citar-org-roam&lt;/a&gt; package provides all that is mentioned in this section and more. That package should be used instead in any instance of a desired integration between &lt;code&gt;org-roam&lt;/code&gt; and &lt;code&gt;citar&lt;/code&gt;.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;If you use &lt;code&gt;org-roam&lt;/code&gt;, then the following is how you select bibliographic source and create an &lt;code&gt;org-roam&lt;/code&gt; node from it. All credit goes to &lt;a href=&quot;https://www.jethro.dev/&quot;&gt;Jethro Kuan&lt;/a&gt;, the creator of &lt;code&gt;org-roam&lt;/code&gt;, though I’ve made a few of my own customizations:&lt;sup&gt;&lt;a href=&quot;#fn-8&quot;&gt;[8]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Create a new node from a bibliographic source. taken from&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; https://jethrokuan.github.io/org-roam-guide/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/org-roam-node-from-cite&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;keys-entries&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-select-ref &lt;/span&gt;&lt;span&gt;:multiple&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:rebuild-cache&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;title &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar--format-entry-no-widths &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cdr&lt;/span&gt;&lt;span&gt; keys-entries&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                              &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${author editor}${date urldate} :: ${title}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-roam-capture- &lt;/span&gt;&lt;span&gt;:templates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                       &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;reference&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; plain&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;%?&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;:if-new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file+head &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;references/${citekey}.org&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                             &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:properties:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:roam_refs: [cite:@${citekey}]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:end:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;#+title: ${title}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;#+filetags: %(kb/insert-lit-category)&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;:immediate-finish&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;:unnarrowed&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                       &lt;/span&gt;&lt;span&gt;:info&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:citekey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt; keys-entries&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                       &lt;/span&gt;&lt;span&gt;:node&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-roam-node-create &lt;/span&gt;&lt;span&gt;:title&lt;/span&gt;&lt;span&gt; title&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                       &lt;/span&gt;&lt;span&gt;:props&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;:finalize&lt;/span&gt;&lt;span&gt; find-file&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I add it to an accessible keybinding:&lt;sup&gt;&lt;a href=&quot;#fn-9&quot;&gt;[9]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;kb/note-keys                           &lt;/span&gt;&lt;span&gt;; global-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;kb/org-roam-node-from-cite &lt;/span&gt;&lt;span&gt;:wk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Citar-capture&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Advising &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; (Outdated) &lt;a href=&quot;#h:20241106T044538.716623&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Jul 20, 2023&lt;/span&gt;  &lt;/time&gt; &lt;a href=&quot;https://github.com/emacs-citar/citar/commit/648ef552283fd9de18e6ccdf088d55fa26fe3cd8&quot;&gt;Upstream has recently merged&lt;/a&gt; changes to &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt;, renaming it to &lt;code&gt;citar-org-update-prefix-suffix&lt;/code&gt; and ensuring that a single space is left between citekeys and their suffixes. Therefore, the code directly below is now unnecessary.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;A useful command is &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt;. This command sets the prefix and suffix of a citation key (a single citation can have multiple keys). This is notable since a citation’s suffix is where you provide a locator (e.g. a page number). The command is bound to &lt;code&gt;M-p&lt;/code&gt; when the point is on a citation key.&lt;/p&gt;
&lt;p&gt;Before advising &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt;, I first advise &lt;code&gt;org-cite-insert&lt;/code&gt; such that &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; is run immediately after inserting a citation:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Run &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;citar-org-update-pre-suffix&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; after inserting a citation to immediately&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; set its prefix and suffix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;advice-add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;org-cite-insert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&apos;(&lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;save-excursion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;left-char&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; First move point inside citation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-org-update-pre-suffix&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A limitation with this code is that this only calls &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; on the last citation key, which is fine when only one key is inserted at once, and not when multiple are inserted. (Though, &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; can still be called manually on the other citation keys afterward.)&lt;/p&gt;
&lt;p&gt;Additionally, I override &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; with my own version which adds the following functionality:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Temporarily enable &lt;a href=&quot;https://github.com/jorgenschaefer/typoel&quot;&gt;typo-mode&lt;/a&gt;.&lt;sup&gt;&lt;a href=&quot;#fn-10&quot;&gt;[10]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Avoid manually inserting a separating space in the suffix.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/citar-org-update-pre-suffix&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Change the pre/suffix text of the reference at point.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;My version also adds a space in the suffix so I don&apos;t always have&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;to manually add one myself.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Enable &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;typo&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; typographic character cycling in minibuffer. Particularly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; useful in adding en- and em-dashes in citation suffixes (e.g. for page&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; ranges)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;featurep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;typo)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-mode-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;typo-mode))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Enable dashes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let* &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;datum &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-context&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;datum-type &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-type datum&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ref &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;eq&lt;/span&gt;&lt;span&gt; datum-type &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;citation-reference)&lt;/span&gt;&lt;span&gt; datum&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Not on a citation reference&lt;/span&gt;&lt;span&gt;&quot;)&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-property &lt;/span&gt;&lt;span&gt;:key&lt;/span&gt;&lt;span&gt; ref&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;;; TODO handle space delimiter elegantly.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pre &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;read-string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Prefix text: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-property &lt;/span&gt;&lt;span&gt;:prefix&lt;/span&gt;&lt;span&gt; ref&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;post &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;read-string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Suffix text: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-property &lt;/span&gt;&lt;span&gt;:suffix&lt;/span&gt;&lt;span&gt; ref&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;;; Change post to automatically have one space prior to any user-inputted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;;; suffix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq post&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;replace-regexp-in-string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;\&lt;/span&gt;&lt;span&gt;s-*&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;; If there is nothing of substance (e.g. an empty string)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;replace-regexp-in-string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;^[&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;s-]*&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Only begin with one space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setf &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;buffer-substring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-property &lt;/span&gt;&lt;span&gt;:begin&lt;/span&gt;&lt;span&gt; ref&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                            &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-property &lt;/span&gt;&lt;span&gt;:end&lt;/span&gt;&lt;span&gt; ref&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-interpret-data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;`(&lt;/span&gt;&lt;span&gt;citation-reference&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;key &lt;/span&gt;&lt;span&gt;:prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;pre &lt;/span&gt;&lt;span&gt;:suffix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;post&lt;/span&gt;&lt;span&gt;)))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Remove hook if it was added earlier&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;remove-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-mode-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;typo-mode))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;advice-add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;citar-org-update-pre-suffix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:override&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/citar-org-update-pre-suffix)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;One can also add this command to &lt;code&gt;citar-citation-map&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;#fn-11&quot;&gt;[11]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3&gt;Aesthetics &lt;a href=&quot;#aesthetics&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Finally, we can change the way the &lt;code&gt;citar&lt;/code&gt; interface appears. The most relevant variables are &lt;code&gt;citar-templates&lt;/code&gt; and &lt;code&gt;citar-symbols&lt;/code&gt;. Below is my configuration for these variables. Notably, my definition for &lt;code&gt;citar-symbols&lt;/code&gt; utilizes &lt;code&gt;all-the-icons&lt;/code&gt; icons to fancify the candidates (&lt;code&gt;all-the-icons&lt;/code&gt; must be installed in order to have the faces below available):&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-templates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;main &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${author editor:30}   ${date year issued:4}    ${title:110}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;suffix &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;     ${=type=:20}    ${tags keywords keywords:*}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;preview &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${author editor} (${year issued date}) ${title}, ${journal journaltitle publisher container-title collection-title}.&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;note &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;#+title: Notes on ${author editor}, ${title}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; For new notes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Configuring all-the-icons. From&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; https://github.com/bdarcus/citar#rich-ui&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-symbols&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`((&lt;/span&gt;&lt;span&gt;file ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-faicon &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;file-o&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;all-the-icons-green&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-0.1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-faicon &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;file-o&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/citar-icon-dim&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-0.1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;note ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-material &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;speaker_notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;all-the-icons-blue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-0.3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-material &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;speaker_notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/citar-icon-dim&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-0.3&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;link ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-octicon &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;all-the-icons-orange&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.01&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-octicon &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/citar-icon-dim&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.01&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-symbol-separator &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Here we define a face to dim non &apos;active&apos; icons, but preserve alignment.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Change to your own theme&apos;s background(s)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defface&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kb/citar-icon-dim&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Change these colors to match your theme. Using something like&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;face-attribute&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; to get the value of a particular attribute of a face might&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; be more convenient.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;((((&lt;/span&gt;&lt;span&gt;background dark&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:foreground&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;#212428&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(((&lt;/span&gt;&lt;span&gt;background light&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:foreground&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;#f0f0f0&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Face for having icons&apos; color be identical to the theme&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;background when &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;&quot;not shown&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;&quot;.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Here’s the end-result:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_Z1PTIQs.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_eYxYG.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_1k9I4H.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_2hzTUQ.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_Z1BLdvx.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_Z1wLSJX.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_ypawn.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_ZmYx43.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_Z2tGHuv.png?dpl=6a1b581575edd000083cc994 1911w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_Z2rGDJQ.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_ollvo.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_Cf5K0.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_ZEzyNQ.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_C4Stj.png?dpl=6a1b581575edd000083cc994 3822w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;Visual improvements to &lt;code&gt;citar&lt;/code&gt;’s minibuffer interface.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2&gt;Other interesting packages &lt;a href=&quot;#other-interesting-packages&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;Zotero &lt;a href=&quot;#zotero&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.zotero.org/support/&quot;&gt;Zotero&lt;/a&gt; isn’t an Emacs package, but it is crucial to most users’ workflow, so it deserves attention. Zotero makes gathering, storing, and exporting bibliographic data infinitely easier. For instance, an ISBN or DOI of a source is all that is necessary for an entry’s fields to be populated. There are two things to note about my setup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I install the &lt;a href=&quot;https://retorque.re/zotero-better-bibtex/installation/&quot;&gt;BetterBibLaTex&lt;/a&gt; add-on (see its features in the &lt;a href=&quot;https://retorque.re/zotero-better-bibtex/#features&quot;&gt;official documentation page&lt;/a&gt;. Its main benefits include unique citation key generation and exporting facilities),&lt;/li&gt;
&lt;li&gt;and export my library using the BetterBibLaTeX format. I also tick the “Keep Updated” option; this continually updates the &lt;code&gt;.bib&lt;/code&gt; file as I make changes to my library. I then point &lt;code&gt;org-cite-global-bibliography&lt;/code&gt; and &lt;code&gt;citar-bibliography&lt;/code&gt; to this file.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Additionally, for over a year now, I’ve been using Zotero’s own PDF viewer and annotator. &lt;a href=&quot;https://www.zotero.org/blog/zotero-6/&quot;&gt;Until recently&lt;/a&gt;, this feature had only been available in &lt;a href=&quot;https://www.zotero.org/support/dev_builds&quot;&gt;Zotero Beta&lt;/a&gt;, but it is now merged onto the main branch. Though it isn’t powerful, it gets the job done for me, and the convenience is what sells it.&lt;/p&gt;
&lt;p&gt;Finally, a &lt;em&gt;very handy&lt;/em&gt; tip is to &lt;strong&gt;use the CSL files that Zotero already provides&lt;/strong&gt; (credit to &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html#working-with-zotero&quot;&gt;this section of tecosaur’s guide&lt;/a&gt;). The CSL files (which provide citation styles) are located in &lt;code&gt;ZOTERO_DIR/styles/&lt;/code&gt;. You can set &lt;code&gt;org-cite-csl-styles-dir&lt;/code&gt; to this path:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-csl-styles-dir&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;expand-file-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;~/Documents/Zotero/styles/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Embark &lt;a href=&quot;#embark&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/oantolin/embark/&quot;&gt;Embark&lt;/a&gt; provides menus (essentially keymaps) based on “context,” that is, the type of thing the point is on. As a result, &lt;code&gt;embark&lt;/code&gt; has immense potential. &lt;code&gt;Citar&lt;/code&gt; is built to exploit &lt;code&gt;embark&lt;/code&gt; without requiring it—for instance, see &lt;code&gt;citar-citation-map&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Org-roam-bibtex &lt;a href=&quot;#org-roam-bibtex&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/org-roam/org-roam-bibtex&quot;&gt;Org-roam-bibtex&lt;/a&gt; integrates &lt;a href=&quot;https://github.com/org-roam/org-roam&quot;&gt;org-roam&lt;/a&gt; with citation systems, such as &lt;code&gt;org-cite&lt;/code&gt;. This packages allows &lt;code&gt;org-roam&lt;/code&gt; to recognize particular nodes as bibliographic (i.e. associated with a particular &lt;code&gt;.bib&lt;/code&gt; entry).&lt;/p&gt;
&lt;p&gt;Additionally, as &lt;a href=&quot;https://www.reddit.com/r/orgmode/comments/vchefn/comment/icg0sha/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;as &lt;code&gt;citar&lt;/code&gt;’s author, u/bdarcus, shares here&lt;/a&gt;, there is work being done on &lt;code&gt;citar&lt;/code&gt;’s end to more tightly integrate &lt;code&gt;org-roam&lt;/code&gt; with &lt;code&gt;citar&lt;/code&gt;, in the form of &lt;code&gt;citar-org-roam&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Citar-capf &lt;a href=&quot;#citar-capf&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/mclear-tools/citar-capf&quot;&gt;Citar-capf&lt;/a&gt; provides a &lt;code&gt;complation-at-point-function&lt;/code&gt;&lt;sup&gt;&lt;a href=&quot;#fn-12&quot;&gt;[12]&lt;/a&gt;&lt;/sup&gt; for citations. However, if you’re reading this in the future, there’s a likely chance that &lt;a href=&quot;https://github.com/emacs-citar/citar/commit/784791a090f9a2ed293f8b3ebd5636c690b718bc&quot;&gt;this commit&lt;/a&gt; would have been merged. The commit merges &lt;code&gt;citar-capf&lt;/code&gt; with &lt;code&gt;citar&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Org-ref &lt;a href=&quot;#org-ref&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jkitchin/org-ref&quot;&gt;Org-ref&lt;/a&gt; has historically been the dominant citation system for &lt;code&gt;org-mode&lt;/code&gt;. I elect to use &lt;code&gt;org-cite&lt;/code&gt; instead because (i) it comes with &lt;code&gt;org-mode&lt;/code&gt;, meaning there is one less conceptual- and configuration-layer to navigate, (ii) Moreover, &lt;code&gt;org-ref&lt;/code&gt; uses a format that follows &lt;code&gt;org&lt;/code&gt; conventions less closely, and (iii) I have read that is arguably more robust and future-proof. Nevertheless, some users still prefer it.&lt;/p&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Jun 15, 2022&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Better clarity in &lt;a href=&quot;#h:20241106T044538.716623&quot;&gt;Advising &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; (Outdated)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Mention the merging of &lt;code&gt;citar-capf&lt;/code&gt; into &lt;code&gt;citar&lt;/code&gt; (see &lt;a href=&quot;#citar-capf&quot;&gt;Citar-capf&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Added &lt;a href=&quot;#embark&quot;&gt;Embark&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Mention &lt;code&gt;citar-org-roam&lt;/code&gt; in &lt;a href=&quot;#org-roam-bibtex&quot;&gt;Org-roam-bibtex&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Made comments clarifying &lt;code&gt;kb/bib-files&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add screenshot that showcases visually improved &lt;code&gt;citar&lt;/code&gt; interface (see &lt;a href=&quot;#aesthetics&quot;&gt;Aesthetics&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Jun 19, 2022&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;a href=&quot;#helpful-sources&quot;&gt;Helpful sources&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Change processor explanations to include the &lt;code&gt;natbib&lt;/code&gt; processor.&lt;/li&gt;
&lt;li&gt;Change processor explanations to recognize the difference between plain-text and rendered text.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Jul 20, 2023&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Noted that some package-specific information in this article may be outdated.&lt;/li&gt;
&lt;li&gt;Noted update to &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Aug 19, 2023&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Mentioned &lt;code&gt;citar-org-roam&lt;/code&gt; as preferable to any desired integration between &lt;code&gt;org-roam&lt;/code&gt; and &lt;code&gt;citar&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Nov 20, 2023&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Updated GitLab Gist.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;The &lt;code&gt;basic&lt;/code&gt; processor provides bare functionality and should never be preferred over the alternative, if possible.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;See &lt;a href=&quot;#configuration&quot;&gt;Configuration&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This is an &lt;code&gt;org-export&lt;/code&gt; backend. This means that, for instance, &lt;code&gt;md&lt;/code&gt; refers to the &lt;code&gt;org-export&lt;/code&gt; &lt;code&gt;md&lt;/code&gt; backend as well as any other derived backends. Read the documentation for &lt;code&gt;org-export-define-derived-backend&lt;/code&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-4&quot;&gt;[4]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Notice that a citation style is required for the &lt;code&gt;csl&lt;/code&gt; processor, and not for the &lt;code&gt;bibtex&lt;/code&gt; processor.&lt;/p&gt;  &lt;a href=&quot;#fnref-4&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-5&quot;&gt;[5]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Be aware that I use &lt;code&gt;use-package&lt;/code&gt;’s &lt;code&gt;:custom-face&lt;/code&gt; keyword to redefine these two faces. One can just as easily use the built-in &lt;code&gt;defface&lt;/code&gt; of &lt;code&gt;set-face-attribute&lt;/code&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-5&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-6&quot;&gt;[6]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Also see &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html#basic-usage&quot;&gt;this section of tecosaur’s guide&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-6&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-7&quot;&gt;[7]&lt;/a&gt; &lt;div&gt; &lt;p&gt;You can also just use the built-in &lt;code&gt;define-key&lt;/code&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-7&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-8&quot;&gt;[8]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This assumes that you have &lt;code&gt;org-roam-bibtex&lt;/code&gt; installed and enabled. See &lt;a href=&quot;#org-roam-bibtex&quot;&gt;Org-roam-bibtex&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-8&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-9&quot;&gt;[9]&lt;/a&gt; &lt;div&gt; &lt;p&gt;&lt;code&gt;kb/note-keys&lt;/code&gt; is my own &lt;code&gt;general.el&lt;/code&gt; leader key. I’ve mapped its prefix to &lt;code&gt;C-c n&lt;/code&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-9&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-10&quot;&gt;[10]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I prefer directly inserting curly quotes, em-dashes, and en-dashes into my buffers. I enable &lt;code&gt;typo-mode&lt;/code&gt; here so that typing page ranges properly inserts en-dashes.&lt;/p&gt;  &lt;a href=&quot;#fnref-10&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-11&quot;&gt;[11]&lt;/a&gt; &lt;div&gt; &lt;p&gt;See &lt;a href=&quot;#embark&quot;&gt;Embark&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-11&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-12&quot;&gt;[12]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Also see &lt;a href=&quot;https://kristofferbalintona.me/articles/vertico-marginalia-all-the-icons-completion-and-orderless/&quot;&gt;Vertico, Marginalia, All-the-icons-completion, and Orderless&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-12&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Tue, 14 Jun 2022 23:52:00 GMT</pubDate><category>Emacs</category><category>Guide</category></item><item><title>True Emacs Transparency</title><link>https://kristofferbalintona.me/posts/202206071500/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202206071500/</guid><description>&lt;p&gt;Transparency in Emacs isn’t that great. Every source I find regarding transparency of Emacs (as of writing this) points to setting the &lt;code&gt;alpha&lt;/code&gt; frame parameter. For instance:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.emacswiki.org/emacs/TransparentEmacs&quot;&gt;EmacsWiki: Transparent Emacs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://emacs.stackexchange.com/questions/22663/how-can-transparency-be-toggled&quot;&gt;How can transparency be toggled? - Emacs Stack Exchange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2935520/how-to-set-a-key-binding-to-make-emacs-as-transparent-opaque-as-i-want&quot;&gt;How to set a key binding to make Emacs as transparent/opaque&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/emacs/comments/ljev64/any_advice_on_getting_transparency_to_work_in/&quot;&gt;Any Advice On Getting Transparency To Work In Emacs Window Manager&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The issue with &lt;code&gt;alpha&lt;/code&gt; is that it sets the transparency of the &lt;em&gt;entire window&lt;/em&gt;; what this means is that &lt;em&gt;text and background&lt;/em&gt; become transparent together. Clearly this is undesirable for some: the &lt;code&gt;alpha&lt;/code&gt; parameter needs to be near 100, otherwise the text becomes illegible. Ideally, the text remains opaque while the background becomes transparent.&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The solution came from a &lt;a href=&quot;https://github.com/TheVaffel/emacs&quot;&gt;patched version of Emacs made by Håkon Flatval&lt;/a&gt; back in November 2021—his announcement that month &lt;a href=&quot;https://www.reddit.com/r/emacs/comments/qm3tsv/i_implemented_partial_support_for_background/&quot;&gt;on Reddit&lt;/a&gt; received some attention. The patch adds the &lt;code&gt;alpha-background&lt;/code&gt; frame parameter which makes &lt;strong&gt;only the background&lt;/strong&gt; of a frame transparent:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_ZA9hMS.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_27WYQK.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_Z1R3XRa.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_ZTCM11.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_gcdlw.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_WeacM.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_Z21KTjN.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_271vSH.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_PSYK.png?dpl=6a1b581575edd000083cc994 1919w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_2jpcT.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_Z2bOIkM.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_Z1WUY6b.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_1Oqu8T.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_Z1UCDho.png?dpl=6a1b581575edd000083cc994 3838w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;&lt;code&gt;alpha-background&lt;/code&gt; set to 75.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;You can set the &lt;code&gt;alpha-background&lt;/code&gt; of a particular frame with the &lt;code&gt;set-frame-parameter&lt;/code&gt; function, and the default value for frames by adding to &lt;code&gt;default-frame-alist&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; For example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;set-frame-parameter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;alpha-background&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; For current frame&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;default-frame-alist&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;alpha-background &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; For all new frames henceforth&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I’ve also defined my own command for toggling between a frame having &lt;code&gt;alpha-background&lt;/code&gt; values of 100 and 72:&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/toggle-window-transparency&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Toggle the value of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;alpha-background&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Toggles between 100 and 72 by default.  Can choose which value to change&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;to if called with ARG, or any prefix argument.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;transparency &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pcase&lt;/span&gt;&lt;span&gt; arg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;pred numberp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; arg&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;pred &lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;read-number&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Change the transparency to which value (0-100)? &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pcase&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;frame-parameter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;alpha-background)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;72&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;72&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;))))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;set-frame-parameter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;alpha-background&lt;/span&gt;&lt;span&gt; transparency&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Mar 8, 2025&lt;/span&gt;  &lt;/time&gt; Readers should be aware that the above code snippet may have potential incompatibilities with other versions of Emacs. Small modifications may be necessary in such cases.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;In practice, this is what toggling transparency looks like:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/emacs-transparency.9LiHIQJI_Z29YHMJ.gif?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/emacs-transparency.9LiHIQJI_Z2pNR9m.gif?dpl=6a1b581575edd000083cc994 640w, /_astro/emacs-transparency.9LiHIQJI_Z1kDH4l.gif?dpl=6a1b581575edd000083cc994 750w, /_astro/emacs-transparency.9LiHIQJI_Zndvdc.gif?dpl=6a1b581575edd000083cc994 828w, /_astro/emacs-transparency.9LiHIQJI_MBu9l.gif?dpl=6a1b581575edd000083cc994 960w, /_astro/emacs-transparency.9LiHIQJI_2atgyo.gif?dpl=6a1b581575edd000083cc994 1080w, /_astro/emacs-transparency.9LiHIQJI_ZNvMXc.gif?dpl=6a1b581575edd000083cc994 1280w, /_astro/emacs-transparency.9LiHIQJI_Z1SIzQv.gif?dpl=6a1b581575edd000083cc994 1620w, /_astro/emacs-transparency.9LiHIQJI_Z1JUvyC.gif?dpl=6a1b581575edd000083cc994 1668w, /_astro/emacs-transparency.9LiHIQJI_1fyvyv.gif?dpl=6a1b581575edd000083cc994 1920w, /_astro/emacs-transparency.9LiHIQJI_ZXzBYb.gif?dpl=6a1b581575edd000083cc994 2048w, /_astro/emacs-transparency.9LiHIQJI_ZJFRJz.gif?dpl=6a1b581575edd000083cc994 2560w, /_astro/emacs-transparency.9LiHIQJI_Z22vxjq.gif?dpl=6a1b581575edd000083cc994 3200w, /_astro/emacs-transparency.9LiHIQJI_Z1Tf1y3.gif?dpl=6a1b581575edd000083cc994 3240w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;Live-toggling of the &lt;code&gt;alpha-background&lt;/code&gt; parameter.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;I had been using Håkon’s patched version since becoming aware of it, and it’s been perfect for me. My only gripe was that without the expertise of patching future releases of Emacs (Håkon wasn’t updating his repository), I would inevitably be using an increasingly out-of-date version of Emacs.&lt;/p&gt;
&lt;p&gt;However, I recently returned to check if there had been any updates to the repo. Though there were no new commits to the repository, I decided to check if there was work on mainline Emacs yet. I searched the repo for matches of &lt;code&gt;alpha-background&lt;/code&gt;, and sure enough, I found a hit! &lt;strong&gt;On January 30, 2022, &lt;a href=&quot;https://github.com/emacs-mirror/emacs/commit/5c87d826201a5cae242ce5887a0aa7e24ad6f5ee&quot;&gt;Po Lu silently announced the merging of the patch&lt;/a&gt;&lt;/strong&gt;. Accordingly, this means that &lt;em&gt;the &lt;code&gt;alpha-background&lt;/code&gt; frame parameter is available to all builds after January 30, 2022&lt;/em&gt;. I’ll also note that do not know what went on behind-the-scenes to get this merged, so I’ll make it clear that I am not attributing the development of this feature to only Håkon and Po Lu.&lt;/p&gt;
&lt;p&gt;Of course, transparency in Emacs (alongside any other application on your system) is only possible if you are using a compositor (e.g. Picom). Regarding build flags, Håkon’s patch supported transparency only with Emacs compiled with GTK3 and cairo support. I do not know for certain if this is still the case. If it is, then an Emacs built with the &lt;code&gt;--with-cairo&lt;/code&gt; and &lt;code&gt;--with-x-toolkit=gtk3&lt;/code&gt; flags is necessary (meaning this feature is only available on machines using &lt;code&gt;X Window&lt;/code&gt;). However, &lt;a href=&quot;https://www.reddit.com/r/emacs/comments/v72tu6/comment/ibioym9/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;according to this Reddit comment thread&lt;/a&gt;, it seems like only cairo is necessary, while GTK3 is not necessary. That is, &lt;code&gt;--with-x-toolkit=no&lt;/code&gt; works as well.&lt;/p&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Jun 8, 2022&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Note that a compositor is necessary for transparency.&lt;/li&gt;
&lt;li&gt;Added statement about GTK3 perhaps not being necessary that links to a corresponding Reddit comment thread.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Mar 8, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Update code snippet for &lt;code&gt;kb/toggle-window-transparency&lt;/code&gt;. Also add note about potential incompatibilities between this code snippet and other versions of Emacs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I work exclusively on a 14-inch laptop, so screen real-estate is valuable. I often use transparency to watch videos (e.g. YouTube, Netflix, lecture) while working on something in Emacs—I benefit from having the space of my entire screen.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;The behavior of &lt;code&gt;alpha-background&lt;/code&gt; matches that of &lt;code&gt;alpha&lt;/code&gt;; that is, 100 is fully opaque while 0 is fully transparent.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;The reason why my frame is not &lt;em&gt;fully&lt;/em&gt; opaque when &lt;code&gt;alpha-background&lt;/code&gt; is 100 is because I’ve additionally set &lt;code&gt;alpha&lt;/code&gt; to 98.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Tue, 07 Jun 2022 15:00:00 GMT</pubDate><category>Emacs</category><category>Guide</category></item><item><title>Cape</title><link>https://kristofferbalintona.me/posts/202203130702/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202203130702/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#what-is-cape&quot;&gt;What is &lt;code&gt;cape&lt;/code&gt;?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#basic-usage-keybinds&quot;&gt;Basic usage: keybinds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#adding-backends-to-completion-at-point-functions&quot;&gt;Adding backends to &lt;code&gt;completion-at-point-functions&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#cape-company-to-capf-and-cape-super-capf&quot;&gt;&lt;code&gt;Cape-company-to-capf&lt;/code&gt; and &lt;code&gt;cape-super-capf&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#pcomplete-nicety&quot;&gt;&lt;code&gt;pcomplete&lt;/code&gt; nicety&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#my-completion-at-point-functions&quot;&gt;My &lt;code&gt;completion-at-point-functions&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#changelog&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What is &lt;code&gt;cape&lt;/code&gt;? &lt;a href=&quot;#what-is-cape&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I will be going over the basic usages of &lt;a href=&quot;https://github.com/minad/cape&quot;&gt;Cape&lt;/a&gt;, namely how to add completion functions to &lt;code&gt;completion-at-point-functions&lt;/code&gt; and how to use &lt;code&gt;cape&apos;s&lt;/code&gt; built-in completion utilities (e.g. &lt;code&gt;cape-company-to-capf&lt;/code&gt; and &lt;code&gt;cape-capf-buster&lt;/code&gt;) to create backends with desired behavior. (Also see &lt;a href=&quot;https://www.reddit.com/r/emacs/comments/td0nth/comment/i0hz6re/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;u/JDRiverRun’s informative comment&lt;/a&gt; about the advantages of using &lt;code&gt;completion-at-point-functions&lt;/code&gt; over &lt;code&gt;company&lt;/code&gt;.)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cape&lt;/code&gt; is to &lt;code&gt;corfu&lt;/code&gt; as &lt;code&gt;company-backends&lt;/code&gt; are to &lt;code&gt;company&lt;/code&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cape provides a bunch of Completion At Point Extensions which can be used in combination with my Corfu completion UI or the default completion UI. The completion backends used by &lt;code&gt;completion-at-point&lt;/code&gt; are so called &lt;code&gt;completion-at-point-functions&lt;/code&gt; (Capfs). In principle, the Capfs provided by Cape can also be used by Company.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Consequently, &lt;code&gt;cape&lt;/code&gt; is only used if you utilize the built-in &lt;code&gt;completion-at-point&lt;/code&gt;, which is best complemented by &lt;code&gt;corfu&lt;/code&gt; text-completion &lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;You can also see the list of built-in &lt;code&gt;completion-at-point-functions&lt;/code&gt; in &lt;a href=&quot;https://github.com/minad/cape#available-capfs&quot;&gt;the README&lt;/a&gt;. Several of these &lt;code&gt;completion-at-point-functions&lt;/code&gt; are quite niche but others, such as &lt;code&gt;cape-file&lt;/code&gt; and &lt;code&gt;cape-symbol&lt;/code&gt; have common use cases.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: I use &lt;code&gt;straight.el&lt;/code&gt; for package management and &lt;code&gt;general.el&lt;/code&gt; to set my keybindings. Both of these packages have integration with &lt;code&gt;use-package&lt;/code&gt; which come in the form of the &lt;code&gt;:straight&lt;/code&gt; and &lt;code&gt;:general&lt;/code&gt; keywords, respectively.&lt;/p&gt;
&lt;h2&gt;Basic usage: keybinds &lt;a href=&quot;#basic-usage-keybinds&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The most basic way to use &lt;code&gt;cape&lt;/code&gt; is to bind its built-in &lt;code&gt;completion-at-point-functions&lt;/code&gt; to their own keys. For instance:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; cape&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:general&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-c&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;; Choose a particular completion function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;complete-tag&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;; etags&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-dabbrev&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;; basically &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;dabbrev-completion&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-keyword&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-symbol&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-abbrev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-ispell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;l&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-line&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;w&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-dict&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-tex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-tex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;^&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-tex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-sgml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-rfc1345))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Additionally, if having &lt;code&gt;completion-at-point-functions&lt;/code&gt; readily available through keybinds is desirable, then one can use &lt;code&gt;cape-interactive-capf&lt;/code&gt; to turn an already existing &lt;code&gt;completion-at-point-function&lt;/code&gt; into a command (i.e. interactive function) that can be bound.&lt;/p&gt;
&lt;h2&gt;Adding backends to &lt;code&gt;completion-at-point-functions&lt;/code&gt; &lt;a href=&quot;#adding-backends-to-completion-at-point-functions&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;However, &lt;code&gt;cape&lt;/code&gt; is powerful because these functions can be added to &lt;code&gt;completion-at-point-functions&lt;/code&gt;, meaning you can configure when each functions is used and where. The simplest way to accomplish this is by adding backends to &lt;code&gt;completion-at-point-functions&lt;/code&gt; in a hook. Here is a simple example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-git-commit&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dolist&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;cape-symbol cape-dabbrev&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; element&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I then add this to the appropriate hook:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;git-commit-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-git-commit&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Consequently, when making commits to git, via &lt;code&gt;magit&lt;/code&gt;, for instance, &lt;code&gt;completion-at-point-functions&lt;/code&gt; looks like this&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;cape-symbol&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cape-dabbrev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tags-completion-at-point-function&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;There are a few additional things to keep in mind when adding backends to &lt;code&gt;completion-function-at-point&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;add-to-list&lt;/code&gt; prepends elements to a list, that is, place an element at the front of a list&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add-to-list&lt;/code&gt; is almost always preferable to &lt;code&gt;push&lt;/code&gt; because &lt;code&gt;push&lt;/code&gt; adds an element to a list even if it already in the list, whereas &lt;code&gt;add-to-list&lt;/code&gt; will not.&lt;/li&gt;
&lt;li&gt;Elements earlier in &lt;code&gt;dolist&lt;/code&gt; will be added to the list before later elements. This means that elements which should be deeper within &lt;code&gt;completion-at-point-functions&lt;/code&gt; should be placed first. (Notice how &lt;code&gt;cape-dabbrev&lt;/code&gt; is added after &lt;code&gt;cape-symbol&lt;/code&gt;.)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;&lt;code&gt;Cape-company-to-capf&lt;/code&gt; and &lt;code&gt;cape-super-capf&lt;/code&gt; &lt;a href=&quot;#cape-company-to-capf-and-cape-super-capf&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think the killer feature of &lt;code&gt;cape&lt;/code&gt; is &lt;code&gt;cape-company-to-capf&lt;/code&gt;. This function is able to convert &lt;em&gt;any&lt;/em&gt; &lt;code&gt;company&lt;/code&gt; backend and convert it into a &lt;code&gt;completion-at-point-function&lt;/code&gt; which &lt;code&gt;corfu&lt;/code&gt; can use&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;. For this reason, I regard &lt;code&gt;cape&lt;/code&gt; as quite an underrated package since it achieves almost full feature parity with &lt;code&gt;company&lt;/code&gt;. Here is an example with &lt;code&gt;company-yasnippet&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-lsp&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Replace the default &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;lsp-completion-at-point&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; with its&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;cape-capf-buster&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; version. Also add &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;cape-file&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; and&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;company-yasnippet&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; backends.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setf &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;elt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cl-member&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;lsp-completion-at-point&lt;/span&gt;&lt;span&gt; completion-at-point-functions&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-capf-buster &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;lsp-completion-at-point))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-company-to-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-yasnippet))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-dabbrev&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Another useful function is &lt;code&gt;cape-super-capf&lt;/code&gt;. This function combines multiple &lt;code&gt;completion-at-point-functions&lt;/code&gt; into a single function. Effectively, this means candidates from multiple backends can appear jointly. For instance, one can combine &lt;code&gt;cape-ispell&lt;/code&gt; and &lt;code&gt;cape-dabbrev&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-org&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;org-roam)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-roam-file-p&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-roam--register-completion-functions-h&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dolist&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-super-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-ispell&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-dabbrev)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-company-to-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-yasnippet))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; element&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For other &lt;code&gt;cape&lt;/code&gt; transformers, see the &lt;a href=&quot;https://github.com/minad/cape#other-capf-transformers&quot;&gt;appropriate section of the README&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;code&gt;pcomplete&lt;/code&gt; nicety &lt;a href=&quot;#pcomplete-nicety&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Finally, I have the following advice to make usage with &lt;code&gt;pcomplete&lt;/code&gt;, what &lt;code&gt;eshell&lt;/code&gt; uses for completion:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; For pcomplete. For now these two advices are strongly recommended to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; achieve a sane Eshell experience. See&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; https://github.com/minad/corfu#completing-with-corfu-in-the-shell-or-eshell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Silence the pcomplete capf, no errors or messages!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;advice-add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;pcomplete-completions-at-point&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:around&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-wrap-silent)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Ensure that pcomplete does not write to the buffer and behaves as a pure&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-at-point-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;advice-add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;pcomplete-completions-at-point&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:around&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-wrap-purify)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;My &lt;code&gt;completion-at-point-functions&lt;/code&gt; &lt;a href=&quot;#my-completion-at-point-functions&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have very hesitantly included my WIP code which leverages &lt;code&gt;cape&lt;/code&gt; and &lt;code&gt;completion-at-point&lt;/code&gt; utilities. I have not described in detail each of the following functions. I have, however, attempted to provide useful docstrings and comments.&lt;/p&gt;
&lt;p&gt;I hesitate to publish this code because it was &lt;strong&gt;very haphazardly written and highly dependent on my configuration&lt;/strong&gt;. The reason for this is the order in which the &lt;code&gt;completion-at-point-functions&lt;/code&gt; are added: any peculiarities in another’s configuration may lead to undesirable results. As a result, &lt;strong&gt;do not directly copy-and-paste this code&lt;/strong&gt; and expect proper functionality. Rather, I put it here as a reference for what can be done.&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Here they are&lt;/strong&gt;&lt;/p&gt; &lt;div&gt;&lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Warning!&lt;/strong&gt; This code may produce undesirable effects! Copy at your own risk.&lt;/p&gt; &lt;/blockquote&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; cape&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;emacs-lisp-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;  kb/cape-capf-setup-elisp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lsp-completion-mode &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-lsp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-org&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;eshell-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-eshell&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;git-commit-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-git-commit&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;LaTeX-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-latex&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sh-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-sh&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:general&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-c&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;; Particular completion function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;complete-tag&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;; etags&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-dabbrev&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;; or dabbrev-completion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-keyword&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-symbol&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-abbrev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-ispell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;l&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-line&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;w&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-dict&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&apos; cape-tex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-tex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;^&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-tex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-sgml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-rfc1345&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-dabbrev-min-length &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Elisp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-ignore-keywords-elisp&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;cand&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Ignore keywords with forms that begin with &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;&quot;:&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;&quot; (e.g.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:history).&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;keywordp&lt;/span&gt;&lt;span&gt; cand&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;char-after&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt; completion-in-region--data&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-elisp&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Replace the default &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;elisp-completion-at-point&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;completion-at-point-function. Doing it this way will prevent&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;disrupting the addition of other capfs (e.g. merely setting the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;variable entirely, or adding to list).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Additionally, add &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;cape-file&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; as early as possible to the list.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setf &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;elt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cl-member&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;elisp-completion-at-point&lt;/span&gt;&lt;span&gt; completion-at-point-functions&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;elisp-completion-at-point)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-symbol)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;;; I prefer this being early/first in the list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-file)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-yasnippet)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-company-to-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-yasnippet)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; LSP&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-lsp&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Replace the default &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;lsp-completion-at-point&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; with its&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;cape-capf-buster&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; version. Also add &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;cape-file&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; and&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;company-yasnippet&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; backends.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setf &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;elt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cl-member&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;lsp-completion-at-point&lt;/span&gt;&lt;span&gt; completion-at-point-functions&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-capf-buster &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;lsp-completion-at-point))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;;; TODO 2022-02-28: Maybe use &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;cape-wrap-predicate&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; to have candidates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;;; listed when I want?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-company-to-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-yasnippet))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-dabbrev&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Org&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-org&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;org-roam)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-roam-file-p&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-roam--register-completion-functions-h&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dolist&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-super-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-ispell&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-dabbrev)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-company-to-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-yasnippet))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; element&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Eshell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-eshell&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dolist&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;pcomplete-completions-at-point&lt;/span&gt;&lt;span&gt; cape-file&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; element&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Git-commit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-git-commit&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;general-define-key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;:states&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;insert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;tab&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point)&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;; Keybinding for &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-at-point&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dolist&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;cape-dabbrev cape-symbol&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; element&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; LaTeX&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-latex&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-auctex)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dolist&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;;; First add &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;company-yasnippet&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-company-to-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-yasnippet)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;;; Then add &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;cape-tex&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-tex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;;; Then add &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;company-auctex&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; in the order it adds its&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;;; backends.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-company-to-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-auctex-bibs)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-company-to-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-auctex-labels)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-company-to-capf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apply-partially&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company--multi-backend-adapter&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                          &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;company-auctex-macros company-auctex-symbols company-auctex-environments&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; element&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/cape-capf-setup-sh&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-shell)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-at-point-functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cape-company-to-capf &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;company-shell)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; For pcomplete. For now these two advices are strongly recommended to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; achieve a sane Eshell experience. See&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; https://github.com/minad/corfu#completing-with-corfu-in-the-shell-or-eshell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Silence the pcomplete capf, no errors or messages!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;advice-add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;pcomplete-completions-at-point&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:around&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-wrap-silent)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Ensure that pcomplete does not write to the buffer and behaves as a pure&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-at-point-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;advice-add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;pcomplete-completions-at-point&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:around&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;cape-wrap-purify))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt; 
&lt;hr /&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Mar 13, 2022&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Fixed typo. Added link to &lt;a href=&quot;https://www.reddit.com/r/emacs/comments/td0nth/comment/i0hz6re/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;u/JDRiverRun’s informative Reddit comment&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;See &lt;a href=&quot;https://kristofferbalintona.me/articles/corfu-kind-icon-and-corfu-doc/&quot;&gt;Corfu, Kind-icon, and Corfu-doc&lt;/a&gt; to see the basic usage of &lt;code&gt;corfu&lt;/code&gt; and several accessory packages.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;&lt;code&gt;tags-completion-at-point-function&lt;/code&gt; is a default &lt;code&gt;completion-at-point-function&lt;/code&gt;&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;See its docstring to learn how to append to a list&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-4&quot;&gt;[4]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This feature is currently listed as experimental but, for the most part, the results are as expected. If anything, rare edge cases are the only points of missing functionality.&lt;/p&gt;  &lt;a href=&quot;#fnref-4&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Sun, 13 Mar 2022 07:02:00 GMT</pubDate><category>Emacs</category><category>Guide</category></item><item><title>Corfu, Kind-icon, and Corfu-doc</title><link>https://kristofferbalintona.me/posts/202202270656/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202202270656/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#synopsis&quot;&gt;Synopsis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#corfu&quot;&gt;Corfu&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#what-is-corfu-how-does-it-differ-from-company&quot;&gt;What is &lt;code&gt;corfu&lt;/code&gt;? How does it differ from &lt;code&gt;company&lt;/code&gt;?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#basic&quot;&gt;Basic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#working-with-the-recent-changes-to-corfu&quot;&gt;Working with the recent changes to &lt;code&gt;corfu&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#further-configuration-in-minibuffers-and-with-lsp&quot;&gt;Further configuration in minibuffers and with &lt;code&gt;lsp&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#end-product&quot;&gt;End product&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#kind-icon&quot;&gt;Kind-icon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#corfu-doc&quot;&gt;Corfu-doc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#changelog&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Nov 28, 2022&lt;/span&gt;  &lt;/time&gt; As is noted in the &lt;a href=&quot;https://github.com/galeo/corfu-doc/issues/25&quot;&gt;&lt;code&gt;corfu-doc&lt;/code&gt; repository&lt;/a&gt;, &lt;code&gt;corfu-doc&lt;/code&gt; has been deprecated by the built-in &lt;code&gt;corfu-popupinfo&lt;/code&gt; &lt;code&gt;corfu&lt;/code&gt; extension. &lt;code&gt;corfu-popupinfo&lt;/code&gt;’s functionality is roughly identical to &lt;code&gt;corfu-doc&lt;/code&gt;’s, though its interface and code is naturally more idiomatic to &lt;code&gt;corfu&lt;/code&gt;.&lt;/p&gt; &lt;/blockquote&gt;
&lt;h2&gt;Synopsis &lt;a href=&quot;#synopsis&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I will be going over my personal Emacs’ text completion (e.g. &lt;code&gt;company-mode&lt;/code&gt; and its accessories) configuration, which includes the following packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/minad/corfu&quot;&gt;Corfu&lt;/a&gt; by Minad — simpler alternative to &lt;code&gt;company-mode&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jdtsmith/kind-icon&quot;&gt;Kind-icon&lt;/a&gt; by jdtsmith (u/JDRiverRun)— add icons to &lt;code&gt;corfu&lt;/code&gt; popup (analog to &lt;code&gt;company-box-icons&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/galeo/corfu-doc&quot;&gt;Corfu-doc&lt;/a&gt; by Galeo — add documentation popup for &lt;code&gt;corfu&lt;/code&gt; candidates (analog to &lt;code&gt;company-box-doc&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: I use &lt;code&gt;straight.el&lt;/code&gt; for package management and &lt;code&gt;general.el&lt;/code&gt; to set my keybindings. Both of these packages have integration with &lt;code&gt;use-package&lt;/code&gt; which come in the form of the &lt;code&gt;:straight&lt;/code&gt; and &lt;code&gt;:general&lt;/code&gt; keywords, respectively.&lt;/p&gt;
&lt;h2&gt;Corfu &lt;a href=&quot;#corfu&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;What is &lt;code&gt;corfu&lt;/code&gt;? How does it differ from &lt;code&gt;company&lt;/code&gt;? &lt;a href=&quot;#what-is-corfu-how-does-it-differ-from-company&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/gif1.BM01cDPj_ZmHAFS.gif?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/gif1.BM01cDPj_1wbaxF.gif?dpl=6a1b581575edd000083cc994 640w, /_astro/gif1.BM01cDPj_Z2sPNbf.gif?dpl=6a1b581575edd000083cc994 750w, /_astro/gif1.BM01cDPj_Z1vpBk6.gif?dpl=6a1b581575edd000083cc994 828w, /_astro/gif1.BM01cDPj_ZkzAWy.gif?dpl=6a1b581575edd000083cc994 960w, /_astro/gif1.BM01cDPj_Z2vkSoe.gif?dpl=6a1b581575edd000083cc994 1073w, /_astro/gif1.BM01cDPj_Z2tsX1W.gif?dpl=6a1b581575edd000083cc994 1080w, /_astro/gif1.BM01cDPj_ZngSJB.gif?dpl=6a1b581575edd000083cc994 1280w, /_astro/gif1.BM01cDPj_Z1jFBl2.gif?dpl=6a1b581575edd000083cc994 1668w, /_astro/gif1.BM01cDPj_1FNpM6.gif?dpl=6a1b581575edd000083cc994 1920w, /_astro/gif1.BM01cDPj_ZxkHKA.gif?dpl=6a1b581575edd000083cc994 2048w, /_astro/gif1.BM01cDPj_uCaYH.gif?dpl=6a1b581575edd000083cc994 2146w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;The default &lt;code&gt;corfu&lt;/code&gt; popup window. The GIF’s framerate is low, which makes &lt;code&gt;corfu&lt;/code&gt; appear less performant here than in actuality.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;Corfu&lt;/code&gt; is a text completion (e.g. &lt;code&gt;completion-at-point&lt;/code&gt;, &lt;code&gt;company-mode&lt;/code&gt;) package. In my opinion, since its release, &lt;code&gt;corfu&lt;/code&gt; has not gotten the attention that it deserves. I prefer it to &lt;code&gt;company&lt;/code&gt; for the following reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It is easier to configure since &lt;code&gt;corfu&lt;/code&gt;’s internals rely on the built-in &lt;code&gt;completion-at-point&lt;/code&gt;. This also means that, unlike &lt;code&gt;company&lt;/code&gt;,&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;…
&lt;ul&gt;
&lt;li&gt;any built-in invocation of &lt;code&gt;completion-at-point&lt;/code&gt; or &lt;code&gt;completion-in-region&lt;/code&gt; leverages &lt;code&gt;corfu&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;and any &lt;code&gt;completion-style&lt;/code&gt; (e.g. &lt;code&gt;orderless&lt;/code&gt;) can be used for filtering candidates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Corfu&lt;/code&gt; has been more performant (i.e. fewer stutters, smoother cycling of candidates) in my experience.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Corfu&lt;/code&gt; can support any &lt;code&gt;company&lt;/code&gt; backend via &lt;code&gt;cape-company-to-capf&lt;/code&gt;, provided by the complementary &lt;code&gt;cape&lt;/code&gt; package. Thus, packages like &lt;code&gt;company-yasnippet&lt;/code&gt; can be used with &lt;code&gt;corfu&lt;/code&gt; easily (see the next post in my &lt;em&gt;Text completion and minibuffer UI&lt;/em&gt; series for more details and examples.)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Basic &lt;a href=&quot;#basic&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The following is a basic &lt;code&gt;corfu&lt;/code&gt; configuration with my preferred keybinds:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; corfu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;:states&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;insert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-next&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-p&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-previous&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;escape&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-quit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;return&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-insert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-d&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-show-documentation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-l&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-show-location)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-global-mode&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;These keybinds have &lt;code&gt;C-n&lt;/code&gt; and &lt;code&gt;C-p&lt;/code&gt; move through the candidates popup, &lt;code&gt;&amp;lt;return&amp;gt;&lt;/code&gt; choose the current candidate, and &lt;code&gt;&amp;lt;escape&amp;gt;&lt;/code&gt; close the &lt;code&gt;corfu&lt;/code&gt; popup. Moreover, I have &lt;code&gt;corfu&lt;/code&gt;’s documentation command (&lt;code&gt;corfu-show-documentation&lt;/code&gt;; shows the available documentation for the current candidate, if any) bound to &lt;code&gt;M-d&lt;/code&gt;, and &lt;code&gt;corfu&lt;/code&gt;’s location command (&lt;code&gt;corfu-show-location&lt;/code&gt;) to go to the location of the current candidate to &lt;code&gt;M-l&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Corfu&lt;/code&gt; offers a few variables to configure. You can take a look at each docstring to see its function. Here are my preferences:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-auto &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;; Only use &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; when calling &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-at-point&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; or&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                        &lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;indent-for-tab-command&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-auto-prefix &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-auto-delay &lt;/span&gt;&lt;span&gt;0.25&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-min-width &lt;/span&gt;&lt;span&gt;80&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-max-width corfu-min-width&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;; Always have the same width&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-count &lt;/span&gt;&lt;span&gt;14&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-scroll-margin &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-cycle &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; means to ignore &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; behavior, that is, use the older&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-quit-at-boundary&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; = nil behavior. Set this to separator if using&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-auto&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; workflow (in that case, make sure you also set up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; and a keybind for &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-insert-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, which my&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; configuration already has pre-prepared). Necessary for manual corfu usage with&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; orderless, otherwise first component is ignored, unless &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; is inserted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-quit-at-boundary &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-preselect-first t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;; Preselect first candidate?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Other&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; NOTE 2022-02-05: In my actual configuration, I have this variable set to nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; since I use &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-doc&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, whose configuration comes later. But if you don&apos;t&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; use &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-doc&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, this might be helpful to you.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-echo-documentation t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;; Show documentation in echo area?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Additionally, the following two variables not under &lt;code&gt;corfu&lt;/code&gt; but related to &lt;code&gt;completion-at-point&lt;/code&gt; will be useful to set:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Works with &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;indent-for-tab-command&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;. Make sure tab doesn&apos;t indent when you&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; want to perform completion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tab-always-indent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;complete)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-cycle-threshold &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;; Always show all candidates in popup menu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Working with the recent changes to &lt;code&gt;corfu&lt;/code&gt; &lt;a href=&quot;#working-with-the-recent-changes-to-corfu&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;On &lt;a href=&quot;https://github.com/minad/corfu/commit/91feb66630eea6f36fee10576760c219896c1d05&quot;&gt;February 7, 2022&lt;/a&gt;, &lt;code&gt;corfu&lt;/code&gt; introduced an important change&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;, particularly the interaction between &lt;code&gt;corfu&lt;/code&gt; and &lt;code&gt;orderless&lt;/code&gt;. You can read more &lt;a href=&quot;https://github.com/minad/corfu#orderless-completion&quot;&gt;on their README&lt;/a&gt;, but, essentially, &lt;code&gt;orderless&lt;/code&gt; now introduces the &lt;code&gt;corfu-insert-separator&lt;/code&gt; command that inserts the &lt;code&gt;corfu-separator&lt;/code&gt; character into the buffer. This character is what delimits &lt;code&gt;orderless&lt;/code&gt; components (see &lt;a href=&quot;https://www.reddit.com/r/emacs/comments/t38kkh/comment/hytmcpg/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;this Reddit comment&lt;/a&gt; for a more lengthy description of this behavior.) A &lt;code&gt;corfu&lt;/code&gt; workflow in which &lt;code&gt;corfu-auto&lt;/code&gt; is set to &lt;code&gt;t&lt;/code&gt; leverages this change, &lt;em&gt;for without it&lt;/em&gt; users could not realistically use &lt;code&gt;corfu&lt;/code&gt; with a multi-component &lt;code&gt;completion-style&lt;/code&gt; like &lt;code&gt;orderless&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I do not use this workflow&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;, but if this behavior is desirable, you can set &lt;code&gt;corfu-separator&lt;/code&gt; to your &lt;code&gt;orderless&lt;/code&gt; separator character to properly delimit &lt;code&gt;orderless&lt;/code&gt; components. I personally use the regular space character. You can make the following modifications to your configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; NOTE 2022-02-28: &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;general-override-mode-map&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; is necessary to override local&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; binds to SPC in evil-mode&apos;s insert mode. May not be necessary if you don&apos;t use &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;evil&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;:states&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;insert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;H-SPC&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-insert-separator&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; I have a hyper key so this is an alternative keybind I use sometimes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;SPC&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-insert-separator)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-quit-at-boundary &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;separator)&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;; a non-nil value is necessary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-separator &lt;/span&gt;&lt;span&gt;?\&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;                   &lt;/span&gt;&lt;span&gt;; Use space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-quit-no-match &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;separator)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Don&apos;t quit if there is &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; inserted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-preview-current &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;insert)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;; Preview current candidate?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; NOTE 2022-03-01: This allows for a more evil-esque way to have&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-insert-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; work with space in insert mode without resorting to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; overriding keybindings with &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;general-override-mode-map&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;. See&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; https://github.com/minad/corfu/issues/12#issuecomment-869037519&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Alternatively, add advice without &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;general.el&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; (advice-add &apos;corfu--setup :after &apos;evil-normalize-keymaps)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; (advice-add &apos;corfu--teardown :after &apos;evil-normalize-keymaps)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;general-add-advice &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;corfu--setup corfu--teardown&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;evil-normalize-keymaps)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;evil-make-overriding-map corfu-map&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Further configuration in minibuffers and with &lt;code&gt;lsp&lt;/code&gt; &lt;a href=&quot;#further-configuration-in-minibuffers-and-with-lsp&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Corfu&lt;/code&gt;’s &lt;a href=&quot;https://github.com/minad/corfu#completing-with-corfu-in-the-minibuffer&quot;&gt;README&lt;/a&gt; provides a way to be able to use &lt;code&gt;corfu&lt;/code&gt; completion in the minibuffer:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Enable Corfu more generally for every minibuffer, as long as no other&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; completion UI is active. If you use Mct or Vertico as your main minibuffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; completion UI. From&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; https://github.com/minad/corfu#completing-with-corfu-in-the-minibuffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; corfu-enable-always-in-minibuffer&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Enable Corfu in the minibuffer if Vertico/Mct are not active.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;unless&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;bound-and-true-p&lt;/span&gt;&lt;span&gt; mct--active&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Useful if I ever use MCT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;bound-and-true-p&lt;/span&gt;&lt;span&gt; vertico--input&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq-local&lt;/span&gt;&lt;span&gt; corfu-auto &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;; Ensure auto completion is disabled&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-mode &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-setup-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-enable-always-in-minibuffer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This means that in commands like &lt;code&gt;eval-expression&lt;/code&gt;, &lt;code&gt;corfu&lt;/code&gt; is able to be used (via &lt;code&gt;&amp;lt;tab&amp;gt;&lt;/code&gt;) and provide completion.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_292O3u.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Zt4nao.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_B5LTC.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_1yvXKL.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z2kP9FC.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_1ucLda.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z1tMijq.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z2qc0TQ.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_ZfYO8c.png?dpl=6a1b581575edd000083cc994 1886w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_zi1dh.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z1DQ7kp.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z1pWn5N.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_2mp69h.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z2iRWNr.png?dpl=6a1b581575edd000083cc994 3772w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;Using &lt;code&gt;corfu&lt;/code&gt; in the minibuffer prompt for &lt;code&gt;eval-expression&lt;/code&gt;.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Additionally, for &lt;code&gt;lsp-mode&lt;/code&gt; buffers, I have the following lines (this is entirely optional and preferential):&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lsp-completion-mode &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; kb/corfu-setup-lsp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Use corfu for lsp completion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lsp-completion-provider &lt;/span&gt;&lt;span&gt;:none&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Use corfu instead the default for lsp completions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Setup lsp to use corfu for lsp completion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/corfu-setup-lsp&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Use orderless completion style with lsp-capf instead of the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;default lsp-passthrough.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setf &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;alist-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;styles&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;alist-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;lsp-capf&lt;/span&gt;&lt;span&gt; completion-category-defaults&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;orderless&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;End product &lt;a href=&quot;#end-product&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Putting it together, we end with my actual configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; corfu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lsp-completion-mode &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; kb/corfu-setup-lsp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Use corfu for lsp completion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;:states&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;insert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-next&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-p&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-previous&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;escape&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-quit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;return&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-insert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;H-SPC&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-insert-separator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;;; &quot;SPC&quot; #&apos;corfu-insert-separator ; Use when &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-quit-at-boundary&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; is non-nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-d&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-show-documentation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-g&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-quit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-l&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-show-location)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Works with &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;indent-for-tab-command&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;. Make sure tab doesn&apos;t indent when you&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; want to perform completion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tab-always-indent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;complete)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-cycle-threshold &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;; Always show candidates in menu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-auto &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-auto-prefix &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-auto-delay &lt;/span&gt;&lt;span&gt;0.25&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-min-width &lt;/span&gt;&lt;span&gt;80&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-max-width corfu-min-width&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;; Always have the same width&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-count &lt;/span&gt;&lt;span&gt;14&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-scroll-margin &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-cycle &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; means to ignore &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; behavior, that is, use the older&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-quit-at-boundary&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; = nil behavior. Set this to separator if using&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-auto&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; workflow (in that case, make sure you also set up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; and a keybind for &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-insert-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, which my&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; configuration already has pre-prepared). Necessary for manual corfu usage with&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; orderless, otherwise first component is ignored, unless &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; is inserted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-quit-at-boundary &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-separator &lt;/span&gt;&lt;span&gt;?\&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;; Use space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-quit-no-match &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;separator)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Don&apos;t quit if there is &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; inserted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-preview-current &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;insert)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;; Preview first candidate. Insert on input if only one&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-preselect-first t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;; Preselect first candidate?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Other&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-echo-documentation &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;; Already use corfu-doc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lsp-completion-provider &lt;/span&gt;&lt;span&gt;:none&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;; Use corfu instead for lsp completions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-global-mode&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; NOTE 2022-03-01: This allows for a more evil-esque way to have&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-insert-separator&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; work with space in insert mode without resorting to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; overriding keybindings with &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;general-override-mode-map&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;. See&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; https://github.com/minad/corfu/issues/12#issuecomment-869037519&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Alternatively, add advice without &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;general.el&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (advice-add &apos;corfu--setup :after &apos;evil-normalize-keymaps)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (advice-add &apos;corfu--teardown :after &apos;evil-normalize-keymaps)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;general-add-advice &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;corfu--setup corfu--teardown&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;evil-normalize-keymaps)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;evil-make-overriding-map corfu-map&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Enable Corfu more generally for every minibuffer, as long as no other&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; completion UI is active. If you use Mct or Vertico as your main minibuffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; completion UI. From&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; https://github.com/minad/corfu#completing-with-corfu-in-the-minibuffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; corfu-enable-always-in-minibuffer&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Enable Corfu in the minibuffer if Vertico/Mct are not active.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;unless&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;bound-and-true-p&lt;/span&gt;&lt;span&gt; mct--active&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Useful if I ever use MCT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;bound-and-true-p&lt;/span&gt;&lt;span&gt; vertico--input&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq-local&lt;/span&gt;&lt;span&gt; corfu-auto &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;; Ensure auto completion is disabled&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-mode &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-setup-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-enable-always-in-minibuffer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Setup lsp to use corfu for lsp completion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/corfu-setup-lsp&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Use orderless completion style with lsp-capf instead of the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;default lsp-passthrough.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setf &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;alist-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;styles&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;alist-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;lsp-capf&lt;/span&gt;&lt;span&gt; completion-category-defaults&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;orderless&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;Kind-icon &lt;a href=&quot;#kind-icon&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Kind-icon&lt;/code&gt; is essentially &lt;code&gt;company-box-icons&lt;/code&gt; for &lt;code&gt;corfu&lt;/code&gt;. It adds icons to the left margin of the &lt;code&gt;corfu&lt;/code&gt; popup that represent the ‘function’ (e.g. variable, method, file) of that candidate.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_Z1rUF5i.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_Z1hdX05.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_Zc3MU4.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_KmnV5.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_1TAJH6.png?dpl=6a1b581575edd000083cc994 957w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_1VcoiC.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_1Vkhxu.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_Z12ELY6.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_Z1Y4uzw.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_YBFn1.png?dpl=6a1b581575edd000083cc994 1914w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;Using &lt;code&gt;corfu-doc&lt;/code&gt; in &lt;code&gt;java-mode&lt;/code&gt; with completion candidates provided by &lt;code&gt;lsp-mode&lt;/code&gt;.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The following is my configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; kind-icon&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; corfu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;kind-icon-use-icons t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;kind-icon-default-face &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-default)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Have background color be the same as &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; face background&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;kind-icon-blend-background &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;; Use midpoint color between foreground and background colors (&quot;blended&quot;)?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;kind-icon-blend-frac &lt;/span&gt;&lt;span&gt;0.08&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; NOTE 2022-02-05: &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;kind-icon&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; depends &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;svg-lib&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; which creates a cache&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; directory that defaults to the &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;user-emacs-directory&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;. Here, I change that&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; directory to a location appropriate to &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;no-littering&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; conventions, a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; package which moves directories of other packages to sane locations.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;svg-lib-icons-dir &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;no-littering-expand-var-file-name &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;svg-lib/cache/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Change cache dir&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-margin-formatters&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kind-icon-margin-formatter)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Enable &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;kind-icon&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Add hook to reset cache so the icon colors match my theme&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; NOTE 2022-02-05: This is a hook which resets the cache whenever I switch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; the theme using my custom defined command for switching themes. If I don&apos;t&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; do this, then the backgound color will remain the same, meaning it will not&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; match the background color corresponding to the current theme. Important&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; since I have a light theme and dark theme I switch between. This has no&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; function unless you use something similar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/themes-hooks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&apos;(&lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;kind-icon-reset-cache&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;Corfu-doc &lt;a href=&quot;#corfu-doc&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Corfu-doc&lt;/code&gt; is basically &lt;code&gt;company-quickhelp&lt;/code&gt; for &lt;code&gt;corfu&lt;/code&gt;. It shows the documentation of the selected candidate in an adjacent popup window.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Z1IOmgB.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_2nhxoF.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Z1BJqkf.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_ZEjet6.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_vvKSr.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Z1qe4GC.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_EWYzI.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_ZgqI0H.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Z2mBkTE.png?dpl=6a1b581575edd000083cc994 1919w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Z2l8OGv.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_uTayJ.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_IMTNl.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Zy1JKv.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_L6fC8.png?dpl=6a1b581575edd000083cc994 3838w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;Using &lt;code&gt;corfu-doc&lt;/code&gt; in a &lt;code&gt;corfu&lt;/code&gt; popup. Called from a &lt;code&gt;java&lt;/code&gt; file with completion candidates provided by &lt;code&gt;lsp-mode&lt;/code&gt;.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Here is a sample configuration&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; corfu-doc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; NOTE 2022-02-05: At the time of writing, &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-doc&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; is not yet on melpa&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:straight&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-doc &lt;/span&gt;&lt;span&gt;:type&lt;/span&gt;&lt;span&gt; git &lt;/span&gt;&lt;span&gt;:host&lt;/span&gt;&lt;span&gt; github &lt;/span&gt;&lt;span&gt;:repo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;galeo/corfu-doc&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; corfu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-mode &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; corfu-doc-mode&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:general&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span&gt;;; This is a manual toggle for the documentation popup.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;remap corfu-show-documentation&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-doc-toggle&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Remap the default doc command&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span&gt;;; Scroll in the documentation window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-doc-scroll-up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-p&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-doc-scroll-down)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-doc-delay &lt;/span&gt;&lt;span&gt;0.5&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-doc-max-width &lt;/span&gt;&lt;span&gt;70&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-doc-max-height &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; NOTE 2022-02-05: I&apos;ve also set this in the &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; use-package to be&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; extra-safe that this is set when corfu-doc is loaded. I do not want&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; documentation shown in both the echo area and in the &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-doc&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; popup.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-echo-documentation &lt;/span&gt;&lt;span&gt;nil))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;From my experience, &lt;code&gt;corfu-doc&lt;/code&gt; is perfect for most. However, it should be noted that for those who have a high &lt;a href=&quot;https://wiki.archlinux.org/title/Xorg/Keyboard_configuration#Adjusting_typematic_delay_and_rate&quot;&gt;repeat rate&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#fn-5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;, rapidly scrolling through candidates causes stuttering and/or lag. This is why I find setting a keybind for &lt;code&gt;corfu-doc-toggle&lt;/code&gt; to be useful.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Feb 28, 2022&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Added link to Reddit comment in &lt;a href=&quot;#working-with-the-recent-changes-to-corfu&quot;&gt;Working with the recent changes to &lt;code&gt;corfu&lt;/code&gt;&lt;/a&gt; section. Also update description of new &lt;code&gt;corfu&lt;/code&gt; behavior.&lt;/li&gt;
&lt;li&gt;Added configuration for using &lt;code&gt;corfu&lt;/code&gt; in the minibuffer.&lt;/li&gt;
&lt;li&gt;Listed more benefits to &lt;code&gt;corfu&lt;/code&gt;, provided by u/JDRiverRun.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Mar 1, 2022&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Added link to relevant &lt;code&gt;corfu&lt;/code&gt; GitHub Issue.&lt;/li&gt;
&lt;li&gt;Changed &lt;code&gt;corfu&lt;/code&gt; configuration to avoid setting keybinds in &lt;code&gt;general-override-mode-map&lt;/code&gt;, suggested by a comment to this point.&lt;/li&gt;
&lt;li&gt;Added a note and GIF to &lt;code&gt;corfu-doc&lt;/code&gt; section.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Mar 11, 2022&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Update to include new compatibility with &lt;code&gt;corfu-insert-separator&lt;/code&gt; and &lt;code&gt;corfu-quit-at-boundary&lt;/code&gt; functionality.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Kudos to u/JDRiverRun, the current maintainer of &lt;code&gt;kind-icon&lt;/code&gt; for &lt;a href=&quot;https://www.reddit.com/r/emacs/comments/t38kkh/comment/hyturrd/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;providing a few benefits&lt;/a&gt; I didn’t originally list.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This change was initially motivated by jdtsmith (u/JDRiverRun) and is described in &lt;a href=&quot;https://github.com/minad/corfu/issues/119&quot;&gt;this GitHub issue&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;See &lt;a href=&quot;https://github.com/minad/corfu/commit/b71465fa6b6588babc98a1ae7034c9a41e5eaca7&quot;&gt;this commit&lt;/a&gt;. Also see this &lt;a href=&quot;https://github.com/minad/corfu/issues/138&quot;&gt;GitHub issue&lt;/a&gt; which reimplemented the old &lt;code&gt;corfu-quit-at-boundary&lt;/code&gt; functionality alongside the then new &lt;code&gt;corfu-insert-separator&lt;/code&gt; functionality.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-4&quot;&gt;[4]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This is not exactly my configuration, but is quite close to it.&lt;/p&gt;  &lt;a href=&quot;#fnref-4&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-5&quot;&gt;[5]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I personally use a repeat rate of 37 ms with a delay rate of 225, set by &lt;code&gt;xset r rate 225 37&lt;/code&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-5&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Sun, 27 Feb 2022 06:56:00 GMT</pubDate><category>Emacs</category><category>Guide</category></item><item><title>Vertico, Marginalia, All-the-icons-completion, and Orderless</title><link>https://kristofferbalintona.me/posts/202202212146/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202202212146/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#synopsis&quot;&gt;Synopsis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#marginalia&quot;&gt;Marginalia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#all-the-icons-completion&quot;&gt;All-the-icons-completion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#vertico&quot;&gt;Vertico&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#basic&quot;&gt;Basic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#extensions&quot;&gt;Extensions&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#vertico-extension-commands&quot;&gt;Vertico extension commands&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#niceties&quot;&gt;Niceties&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#end-product&quot;&gt;End product&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orderless&quot;&gt;Orderless&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#basic-1&quot;&gt;Basic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#style-dispatchers&quot;&gt;Style dispatchers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#end-product-1&quot;&gt;End product&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#changelog&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Synopsis &lt;a href=&quot;#synopsis&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Apr 5, 2025&lt;/span&gt;  &lt;/time&gt; Readers should be aware that some of the package-specific information in this article, including configuration options and lines of code, may be outdated. Since publication, those packages have developed significantly. Additionally, my tastes and recommendations as an Emacs user have changed–if I were to rewrite this package today, I would do so different. For those curious about my current in-line and minibuffer completion configuration, you can the relevant sections in &lt;a href=&quot;https://github.com/krisbalintona/emacs-config&quot;&gt;my Emacs configuration&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;I will be walking through my personal Emacs’ minibuffer UI (which means packages like &lt;code&gt;Selectrum&lt;/code&gt;, &lt;code&gt;Ido&lt;/code&gt;, &lt;code&gt;Helm&lt;/code&gt;, &lt;code&gt;Vertico&lt;/code&gt;, and &lt;code&gt;Ivy&lt;/code&gt;) configuration, which includes the following packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/minad/marginalia&quot;&gt;Marginalia&lt;/a&gt; — minibuffer annotations, i.e., auxiliary candidate information&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/iyefrat/all-the-icons-completion/tree/9e7d456b0934ecb568b6f05a8445e3f4ce32261f&quot;&gt;All-the-icons-completion&lt;/a&gt; — &lt;code&gt;all-the-icons&lt;/code&gt; icons for minibuffer candidates&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/minad/vertico&quot;&gt;Vertico&lt;/a&gt; — vertical minibuffer interface&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/oantolin/orderless&quot;&gt;Orderless&lt;/a&gt; — a flexible &lt;code&gt;completion-style&lt;/code&gt; with multi-component matching&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: I use &lt;code&gt;straight.el&lt;/code&gt; for package management and &lt;code&gt;general.el&lt;/code&gt; to set my keybindings. Both of these packages have integration with &lt;code&gt;use-package&lt;/code&gt; which come in the form of the &lt;code&gt;:straight&lt;/code&gt; and &lt;code&gt;:general&lt;/code&gt; keywords, respectively.&lt;/p&gt;
&lt;h2&gt;Marginalia &lt;a href=&quot;#marginalia&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The following is &lt;code&gt;vertico&lt;/code&gt; with &lt;code&gt;marginalia&lt;/code&gt; annotations right-aligned in the minibuffer.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_tfnQk.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_2qdKkW.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_Z1yNdnX.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_ZBn1wO.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_yrXOI.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_3Pup1.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_2a2yGm.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_1dCQ5V.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_ZS0f8P.png?dpl=6a1b581575edd000083cc994 1912w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_ZQ4fzR.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_1YXJFn.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_2dRtTY.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_V2Ol8.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_2dPq1F.png?dpl=6a1b581575edd000083cc994 3824w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;Using &lt;code&gt;helpful-variable&lt;/code&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_1szWFq.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_1Xbb2Y.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z21PMFV.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z14pAOM.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_6powK.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_147YIP.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z1TR4MK.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_2dUlpK.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_9deIW.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_9deIW.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z24USNJ.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z1Q29z8.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_1VkjEW.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z1Mcelv.png?dpl=6a1b581575edd000083cc994 3840w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;Using &lt;code&gt;find-file&lt;/code&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Marginalia is painless to set up. Remember, I use &lt;code&gt;general.el&lt;/code&gt; to set keybindings:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; marginalia&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-local-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-A&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;marginalia-cycle)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;marginalia-max-relative-age &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;marginalia-align &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;right)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;marginalia-mode&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;All-the-icons-completion &lt;a href=&quot;#all-the-icons-completion&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Marginalia&lt;/code&gt;, &lt;code&gt;Vertico&lt;/code&gt;, and &lt;code&gt;Orderless&lt;/code&gt; have already received considerable exposure, but &lt;code&gt;all-the-icons-completion&lt;/code&gt; has not.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_Z24cxo6.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_ZTcJfp.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_aWpOB.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_18nBFK.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_2jdC3i.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_Z1BD9Gt.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_txTzR.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_ZrPN0y.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_2waHTq.png?dpl=6a1b581575edd000083cc994 1919w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_Z2wxTGm.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_ju5yS.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_xnONu.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_ZJqOKm.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_zGaCh.png?dpl=6a1b581575edd000083cc994 3838w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;Using &lt;code&gt;find-file&lt;/code&gt; in a directory with subdirectories, python files, a .txt file, and an org file. You can see the icons in the far left.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;All-the-icons-completion&lt;/code&gt; is also dead-simple to set up:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; all-the-icons-completion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;marginalia all-the-icons&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;marginalia-mode &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; all-the-icons-completion-marginalia-setup&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-completion-mode&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: &lt;code&gt;All-the-icons-completion&lt;/code&gt; depends on an already installed &lt;code&gt;all-the-icons&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Vertico &lt;a href=&quot;#vertico&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Vertico is a minibuffer interface, that is, it changes the minibuffer looks and how you interact with it.&lt;/p&gt;
&lt;h3&gt;Basic &lt;a href=&quot;#basic&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This is a very basic Vertico configuration.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; vertico&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-count &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;; Number of candidates to display&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-resize t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-cycle &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Go from last to first candidate and first to last (cycle)?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-mode&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now we can add a few changes to the default keybindings (again, I use &lt;code&gt;general.el&lt;/code&gt; to set keybindings):&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; vertico&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-count &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;; Number of candidates to display&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-resize t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-cycle &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Go from last to first candidate and first to last (cycle)?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;tab&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-insert&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;; Insert selected candidate into text area&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;escape&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-keyboard-quit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Close minibuffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;;; NOTE 2022-02-05: Cycle through candidate groups&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-M-n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-next-group&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-M-p&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-previous-group)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-mode&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Extensions &lt;a href=&quot;#extensions&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Vertico becomes much more interesting with its extensions. These extensions have to manually be cloned from the repo with a corresponding &lt;code&gt;require&lt;/code&gt; invocation. However, with &lt;code&gt;straight.el&lt;/code&gt;, we can do something like this to install and load them:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; vertico&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Special recipe to load extensions conveniently&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:straight&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico &lt;/span&gt;&lt;span&gt;:files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:defaults&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;extensions/*&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span&gt;:includes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-indexed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-flat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-grid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-mouse&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-quick&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-buffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-repeat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-reverse&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-multiform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-unobtrusive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;tab&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-insert&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;; Choose selected candidate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;escape&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-keyboard-quit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Close minibuffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;;; NOTE 2022-02-05: Cycle through candidate groups&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-M-n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-next-group&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-M-p&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-previous-group)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-count &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;; Number of candidates to display&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-resize t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-cycle &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Go from last to first candidate and first to last (cycle)?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-mode&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;With the extensions installed, we have a lot of room to set their variables to our liking. In particular, &lt;code&gt;vertico-multiform&lt;/code&gt; is the most interesting and, in my opinion, useful. You can choose how the minibuffer appears, which is provided by Vertico’s extensions (see more &lt;a href=&quot;https://github.com/minad/vertico#extensions&quot;&gt;here&lt;/a&gt;). The current options are&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;buffer&lt;/code&gt; — minibuffer treated as a normal, separate buffer,&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_1iNIi7.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_Z2nqDJE.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_Z1igtED.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_ZkPhNu.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_OYHy3.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_Z1GU3GG.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_oh0zE.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_Zx7H0L.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_2smk7m.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_2smk7m.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_edbyF.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_s6UNh.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_ZOHIKz.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_vVQ1T.png?dpl=6a1b581575edd000083cc994 3840w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;&lt;code&gt;Vertico-buffer&lt;/code&gt; UI (minibuffer now a separate window)&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;flat&lt;/code&gt; — a flat format (like &lt;code&gt;ido&lt;/code&gt;),&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_Z1I1ILl.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_Zwpav1.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_xJYz0.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_1vbbq9.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_Z2oaW1f.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_ZclMg9.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_1SPh1c.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_WqypL.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_Z18J3tb.png?dpl=6a1b581575edd000083cc994 1919w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_Z17gxg2.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_1ILs0d.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_1WFceO.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_EPwEX.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_1YXx3B.png?dpl=6a1b581575edd000083cc994 3838w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;&lt;code&gt;Vertico-flat&lt;/code&gt; minibuffer UI&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;grid&lt;/code&gt; — a grid format,&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Zv42Rf.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Z1qbqTz.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Zl1gOy.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_BoU1A.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_1MeUo8.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_2sNJab.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Zvbkmp.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Z1rA2WP.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_1wmoKs.png?dpl=6a1b581575edd000083cc994 1918w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_1xSYai.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_ZFf9no.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Zrlp8M.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Z1Jb4HD.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_ZpbcHn.png?dpl=6a1b581575edd000083cc994 3836w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;&lt;code&gt;Vertico-grid&lt;/code&gt; UI&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;reverse&lt;/code&gt; — moves the area in which you type above the candidates, like &lt;code&gt;selectrum&lt;/code&gt;,&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_nsQE6.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_ZJwOFy.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_kCkos.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_1i3wfB.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_2sSwC9.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_Z1M33MY.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_j90tm.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_ZCfH74.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_2nek14.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_2nek14.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_95bsn.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_mXUGY.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_ZTPIQR.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_qNPUB.png?dpl=6a1b581575edd000083cc994 3840w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;&lt;code&gt;Vertico-reverse&lt;/code&gt; UI. Notice the text area is below the candidates. Moreover, the candidates are in reverse order.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;unobtrusive&lt;/code&gt; — like the &lt;code&gt;vertico-flat&lt;/code&gt; format, but only showing the selected candidate,&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Z1uhQPc.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_2u58VD.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Z1uVOMh.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_ZxvCV8.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Cjmqp.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_21su3m.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_ZWwzte.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Z1SVi4E.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_16xJ3t.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_16xJ3t.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Z17Aoud.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_ZSGEfB.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Z2bwjOs.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_ZOQJ1Y.png?dpl=6a1b581575edd000083cc994 3840w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;&lt;code&gt;Vertico-unobtrusive&lt;/code&gt; UI (there are multiple files in this directory, only the current candidate is shown)&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;indexed&lt;/code&gt; — allows you “&lt;a href=&quot;https://github.com/minad/vertico#extensions&quot;&gt;to select indexed candidates with prefix arguments&lt;/a&gt;”&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_15-31-45_screenshot.2BkwingK_MDlO.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Oz0MU.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_1TJaRV.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z2d1L4Q.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z12bKHj.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_1hCMNl.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z1GmgIf.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_2rq9ug.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_mI2Ns.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_mI2Ns.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z1Qq5Je.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z1CwluC.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_29P7Js.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z1yGqh0.png?dpl=6a1b581575edd000083cc994 3840w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;&lt;code&gt;Vertico-indexed&lt;/code&gt; UI&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These formats each have a separate minor-mode which can be activated if you want to use that format singly. However, with &lt;code&gt;vertico-multiform-mode&lt;/code&gt; as well as configuration of &lt;code&gt;vertico-multiform-categories&lt;/code&gt;, &lt;code&gt;vertico-multiform-commands&lt;/code&gt;, and keybinds, you can enable/disable multiple of these formats simultaneously:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform-mode&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Here are the extension variables I set in the &lt;code&gt;:custom&lt;/code&gt; block of my &lt;code&gt;use-package&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-grid-separator &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-grid-lookahead &lt;/span&gt;&lt;span&gt;50&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-buffer-display-action &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;display-buffer-reuse-window&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Default&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform-categories                                  &lt;/span&gt;&lt;span&gt;; Choose a multiform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;file &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;consult-grep buffer&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;consult-location&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;imenu&lt;/span&gt;&lt;span&gt; buffer&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;library &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt; indexed&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-roam-node &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt; indexed&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform-commands&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;flyspell-correct-*&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; grid &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-refile&lt;/span&gt;&lt;span&gt; grid &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt; indexed&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;consult-yank-pop indexed&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;consult-flycheck&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;consult-lsp-diagnostics&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Here are the &lt;code&gt;vertico-multiform&lt;/code&gt; related keybinds I have in my &lt;code&gt;:general&lt;/code&gt; block:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;;; Toggle Vertico multiforms in active minibuffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-i&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-quick-insert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-o&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-quick-exit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-G&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-multiform-grid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-F&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-multiform-flat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-R&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-multiform-reverse&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-U&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-multiform-unobtrusive)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;These are rarely used, but can be handy.&lt;/p&gt;
&lt;p&gt;Finally, the other Vertico extensions I configure are &lt;code&gt;vertico-repeat&lt;/code&gt; and &lt;code&gt;vertico-directory&lt;/code&gt;. I add the following keybinds:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;normal insert visual motion&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-repeat)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Perfectly return to the state of the last Vertico minibuffer usage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;;; Vertico-directory which makes typing file paths in the minibuffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;;; more convenient. Use it to get a sense of what these do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;backspace&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-directory-delete-char&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-w&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-directory-delete-word&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-&amp;lt;backspace&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-directory-delete-word&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;RET&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-directory-enter)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Additionally, we need to add the following hook for &lt;code&gt;vertico-repeat&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;minibuffer-setup &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; vertico-repeat-save&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Make sure vertico state is saved for &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;vertico-repeat&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Vertico extension commands &lt;a href=&quot;#vertico-extension-commands&quot;&gt;  
§
&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;If you’d like, you can set up a toggle between two multiforms in the minibuffer. For instance, the following function definition with a corresponding keybind in &lt;code&gt;vertico-map&lt;/code&gt; toggles between &lt;code&gt;vertico-flat-mode&lt;/code&gt; and &lt;code&gt;vertico-reverse-mode&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/vertico-multiform-flat-toggle&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Toggle between flat and reverse.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform--display-toggle &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-flat-mode)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; vertico-flat-mode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform--temporary-mode &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-reverse-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform--temporary-mode &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-reverse-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The following function uses &lt;code&gt;vertico-quick-jump&lt;/code&gt; (like &lt;code&gt;avy&lt;/code&gt; but for minibuffer candidates) to &lt;code&gt;embark-act&lt;/code&gt; on a candidate without having to first hover over the candidate:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/vertico-quick-embark&lt;/span&gt;&lt;span&gt; (&amp;amp;optional&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arg&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Embark on candidate using quick keys.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-quick-jump&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;embark-act arg&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Niceties &lt;a href=&quot;#niceties&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Finally, I add a few niceties.&lt;/p&gt;
&lt;p&gt;The following prefixes (i.e. in the left fringe) and arrow character on the currently selected candidate&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Prefix the current candidate with “» ”. From&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; https://github.com/minad/vertico/wiki#prefix-current-candidate-with-arrow&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;advice-add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico--format-candidate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:around&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cand&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;suffix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_start&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq cand &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcall&lt;/span&gt;&lt;span&gt; orig cand prefix suffix index _start&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;concat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(=&lt;/span&gt;&lt;span&gt; vertico--index index&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;propertize&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;» &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-current)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                 &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;               &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cand&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;When using a command for selecting a file in the minibuffer, the following fixes the path so the path you select doesn’t have prepended junk left behind&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rfn-eshadow-update-overlay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; vertico-directory-tidy&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Correct file path when changed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_ZNzMDy.gif?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_2v2Gl1.gif?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_Z1tYhnT.gif?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_Zwy5wK.gif?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_DgTOM.gif?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_2vdsr3.gif?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_ZsLB5x.gif?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_Z1pbjFX.gif?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_ZuhJ6Y.gif?dpl=6a1b581575edd000083cc994 1729w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_1AiHra.gif?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_ZCPq6w.gif?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_ZoVFQU.gif?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_Z1GLlqL.gif?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_zhU4N.gif?dpl=6a1b581575edd000083cc994 3458w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;Using &lt;code&gt;find-file&lt;/code&gt; and going from a subdirectory in &lt;code&gt;$HOME&lt;/code&gt; to the distant &lt;code&gt;/tmp/&lt;/code&gt; directory. Notice that the file-path is “cleaned up.”&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Finally, the following makes working with remote files via &lt;code&gt;tramp&lt;/code&gt; easier.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Workaround for problem with &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;tramp&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; hostname completions. This overrides&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; the completion style specifically for remote files! See&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; https://github.com/minad/vertico#tramp-hostname-completion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/basic-remote-try-completion&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pred&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;point&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico--remote-p string&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-basic-try-completion&lt;/span&gt;&lt;span&gt; string table pred point&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/basic-remote-all-completions&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pred&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;point&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico--remote-p string&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-basic-all-completions&lt;/span&gt;&lt;span&gt; string table pred point&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-styles-alist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;basic-remote           &lt;/span&gt;&lt;span&gt;; Name of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-style&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;               &lt;/span&gt;&lt;/span&gt;&lt;span&gt;kb/basic-remote-try-completion kb/basic-remote-all-completions &lt;/span&gt;&lt;span&gt;nil))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;End product &lt;a href=&quot;#end-product&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In the end, we have this&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; vertico&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:demand&lt;/span&gt;&lt;span&gt; t                             &lt;/span&gt;&lt;span&gt;; Otherwise won&apos;t get loaded immediately&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:straight&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico &lt;/span&gt;&lt;span&gt;:files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:defaults&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;extensions/*&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Special recipe to load extensions conveniently&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span&gt;:includes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-indexed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-flat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-grid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-mouse&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-quick&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-buffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-repeat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-reverse&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-multiform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vertico-unobtrusive&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;normal insert visual motion&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-repeat)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;tab&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-insert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Set manually otherwise setting &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;vertico-quick-insert&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; overrides this&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;escape&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-keyboard-quit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-completion-help&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-M-n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-next-group&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-M-p&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-previous-group&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;;; Multiform toggles&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;backspace&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-directory-delete-char&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-w&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-directory-delete-word&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-&amp;lt;backspace&amp;gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-directory-delete-word&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;RET&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-directory-enter&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-i&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-quick-insert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-o&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-quick-exit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-o&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/vertico-quick-embark&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-G&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-multiform-grid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-F&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-multiform-flat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-R&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-multiform-reverse&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;M-U&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-multiform-unobtrusive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-l&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/vertico-multiform-flat-toggle)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;rfn-eshadow-update-overlay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; vertico-directory-tidy&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Clean up file path when typing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;minibuffer-setup &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; vertico-repeat-save&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Make sure vertico state is saved&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-count &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-resize t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-cycle &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Extensions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-grid-separator &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-grid-lookahead &lt;/span&gt;&lt;span&gt;50&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-buffer-display-action &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;display-buffer-reuse-window&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform-categories&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;file &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;consult-grep buffer&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;consult-location&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;imenu&lt;/span&gt;&lt;span&gt; buffer&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;library &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt; indexed&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-roam-node &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt; indexed&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform-commands&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;flyspell-correct-*&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; grid &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-refile&lt;/span&gt;&lt;span&gt; grid &lt;/span&gt;&lt;span&gt;reverse&lt;/span&gt;&lt;span&gt; indexed&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;consult-yank-pop indexed&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;consult-flycheck&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;consult-lsp-diagnostics&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/vertico-multiform-flat-toggle&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Toggle between flat and reverse.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform--display-toggle &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-flat-mode)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; vertico-flat-mode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform--temporary-mode &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-reverse-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform--temporary-mode &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-reverse-mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/vertico-quick-embark&lt;/span&gt;&lt;span&gt; (&amp;amp;optional&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arg&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Embark on candidate using quick keys.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-quick-jump&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;embark-act arg&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Workaround for problem with &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;tramp&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; hostname completions. This overrides&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; the completion style specifically for remote files! See&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; https://github.com/minad/vertico#tramp-hostname-completion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/basic-remote-try-completion&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pred&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;point&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico--remote-p string&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-basic-try-completion&lt;/span&gt;&lt;span&gt; string table pred point&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/basic-remote-all-completions&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pred&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;point&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico--remote-p string&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-basic-all-completions&lt;/span&gt;&lt;span&gt; string table pred point&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;completion-styles-alist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;basic-remote           &lt;/span&gt;&lt;span&gt;; Name of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-style&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                 &lt;/span&gt;&lt;/span&gt;&lt;span&gt;kb/basic-remote-try-completion kb/basic-remote-all-completions &lt;/span&gt;&lt;span&gt;nil))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-mode&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Extensions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-multiform-mode&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Prefix the current candidate with “» ”. From&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; https://github.com/minad/vertico/wiki#prefix-current-candidate-with-arrow&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;advice-add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico--format-candidate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:around&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cand&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;suffix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_start&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq cand &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcall&lt;/span&gt;&lt;span&gt; orig cand prefix suffix index _start&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;concat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                 &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(=&lt;/span&gt;&lt;span&gt; vertico--index index&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;propertize&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;» &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;vertico-current)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                   &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                 &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cand&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;Orderless &lt;a href=&quot;#orderless&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Orderless&lt;/code&gt; is an alternative and powerful completion style, that is, it is an alternative to Emacs’s basic candidate-filtering capacities.&lt;/p&gt;
&lt;h3&gt;Basic &lt;a href=&quot;#basic-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To use &lt;code&gt;orderless&lt;/code&gt; you simply need the following.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; orderless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-styles&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;orderless&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;; Use orderless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-category-defaults &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;; I want to be in control!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-category-overrides&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;file &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;styles basic-remote &lt;/span&gt;&lt;span&gt;; For &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;tramp&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; hostname completion with &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;vertico&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;orderless&lt;/span&gt;&lt;span&gt;)))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;However, we want to be more interesting! The following configures the matching styles that &lt;code&gt;orderless&lt;/code&gt; uses. A matching style is a criterion for what is a valid candidate (a description of what each matching style does can be found in &lt;a href=&quot;https://github.com/oantolin/orderless#component-matching-styles&quot;&gt;Orderless’s readme&lt;/a&gt;):&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orderless-matching-styles&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;orderless-literal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;orderless-prefixes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;orderless-initialism&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;orderless-regexp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;;; orderless-flex                       ; Basically fuzzy finding&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;;; orderless-strict-leading-initialism&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;;; orderless-strict-initialism&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;;; orderless-strict-full-initialism&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;;; orderless-without-literal          ; Recommended for dispatches instead&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Style dispatchers &lt;a href=&quot;#style-dispatchers&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_WG8tE.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_WnfWh.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_22xq2i.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_Z25dvUu.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_ZTnvxW.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_aslJA.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_2gEq1V.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_1kfHqv.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_ZKTTsr.png?dpl=6a1b581575edd000083cc994 1919w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_ZJrofi.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_26AB0W.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_2kulfy.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_12EFFH.png?dpl=6a1b581575edd000083cc994 3200w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_2mMG4l.png?dpl=6a1b581575edd000083cc994 3838w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;&lt;figcaption&gt;A first component of “lm” using the &lt;code&gt;prot-orderless-strict-initialism-dispatcher&lt;/code&gt; style dispatcher, and a second component of “map” using the &lt;code&gt;prot-orderless-literal-dispatcher&lt;/code&gt;.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Orderless becomes much more powerful when using its style dispatchers. A description of style dispatches can be found &lt;a href=&quot;https://github.com/oantolin/orderless#style-dispatchers&quot;&gt;here&lt;/a&gt;. Essentially, you can choose which matching style is used for a particular &lt;code&gt;orderless&lt;/code&gt; component. Thus, one component can use the &lt;code&gt;orderless-initialism&lt;/code&gt; matching style while the next can use the &lt;code&gt;orderless-literal&lt;/code&gt; matching style, and the result will be candidates which match both styles:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; The following is taken directly from Protesilaos&apos;s Emacs configuration, with&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; very minor changes. See&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; https://gitlab.com/protesilaos/dotfiles/-/blob/master/emacs/.emacs.d/prot-emacs.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orderless-style-dispatchers&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;prot-orderless-literal-dispatcher           &lt;/span&gt;&lt;span&gt;; = suffix for literal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;prot-orderless-strict-initialism-dispatcher &lt;/span&gt;&lt;span&gt;; , suffix for initialism&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;prot-orderless-flex-dispatcher              &lt;/span&gt;&lt;span&gt;; . suffix for flex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; orderless--strict-*-initialism&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;component&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;optional&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;anchored&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Match a COMPONENT as a strict initialism, optionally ANCHORED.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;The characters in COMPONENT must occur in the candidate in that&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;order at the beginning of subsequent words comprised of letters.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Only non-letters can be in between the words that start with the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;initials.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;If ANCHORED is &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; require that the first initial appear in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;the first word of the candidate.  If ANCHORED is &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;both&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; require&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;that the first and last initials appear in the first and last&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;words of the candidate, respectively.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orderless--separated-by&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;seq &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;zero-or-more alpha&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; word-end &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;zero-or-more &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; alpha&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cl-loop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; char &lt;/span&gt;&lt;span&gt;across&lt;/span&gt;&lt;span&gt; component &lt;/span&gt;&lt;span&gt;collect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`(&lt;/span&gt;&lt;span&gt;seq word-start &lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;char&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; anchored &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;seq &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;group buffer-start&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;zero-or-more &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; alpha&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;eq&lt;/span&gt;&lt;span&gt; anchored &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;both)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;seq &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;zero-or-more alpha&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; word-end &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;zero-or-more &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; alpha&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; eol&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; orderless-strict-initialism&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;component&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Match a COMPONENT as a strict initialism.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;This means the characters in COMPONENT must occur in the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;candidate in that order at the beginning of subsequent words&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;comprised of letters.  Only non-letters can be in between the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;words that start with the initials.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orderless--strict-*-initialism component&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; prot-orderless-literal-dispatcher&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_total&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Literal style dispatcher using the equals sign as a suffix.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;It matches PATTERN _INDEX and _TOTAL according to how Orderless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;parses its input.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string-suffix-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;`(&lt;/span&gt;&lt;span&gt;orderless-literal &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt; pattern &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; prot-orderless-strict-initialism-dispatcher&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_total&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Leading initialism  dispatcher using the comma suffix.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;It matches PATTERN _INDEX and _TOTAL according to how Orderless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;parses its input.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string-suffix-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;`(&lt;/span&gt;&lt;span&gt;orderless-strict-initialism &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt; pattern &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; prot-orderless-flex-dispatcher&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_total&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Flex  dispatcher using the tilde suffix.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;It matches PATTERN _INDEX and _TOTAL according to how Orderless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;parses its input.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string-suffix-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;`(&lt;/span&gt;&lt;span&gt;orderless-flex &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt; pattern &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Finally, rather than using the default  “+ “ to separate components, I use a space instead:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orderless-component-separator &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;orderless-escapable-split-on-space)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Use backslash for literal space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;End product &lt;a href=&quot;#end-product-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The end result is this&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; orderless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-styles&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;orderless&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-category-defaults &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;; I want to be in control!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completion-category-overrides&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;file &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;styles basic-remote &lt;/span&gt;&lt;span&gt;; For &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;tramp&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; hostname completion with &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;vertico&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;orderless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                   &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orderless-component-separator &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;orderless-escapable-split-on-space)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orderless-matching-styles&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;orderless-literal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;orderless-prefixes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;orderless-initialism&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;orderless-regexp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;;; orderless-flex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;;; orderless-strict-leading-initialism&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;;; orderless-strict-initialism&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;;; orderless-strict-full-initialism&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;;; orderless-without-literal          ; Recommended for dispatches instead&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orderless-style-dispatchers&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;prot-orderless-literal-dispatcher&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;prot-orderless-strict-initialism-dispatcher&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;prot-orderless-flex-dispatcher&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; orderless--strict-*-initialism&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;component&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;optional&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;anchored&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Match a COMPONENT as a strict initialism, optionally ANCHORED.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;The characters in COMPONENT must occur in the candidate in that&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;order at the beginning of subsequent words comprised of letters.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Only non-letters can be in between the words that start with the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;initials.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;If ANCHORED is &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; require that the first initial appear in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;the first word of the candidate.  If ANCHORED is &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;both&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; require&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;that the first and last initials appear in the first and last&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;words of the candidate, respectively.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orderless--separated-by&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;seq &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;zero-or-more alpha&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; word-end &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;zero-or-more &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; alpha&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cl-loop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; char &lt;/span&gt;&lt;span&gt;across&lt;/span&gt;&lt;span&gt; component &lt;/span&gt;&lt;span&gt;collect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`(&lt;/span&gt;&lt;span&gt;seq word-start &lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;char&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; anchored &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;seq &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;group buffer-start&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;zero-or-more &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; alpha&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;eq&lt;/span&gt;&lt;span&gt; anchored &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;both)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;seq &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;zero-or-more alpha&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; word-end &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;zero-or-more &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; alpha&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; eol&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; orderless-strict-initialism&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;component&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Match a COMPONENT as a strict initialism.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;This means the characters in COMPONENT must occur in the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;candidate in that order at the beginning of subsequent words&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;comprised of letters.  Only non-letters can be in between the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;words that start with the initials.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;orderless--strict-*-initialism component&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; prot-orderless-literal-dispatcher&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_total&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Literal style dispatcher using the equals sign as a suffix.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;It matches PATTERN _INDEX and _TOTAL according to how Orderless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;parses its input.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string-suffix-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;`(&lt;/span&gt;&lt;span&gt;orderless-literal &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt; pattern &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; prot-orderless-strict-initialism-dispatcher&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_total&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Leading initialism  dispatcher using the comma suffix.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;It matches PATTERN _INDEX and _TOTAL according to how Orderless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;parses its input.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string-suffix-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;`(&lt;/span&gt;&lt;span&gt;orderless-strict-initialism &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt; pattern &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; prot-orderless-flex-dispatcher&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_total&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Flex  dispatcher using the tilde suffix.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;It matches PATTERN _INDEX and _TOTAL according to how Orderless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;parses its input.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string-suffix-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; pattern&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;`(&lt;/span&gt;&lt;span&gt;orderless-flex &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt; pattern &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;span&gt;)))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Apr 5, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Add a note at the beginning of the post alerting users of potentially outdated information as well as referencing my personal Emacs configuration.&lt;/li&gt;
&lt;li&gt;Minor updates to code formatting.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;time&gt; &lt;span&gt;Feb 22, 2022&lt;/span&gt;  &lt;/time&gt; Added demonstrative images and a GIF. Added section on &lt;code&gt;all-the-icons-completion&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This does add width to the left side of the minibuffer, which may interfere with your aesthetic-related configurations of other packages.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This relies on the &lt;code&gt;vertico-directory&lt;/code&gt; extension.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This is a direct copy and paste from my configuration file. There are slight differences in comments compared to the code snippets above.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-4&quot;&gt;[4]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Again, taken verbatim from my Emacs configuration, with fewer useful comments.&lt;/p&gt;  &lt;a href=&quot;#fnref-4&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Mon, 21 Feb 2022 21:46:00 GMT</pubDate><category>Emacs</category><category>Guide</category></item><item><title>An Amazing Marvin Starter Pack</title><link>https://kristofferbalintona.me/posts/202106242237/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202106242237/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#tldr&quot;&gt;TL;DR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#core-concepts&quot;&gt;Core concepts&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#the-master-list&quot;&gt;The Master List&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-main-view&quot;&gt;The Main View&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-good-is-amazing-marvins-system&quot;&gt;What good is Amazing Marvin’s system?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-beauty-of-strategies&quot;&gt;The beauty of &lt;strong&gt;Strategies&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#a-list-of-must-look-at-strategies&quot;&gt;A list of must-look-at Strategies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#authors-note&quot;&gt;Author’s Note&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;TL;DR &lt;a href=&quot;#tldr&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Read this if you are either&lt;/strong&gt; 1) interested in and want to try out Amazing Marvin, 2) just started using Amazing Marvin but feel overwhelmed, or 3) don’t know what Amazing Marvin is but want to read about a few of its features.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This post goes over&lt;/strong&gt; the peculiarities of Amazing Marvin — namely the &lt;em&gt;Master List&lt;/em&gt;, &lt;em&gt;Main View&lt;/em&gt;, and &lt;em&gt;Strategies&lt;/em&gt;. Understanding these concepts is the first step to leveraging the strengths of Amazing Marvin to create your own workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I’ve also added&lt;/strong&gt; a list of the first Strategies a new Mavinaut (users of Amazing Marvin) should check out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;By the end&lt;/strong&gt; you’ll have a grasp of Amazing Marvin’s foundational components and ready to start building your own workflow.&lt;/p&gt;
&lt;h2&gt;Core concepts &lt;a href=&quot;#core-concepts&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;The Master List &lt;a href=&quot;#the-master-list&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_DALPd.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_ZehTH4.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_PRfmW.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_1Nire6.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_Z263Gdi.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_Z1a431x.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_V81fN.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_1KhGlz.png?dpl=6a1b581575edd000083cc994 1318w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_ZgGkC.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_Z24XN1q.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_L4ceO.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_YWVtq.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_1WfYWc.png?dpl=6a1b581575edd000083cc994 2636w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;
&lt;p&gt;You open Marvin. You’re greeted with a friendly UI — you notice buttons and a sidebar. Press “M” and you’ll be taken to the &lt;strong&gt;Master List&lt;/strong&gt;. This is the place where you can see &lt;em&gt;all&lt;/em&gt; your tasks. Think of it as the closest thing to a generic todo list application, like Microsoft Todo. You can view your &lt;em&gt;tasks&lt;/em&gt; and &lt;em&gt;projects&lt;/em&gt; (which can be further separated into &lt;em&gt;categories&lt;/em&gt;) in either a column or list view (try it out!).&lt;/p&gt;
&lt;p&gt;You may also notice a sidebar on the left which also lists tasks and projects — this can be toggled using “X”. This will be handy in the future, but isn’t necessary to worry about for now.&lt;/p&gt;
&lt;p&gt;In the Master List, I sometimes add tasks in bulk, which will often be when I want to flesh out tasks for a project.
Though you can easily access all your projects and tasks using the Master List, you will likely not spend much time here.&lt;/p&gt;
&lt;h3&gt;The Main View &lt;a href=&quot;#the-main-view&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_1xPPN2.png?dpl=6a1b581575edd000083cc994&quot; srcset=&quot;/_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_ZpaUq9.png?dpl=6a1b581575edd000083cc994 640w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_EYeDR.png?dpl=6a1b581575edd000083cc994 750w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_1Cpqv1.png?dpl=6a1b581575edd000083cc994 828w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_Z2gVGVn.png?dpl=6a1b581575edd000083cc994 960w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_Z1BjgB9.png?dpl=6a1b581575edd000083cc994 1080w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_tRMFc.png?dpl=6a1b581575edd000083cc994 1280w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_1iH7Nw.png?dpl=6a1b581575edd000083cc994 1313w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_ZrvTUe.png?dpl=6a1b581575edd000083cc994 1668w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_Z2we1B2.png?dpl=6a1b581575edd000083cc994 1920w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_jNXEd.png?dpl=6a1b581575edd000083cc994 2048w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_xHHSO.png?dpl=6a1b581575edd000083cc994 2560w, /_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_1sVDqf.png?dpl=6a1b581575edd000083cc994 2626w&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; /&gt;
&lt;p&gt;The place where you will most interact with your todos and get things done is the &lt;strong&gt;Main View&lt;/strong&gt;. The Main View is where &lt;em&gt;you&lt;/em&gt; decide which tasks are shown, when they are shown, and how they are shown to you by taking advantage of Amazing Marvin’s customizability.&lt;/p&gt;
&lt;p&gt;The Main View is centralized around being able to show you what you want to do today. This doesn’t, however, necessarily mean that Marvin is limited to showing you tasks which are due today. Amazing Marvin is more powerful than that and has the flexibility to accommodate so many workflows.&lt;/p&gt;
&lt;h2&gt;What good is Amazing Marvin’s system? &lt;a href=&quot;#what-good-is-amazing-marvins-system&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Those are the two most important pieces to wrap your head around using Amazing Marvin. But why depart from the typical todo list format?&lt;/p&gt;
&lt;p&gt;The strength of this system is that you have access to all your tasks in your Master List but don’t have to look through these long task lists — even sorted or filtered, they are overwhelming and dissuasive to productivity — in order to get things done. The Main View creates a divide between working on your tasks and viewing them. This is a surprisingly powerful feature of Marvin, which removes much of the difficulty of trying to juggle tasks within folders or across tags. You choose when to see the subset of tasks you want to work on, and go to the Master List when you choose to see all of your tasks.&lt;/p&gt;
&lt;h2&gt;The beauty of &lt;strong&gt;Strategies&lt;/strong&gt; &lt;a href=&quot;#the-beauty-of-strategies&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On top of that, Marvin is still feature-rich yet manages to limit that complexity for an easier learning curve. How Marvin accomplishes this is through its clever &lt;strong&gt;Strategies&lt;/strong&gt; system. Strategies allow you to only enable the features which are useful to you. They can be thought of as &lt;em&gt;togglable features&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Strategies are one of the aspects that make Amazing Marvin shine. It gives you the flexibility to implement as many strategies as you want (again, think of them as features) into your workflow or be as minimalist as possible and use only a select few. In the end, Amazing Marvin &lt;em&gt;can be customized to how you think and work&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This is different from other task management apps, which follows the “you-get-what-you-see model.” In other task management apps, users have to use a space in which every feature, whether useful to them or not, coexists. This is especially the case with bloated or other feature-rich task management apps. In this way, Marvin can be feature-rich but much less overwhelming than other task management solutions.&lt;/p&gt;
&lt;p&gt;Amazing Marvin goes a step further by providing brief yet useful descriptions for every Strategy on how to use it. Additionally, there is often an accompanying short video (made by Christina, one of the founders, herself) demonstrating what the Strategy looks like in action. Finally, most strategies have a list of settings which allow you to further fine tune your experience.&lt;/p&gt;
&lt;h2&gt;A list of must-look-at Strategies &lt;a href=&quot;#a-list-of-must-look-at-strategies&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To conclude, I’ve included several lists of Strategies that should be taken a look at as soon as possible as a new user. In addition to checking these Strategies out, &lt;strong&gt;Workflow Templates&lt;/strong&gt; are curated sets of settings and strategies which have been pre-made for you. They range from small snippets to full workflows. I’d &lt;em&gt;highly recommend&lt;/em&gt; looking through these templates as a starting point for your workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Standalone, non-intrusive, must-use Strategies&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Subtasks&lt;/li&gt;
&lt;li&gt;Mobile sidebar&lt;/li&gt;
&lt;li&gt;Check off Behavior&lt;/li&gt;
&lt;li&gt;Right-click menu&lt;/li&gt;
&lt;li&gt;Hover button actions&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Other common Strategies which are easy to set up&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Quick add&lt;/li&gt;
&lt;li&gt;Task notes&lt;/li&gt;
&lt;li&gt;Category context&lt;/li&gt;
&lt;li&gt;Skinny sidebar&lt;/li&gt;
&lt;li&gt;Sidebar&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Strategies you will likely be looking for if you’ve used other task management applications&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Labels (tags)&lt;/li&gt;
&lt;li&gt;Task reminders&lt;/li&gt;
&lt;li&gt;Duration estimates&lt;/li&gt;
&lt;li&gt;Full-calendar functionality
&lt;ol&gt;
&lt;li&gt;Calendar&lt;/li&gt;
&lt;li&gt;Agenda&lt;/li&gt;
&lt;li&gt;All-day items&lt;/li&gt;
&lt;li&gt;Events&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Smart lists (?)&lt;/li&gt;
&lt;li&gt;Priority levels&lt;/li&gt;
&lt;li&gt;Sequential projects&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Useful Strategies which are standalone, easy to understand, yet aren’t found in almost any other task management app (Experiment with them!)&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Work session scheduler&lt;/li&gt;
&lt;li&gt;Eat that Frog&lt;/li&gt;
&lt;li&gt;Procrastination count&lt;/li&gt;
&lt;li&gt;Backburner&lt;/li&gt;
&lt;li&gt;Time tracking&lt;/li&gt;
&lt;li&gt;Missing Next Step warning&lt;/li&gt;
&lt;li&gt;Timers&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Author’s Note &lt;a href=&quot;#authors-note&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have not been told to write about Amazing Marvin. I receive no compensation from Amazing Marvin for this post. I only want to share this amazing piece of software with others.&lt;/p&gt;</description><pubDate>Thu, 24 Jun 2021 22:37:00 GMT</pubDate><category>Amazing Marvin</category><category>Guide</category></item></channel></rss>