<?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 — Text Completion and Minibuffer UI</title><description>Entries in the &quot;Text Completion and Minibuffer UI&quot; thread</description><link>https://kristofferbalintona.me/</link><language>en-us</language><image><url>https://kristofferbalintona.me/favicon-rss.png</url><title>Kristoffer Balintona — Text Completion and Minibuffer UI</title><link>https://kristofferbalintona.me</link></image><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>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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/gif1.BM01cDPj_1wbaxF.gif?dpl=6a2a3a436e756600081397cb 640w, /_astro/gif1.BM01cDPj_Z2sPNbf.gif?dpl=6a2a3a436e756600081397cb 750w, /_astro/gif1.BM01cDPj_Z1vpBk6.gif?dpl=6a2a3a436e756600081397cb 828w, /_astro/gif1.BM01cDPj_ZkzAWy.gif?dpl=6a2a3a436e756600081397cb 960w, /_astro/gif1.BM01cDPj_Z2vkSoe.gif?dpl=6a2a3a436e756600081397cb 1073w, /_astro/gif1.BM01cDPj_Z2tsX1W.gif?dpl=6a2a3a436e756600081397cb 1080w, /_astro/gif1.BM01cDPj_ZngSJB.gif?dpl=6a2a3a436e756600081397cb 1280w, /_astro/gif1.BM01cDPj_Z1jFBl2.gif?dpl=6a2a3a436e756600081397cb 1668w, /_astro/gif1.BM01cDPj_1FNpM6.gif?dpl=6a2a3a436e756600081397cb 1920w, /_astro/gif1.BM01cDPj_ZxkHKA.gif?dpl=6a2a3a436e756600081397cb 2048w, /_astro/gif1.BM01cDPj_uCaYH.gif?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Zt4nao.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_B5LTC.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_1yvXKL.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z2kP9FC.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_1ucLda.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z1tMijq.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z2qc0TQ.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_ZfYO8c.png?dpl=6a2a3a436e756600081397cb 1886w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_zi1dh.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z1DQ7kp.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z1pWn5N.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_2mp69h.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-03-01_16-52-17_screenshot.BwNHxf5D_Z2iRWNr.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_Z1hdX05.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_Zc3MU4.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_KmnV5.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_1TAJH6.png?dpl=6a2a3a436e756600081397cb 957w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_1VcoiC.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_1Vkhxu.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_Z12ELY6.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_Z1Y4uzw.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-28_00-12-22_screenshot.FlC50-D2_YBFn1.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_2nhxoF.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Z1BJqkf.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_ZEjet6.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_vvKSr.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Z1qe4GC.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_EWYzI.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_ZgqI0H.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Z2mBkTE.png?dpl=6a2a3a436e756600081397cb 1919w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Z2l8OGv.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_uTayJ.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_IMTNl.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_Zy1JKv.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-28_00-17-53_screenshot.DAMsu0DH_L6fC8.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_2qdKkW.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_Z1yNdnX.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_ZBn1wO.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_yrXOI.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_3Pup1.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_2a2yGm.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_1dCQ5V.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_ZS0f8P.png?dpl=6a2a3a436e756600081397cb 1912w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_ZQ4fzR.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_1YXJFn.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_2dRtTY.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_V2Ol8.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_14-52-49_screenshot.CoPZIfwl_2dPq1F.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_1Xbb2Y.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z21PMFV.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z14pAOM.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_6powK.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_147YIP.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z1TR4MK.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_2dUlpK.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_9deIW.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_9deIW.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z24USNJ.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z1Q29z8.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_1VkjEW.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_15-03-29_screenshot.D_kLvfrG_Z1Mcelv.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_ZTcJfp.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_aWpOB.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_18nBFK.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_2jdC3i.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_Z1BD9Gt.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_txTzR.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_ZrPN0y.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_2waHTq.png?dpl=6a2a3a436e756600081397cb 1919w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_Z2wxTGm.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_ju5yS.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_xnONu.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_ZJqOKm.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_15-13-22_screenshot.CzIeIxAX_zGaCh.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_Z2nqDJE.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_Z1igtED.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_ZkPhNu.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_OYHy3.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_Z1GU3GG.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_oh0zE.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_Zx7H0L.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_2smk7m.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_2smk7m.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_edbyF.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_s6UNh.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_ZOHIKz.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_15-25-29_screenshot.-j76Sq3f_vVQ1T.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_Zwpav1.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_xJYz0.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_1vbbq9.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_Z2oaW1f.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_ZclMg9.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_1SPh1c.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_WqypL.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_Z18J3tb.png?dpl=6a2a3a436e756600081397cb 1919w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_Z17gxg2.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_1ILs0d.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_1WFceO.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_EPwEX.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_15-23-05_screenshot.BT0w2ICc_1YXx3B.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Z1qbqTz.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Zl1gOy.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_BoU1A.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_1MeUo8.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_2sNJab.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Zvbkmp.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Z1rA2WP.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_1wmoKs.png?dpl=6a2a3a436e756600081397cb 1918w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_1xSYai.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_ZFf9no.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Zrlp8M.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_Z1Jb4HD.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_15-27-16_screenshot.RLlaBgV3_ZpbcHn.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_ZJwOFy.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_kCkos.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_1i3wfB.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_2sSwC9.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_Z1M33MY.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_j90tm.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_ZCfH74.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_2nek14.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_2nek14.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_95bsn.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_mXUGY.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_ZTPIQR.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_15-28-46_screenshot.B82_MmTr_qNPUB.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_2u58VD.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Z1uVOMh.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_ZxvCV8.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Cjmqp.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_21su3m.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_ZWwzte.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Z1SVi4E.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_16xJ3t.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_16xJ3t.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Z17Aoud.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_ZSGEfB.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_Z2bwjOs.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_15-30-27_screenshot.ChKhrAfv_ZOQJ1Y.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Oz0MU.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_1TJaRV.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z2d1L4Q.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z12bKHj.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_1hCMNl.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z1GmgIf.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_2rq9ug.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_mI2Ns.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_mI2Ns.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z1Qq5Je.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z1CwluC.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_29P7Js.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_15-31-45_screenshot.2BkwingK_Z1yGqh0.png?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_2v2Gl1.gif?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_Z1tYhnT.gif?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_Zwy5wK.gif?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_DgTOM.gif?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_2vdsr3.gif?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_ZsLB5x.gif?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_Z1pbjFX.gif?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_ZuhJ6Y.gif?dpl=6a2a3a436e756600081397cb 1729w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_1AiHra.gif?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_ZCPq6w.gif?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_ZoVFQU.gif?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_Z1GLlqL.gif?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_15-40-59_demonstrating-rfn-eshadow-update-overlay.VCsgrHur_zhU4N.gif?dpl=6a2a3a436e756600081397cb 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=6a2a3a436e756600081397cb&quot; srcset=&quot;/_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_WnfWh.png?dpl=6a2a3a436e756600081397cb 640w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_22xq2i.png?dpl=6a2a3a436e756600081397cb 750w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_Z25dvUu.png?dpl=6a2a3a436e756600081397cb 828w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_ZTnvxW.png?dpl=6a2a3a436e756600081397cb 960w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_aslJA.png?dpl=6a2a3a436e756600081397cb 1080w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_2gEq1V.png?dpl=6a2a3a436e756600081397cb 1280w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_1kfHqv.png?dpl=6a2a3a436e756600081397cb 1668w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_ZKTTsr.png?dpl=6a2a3a436e756600081397cb 1919w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_ZJrofi.png?dpl=6a2a3a436e756600081397cb 1920w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_26AB0W.png?dpl=6a2a3a436e756600081397cb 2048w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_2kulfy.png?dpl=6a2a3a436e756600081397cb 2560w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_12EFFH.png?dpl=6a2a3a436e756600081397cb 3200w, /_astro/2022-02-22_15-18-54_screenshot.CmFUd6TD_2mMG4l.png?dpl=6a2a3a436e756600081397cb 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>