<?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 — #Emacs</title><description>Entries tagged with &quot;Emacs&quot;</description><link>https://kristofferbalintona.me/</link><language>en-us</language><image><url>https://kristofferbalintona.me/favicon-rss.png</url><title>Kristoffer Balintona — #Emacs</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>Keeping a tidy .emacs.d/ with no-littering.el</title><link>https://kristofferbalintona.me/posts/202504210034/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202504210034/</guid><description>&lt;p&gt;&lt;a href=&quot;https://github.com/emacscollective/no-littering&quot;&gt;No-littering.el&lt;/a&gt; keeps your .emacs.d clean. I’ve been using it for years—in fact it’s one of the only third-party packages I first installed several years ago when I started using Emacs that I still have in my config today.&lt;/p&gt;
&lt;p&gt;It establishes conventions for keeping files created from packages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;no-littering-etc-directory&lt;/code&gt;. The directory where packages place their configuration files.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;no-littering-var-directory&lt;/code&gt;. The directory where packages place their persistent data files.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If every package followed this convention, then no files should litter (pun intended) your emacs configuration directory. Unfortunately, not every package does… fortunately, no-littering already sets the relevant option of dozens of packages to use these directories. But if you use a package that isn’t already set, you can easily use &lt;code&gt;no-littering-expand-var-file-name&lt;/code&gt; and &lt;code&gt;no-littering-expand-etc-file-name&lt;/code&gt; to change that. For example: &lt;code&gt;(setopt cursory-latest-state-file (no-littering-expand-var-file-name &quot;cursory/cursory-latest-state&quot;))&lt;/code&gt; sets &lt;code&gt;cursory-latest-state-file&lt;/code&gt; to &lt;code&gt;~/.emacs.d/var/cursory/cursory-latest-state&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here’s a look at my own directories.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;My &lt;code&gt;no-littering-etc-directory&lt;/code&gt;, located at &lt;code&gt;~/.emacs.d/etc/&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;$ tree -L 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── abbrev.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── custom.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── gnus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── transient&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;3 directories, 2 files&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;My &lt;code&gt;no-littering-var-directory&lt;/code&gt;, located at &lt;code&gt;~/.emacs.d/var/&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;$ tree -L 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── abbrev-mode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── amx-save.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── anaconda-mode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── annotations.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── auto-save&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── backup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── bookmark-default.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── citre&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── company&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── cursory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── dap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── dape-adapters&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── desktop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── devdocs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── diary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eaf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eafpdf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eglot-java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── elfeed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── emacs-gc-stats.eld.gz&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── emms&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── emojify&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── erc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eshell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eww&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── flycheck&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── fontaine&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── fontaine-latest-state.eld&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── forge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── gamegrid-user-score&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── gdb-bp-session&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── .gitignore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── .gitmodules&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── gnus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── helm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── ielm-history.eld&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── image-dired&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── irony&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── ispell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── keyfreq.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── languagetool&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── ledger&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── logview-cache&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── lsp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── mc-list.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── multisession&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── newsticker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── nov-save-place.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── nsm-settings.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── org&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── org-remark&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── persist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── popweb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── prescient-save.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── projectile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── project-list.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── project-x&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── psession&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── racket-mode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── recentf-save.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── savehist.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── save-place.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── semantic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── shadow&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── speed-type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── spell-fu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── srecode-map.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── svg-lib&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── tempel-templates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── tramp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── transient&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── trash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── treemacs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── treesit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── tree-sitter&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── type-break.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── undohist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── url&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── vimish-fold&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── wombag&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;60 directories, 22 files&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;/ol&gt;
&lt;p&gt;Without no-littering, I would either (i) have a ton of directories in my .emacs.d or (ii) have to define my own variables whose values are directories and manually, whenever I install a new package, set their options to write their files into these directories—basically what no-littering already does but without no-littering’s existing integrations. This way, my Emacs directory is neater.&lt;/p&gt;
&lt;h2&gt;Bonus: &lt;code&gt;(no-littering-theme-backups)&lt;/code&gt; &lt;a href=&quot;#bonus-no-littering-theme-backups&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No-littering also provides the little-known &lt;code&gt;no-littering-theme-backups&lt;/code&gt;. The TL;DR is this: this function makes Emacs’s built-in auto-saving and backing up functions create files within no-littering’s directories so that sensitive data is not written to disk in unsecured locations. Calling this function sets the value of three variables:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;auto-save-file-name-transforms&lt;/code&gt;: Transforms to apply to buffer file name before making auto-save file name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backup-directory-alist&lt;/code&gt;: Similar to &lt;code&gt;auto-save-file-name-transforms&lt;/code&gt; but for backup files.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;undo-tree-history-directory-alist&lt;/code&gt; (from undo-tree): Similar to &lt;code&gt;auto-save-file-name-transforms&lt;/code&gt; but for backup files.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Its docstring elaborates the mechanism and purpose of this function in greater depth:&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;no-littering-theme-backups is an autoloaded native-comp-function in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;no-littering.el.&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;(no-littering-theme-backups)&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;Theme locations where backups of various sorts are created.&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;The purpose of this package is to store data files of various&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sorts in a handful of central locations, instead of spreading&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;them all over the place.  When doing that for temporary files,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;which contain backups of some sort, that increases the odds that&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sensitive data is written to disk in clear text and/or that such&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;clear text files persist longer, if they would be created anyway.&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;Because of that, simply loading ‘no-littering’ does not theme&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;certain, potentially unsafe variables.  Instead, this function is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;provided, so that you can decide whether to take the risk or not.&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;Calling this function sets these variables:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- auto-save-file-name-transforms (built-in)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- backup-directory-alist (built-in)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- undo-tree-history-directory-alist (from ‘undo-tree’)&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;The default values of these variables cause additional files to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;be created in the same directories as the files that are being&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;visited.  Calling this function changes the values of these&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;variables, so that this is only done for visited files located in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;certain directories.  For all other visited files, the additional&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;files are created in files inside no-littering-var-directory.&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;Additional files are created in the same directory as the visited&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;file, for files located in:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- &quot;/tmp/&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- &quot;/dev/shm&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- temporary-file-directory&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;With these settings it is still possible that sensitive data is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;written to additional files, but you are more likely to spot it,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;and because these directories usually use a ‘tmpfs’ file-system,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;the leaked secrets should not persist after a reboot.&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 you do *not* call this function, then these additional files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;are always created in the same directory as the visited files,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;regardless of the location of the visited files.  In other words,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;even when using the default values, there is a significant risk&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;of leaking sensitive data, and if you want to reduce that, then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;you must turn of these features completely.&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;</description><pubDate>Mon, 21 Apr 2025 00:34:00 GMT</pubDate><category>Emacs</category><category>Tips and Tricks</category></item><item><title>Complement corfu, vertico, and completion-preview with prescient.el sorting</title><link>https://kristofferbalintona.me/posts/202504051423/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202504051423/</guid><description>&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Apr 7, 2025&lt;/span&gt;  &lt;/time&gt; With several commits made on April 6, 2025, vertico spun off its sorting functionality into an extension: &lt;a href=&quot;https://github.com/minad/vertico/blob/main/extensions/vertico-sort.el&quot;&gt;vertico-sort&lt;/a&gt;. As explained in vertico-sort.el’s commentary section, it includes a new feature: when &lt;code&gt;history-delete-duplicates&lt;/code&gt; is nil, all sorting functions defined in vertico-sort.el now rank &lt;em&gt;recently&lt;/em&gt; selected candidates above frequently selected candidates. This approximates the sorting strategy of prescient.el. I think I’ll stick with prescient.el sorting because I like &lt;code&gt;history-delete-duplicates&lt;/code&gt; set to non-nil, but try it out yourself!&lt;/p&gt; &lt;/blockquote&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Apr 22, 2025&lt;/span&gt;  &lt;/time&gt; Corfu now offers a similar functionality as vertic-sort does for vertico with the new &lt;a href=&quot;https://github.com/minad/corfu/blob/main/extensions/corfu-history.el&quot;&gt;corfu-sort&lt;/a&gt; extension. Like vertico-sort, corfu-sort requires &lt;code&gt;history-delete-duplicates&lt;/code&gt; to be nil.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/radian-software/prescient.el&quot;&gt;Prescient.el&lt;/a&gt; is a package that was popular during the era of ivy and helm. Nowadays, I don’t see it mentioned much because of the very popular corfu + vertico + marginalia + orderless combination which enhance built-in Emacs completion and overtaken ivy and helm in terms of popularity. (And it’s deserved! I use this combination, too.)&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; But I’ve found prescient.el a noticeable convenience that complements this set of packages.&lt;/p&gt;
&lt;p&gt;The reason is prescient.el’s sorting. Roughly, we can think of completion as having two halves: filtering and sorting. Filtering is what &lt;code&gt;completion-styles&lt;/code&gt; does: among the generated completion candidates, which are shown to the user? Sorting is the order in which the filtered candidates are shown. One might think that orderless, which is filters candidates with its completion-style, also sorts candidates—but it doesn’t. As explained in the &lt;a href=&quot;https://github.com/oantolin/orderless?tab=readme-ov-file#prescient&quot;&gt;orderless README&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/radian-software/prescient.el&quot;&gt;prescient.el&lt;/a&gt; library also provides matching of space-separated components in any order. It offers a completion-style that can be used with Emacs’ default completion UI, Mct, Vertico or with Icomplete. Furthermore Ivy is supported. The components can be matched literally, as regexps, as initialisms or in the flex style (called “fuzzy” in prescient). Prescient does not offer the same flexibility as Orderless with its style dispatchers. However in addition to matching, &lt;strong&gt;Prescient supports sorting of candidates, while Orderless leaves that up to the candidate source and the completion UI.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As such, in the corfu + vertico + marginalia + orderless world, vertico (for minibuffer completions) and corfu (for in-inline completions) are responsible for sorting candidates.&lt;/p&gt;
&lt;p&gt;The problem is this: although orderless brilliantly narrows down candidates, both vertico and corfu have somewhat naive sorting algorithms (see &lt;code&gt;vertico-sort-function&lt;/code&gt; and &lt;code&gt;corfu-sort-function&lt;/code&gt;). Vertico offers &lt;code&gt;vertico-sort-history-alpha&lt;/code&gt; and &lt;code&gt;vertico-sort-history-length-alpha&lt;/code&gt;, and corfu offers &lt;code&gt;corfu-history-mode&lt;/code&gt;. In my limited experience, however, I give prescient.el’s sorting algorithm an edge to both. (YMMV—feel free to try them!) Oftentimes vertico and corfu will &lt;strong&gt;consistently show the candidate you have in mind later in the list&lt;/strong&gt;. This tends to be the case when using certain common commands and certain &lt;code&gt;completion-at-point-functions&lt;/code&gt;: I would common seek out certain candidates that orderless would place third or fourth in the list.&lt;/p&gt;
&lt;p&gt;Prescient.el almost entirely solved this issue for me. Prescient.el offers a &lt;code&gt;completion-style&lt;/code&gt;—this is its filtering functionality—but it also offers sorting functionality. The sorting functionality is what’s relevant here:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When sorting, &lt;strong&gt;the last few candidates you selected are displayed first, followed by the most frequently selected ones&lt;/strong&gt;, and then the remaining candidates are sorted by length.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Prescient.el is the core package, and there are several &lt;a href=&quot;https://github.com/radian-software/prescient.el?tab=readme-ov-file#usage&quot;&gt;auxiliary packages&lt;/a&gt; to integrate prescient with vertico, corfu, and others. We can enable prescient’s sorting for vertico and corfu (but not its filtering; I want to leave this to orderless) with something like 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;;; Core package&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; prescient&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;;; My settings for relevant user options:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (prescient-aggressive-file-save 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;;; (prescient-sort-length-enable 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;;; (prescient-sort-full-matches-first 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;;; (prescient-history-length 200)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (prescient-frequency-decay 0.997)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (prescient-frequency-threshold 0.05)&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;;; Optional: persist prescient statistics to an on-disk 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;;; (&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;prescient-save-file&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;prescient-persist-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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Integration with 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;use-package&lt;/span&gt;&lt;span&gt; corfu-prescient&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 :after keyword defers loading this package, meaning this package is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; only loaded until something else wants something from it.  If we 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;`&lt;/span&gt;&lt;span&gt;corfu-prescient-mode&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; to be enabled in the :config block, we need 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;;; prevent deferral with the :demand keyword. In combination with our :after&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; block, the package is immediately loaded only after both corfu 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;;; prescient are loaded.&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;/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 prescient&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;;; Sorting.  These are the default values but I include them here 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;;; explicit.&lt;/span&gt;&lt;/div&gt;&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-prescient-enable-sorting 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;corfu-prescient-override-sorting &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Don&apos;t override &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;display-sort-function&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;;; Filtering&lt;/span&gt;&lt;/div&gt;&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-prescient-enable-filtering &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; We want orderless to do the filtering&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; See also &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-prescient-completion-styles&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;`&lt;/span&gt;&lt;span&gt;corfu-prescient-completion-category-overrides&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;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;prescient--completion-recommended-overrides&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.  Those options apply only&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; when &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-prescient-enable-filtering&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;: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-prescient-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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Integration with 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;use-package&lt;/span&gt;&lt;span&gt; vertico-prescient&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 :after keyword defers loading this package, meaning this package is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; only loaded until something else wants something from it.  If we 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;`&lt;/span&gt;&lt;span&gt;vertico-prescient-mode&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; to be enabled in the :config block, we need 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;;; prevent deferral with the :demand keyword. In combination with our :after&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; block, the package is immediately loaded only after both vertico 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;;; prescient are loaded.&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;/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; vertico prescient&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;;; Sorting.  These are the default values but I include them here 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;;; explicit.&lt;/span&gt;&lt;/div&gt;&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-prescient-enable-sorting 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-prescient-override-sorting &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Don&apos;t override &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;display-sort-function&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;;; Filtering&lt;/span&gt;&lt;/div&gt;&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-prescient-enable-filtering &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; We want orderless to do the filtering&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; See also &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;vertico-prescient-completion-styles&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;`&lt;/span&gt;&lt;span&gt;vertico-prescient-completion-category-overrides&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;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;prescient--completion-recommended-overrides&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.  Those options apply only&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; when when &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;vertico-prescient-enable-filtering&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;: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-prescient-mode &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 result is using orderless for completion filtering and prescient for completion sorting everywhere—for in-line completions with corfu and minibuffer completions with vertico. With this, among the candidates filtered by orderless, the most recent and common ones will be bumped up to the beginning. Try it out!&lt;/p&gt;
&lt;h2&gt;Bonus: integration with &lt;code&gt;completion-preview-mode&lt;/code&gt; &lt;a href=&quot;#bonus-integration-with-completion-preview-mode&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Emacs 30.1 ships with the new &lt;code&gt;completion-preview-mode&lt;/code&gt;. You can read about it &lt;a href=&quot;https://eshelyaron.com/posts/2023-11-17-completion-preview-in-emacs.html&quot;&gt;in this blog post&lt;/a&gt; but also in the Emacs 30.1 news (i.e., &lt;code&gt;C-u 30 C-h n&lt;/code&gt;). Apparently, &lt;code&gt;completion-preview-mode&lt;/code&gt;
has its own sorting function—which makes sense, since it isn’t hooked into either corfu nor vertico (which we set up to use prescient above). The relevant user option to modify its sorting is &lt;code&gt;completion-preview-sort-function&lt;/code&gt;. So we just have to make sure that function matches prescient’s. We can do that like this:&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;with-eval-after-load&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;prescient&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Have &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-preview-mode&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; use prescient&apos;s sorting algorithm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setopt completion-preview-sort-function &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;prescient-completion-sort))&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;But, if you also use corfu on top of &lt;code&gt;completion-preview-mode&lt;/code&gt;, you’ll still notice a discrepancy between corfu’s first candidate and completion-preview’s candidate. They should be the same with the same sorting algorithm but they’re not! I’m not 100%, but I’m fairly confident that corfu-prescient keeps track of corfu-specific completion usage, which is separate from non-corfu-specific use. Consequently, the statistics used to sort candidates ends up different between corfu and &lt;code&gt;prescient-completion-sort&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In any case, below is a simple fix that gets corfu and completion-preview on the same page:&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;;; We set completion-preview&apos;s sorting 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;`&lt;/span&gt;&lt;span&gt;completion-preview-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;) to corfu&apos;s sorting 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;`&lt;/span&gt;&lt;span&gt;corfu-sort-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;with-eval-after-load&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&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;(&lt;/span&gt;&lt;span&gt;setopt completion-preview-sort-function corfu-sort-function&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;;; Alternative: for a solution that ensures &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-preview-sort-function&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;;; always matches &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, we can use a variable watcher.  This is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; my preference.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; The below accounts for cases in which (i) the user has buffer-local values&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; for &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; or (ii) the user changes the global value of&lt;/span&gt;&lt;/div&gt;&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-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; (e.g., from minor modes that disable/enable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; functionality).  It is a robust solution, and although I have not tested its&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; performance overhead, it should cause no problems.&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-variable-watcher&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-sort-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;(&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;_symbol&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newval&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;operation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;where&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 the value of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-preview-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; to &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-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;If &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; is set buffer-locally, also set&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-preview-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; buffer-locally.  Otherwise, change&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;the default value of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-preview-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; accordingly.&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;This action only applies when the value of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;set (i.e., OPERATION is \\=&apos;set).  This excludes, e.g., let bindings.&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;equal&lt;/span&gt;&lt;span&gt; operation &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;set)&lt;/span&gt;&lt;/div&gt;&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; where&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                              &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;with-current-buffer&lt;/span&gt;&lt;span&gt; where&lt;/span&gt;&lt;/div&gt;&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; completion-preview-sort-function newval&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;setopt completion-preview-sort-function newval&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;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 7, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Fixed several typos.&lt;/li&gt;
&lt;li&gt;Added clarity to several phrases.&lt;/li&gt;
&lt;li&gt;Added a note mentioning the new vertico-sort extension.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&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;Correction to explanation according to &lt;a href=&quot;https://www.reddit.com/r/emacs/comments/1js6xvw/comment/mlkpge6/?utm_source=share&amp;amp;utm_medium=web3x&amp;amp;utm_name=web3xcss&amp;amp;utm_term=1&amp;amp;utm_content=share_button&quot;&gt;r/JDRiverRun’s comment&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Apr 22, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Added a note mentioning the new corfu-history extension.&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;In my opinion, each package is much more modular than the helm or ivy ecosystems while being more performant, integrated with existing Emacs functionality, and just as useful, if not more. Though a bit dated, I’ve previously written a big about how to configure this set of packages: &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-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Sat, 05 Apr 2025 14:23:00 GMT</pubDate><category>Emacs</category><category>Tips and Tricks</category></item><item><title>A surprising upside to vc-dir marks over magit</title><link>https://kristofferbalintona.me/posts/202411270440/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202411270440/</guid><description>&lt;p&gt;Vc.el is Emacs’s built-in interface for version control CLI tools. With respect to Git, magit has for several years now been the most favored (with respect to popularity) Git&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; interface. At least in the r/emacs subreddit, magit is frequently considered a killer-feature—an irreplaceable feature unique to Emacs.&lt;/p&gt;
&lt;p&gt;For the most part I am inclined to agree. However, in the last few months, I’ve been regularly experimenting using &lt;code&gt;vc&lt;/code&gt;. This is in part motivated by recent improvements to &lt;code&gt;vc&lt;/code&gt;’s implementation of Git, and another part motivated by a curiosity to see whether I’d end up enjoying some parts of the &lt;code&gt;vc&lt;/code&gt;-way of doing things over the magit-way of doing things.&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;On such insight has been the surprising benefits of calling &lt;code&gt;vc-dir&lt;/code&gt; instead of &lt;code&gt;magit-status&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;The nicety of &lt;code&gt;vc-dir&lt;/code&gt; marks &lt;a href=&quot;#the-nicety-of-vc-dir-marks&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In &lt;code&gt;magit-status&lt;/code&gt;, I would typically stage various files and hunks and commit them when ready. &lt;code&gt;vc&lt;/code&gt; does not use Git’s “staging” concept (because not all version control systems use such a concept). So instead, to achieve something analogous, a user might call &lt;code&gt;vc-dir&lt;/code&gt; (or, much more commonly for me, &lt;code&gt;project-vc-dir&lt;/code&gt;), mark edited files (or entire directories!) using &lt;code&gt;vc-dir-mark&lt;/code&gt; (&lt;code&gt;m&lt;/code&gt;), and check out (commit) those changes via &lt;code&gt;vc-next-action&lt;/code&gt; (&lt;code&gt;v&lt;/code&gt;) or see a diff of those changes with &lt;code&gt;vc-diff&lt;/code&gt; (&lt;code&gt;=&lt;/code&gt;) and commit the changes in that diff-mode buffer (&lt;code&gt;v&lt;/code&gt;).&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;A problem for the magit interface, however, is &lt;em&gt;visual clarity&lt;/em&gt; when it comes to focusing on changes in a certain subset of files. For example, sometimes I am working with changes in files within a single directory alongside many other uncommitted changes elsewhere in the repository. To make a commit with magit, I would need to navigate past or fold changed hunks/files I want to ignore. With many unstaged changes this means many files to ignore. &lt;strong&gt;This leads to a significant reduction in visual clarity since I end up having to ignore more files than I’m currently working on.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There is a subtle solution in vc.el. The secret lies in the fact that &lt;em&gt;marks, which can be used to selectively create diff buffers and commit changes from those buffers, are preserved&lt;/em&gt; in &lt;code&gt;vc-dir&lt;/code&gt; buffers after changes are committed. A mark is only removed once the corresponding line is removed via something like &lt;code&gt;vc-dir-hide-up-to-date&lt;/code&gt; (&lt;code&gt;x&lt;/code&gt;) or &lt;code&gt;vc-dir-kill-line&lt;/code&gt; (&lt;code&gt;C-k&lt;/code&gt;). Marks are magical because they let me &lt;em&gt;focus&lt;/em&gt; on the files relevant to my current work: I can mark the files and directories I am focusing on &lt;strong&gt;then call &lt;code&gt;vc-next-action&lt;/code&gt; in the &lt;code&gt;vc-dir&lt;/code&gt; buffer to commit changes only in those files and directories&lt;/strong&gt; (or, if I want to be selective about the hunks I commit: first call &lt;code&gt;vc-diff&lt;/code&gt; to see the diff of just the marked files, kill/remove the hunks I don’t want to commit, then &lt;code&gt;vc-next-action&lt;/code&gt;).Then I can write more changes and make more commits in the same way. (Furthermore, while this &lt;code&gt;vc&lt;/code&gt; workflow might seem like it would necessarily involve many more keystrokes, I found this not to be the case under certain scenarios.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In short,&lt;/strong&gt; with vc.el, a really efficient workflow is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;vc-diff&lt;/code&gt; or &lt;code&gt;vc-root-diff&lt;/code&gt; → &lt;code&gt;vc-next-action&lt;/code&gt; and&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vc-dir&lt;/code&gt; (with persistent marks) → &lt;code&gt;vc-diff&lt;/code&gt; → &lt;code&gt;vc-next-action&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The latter is unique to vc.el, and a feature I don’t think the magit UI can replicate. So while magit can sometimes become visually cluttered, &lt;code&gt;vc-dir&lt;/code&gt; marks let users focus on their current work by easily excluding &lt;em&gt;from view&lt;/em&gt; files and directories one is not concerned with currently.&lt;/p&gt;
&lt;h2&gt;A caveat &lt;a href=&quot;#a-caveat&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Historically, I’ve found this especially fruitful when working on my literate Emacs config&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; (wherein any “single change” involves changes to the .org file as well as the resulting tangled file(s)) and Emacs packages. Still, I think I prefer magit in cases where the staging functionality of Git is crucial. For instance, I have a repository that houses all my org notes and org-agenda files. There are frequently many changes for this repository, so the convenience of staging/unstaging has been crucial for me. In cases like these, I haven’t found an equivalent for vc.el yet.&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;Mar 25, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Add clarifying prose to paragraph.&lt;/li&gt;
&lt;li&gt;Change formatting of “vc.el” and “magit.”&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;magit is an interface for Git, whereas vc.el is an interface for other version control tools, albeit older ones, some of which may follow a non-decentralized version control paradigm (read the Emacs Info node &lt;code&gt;(emacs) Version Control Systems&lt;/code&gt; for more information):&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;CVS&lt;/li&gt;
&lt;li&gt;Subversion (svn)&lt;/li&gt;
&lt;li&gt;SCCS&lt;/li&gt;
&lt;li&gt;CSSC&lt;/li&gt;
&lt;li&gt;Mercurial (hg)&lt;/li&gt;
&lt;li&gt;Bazaar (bzr)&lt;/li&gt;
&lt;li&gt;SRC (src)&lt;/li&gt;
&lt;/ul&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;A philosophical tangent: the interface of a tool (digital or analog/physical) influences how users interact with that tool and how users accomplish the purposes of the tool. As such, what seems at first as a subtle difference in workflow or interface to achieve the same end almost always overlooks aspects relevant to the workflow’s effectiveness.&lt;/p&gt;&lt;p&gt;For instance, users of Emacs will readily recognize that Emacs is thoroughly characterized by an “emacs-y” way of doing things. The total network of keybinds, conventions, and procedures of using Emacs might accomplish the same purposes as other software (combined or standalone), but this specific network of “ways to interface with Emacs-as-a-tool” enables Emacs to offer a uniquely effective experience.&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;If I want to commit changes with much fewer unstaged changes present, then a faster method would be: call &lt;code&gt;vc-root-diff&lt;/code&gt; (&lt;code&gt;C-x v D&lt;/code&gt;), modify the diff-mode buffer accordingly with &lt;code&gt;diff-hunk-kill&lt;/code&gt; (&lt;code&gt;k&lt;/code&gt;) or &lt;code&gt;diff-delete-other-hunks&lt;/code&gt; (&lt;code&gt;C-c RET n&lt;/code&gt;; a recent addition to Emacs-30), then commit the changes with &lt;code&gt;vc-next-action&lt;/code&gt; (&lt;code&gt;v&lt;/code&gt;). &lt;a&gt;&lt;/a&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;See also &lt;a href=&quot;#target-1&quot;&gt;footnote 3&lt;/a&gt;.&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>Wed, 27 Nov 2024 04:40:00 GMT</pubDate><category>Emacs</category><category>VCS</category><category>Tips and Tricks</category></item><item><title>Neat behavior of M-x occur</title><link>https://kristofferbalintona.me/posts/202411090600/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202411090600/</guid><description>&lt;p&gt;Having used Emacs for several years now, I somehow hadn’t come across the prefix argument and active region behavior for one of the most well-known commands: &lt;code&gt;occur&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Below is the docstring of &lt;code&gt;occur&lt;/code&gt; reads, with the relevant portions preserved:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;occur is an interactive native-comp-function in replace.el.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It is bound to M-s o.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;(occur REGEXP &amp;amp;optional &lt;strong&gt;NLINES REGION&lt;/strong&gt;)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Inferred type: (function (t &amp;amp;optional t t) t)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Show all lines in the current buffer containing a match for REGEXP.&lt;br /&gt;
If a match spreads across multiple lines, all those lines are shown.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;[…]&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Each line is displayed with NLINES lines before and after, or -NLINES&lt;br /&gt;
before if NLINES is negative.&lt;br /&gt;
NLINES defaults to list-matching-lines-default-context-lines.&lt;br /&gt;
Interactively it is the prefix arg.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Optional arg REGION, if non-nil, mean restrict search to the&lt;br /&gt;
specified region.  Otherwise search the entire buffer.*&lt;br /&gt;
*REGION must be a list of (START . END) positions as returned by&lt;br /&gt;
region-bounds.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;[…]&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;When NLINES is a string or when the function is called&lt;br /&gt;
interactively with prefix argument without a number (C-u alone&lt;br /&gt;
as prefix) the matching strings are collected into the ‘*Occur*’&lt;br /&gt;
buffer by using NLINES as a replacement regexp.  NLINES may&lt;br /&gt;
contain \&amp;amp; and \N which convention follows replace-match.&lt;br /&gt;
For example, providing “defun\s +$\S +$” for REGEXP and&lt;br /&gt;
“\1” for NLINES collects all the function names in a lisp&lt;br /&gt;
program.  When there is no parenthesized subexpressions in REGEXP&lt;br /&gt;
the entire match is collected.  In any case the searched buffer&lt;br /&gt;
is not modified.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;[…]&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;So:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When called on a region, on that region is searched.&lt;/li&gt;
&lt;li&gt;When called with a numerical prefix argument, that many lines before and after every match is added to the search results. (This reminds me of &lt;code&gt;next-screen-context-lines&lt;/code&gt;.) &lt;em&gt;This functionality is particularly useful to me since added context is sometimes necessary.&lt;/em&gt;&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;When called with a universal argument, just the matching string (not the entire line) is inserted into a line in a read-only buffer.&lt;/li&gt;
&lt;li&gt;If called from elisp and &lt;code&gt;NLINES&lt;/code&gt; is provided (as a regexp string), then the behavior is like &lt;code&gt;C-u&lt;/code&gt; but matches can be modified like &lt;code&gt;replace-match&lt;/code&gt;. (See &lt;code&gt;(elisp) Replacing Match&lt;/code&gt; for more information.)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Also, searching “NLINES” with &lt;code&gt;apropos-documentation&lt;/code&gt; brings up a few other built-in commands that have similar functionality. &lt;code&gt;isearch-occur&lt;/code&gt;, &lt;code&gt;multi-occur&lt;/code&gt;, &lt;code&gt;list-matching-lines&lt;/code&gt;, and &lt;code&gt;occur-context-lines&lt;/code&gt; to name a few.&lt;/p&gt;
&lt;p&gt;Pretty neat!&lt;/p&gt;
&lt;h2&gt;Further Reading &lt;a href=&quot;#further-reading&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.masteringemacs.org/article/searching-buffers-occur-mode&quot;&gt;Searching and Editing in Buffers with Occur Mode - Mastering Emacs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/emacs/comments/1466y8d/what_do_you_use_for_occur/&quot;&gt;What do you use for occur?  - Reddit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://protesilaos.com/codelog/2019-08-04-emacs-occur/&quot;&gt;Emacs’ powerful OCCUR function in practice | Protesilaos Stavrou&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.emacswiki.org/emacs/OccurMode&quot;&gt;EmacsWiki: Occur Mode&lt;/a&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 sometimes use &lt;code&gt;occur-edit-mode&lt;/code&gt; (bound to &lt;code&gt;e&lt;/code&gt; in &lt;code&gt;occur-mode&lt;/code&gt; buffers), and the added context lines can be relevant to the edits I want to make to the matched text.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Sat, 09 Nov 2024 06:00:00 GMT</pubDate><category>Emacs</category><category>Tips and Tricks</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></channel></rss>