<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0"><channel><title>Kristoffer Balintona — Articles</title><description>Essays and long-form writing</description><link>https://kristofferbalintona.me/</link><language>en-us</language><image><url>https://kristofferbalintona.me/favicon-rss.png</url><title>Kristoffer Balintona — Articles</title><link>https://kristofferbalintona.me</link></image><item><title>Basic journals and logs with org-node</title><link>https://kristofferbalintona.me/posts/Basic-journals-and-logs-with-org-node/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/Basic-journals-and-logs-with-org-node/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#the-dilemma&quot;&gt;The dilemma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-result&quot;&gt;Final result&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#final-words&quot;&gt;Final words&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The dilemma &lt;a href=&quot;#the-dilemma&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the last month I’ve become more and more convinced that I should start migrating from org-roam to org-node. Dealing with org-node’s elisp API (as opposed to org-roam’s sqlite API) is easier, and I think org-node has even greater potential for future growth&lt;/p&gt;
&lt;p&gt;(see &lt;a href=&quot;https://github.com/meedstrom/indexed&quot;&gt;indexed.el, the speedy library&lt;/a&gt; tk)&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;;; Bespoke function meant for datetrees in org-node nodes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; krisb-org-capture--org-node-datetree&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Creates datetree at org-node node.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Prompts for an org-node node, creates a datetree there, and leaves point&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;where a new entry should be.  Meant to be used by itself as a function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;in &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-capture-templates&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&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-node)&lt;/span&gt;&lt;/div&gt;&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-datetree)&lt;/span&gt;&lt;/div&gt;&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;candidate &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;completing-read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Select journal: &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;&apos;&lt;/span&gt;&lt;span&gt;org-node-collection&lt;/span&gt;&lt;/div&gt;&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;_title&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;node&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;member&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;__journal&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-node-get-tags node&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&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;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;org-node-hist))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;node &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;gethash&lt;/span&gt;&lt;span&gt; candidate org-node--candidate&amp;lt;&amp;gt;node&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-node-get-file node&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;olp &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;(&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-node-get-level node&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&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-node-get-olp-with-self node&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pt &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-node-get-pos node&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;date &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;calendar-gregorian-from-absolute&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;time-to-days&lt;/span&gt;&lt;/div&gt;&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-capture-get &lt;/span&gt;&lt;span&gt;:default-time&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Respect C-1 and :time-prompt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;buffer &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-capture-target-buffer file&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tree-type &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-capture-get &lt;/span&gt;&lt;span&gt;:tree-type&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Respect :tree-type&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 &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-capture-set-target-location&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; for an explanation of the 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;;; few lines&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;set-buffer&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;org-capture-put-target-region-and-position&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;widen&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;goto-char&lt;/span&gt;&lt;span&gt; pt&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;;; Create datetree.  See the implementation 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;`&lt;/span&gt;&lt;span&gt;org-capture-set-target-location&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; for an explanation of the lines&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;;; below; it handles all the cases org-capture does&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcall&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pcase&lt;/span&gt;&lt;span&gt; tree-type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`week &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;org-datetree-find-iso-week-create)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`month &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;org-datetree-find-month-create)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`day &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;org-datetree-find-date-create)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;pred not&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;org-datetree-find-date-create)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;pred functionp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&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;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keep-restriction&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&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-datetree-find-create-hierarchy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcall&lt;/span&gt;&lt;span&gt; tree-type d&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; keep-restriction&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;pred &lt;/span&gt;&lt;span&gt;listp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&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;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keep-restriction&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcall&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;org-datetree-find-create-entry&lt;/span&gt;&lt;span&gt; tree-type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d keep-restriction&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;_ &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Unrecognized :tree-type&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;date&lt;/span&gt;&lt;/div&gt;&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; olp &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;subtree-at-point))))&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;Final result &lt;a href=&quot;#final-result&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&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;setopt org-capture-templates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;`((&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;&quot;&lt;/span&gt;&lt;span&gt;Todo&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; entry&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;expand-file-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;todo.org&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; krisb-org-agenda-directory&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;* TODO %? :INBOX:%^g&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n&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;:empty-lines&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;&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;&quot;&lt;/span&gt;&lt;span&gt;Todo (without processing)&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; entry&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;expand-file-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;todo.org&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; krisb-org-agenda-directory&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;* TODO %? %^g&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n&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;:empty-lines&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;&quot;&lt;/span&gt;&lt;span&gt;j&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;Journal&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; entry&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; krisb-org-capture--org-node-datetree&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/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;%c&amp;gt;&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n%?&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;:tree-type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;year quarter month&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;:jump-to-captured&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;:immediate-finish&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;:empty-lines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;:clock-in&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;:clock-resume&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&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;&quot;&lt;/span&gt;&lt;span&gt;Log&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; krisb-org-capture--org-node-datetree&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;%U %?&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;:tree-type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;quarter week&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;:clock-in&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;:clock-resume&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&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;&quot;&lt;/span&gt;&lt;span&gt;Work meeting notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; entry&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file+olp+datetree ,&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; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-node-get-file &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-node-by-id &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;20241114T091749.707997&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;* (%&amp;lt;%c&amp;gt;)%?&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n&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;:tree-type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;year quarter month&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;:jump-to-captured&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;:immediate-finish&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Blog post&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; plain&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&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;/div&gt;&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;org-node-ask-directory krisb-blog-directory&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&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-node-capture-target&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;#+filetags: :__draft:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;,#+hugo_bundle:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;,#+export_file_name: index&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;,#+hugo_tags:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;,#+hugo_categories:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;,#+hugo_publishdate:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;,#+hugo_lastmod:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;,#+hugo_custom_front_matter: :TableOfContents true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;,#+hugo_draft: true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;,#+hugo_paired_shortcodes:&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n%?&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;:jump-to-captured&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;:immediate-finish&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;h2&gt;Final words &lt;a href=&quot;#final-words&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Although this code is written for org-node, since accessing org-node’s nodes and org-roam’s nodes are practically identical, it could easily be adapted to be used by org-roam.&lt;/p&gt;</description><pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate></item><item><title>Customized LaTeX exports for humanities papers</title><link>https://kristofferbalintona.me/posts/Customized-LaTeX-exports-for-humanities-papers/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/Customized-LaTeX-exports-for-humanities-papers/</guid><description>&lt;h2&gt;The pain-point &lt;a href=&quot;#the-pain-point&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;Approach 1 &lt;a href=&quot;#approach-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;initially redefined latex exporter; but that created a long section in my config with majority redundancy with upstream code and brittle to future upstream changes&lt;/p&gt;
&lt;p&gt;lots of boilerplate to register new derived backend, and a bit hacky to repalce the old latex backend entry in the org export menu with the replacement version&lt;/p&gt;
&lt;p&gt;also overkill when you just want “default latex exporter but recognizing a few more keywords”&lt;/p&gt;
&lt;p&gt;which is why we have approach 2 and 3&lt;/p&gt;
&lt;h2&gt;Approach 2 &lt;a href=&quot;#approach-2&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;first tried &lt;code&gt;org-export-filter-keyword-functions&lt;/code&gt;; didn’t work because unknown keywords are ignored, not making it to the stage when filter functions are run&lt;/p&gt;
&lt;p&gt;I found a solution with &lt;code&gt;org-export-before-parsing-functions&lt;/code&gt;: convert those keyword lines into #+LATEX_HEADER lines (which ox-latex does convert)&lt;/p&gt;
&lt;h2&gt;Approach 3 &lt;a href=&quot;#approach-3&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;but, in the end, if you just want latex export, you can use the #+LATEX_HEADER and #+LATEX_HEADER_EXTRA keywords&lt;/p&gt;
&lt;p&gt;merit: explicit declaration, not depending on your config&lt;/p&gt;
&lt;p&gt;but: as a consequence, if aspects involving in exporting the file are declared outside of the file (e.g., .sty file), the explicit file declaration might be end up brittle&lt;/p&gt;</description><pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate><category>Emacs</category></item><item><title>Features I’m looking forward to in Emacs 31</title><link>https://kristofferbalintona.me/posts/Features-Im-looking-forward-to-in-Emacs-31/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/Features-Im-looking-forward-to-in-Emacs-31/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=253364e2c71bfaaa3ca623ed23f1cae6548a16c7&quot;&gt;VC-Dir: Offer to register files before checking in&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=bfeb755e03b5cab8f1f234b1a54afbcfd71f9eb2&quot;&gt;savehist.el: Handle concurrent access to `savehist-file`&lt;/a&gt;
But…&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;This feature is activated only when &apos;savehist-additional-variables&apos; is 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;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=6f494d74f645d6cffd98e168721a0347de271a54&quot;&gt;New user option to hide minor mode lighters (bug#77361)&lt;/a&gt;
Basically minions.el&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;vc-dir-mark-file&lt;/code&gt;: Consistently don’t allow marking a subdirectory&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;* | a5f574429db 2025-04-06 (10 days ago) Sean Whitton&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;| |   vc-dir-mark-file: Consistently don&apos;t allow marking a subdirectory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;commit a5f574429db1f820cc4d25bfb0e700aae050dc07&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Author: Sean Whitton &amp;lt;spwhitton@spwhitton.name&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date:   Sun Apr 6 09:09:32 2025 +0800&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;vc-dir-mark-file: Consistently don&apos;t allow marking a subdirectory&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;* lisp/vc/vc-dir.el (vc-dir-mark-file): Don&apos;t allow marking a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;subdirectory if its parent is already marked.  This fixes an&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;inconsistency whereby if a subdirectory was already marked then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;its parent could not be marked, but not vice-versa (bug #76769).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Teach VC-Dir to automatically add and remove marks on other lines&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;* | 936b2efdb38 2025-04-06 (10 days ago) Sean Whitton&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;| |   Teach VC-Dir to automatically add and remove marks on other lines&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;commit 936b2efdb389488d291086d5c2189fd1a7170aa6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Author: Sean Whitton &amp;lt;spwhitton@spwhitton.name&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date:   Sun Apr 6 11:18:57 2025 +0800&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;Teach VC-Dir to automatically add and remove marks on other lines&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;* lisp/vc/vc-dir.el (vc-dir-allow-mass-mark-changes): New option.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(vc-dir-parent-marked-p): Replace with ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(vc-dir--parent): ... this.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(vc-dir-children-marked-p): Replace with ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(vc-dir--children): ... this.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(vc-dir-mark-file): Unmark subitems before marking a directory.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Offer to unmark a directory before marking a subitem.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(vc-dir-unmark-file): For an implicitly marked item, offer to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;unmark it by marking everything else that&apos;s implicitly marked.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;For an unmarked directory with marked subitems, offer to unmark&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;them all.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;* etc/NEWS: Document the changes.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;vc-setup-buffer&lt;/code&gt;: Don’t pass a string to buffer-live-p.&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;* | 2310c12658c 2025-04-09 (7 days ago) Sean Whitton&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;| |   ; vc-setup-buffer: Don&apos;t pass a string to buffer-live-p.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;commit 2310c12658c4b563f9860cb1196bab0d56c6f94d&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Author: Sean Whitton &amp;lt;spwhitton@spwhitton.name&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date:   Wed Apr 9 11:04:26 2025 +0800&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;; vc-setup-buffer: Don&apos;t pass a string to buffer-live-p.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;savehist.el: Handle concurrent access to `savehist-file`&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;* bfeb755e03b 2025-04-12 (3 days ago) Stefan Monnier&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;|   savehist.el: Handle concurrent access to `savehist-file`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;commit bfeb755e03b5cab8f1f234b1a54afbcfd71f9eb2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Author: Stefan Monnier &amp;lt;monnier@iro.umontreal.ca&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date:   Sat Apr 12 22:43:20 2025 -0400&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;savehist.el: Handle concurrent access to `savehist-file`&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;* lisp/savehist.el (savehist--manage-timer): Minor simplification.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(savehist-coding-system): Use `utf-8-emacs-unix` so it works even if&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;some history entries contain chars that aren&apos;t in Unicode.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(savehist-loaded): Mark it obsolete.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(savehist--file-sync-modtime): New var to replace it.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(savehist--file-modtime, savehist--merge): New functions.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(savehist--reload): New function, extracted from `savehist-mode`.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Make it merge the old history and the newly loaded one.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Remember the time of sync in `savehist--file-sync-modtime`.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(savehist-mode): Use it.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(savehist-save): Use it as well, and set `savehist--file-sync-modtime`.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(savehist--last-autosave): New var.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(savehist-autosave): Use it to skip saves when not enough time has passed.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Better diagnostic capabilities in flymake 1.4.0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Awesome: &lt;code&gt;mode-line-collapse-minor-modes&lt;/code&gt;
Only applies to active minor modes (unlike minions.el, which shows all minor modes that are hidden). If any minor mode is hidden, then an ellipsis will be shown at the end of the mode line lighters section.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New ‘fancy value for &lt;code&gt;flymake-show-diagnostics-at-end-of-line&lt;/code&gt; (&lt;a href=&quot;https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=0262e3e158e35770f864d3131baf8f1793a20e58&quot;&gt;commit diff&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;Enhanced &apos;flymake-show-diagnostics-at-end-of-line&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;The new value &apos;fancy&apos; allowed for this variable will attempt to layout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;diagnostics below the affected line using unicode graphics to point to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;diagnostic locus.&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;Note that it works best (i) when the line-spacing is 0 (because of the vertical bars) and (ii) when there aren’t many diagnostics per line&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;buffer-match-p&lt;/code&gt; (and therefore &lt;code&gt;display-buffer-alist&lt;/code&gt;) now accepts the “this-command” condition, allowing per-command buffer display rules&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;* 343f0c44f35 2025-05-01 (75 minutes ago) Sean Whitton (upstream/master, upstream/HEAD)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;|   New this-command buffer display action alist entry&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;commit 343f0c44f35c41b93c66f67da0ddeceb98bbdb93&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Author: Sean Whitton &amp;lt;spwhitton@spwhitton.name&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date:   Thu May 1 20:55:56 2025 +0800&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;New this-command buffer display action alist entry&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;* lisp/subr.el (buffer-match-p): New this-command cons cell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;condition to implement new this-command buffer display action&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;alist entry (bug#78082).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;* lisp/window.el (display-buffer):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;* doc/lispref/windows.texi (Buffer Display Action Alists):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;* etc/NEWS: Document the new buffer display action alist entry.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New &lt;code&gt;native-comp-async-on-battery-power&lt;/code&gt; option&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add &lt;code&gt;next-error&lt;/code&gt; support for flymake diagnostics buffers&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;delete-trailing-whitespace-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;* 8a19c249f81 2025-05-05 (7 days ago) Stefan Monnier&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;|   simple.el (delete-trailing-whitespace-mode): New minor mode (bug#78264)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;commit 8a19c249f813e9f3830308e40f0205d7665f78a3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Author: Stefan Monnier &amp;lt;monnier@iro.umontreal.ca&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date:   Mon May 5 11:55:29 2025 -0400&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;simple.el (delete-trailing-whitespace-mode): New minor mode (bug#78264)&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;Partly motivated by bug#78097.&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;* lisp/simple.el (delete-trailing-whitespace-if-possible): New function.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(delete-trailing-whitespace-mode): New minor mode.&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;* lisp/editorconfig.el (editorconfig-trim-whitespaces-mode):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Change default to `delete-trailing-whitespace-mode`.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(editorconfig--get-trailing-ws): Simplify accordingly.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(editorconfig--add-hook-safe-p): Delete function.  Don&apos;t touch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;`safe-local-eval-function` any more.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New &lt;code&gt;vc-async-checkin&lt;/code&gt; for async Git and Mercurial vc checkin (e.g., committing)&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;* 8e02537d0be 2025-04-05 (5 weeks ago) Sean Whitton&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;|   New vc-async-checkin user option&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;commit 8e02537d0be3cfdeaaf7764e2ef2db8b66de542a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Author: Sean Whitton &amp;lt;spwhitton@spwhitton.name&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date:   Sat Apr 5 10:58:35 2025 +0800&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;New vc-async-checkin user option&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;* lisp/vc/vc.el (vc-async-checkin): New option.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(vc-checkin): Don&apos;t use with-vc-properties on or display&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;messages around asynchronous checkins.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;* lisp/vc/vc-git.el (vc-git-checkin):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;* lisp/vc/vc-hg.el (vc-hg-checkin, vc-hg-checkin-patch): Perform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;an async checkin operation when vc-async-checkin is non-nil.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;* doc/emacs/vc1-xtra.texi (General VC Options):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;* etc/NEWS: Document the new option.&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;* lisp/vc/vc-dispatcher.el (vc-wait-for-process-before-save):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;New function.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(vc-set-async-update): If the current buffer visits a file, call&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;vc-refresh-state.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;* lisp/vc/vc-hg.el (vc-wait-for-process-before-save): Autoload.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(vc-hg--async-command, vc-hg--async-buffer, vc-hg--command-1):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;New utilities, partially factored out of vc-hg-command.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(vc-hg-merge-branch): Use vc-hg--async-command, thereby newly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;respecting vc-hg-global-switches.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Prettify and improve hideshow: &lt;code&gt;hs-display-lines-hidden&lt;/code&gt; and “Buttonize the ellipsis and optionally display in the ellipsis the total number of hidden lines.”&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New &lt;code&gt;log-edit-hook&lt;/code&gt; which can be combined nicely with new &lt;code&gt;log-edit-show-diff&lt;/code&gt; to automatically display diff of changes to commit. From b9886bb2069:&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;New &apos;log-edit-hook&apos; option to display diff of changes to commit.&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;You can customize &apos;log-edit-hook&apos; to include its new&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&apos;log-edit-maybe-show-diff&apos; option to enable displaying a diff of the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;changes to be committed in a window.  This is like the &apos;C-c C-d&apos; command&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;in Log Edit mode buffers, except that it does not select the *vc-diff*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;buffer&apos;s window, and so works well when added to &apos;log-edit-hook&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;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=f9b311464db2e1cc34faaf2c86a9c46216337013&quot;&gt;New user option vc-dir-hide-up-to-date-on-revert - emacs.git - Emacs source repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=12397e3eb00c052455f03dc024e9335834f0c6ef&quot;&gt;Add option for not highlight parens inside comments or strings - emacs.git - Emacs source repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New &lt;code&gt;crm-prompt&lt;/code&gt; (patch contributed by vertico author)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;bec823b107e: New user option: vc-allow-async-diff&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;60fbeda7716 Support strings for electric pairs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=af78b4d333e81a544ebf10d57067cca8c2fc732f&quot;&gt;VC: New incoming &amp;amp; outgoing diff commands (bug#62940) - emacs.git - Emacs source repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;f746762e74a New command &lt;code&gt;mode-line-invisible-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;&lt;/span&gt;&lt;span&gt;* f746762e74a 2025-06-23 (3 weeks ago) Elías Gabriel Pérez&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;|   New command &apos;mode-line-invisible-mode&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;commit f746762e74adeac8beaa73abcf20ee5e74298597&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Author: Elías Gabriel Pérez &amp;lt;eg642616@gmail.com&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date:   Mon Jun 23 12:50:28 2025 -0600&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;New command &apos;mode-line-invisible-mode&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;&lt;/span&gt;&lt;span&gt;This new command allows hide the mode line in the 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;&lt;/span&gt;&lt;span&gt;buffer.  (Bug#78881)&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;* doc/emacs/display.texi (Optional Mode Line): Document feature.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* etc/NEWS: Announce changes.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* lisp/simple.el (mode-line-invisible--buf-state): New 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;local variable.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(mode-line-invisible-mode): New minor mode.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;9d750c7e804 New global minor mode vc-auto-revert-mode&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;&lt;/span&gt;&lt;span&gt;* 9d750c7e804 2025-07-13 (31 minutes ago) Sean Whitton (upstream/master, upstream/HEAD)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;|   New global minor mode vc-auto-revert-mode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;commit 9d750c7e8041437758c919f6088d6f3686847812&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Author: Sean Whitton &amp;lt;spwhitton@spwhitton.name&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date:   Sun Jul 13 12:50:22 2025 +0100&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;New global minor mode vc-auto-revert-mode&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;* lisp/vc/vc-hooks.el (auto-revert-mode): Declare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(vc-auto-revert-mode): New global minor 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;(vc-turn-on-auto-revert-mode-for-tracked-files): New 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;* lisp/vc/vc-dispatcher.el (auto-revert-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;(auto-revert-buffers): Declare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(vc-resynch-window): Don&apos;t call vc-revert-buffer-internal when&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;auto-revert-mode will revert the buffer.  Call&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;auto-revert-buffers to ensure that this reversion happens in 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;&lt;/span&gt;&lt;span&gt;timely manner.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* lisp/vc/vc.el (vc-register): Apply vc-auto-revert-mode 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;&lt;/span&gt;&lt;span&gt;buffers visiting newly registered files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-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;Improve the generated docstring.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* doc/emacs/vc1-xtra.texi (VC Auto-Reverting):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* etc/NEWS: Document the new minor mode.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A less computing-taxing solution to &lt;code&gt;global-auto-revert-mode&lt;/code&gt; since it is on-demand (after VC changes).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=09e205fe60f074e143298e306431cb62b60a890c&quot;&gt;Bind vc-rename-file to C-x v R - emacs.git - Emacs source repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=50ffb29d0bbb92a7c6569c83d2e3e4868c4e867b&quot;&gt;VC: New support for other working trees - emacs.git - Emacs source repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit 50ffb29d0bb 2025-07-25 Sean Whitton: VC: New support for other working trees&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit cd31c3cb423 2025-06-16 James Thomas: Add ‘other-window-backward’ for a default binding (bug#78803)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit 6b2856f9cab 2025-07-28 Paul Nelson: Allow numbered buffer selection for project-shell&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit 997461f48497e67ca4913ad18ae7d6d3562459d7 whitespace-mode: New style to prettify page delimiters characters.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit 4d90bdb385a23b26ddecae04b92e5557be172d27 Add support for updating &lt;strong&gt;Completions&lt;/strong&gt; as you type&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=29e673a77b148f0c215af161342c123ba30e509c&quot;&gt;New commands for outgoing diffs including uncommitted changes - emacs.git - Emacs source repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit 2cc525467bcf3ec5c3ba437fc8291a236ee138bc: New mode ‘minibuffer-nonselected-mode’&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit a760f1fe6e10f91c9600595ac57a1ff53b006343: (register-preview-info): sort registers in preview buffer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;All the new hideshow features&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=11b68c6223d154b4c85e8feec63581dcf7c76a3e&quot;&gt;New commands to rewind decentralized VCS branches - emacs.git - Emacs source repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=17f9a6355d6d86058b0100f08f3ff9d6e0844bfd&quot;&gt;Expand on showing warnings on first daemon frame.&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=75c09b03ed5bd06dd0afd654570236b409341897&quot;&gt;Default split-window-preferred-direction to ‘longest’&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit ab8d3624c414ebf8c4df7dd5385b8759eb477bf1
Do eager display of &lt;strong&gt;Completions&lt;/strong&gt; while idle&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit 11b68c6223d154b4c85e8feec63581dcf7c76a3e Sean Whitton
New commands to rewind decentralized VCS branches&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit 2b1440946e20bcf910f03cd665f68a268c687192 Stéphane Marks
New optional recentf autosave timer (bug#80002)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit 7425e33287547b879c22c4f4ac1b7c78fcbdd6f9 Sean Whitton
New M-RET, M-p, M-n commands in Log View mode&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=881be95cddcab3cf37373678002c35334c177c97&quot;&gt;Allow reviewing packages before installaion - emacs.git - Emacs source repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=fcdd8678f97e98b2afc38f1e999559eff726972a&quot;&gt;Make diff-hunk-kill respect an active region - emacs.git - Emacs source repository&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=90d3fdaffcc9b13103d6a4fa0afa972ae214739c&quot;&gt;Allow using xref-find-references without visiting a tags table - emacs.git - Emacs source repository&lt;/a&gt;
Convenient; I had lines in my init.el that removed &lt;code&gt;etags--xref-backend&lt;/code&gt; from &lt;code&gt;xref-backend-functions&lt;/code&gt; for this purpose. I no longer need those lines.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;commit aa181cd35220242a23fe98932386facaba18c4c5: Rewrite flex completion with Gotoh algorithm
Author: João Távora &amp;lt;joaotavora@gmail.com&amp;gt;
Date:   Tue Feb 3 12:14:03 2026 +0000&lt;/p&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;We could always do this since &lt;code&gt;buffer-match-p&lt;/code&gt; accepts a predicate (in which we can check for the valueo of &lt;code&gt;this-command&lt;/code&gt;), but this way is more convenient and neat.&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>Thu, 01 Jan 1970 00:00:00 GMT</pubDate><category>Emacs</category></item><item><title>Org and LaTeX integration</title><link>https://kristofferbalintona.me/posts/Org-and-LaTeX-integration/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/Org-and-LaTeX-integration/</guid><description>&lt;h2&gt;My desired workflow &lt;a href=&quot;#my-desired-workflow&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Org-export is a means to convert org files into LaTeX files. The question this article explores is how I answer the following question: &lt;strong&gt;How can I write my university essays in org and export them directly into a LaTeX PDF file without any further adjustments?&lt;/strong&gt; This means the following:&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;Basic formatting&lt;/dt&gt;&lt;dd&gt;Elements such as line spacing, margins, font should be set automatically.&lt;/dd&gt;&lt;dt&gt;Citations&lt;/dt&gt;&lt;dd&gt;In-text citations and bibliographies should be formatted automatically.&lt;/dd&gt;&lt;dt&gt;Flexibility with styles&lt;/dt&gt;&lt;dd&gt;I should be able to switch between, e.g., MLA, APA, and Chicago Manual Style without any fuss.&lt;/dd&gt;&lt;dt&gt;Boilerplate text&lt;/dt&gt;&lt;dd&gt;I want to do all of the above with very little to no boilerplate text in my org files (e.g. I shouldn’t rely on many &lt;code&gt;#+LaTeX_header:&lt;/code&gt; lines).&lt;/dd&gt;&lt;/dl&gt;
&lt;p&gt;In short, I simply want to produce my final paper’s PDF by calling a single org-export command. Here, I visit the portions of my configuration where I make accomplish such a workflow.&lt;/p&gt;
&lt;p&gt;A note for STEM (Science, Technology, Engineering, and Mathematics) students: As a philosophy undergraduate, this article primarily centers on a subset of concerns STEM students would face in formatting their papers, since mathematics, tables, and other LaTeX features will be much more common. This is beyond my use case, but I hope that this article still has a use for those students. Additionally, there are many other resources available that cover similar use cases (link such sources later tk).&lt;/p&gt;
&lt;h2&gt;Basic Formatting: &lt;code&gt;org-latex-classes&lt;/code&gt; &lt;a href=&quot;#basic-formatting-org-latex-classes&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;Title pages: Creating an Org-export backend &lt;a href=&quot;#title-pages-creating-an-org-export-backend&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The most challenging hurdle is conveniently producing a formatted title page&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;The most convenient method would be setting &lt;code&gt;org-latex-title-command&lt;/code&gt;. With this, we can manually insert a formatted title page. However, this method is inflexible: different styles require different values for this variable.&lt;/p&gt;
&lt;p&gt;A nearby alternative would be redefining the default &lt;code&gt;\maketitle&lt;/code&gt; command that org already uses for every file. However, doing so would require additional &lt;code&gt;#+LaTeX_HEADER:&lt;/code&gt; text.&lt;/p&gt;
&lt;p&gt;Conveniently, we can leverage the already exist .sty file and redefine the &lt;code&gt;\maketitle&lt;/code&gt; command there, instead.&lt;/p&gt;
&lt;p&gt;The challenge, however, lies in how to get the requisite metadata from our org file. For instance, MLA requires four pieces of information in its title page:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Author name&lt;/li&gt;
&lt;li&gt;Professor’s name&lt;/li&gt;
&lt;li&gt;Course code and/or title&lt;/li&gt;
&lt;li&gt;Current date&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Items (1) and (4) can be done simply. However, (2) and (3) are contingent on the exported essay. We can try making use of built-in org options such as &lt;code&gt;#+AUTHOR:&lt;/code&gt; and &lt;code&gt;#+CREATOR:&lt;/code&gt;, but this alone cannot provide a robust solution. &lt;strong&gt;So, instead of trying to abuse existing options, I opt to create my own.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Take a look at the docstring for &lt;code&gt;org-export-define-backend&lt;/code&gt;:&lt;/p&gt;
 &lt;p&gt;Docstring for &lt;code&gt;org-export-define-backend&lt;/code&gt;&lt;/p&gt; &lt;div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;(org-export-define-backend BACKEND TRANSCODERS &amp;amp;rest BODY)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Define a new backend BACKEND.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;TRANSCODERS is an alist between object or element types and&lt;br /&gt;
functions handling them.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;These functions should return a string without any trailing&lt;br /&gt;
space, or nil.  They must accept three arguments: the object or&lt;br /&gt;
element itself, its contents or nil when it isn’t recursive and&lt;br /&gt;
the property list used as a communication channel.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Contents, when not nil, are stripped from any global indentation&lt;br /&gt;
(although the relative one is preserved).  They also always end&lt;br /&gt;
with a single newline character.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;If, for a given type, no function is found, that element or&lt;br /&gt;
object type will simply be ignored, along with any blank line or&lt;br /&gt;
white space at its end.  The same will happen if the function&lt;br /&gt;
returns the nil value.  If that function returns the empty&lt;br /&gt;
string, the type will be ignored, but the blank lines or white&lt;br /&gt;
spaces will be kept.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In addition to element and object types, one function can be&lt;br /&gt;
associated to the ‘template’ (or ‘inner-template’) symbol and&lt;br /&gt;
another one to the ‘plain-text’ symbol.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The former returns the final transcoded string, and can be used&lt;br /&gt;
to add a preamble and a postamble to document’s body.  It must&lt;br /&gt;
accept two arguments: the transcoded string and the property list&lt;br /&gt;
containing export options.  A function associated to ‘template’&lt;br /&gt;
will not be applied if export has option “body-only”.&lt;br /&gt;
A function associated to ‘inner-template’ is always applied.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The latter, when defined, is to be called on every text not&lt;br /&gt;
recognized as an element or an object.  It must accept two&lt;br /&gt;
arguments: the text string and the information channel.  It is an&lt;br /&gt;
appropriate place to protect special chars relative to the&lt;br /&gt;
backend.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;BODY can start with pre-defined keyword arguments.  The following&lt;br /&gt;
keywords are understood:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;  :filters-alist&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    Alist between filters and function, or list of functions,&lt;br /&gt;
    specific to the backend.  See org-export-filters-alist for&lt;br /&gt;
    a list of all allowed filters.  Filters defined here&lt;br /&gt;
    shouldn’t make a backend test, as it may prevent backends&lt;br /&gt;
    derived from this one to behave properly.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;  :menu-entry&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    Menu entry for the export dispatcher.  It should be a list&lt;br /&gt;
    like:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      (KEY DESCRIPTION-OR-ORDINAL ACTION-OR-MENU)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    where :&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      KEY is a free character selecting the backend.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      DESCRIPTION-OR-ORDINAL is either a string or a number.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      If it is a string, is will be used to name the backend in&lt;br /&gt;
      its menu entry.  If it is a number, the following menu will&lt;br /&gt;
      be displayed as a sub-menu of the backend with the same&lt;br /&gt;
      KEY.  Also, the number will be used to determine in which&lt;br /&gt;
      order such sub-menus will appear (lowest first).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      ACTION-OR-MENU is either a function or an alist.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      If it is an action, it will be called with four&lt;br /&gt;
      arguments (booleans): ASYNC, SUBTREEP, VISIBLE-ONLY and&lt;br /&gt;
      BODY-ONLY.  See org-export-as for further explanations on&lt;br /&gt;
      some of them.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      If it is an alist, associations should follow the&lt;br /&gt;
      pattern:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;        (KEY DESCRIPTION ACTION)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      where KEY, DESCRIPTION and ACTION are described above.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    Valid values include:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      (?m “My Special Backend” my-special-export-function)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      or&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;       (?l “Export to LaTeX”&lt;br /&gt;
           ((?p “As PDF file” org-latex-export-to-pdf)&lt;br /&gt;
            (?o “As PDF file and open”&lt;br /&gt;
                (lambda (a s v b)&lt;br /&gt;
                  (if a (org-latex-export-to-pdf t s v b)&lt;br /&gt;
                    (org-open-file&lt;br /&gt;
                     (org-latex-export-to-pdf nil s v b)))))))&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;      or the following, which will be added to the previous&lt;br /&gt;
      sub-menu,&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;       (?l 1&lt;br /&gt;
          ((?B “As TEX buffer (Beamer)” org-beamer-export-as-latex)&lt;br /&gt;
           (?P “As PDF file (Beamer)” org-beamer-export-to-pdf)))&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;  :options-alist&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    Alist between backend specific properties introduced in&lt;br /&gt;
    communication channel and how their value are acquired.  See&lt;br /&gt;
    org-export-options-alist for more information about&lt;br /&gt;
    structure of the values.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt; 
&lt;p&gt;You have a few options.&lt;/p&gt;
&lt;h3&gt;Customize the &lt;code&gt;org-export&lt;/code&gt; LaTeX backend &lt;a href=&quot;#customize-the-org-export-latex-backend&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;File properties&lt;/p&gt;
&lt;h4&gt;Backend &lt;a href=&quot;#backend&quot;&gt;  
§
&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;There is &lt;code&gt;org-export-define-backend&lt;/code&gt; and &lt;code&gt;org-export-define-derived-backend&lt;/code&gt;. Defining a backend…&lt;/p&gt;
&lt;p&gt;The latter is identical, only in that it inherits the definition of a parent backend. For instance, &lt;code&gt;beamer&lt;/code&gt; is a derived backend from latex. I won’t go in depth into this because you can read the docstrings for them.&lt;/p&gt;
&lt;h4&gt;Template &lt;a href=&quot;#template&quot;&gt;  
§
&lt;/a&gt;&lt;/h4&gt;
&lt;h3&gt;Final title command &lt;a href=&quot;#final-title-command&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&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;renewcommand&lt;/span&gt;&lt;span&gt;{\&lt;/span&gt;&lt;span&gt;maketitle&lt;/span&gt;&lt;span&gt;}{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;begin&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;flushleft&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;theauthor&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;professor&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;course&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;thedate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;flushleft&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;centerline&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;\thetitle&lt;/span&gt;&lt;span&gt;}&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;/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;Citations and bibliographies: Org-cite &lt;a href=&quot;#citations-and-bibliographies-org-cite&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nowadays, with the comparatively new &lt;code&gt;org-cite&lt;/code&gt;, citations and bibliography is the easiest step of this process. Readers should refer to &lt;a href=&quot;https://kristofferbalintona.me/articles/Citations-in-org-mode-Org-cite-and-Citar/&quot;&gt;Citations in org-mode: Org-cite and Citar&lt;/a&gt; for more information, but once &lt;code&gt;org-cite&lt;/code&gt; is set up, potentially with &lt;code&gt;citar&lt;/code&gt;, org-export will seamlessly export citations and bibliographies.&lt;/p&gt;
&lt;p&gt;For reference, the following is my &lt;code&gt;org-cite&lt;/code&gt; configuration (this doesn’t include &lt;code&gt;citar&lt;/code&gt;):&lt;/p&gt;
 &lt;p&gt;&lt;code&gt;org-cite&lt;/code&gt; configuration&lt;/p&gt; &lt;div&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; oc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:elpaca&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;                           &lt;/span&gt;&lt;span&gt;; I use the &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;elpaca&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; package manager&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;org-mode-map&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;remap citar-insert-citation&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;org-cite-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;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-global-bibliography kb/bib-files&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-csl-locales-dir &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file-name-concat user-emacs-directory &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;locales/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-csl-styles-dir &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;expand-file-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;~/Zotero/styles/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-export-processors&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;md &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;csl &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;chicago-fullnote-bibliography.csl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;; Footnote reliant&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;latex biblatex&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;                                   &lt;/span&gt;&lt;span&gt;; For humanities&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;odt &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;csl &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;chicago-fullnote-bibliography.csl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;; Footnote reliant&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;docx &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;csl &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;chicago-fullnote-bibliography.csl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Footnote reliant&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;csl &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;modern-language-association.csl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;; Fallback&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom-face&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 citation link faces look closer to as they were for &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-ref&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:foreground&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;DarkSeaGreen4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-key &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:foreground&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;forest green&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:slant&lt;/span&gt;&lt;span&gt; italic&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;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 2023-07-14: Require all &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;oc-*&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; packages so that I don&apos;t run into 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;;; issue where the package associated with a style (e.g. &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;oc-biblatex&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; for 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;;; biblatex style) in &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-cite-export-processors&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; is used prior to 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;;; loading&lt;/span&gt;&lt;/div&gt;&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;oc-natbib)&lt;/span&gt;&lt;/div&gt;&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;oc-csl)&lt;/span&gt;&lt;/div&gt;&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;oc-basic)&lt;/span&gt;&lt;/div&gt;&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;oc-bibtex)&lt;/span&gt;&lt;/div&gt;&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;oc-biblatex))&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;h3&gt;One way to specify citation style &lt;a href=&quot;#one-way-to-specify-citation-style&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The value of &lt;code&gt;org-cite-export-processors&lt;/code&gt; is most notable. The configuration above instructs org-export to use the &lt;code&gt;biblatex&lt;/code&gt; export processor to process citations and bibliographies when exporting to LaTeX. This can be overridden, for example, at the file-level with the &lt;code&gt;#CITE_EXPORT&lt;/code&gt; keyword. See the docstring for &lt;code&gt;org-cite-export-processors&lt;/code&gt; for more information about valid values.&lt;/p&gt;
&lt;p&gt;Notably, for LaTeX exports, &lt;strong&gt;we can specify the style (citation style and bibliography style) of citations in this way.&lt;/strong&gt; For instance, taking a look at the commentary for the &lt;code&gt;oc-biblatex&lt;/code&gt; library, we read:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;;; In any case, the library will override style-related options with those&lt;br /&gt;
;; specified with the citation processor, in `org-cite-export-processors’ or&lt;br /&gt;
;; “cite_export” keyword.  If you need to use different styles for bibliography&lt;br /&gt;
;; and citations, you can separate them with “bibstyle/citestyle” syntax.  E.g.,&lt;br /&gt;
;;&lt;br /&gt;
;;   #+cite_export: biblatex authortitle/authortitle-ibid&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This means that, for instance,&lt;/p&gt;
&lt;div&gt;&lt;p&gt;&lt;code&gt;#+cite_export: biblatex mla-new/authoryear&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;results in &lt;code&gt;&quot;bibstyle=mla-new,citestyle=authoryear&quot;&lt;/code&gt; being passed as an option to biblatex. Or we can set this in &lt;code&gt;org-cite-export-processors&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;setq org-cite-export-processors &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;latex &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;biblatex &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;mla-new/authoryear&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Valid styles include those provided by the built-in with biblatex, found in section 3.3.2 of the biblatex CTAN manual (link tk), and those provided by numerous other packages.&lt;/p&gt;
&lt;h3&gt;My method to specify citation style &lt;a href=&quot;#my-method-to-specify-citation-style&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Though the above works, since I’m already using a .sty file to set all the options for the relevant LaTeX packages, I also do so there. For instance, with the MLA citation style:&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;% * Bibliographic source management&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;% Declares MLA internal cite and bibliography 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;RequirePackage&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;style=mla-new&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;{biblatex}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;addbibresource&lt;/span&gt;&lt;span&gt;{../../master-lib.bib}&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;In this way, I avoid adding a line in my org files to specify the citation style:&lt;/p&gt;
&lt;div&gt;&lt;p&gt;&lt;code&gt;#+cite_export: biblatex mla-new&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
&lt;h2&gt;Final result and screenshots &lt;a href=&quot;#final-result-and-screenshots&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The following org file produces this:&lt;/p&gt;
&lt;p&gt;which, compiled into a PDF, looks like this:&lt;/p&gt;
&lt;h2&gt;Extras &lt;a href=&quot;#extras&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;Section numbers &lt;a href=&quot;#section-numbers&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&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;setq org-export-with-section-numbers &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;Hyperref &lt;a href=&quot;#hyperref&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&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;setq org-latex-hyperref-template&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\\hypersetup{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pdfauthor={%a},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pdftitle={%t},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pdfkeywords={%k},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pdfsubject={%d},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pdfcreator={%c},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pdflang={%L}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;colorlinks={true},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hidelinks={true}}&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/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;Table of contents &lt;a href=&quot;#table-of-contents&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&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;setq org-latex-toc-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;&quot;&lt;/span&gt;&lt;span&gt;\\renewcommand{\\contentsname}{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\\begin{center}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Table of Contents&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\\end{center}&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;\\tableofcontents&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;\\newpage&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Org links &lt;a href=&quot;#org-links&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Custom &lt;code&gt;org-mode&lt;/code&gt; links (&lt;code&gt;org-link-set-parameters&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Full configuration &lt;a href=&quot;#full-configuration&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;(Make a note about that there are other stuff in the configuration not referenced or described tk.)&lt;/p&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I use the term “title page” to reference what a stylesheet specifies as the format of a title, even if it does not create an entirely new page, e.g., MLA (rephrase tk).&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>Thu, 01 Jan 1970 00:00:00 GMT</pubDate><category>Emacs</category></item><item><title>The state of grammar checking in Emacs</title><link>https://kristofferbalintona.me/posts/The-state-of-grammar-checking-in-Emacs/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/The-state-of-grammar-checking-in-Emacs/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Old
&lt;ul&gt;
&lt;li&gt;artbollocks-mode&lt;/li&gt;
&lt;li&gt;writegood-mode&lt;/li&gt;
&lt;li&gt;languagetool
&lt;ul&gt;
&lt;li&gt;flymake-languagetool&lt;/li&gt;
&lt;li&gt;flycheck-languagetool&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;proselint via…
&lt;ul&gt;
&lt;li&gt;flymake-proselint&lt;/li&gt;
&lt;li&gt;flymake-collection&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Modern
&lt;ul&gt;
&lt;li&gt;vale&lt;/li&gt;
&lt;li&gt;harper-ls
&lt;ul&gt;
&lt;li&gt;Mention &lt;a href=&quot;https://github.com/Automattic/harper/discussions/150&quot;&gt;emacs configuration? · Automattic/harper · Discussion #150 · GitHub&lt;/a&gt; for hints/leads on the progress of org-mode support&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate><category>Emacs</category></item><item><title>There are lots of options for sidenotes</title><link>https://kristofferbalintona.me/posts/There-are-lots-of-options-for-sidenotes/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/There-are-lots-of-options-for-sidenotes/</guid><description>&lt;p&gt;&lt;a href=&quot;https://www.gingerbill.org/article/2026/04/29/blessed-syntax-and-ergonomics/&quot;&gt;Blessed Syntax and Ergonomics - gingerBill&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://edwardtufte.github.io/tufte-css/&quot;&gt;Tufte CSS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gwern.net/sidenote&quot;&gt;Sidenotes In Web Design · Gwern.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.keith.is/post/tufte-sidenotes-in-astro&quot;&gt;Tufte-Style Sidenotes in Astro - keith.is&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.kooslooijesteijn.net/blog/sidenotes-without-js&quot;&gt;Making semantic sidenotes without JavaScript | Koos Looijesteijn&lt;/a&gt;
&lt;a href=&quot;https://github.com/kslstn/sidenotes&quot;&gt;GitHub - kslstn/sidenotes: Semantic sidenotes for the web without JavaScript · GitHub&lt;/a&gt;
(CSS + HTML example)
&lt;a href=&quot;https://denisdefreyne.com/notes/pl7mf-f7mfk-frzxr/&quot;&gt;My web site: sidenotes implementation - Denis Defreyne&lt;/a&gt;
(for improvement to avoid overlaps and finicky absolute positioning: &lt;code&gt;float: right&lt;/code&gt; and &lt;code&gt;clear: both&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.julianburr.de/til/cool-css-anchor-positioning-use-case-margin-notes&quot;&gt;Today I learned: Cool CSS anchor positioning use case: margin notes — Julian Burr&lt;/a&gt;
CSS anchoring live example&lt;/p&gt;</description><pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate></item><item><title>What I learned starting web dev with Astro</title><link>https://kristofferbalintona.me/posts/What-I-learned-starting-web-dev-with-Astro/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/What-I-learned-starting-web-dev-with-Astro/</guid><description>&lt;h2&gt;HTML best practices &lt;a href=&quot;#html-best-practices&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;see [BROKEN LINK: 20260406T155358.633044]&lt;/p&gt;
&lt;p&gt;This is a sentence.&lt;/p&gt;
&lt;h2&gt;Components are awesome &lt;a href=&quot;#components-are-awesome&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;scoped CSS (selectors, see [BROKEN LINK: h:20260421T031520.230702])&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;CSS &lt;a href=&quot;#css&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;a confusing bit: selectors are scoped by styling in the rendered page is not scoped by component&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;MD vs MDX vs Markdoc &lt;a href=&quot;#md-vs-mdx-vs-markdoc&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://markdoc.dev/docs/faq&quot;&gt;Markdoc | Frequently asked questions&lt;/a&gt;
&lt;a href=&quot;https://markdoc.dev/docs/syntax&quot;&gt;Markdoc | The Markdoc syntax&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate></item><item><title>An Amazing Marvin Starter Pack</title><link>https://kristofferbalintona.me/posts/202106242237/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202106242237/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#tldr&quot;&gt;TL;DR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#core-concepts&quot;&gt;Core concepts&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#the-master-list&quot;&gt;The Master List&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-main-view&quot;&gt;The Main View&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-good-is-amazing-marvins-system&quot;&gt;What good is Amazing Marvin’s system?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-beauty-of-strategies&quot;&gt;The beauty of &lt;strong&gt;Strategies&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#a-list-of-must-look-at-strategies&quot;&gt;A list of must-look-at Strategies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#authors-note&quot;&gt;Author’s Note&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;TL;DR &lt;a href=&quot;#tldr&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Read this if you are either&lt;/strong&gt; 1) interested in and want to try out Amazing Marvin, 2) just started using Amazing Marvin but feel overwhelmed, or 3) don’t know what Amazing Marvin is but want to read about a few of its features.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This post goes over&lt;/strong&gt; the peculiarities of Amazing Marvin — namely the &lt;em&gt;Master List&lt;/em&gt;, &lt;em&gt;Main View&lt;/em&gt;, and &lt;em&gt;Strategies&lt;/em&gt;. Understanding these concepts is the first step to leveraging the strengths of Amazing Marvin to create your own workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I’ve also added&lt;/strong&gt; a list of the first Strategies a new Mavinaut (users of Amazing Marvin) should check out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;By the end&lt;/strong&gt; you’ll have a grasp of Amazing Marvin’s foundational components and ready to start building your own workflow.&lt;/p&gt;
&lt;h2&gt;Core concepts &lt;a href=&quot;#core-concepts&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;The Master List &lt;a href=&quot;#the-master-list&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-05-29_02-08-02_screenshot.B07NQ5VC_19pptk.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1318&quot; height=&quot;652&quot; /&gt;
&lt;p&gt;You open Marvin. You’re greeted with a friendly UI — you notice buttons and a sidebar. Press “M” and you’ll be taken to the &lt;strong&gt;Master List&lt;/strong&gt;. This is the place where you can see &lt;em&gt;all&lt;/em&gt; your tasks. Think of it as the closest thing to a generic todo list application, like Microsoft Todo. You can view your &lt;em&gt;tasks&lt;/em&gt; and &lt;em&gt;projects&lt;/em&gt; (which can be further separated into &lt;em&gt;categories&lt;/em&gt;) in either a column or list view (try it out!).&lt;/p&gt;
&lt;p&gt;You may also notice a sidebar on the left which also lists tasks and projects — this can be toggled using “X”. This will be handy in the future, but isn’t necessary to worry about for now.&lt;/p&gt;
&lt;p&gt;In the Master List, I sometimes add tasks in bulk, which will often be when I want to flesh out tasks for a project.
Though you can easily access all your projects and tasks using the Master List, you will likely not spend much time here.&lt;/p&gt;
&lt;h3&gt;The Main View &lt;a href=&quot;#the-main-view&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-05-29_02-05-26_screenshot.DzifiZXn_1A1qjb.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1313&quot; height=&quot;682&quot; /&gt;
&lt;p&gt;The place where you will most interact with your todos and get things done is the &lt;strong&gt;Main View&lt;/strong&gt;. The Main View is where &lt;em&gt;you&lt;/em&gt; decide which tasks are shown, when they are shown, and how they are shown to you by taking advantage of Amazing Marvin’s customizability.&lt;/p&gt;
&lt;p&gt;The Main View is centralized around being able to show you what you want to do today. This doesn’t, however, necessarily mean that Marvin is limited to showing you tasks which are due today. Amazing Marvin is more powerful than that and has the flexibility to accommodate so many workflows.&lt;/p&gt;
&lt;h2&gt;What good is Amazing Marvin’s system? &lt;a href=&quot;#what-good-is-amazing-marvins-system&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Those are the two most important pieces to wrap your head around using Amazing Marvin. But why depart from the typical todo list format?&lt;/p&gt;
&lt;p&gt;The strength of this system is that you have access to all your tasks in your Master List but don’t have to look through these long task lists — even sorted or filtered, they are overwhelming and dissuasive to productivity — in order to get things done. The Main View creates a divide between working on your tasks and viewing them. This is a surprisingly powerful feature of Marvin, which removes much of the difficulty of trying to juggle tasks within folders or across tags. You choose when to see the subset of tasks you want to work on, and go to the Master List when you choose to see all of your tasks.&lt;/p&gt;
&lt;h2&gt;The beauty of &lt;strong&gt;Strategies&lt;/strong&gt; &lt;a href=&quot;#the-beauty-of-strategies&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On top of that, Marvin is still feature-rich yet manages to limit that complexity for an easier learning curve. How Marvin accomplishes this is through its clever &lt;strong&gt;Strategies&lt;/strong&gt; system. Strategies allow you to only enable the features which are useful to you. They can be thought of as &lt;em&gt;togglable features&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Strategies are one of the aspects that make Amazing Marvin shine. It gives you the flexibility to implement as many strategies as you want (again, think of them as features) into your workflow or be as minimalist as possible and use only a select few. In the end, Amazing Marvin &lt;em&gt;can be customized to how you think and work&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This is different from other task management apps, which follows the “you-get-what-you-see model.” In other task management apps, users have to use a space in which every feature, whether useful to them or not, coexists. This is especially the case with bloated or other feature-rich task management apps. In this way, Marvin can be feature-rich but much less overwhelming than other task management solutions.&lt;/p&gt;
&lt;p&gt;Amazing Marvin goes a step further by providing brief yet useful descriptions for every Strategy on how to use it. Additionally, there is often an accompanying short video (made by Christina, one of the founders, herself) demonstrating what the Strategy looks like in action. Finally, most strategies have a list of settings which allow you to further fine tune your experience.&lt;/p&gt;
&lt;h2&gt;A list of must-look-at Strategies &lt;a href=&quot;#a-list-of-must-look-at-strategies&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To conclude, I’ve included several lists of Strategies that should be taken a look at as soon as possible as a new user. In addition to checking these Strategies out, &lt;strong&gt;Workflow Templates&lt;/strong&gt; are curated sets of settings and strategies which have been pre-made for you. They range from small snippets to full workflows. I’d &lt;em&gt;highly recommend&lt;/em&gt; looking through these templates as a starting point for your workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Standalone, non-intrusive, must-use Strategies&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Subtasks&lt;/li&gt;
&lt;li&gt;Mobile sidebar&lt;/li&gt;
&lt;li&gt;Check off Behavior&lt;/li&gt;
&lt;li&gt;Right-click menu&lt;/li&gt;
&lt;li&gt;Hover button actions&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Other common Strategies which are easy to set up&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Quick add&lt;/li&gt;
&lt;li&gt;Task notes&lt;/li&gt;
&lt;li&gt;Category context&lt;/li&gt;
&lt;li&gt;Skinny sidebar&lt;/li&gt;
&lt;li&gt;Sidebar&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Strategies you will likely be looking for if you’ve used other task management applications&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Labels (tags)&lt;/li&gt;
&lt;li&gt;Task reminders&lt;/li&gt;
&lt;li&gt;Duration estimates&lt;/li&gt;
&lt;li&gt;Full-calendar functionality
&lt;ol&gt;
&lt;li&gt;Calendar&lt;/li&gt;
&lt;li&gt;Agenda&lt;/li&gt;
&lt;li&gt;All-day items&lt;/li&gt;
&lt;li&gt;Events&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Smart lists (?)&lt;/li&gt;
&lt;li&gt;Priority levels&lt;/li&gt;
&lt;li&gt;Sequential projects&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Useful Strategies which are standalone, easy to understand, yet aren’t found in almost any other task management app (Experiment with them!)&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Work session scheduler&lt;/li&gt;
&lt;li&gt;Eat that Frog&lt;/li&gt;
&lt;li&gt;Procrastination count&lt;/li&gt;
&lt;li&gt;Backburner&lt;/li&gt;
&lt;li&gt;Time tracking&lt;/li&gt;
&lt;li&gt;Missing Next Step warning&lt;/li&gt;
&lt;li&gt;Timers&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Author’s Note &lt;a href=&quot;#authors-note&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have not been told to write about Amazing Marvin. I receive no compensation from Amazing Marvin for this post. I only want to share this amazing piece of software with others.&lt;/p&gt;</description><pubDate>Thu, 24 Jun 2021 22:37:00 GMT</pubDate><category>Amazing Marvin</category></item><item><title>On Zettelkasten purism and the misdirection of backlinks</title><link>https://kristofferbalintona.me/posts/202107272237/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202107272237/</guid><description>&lt;h2&gt;TL;DR &lt;a href=&quot;#tldr&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Don’t be distracted by the allure of backlinks; a good knowledge management practice provides more value. Luhmann’s Zettelkasten isn’t law; your needs should instruct the directives you follow.&lt;/p&gt;
&lt;h2&gt;I disagree with ‘backlink exceptionalism’ &lt;a href=&quot;#i-disagree-with-backlink-exceptionalism&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The commonly understood novelty of the Zettelkasten tool is its non-hierarchical organization composed of hyperlinks. Backlinks generate interconnected networks of thought which mirror the associative nature of our brains. It is a departure from traditional hierarchical note-taking practices. Looking at the outlier of Niklas Luhmann, we can be quick to conclude that the backlink is the cause of Zettelkasten’s efficacy. The novelty of backlinks has made the concept synonymous with ‘Zettelkasten.’ However, there are many successful personal knowledge management systems, and it would be unwise to study only a sample size of one, decontextualizing Luhmann’s methodology from other successful knowledge management systems.&lt;/p&gt;
&lt;p&gt;The spotlight is regularly on the serendipity and surprise from backlinks from an emergent network of interconnected notes. However, this is too narrow of a spotlight; there are many other changes in note-taking and production. For instance, the time spent writing — and thus thinking — is increased. There is a heightened intentionality from creating links, rearranging ideas, and concretely classifying new information. Deliberate writing and thinking has benefits to production which are too scarcely acknowledged. That is what I wish to address here.&lt;/p&gt;
&lt;h2&gt;The ‘practice’ is most essential &lt;a href=&quot;#the-practice-is-most-essential&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;At the broadest level, what makes a Zettelkasten effective? Firstly, a faithful Zettelkasten should help produce written pieces. Secondly, Zettelkasten’s note-taking process facilitates idea mastery and emergence. The latter induces the former because the artifacts of that note-taking process are directly used in future works; much of the thinking is often done before the first draft is even begun. Take away those artifacts, and you’re left with something awfully similar to a conventional note-taking system. Thus, we arrive at idea mastery as the core vehicle for Zettelkasten’s success.&lt;/p&gt;
&lt;p&gt;I ask: from what does most of your mastery over new material arise? How does Zettelkasten facilitate idea mastery and emergence? Most would turn to the feature of backlinks because of its perceived novelty. However, I counter the common sentiment by claiming that idea mastery mostly arises from the &lt;em&gt;practice&lt;/em&gt; associated with maintaining a Zettelkasten. I argue Zettelkasten’s essence is to &lt;strong&gt;repeatedly revisit, recall, and engage with that which you have learned, iterating upon the writing artifacts of that process — your crystallized thoughts — over time&lt;/strong&gt;. Engaging with what you learn is the crux to a successful knowledge management system. The contribution of backlinks is too commonly conflated with the contribution of that routine. Backlinks are a complementary feature.&lt;/p&gt;
&lt;h3&gt;An aside: but what about backlinks?! &lt;a href=&quot;#an-aside-but-what-about-backlinks&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I will address a potential concern. Namely, to underappreciate the power of backlinks is to discard the essential power of associative thinking. However, we must remember that we naturally think associatively irrespective of what system we use. Luhmann’s Zettelkasten is just the most formalized system (I know of) for this process. We need not be interdisciplinary to Luhmann’s degree; serendipitous discovery is not necessary for interdisciplinary work. At the very least, we should settle for a ‘good enough’ system and be productive, rather than working to find the perfect system. Surely, devoting all your energy to creating the perfect system is putting the cart before the horse — good thinking and meaningful work take priority.&lt;/p&gt;
&lt;h2&gt;Luhmann isn’t the only success story &lt;a href=&quot;#luhmann-isnt-the-only-success-story&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I observe similar principles intuitively arrived at by other incredibly productive and learned thinkers. It is common for scholars to reread books, have discourse with other intellectuals, obsess over ideas in gaps in their day, and, perhaps most importantly, write and talk about it. For instance, many authors and writers espouse the idea of a Commonplace Book, traditionally a journal which contains quotable passages, personal comments, and literary excerpts. Ryan Holiday, a prolific reader and author who has published over ten books in just a decade, is famously known for his own incarnation of the Commonplace Book known as The Notecard System. His system was directly adopted from one of his mentors, another bestselling author by the name of Robert Greene. I currently attend university and more than one of my professors have intuitively created their own knowledge management systems and found success in their academic work. One of those professors recommended I read &lt;em&gt;How to Write a Thesis&lt;/em&gt; by Umberto Eco, which I found to be a surprisingly close analog to Luhmann’s Zettelkasten. The Zettelkasten community is also very familiar with Andy Matuschak’s Evergreen Notes, which is inspired by, but significantly departs from, Luhmann’s Zettelkasten. Also in this list are many notable figures in history including George S. Patton and Ronald Reagan. In short, Zettelkasten isn’t the only successful knowledge management system.&lt;/p&gt;
&lt;p&gt;All of these systems have found incredible success, yet are not Zettelkasten; their particulars drastically differ. How? I have found that the details of these systems — when a note is made, when it is returned to, how sources are managed, et cetera — differ widely but are united by the common directive to &lt;strong&gt;continually linger with the material&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;So what do you do now? &lt;a href=&quot;#so-what-do-you-do-now&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Methodologies &lt;em&gt;should not be dogmatic&lt;/em&gt;. The Notecard System, Evergreen notes, the Commonplace Book… Luhman’s Zettelkasten is just one incarnation of a personal knowledge management system out of many. The very fact that there are so many methodologies demonstrates that none are a panacea. Purism is counterproductive — it confines expression to Zettelkasten-esque formulations. Treat them as resources and conclude your own decisions. Eclectism is a sign of thoughtfulness and intentionality.&lt;/p&gt;
&lt;p&gt;Furthermore, Luhmann likely did not begin with an awareness of the exact rules and principles his Zettelkasten would ultimately have. Rather, he began with an initial premise and built his Zettelkasten — and its rules — around what he needed: a means to think interdisciplinarily and broadly, enough to form a ‘Theory of Society.’ Thinking interdisciplinarily and broadly are attractive and most would no doubt value those benefits in a Zettelkasten system. &lt;em&gt;But should that be the North Star for your Zettelkasten&lt;/em&gt;? Is that your ultimate goal in knowledge management? You must appreciate the difference between your goal and Luhmann’s. If they do not align, your system will not serve you as well as it should. Worse, if you do not have a clearly defined and articulated purpose, then your Zettelkasten will become a hodgepodge of things gathered elsewhere, vying for your attention to use it this way and that. It will be undirected and reliant on luck to stay afloat.&lt;/p&gt;
&lt;p&gt;Indeed, new Zettelkasten users often get swept away by the semantics of “What does it mean for a note to be atomic?” or “What should be in a literature note instead of a Zettel?” or “When should I make a note?”. On the other hand, most longstanding users of Zettelkasten intuitively arrive at the same conclusion as me: &lt;strong&gt;consider what others have done, and take what is appropriate for you&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;How has my own advice affected me? &lt;a href=&quot;#how-has-my-own-advice-affected-me&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Once I disabused myself from the notion that I should know exactly what Luhmann’s principles were in order to follow his rules to a T, everything fell into place. Instead of thinking that a malfunction or failure of my system reflected my own lack of understanding, I started to adopt a problem-solving mentality, treating other implementations as resources and making my own judgments. For the first time my Zettelkasten started truly being effective.&lt;/p&gt;</description><pubDate>Tue, 27 Jul 2021 22:37:00 GMT</pubDate><category>Zettelkasten</category></item><item><title>Windows</title><link>https://kristofferbalintona.me/posts/202108110230/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202108110230/</guid><description>&lt;h2&gt;Beauty &lt;a href=&quot;#beauty&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rarely do moments of clarity arrive: ephemeral gifts recognized only a beat too late. As an exercise in free association, my memory draws, once again, to that thunderstorm.&lt;/p&gt;
&lt;p&gt;It materialised slowly yet caused me little alarm, not unlike my relationship with my dear window. I think its gradual pace &lt;em&gt;is&lt;/em&gt; the reason why I didn’t notice it. But what I did notice was a feeling. An intangible awareness. The winds shivered ever so slightly, a seemingly imperceptible turbulence in the air.&lt;/p&gt;
&lt;p&gt;I find this feeling akin to a fun-fact I read years ago. Buried in a forum thread is a comment that reads something along these lines; I work as a paramedic. I have a lot of experience with these kinds of situations. From my experience, we have some sort of inherent sense that something is wrong. When a patient tells me they’re going to die, or they have this intense fear in their eyes — not the normal kind, but a deep, infinite kind — something bad happens very soon. Something fatal like a heart attack, for instance, strikes minutes later. The human body just knows. I can’t corroborate this fact or the anonymous tale, but its veracity is irrelevant — I entertain a faith in this phenomenon. Almost like a dog instinctively barking at a brewing tornado, I felt a compelled certainty.&lt;/p&gt;
&lt;p&gt;Entranced in my chair, I watch the flash seep everywhere. It confirms my gut instinct. With it passed, and my brain rebooted, I recognize this as a familiar yet confusing scene: Shouldn’t there… CRASH! The off-beat thunderclap shook me.&lt;/p&gt;
&lt;p&gt;In this tiny space, I feel, for the first time, like I was living in more than just the room I call mine. The label of ‘room’ became inappropriate. It was at this moment, from a mere open window, that I learned sensations could be so raw. Such an oceanic largeness on its other side; an immensity that demands humility. I wondered: Why have I just now noticed this?&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Discomfort &lt;a href=&quot;#discomfort&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The season: Summer. The temperature: Scorching. The consequences of that heat are especially urgent on my soles. Not the entire flat of my feet, just two spots: one where my first and second toes wrap around the wire of my flip-flops, and another near my heel where the wire inserts into the sole. These particular points dig into my skin at every step. Jutting from the landscape of my East Coast campus are spurts of hills and plateaus. Unfortunately for me, Google Maps apparently demands the pain of managing uneven terrain perfectly conducive to the pricking of soles. The twists and turns in these narrow, one-way streets don’t help either.&lt;/p&gt;
&lt;p&gt;“My god, why is Providence so damn hilly…” I can’t help but feel disadvantaged for having been raised in Chicago, the land of ‘unchanging-altitude.’&lt;/p&gt;
&lt;p&gt;That’s the acute discomfort. Demanding my focus chronically is the humid stickiness that permeates every surface of my body. At this point, my clothing feels more like soggy paper. The household walls across the street and close to my right are high, variegated, and annoyingly bare. With no passerby in sight so far, there is no escape. I am alone in this mundane struggle. The only saving grace from the incessantly burning sun is the relief of my first in-person class. I’m not bubbly or giddy, just expectant mixed with a tinge of nervousness.&lt;/p&gt;
&lt;p&gt;I welcome the sun’s immense and uncomfortable pressure. It’s too good of a coincidence that the heat advisory warning overlapped with this momentous occasion — already delayed by two weeks, in fact. I tend to entertain myself with my own humor nowadays. I think it’s a habit I developed who-knows-when during that swath of solitude. All-in-all, I consider the sun’s grace a harsh “welcome back.”&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Inquiry &lt;a href=&quot;#inquiry&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I admire it.&lt;/p&gt;
&lt;p&gt;My window has an audience. A picture frame of a poem gifted as an off-to-college present from my mother; a duet of flasks, one tall and skinny, the other short but wide; a metal cup with a handle, perfect for tea and water; my ivy plant, whose leaves number more than seven times the initial five it started with when I brought it to Brown. Behind the main characters of the stage — the foreground you could say — is the unsuspecting setting. Unclear glass muffled from fingerprints and residue. A pure guess, I assume that the frame is wood coated with white paint. Contrasting the aged glass is this wine-like wood: age evident but not distasteful. A grid screen sits just behind it. It stops the bugs from getting in, and me from falling out.&lt;/p&gt;
&lt;p&gt;Most of the time the pane is lifted more than a foot above its closed position. How wonderful such a simple change has been. Shallowly, this story is about the way my window has dyed the color of my first year of college: positively. Deeply, on the other hand, is a commentary on our sheltering, which twists sanctuary into captivity. What have we isolated ourselves from?&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Without &lt;a href=&quot;#without&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Someone I knew once said, “I started playing chess when I was five.”&lt;/p&gt;
&lt;p&gt;“Oh, is that why you’re so good now?”&lt;/p&gt;
&lt;p&gt;“I’m not that good.”&lt;/p&gt;
&lt;p&gt;“Your rating is literally 1800!”&lt;/p&gt;
&lt;p&gt;In Freshman year of high school, I met someone who had been a gymnast since the third grade. One of my close friends had been playing piano since kindergarten. It’s a usual occurrence for these outliers to broadcast themselves on YouTube or Instagram — a knack for art paired with an intractable sum of dedication. That isn’t me.&lt;/p&gt;
&lt;p&gt;My idols, none of which I’ve actually met, tend to have a childhood filled with &lt;em&gt;something&lt;/em&gt;. I did not. Vacuous is how I’d describe myself. But this description is all retroactively applied. I say this now with the knowledge of a bigger world, filled with more stresses and joys alike. I picture my young environment as hollow because time didn’t really exist. My memories of a time when urgency was an undefined sensation are fond: such a stark contrast to life now. That basement and even tinier living room was my world, my detention. Existence was what was immediately in front of me: the TV.&lt;/p&gt;
&lt;p&gt;“Today on How It’s Made, we’ll learn about how erasers first…”&lt;/p&gt;
&lt;p&gt;“The Kid’s Next Door!…”&lt;/p&gt;
&lt;p&gt;“But Finn, you can’t…”&lt;/p&gt;
&lt;p&gt;Although I reimagine myself as being silent and unnoticed, it was the other way around: the world around me was unnoticed. Unnatural. That infinitesimally small space was only so because I couldn’t see something larger. I couldn’t see more of the world — physically and metaphorically. There was much, much, much more beauty to behold. So much more chaos and serendipity. So much more to appreciate and wonder and stare at. When your world is the only one you know, you can’t see anything but that.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Comfort &lt;a href=&quot;#comfort&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;DRRRING!!! DRRRRRING!!! DRRRRRRING!!!…&lt;/p&gt;
&lt;p&gt;There are things that cannot be done when you are in a rush. Waking up is one of those things for me. Waking up is tormenting. My mind resists being rustled. Far too easily, I shove my late-night reminders behind the warming luxury of blankets.&lt;/p&gt;
&lt;p&gt;In my struggle, a break in the clouds becomes apparent. Literally. I listened to a podcast a few months ago about how light rays, especially those that hit your eyes directly from the sun — those not refracted and scattered through a window’s glass — are essential to the wake of the body. I keep my left eye a tenth open but the right completely shut. The left one can’t even do that for much longer than a few moments before its accumulated nocturnal debris grows too troublesome — but it’s enough for me to find the outline of a certain black rectangle. I need to shake it because I use a special alarm clock app. It’s a preventative measure for a chronic over-sleeper. All that matters is that it’s been doing its job. The fact that I’m conscious enough to have this thought proves my point.&lt;/p&gt;
&lt;p&gt;I couldn’t help but notice the unfettered rays peering through the opening. Stopped a foot above the windowsill is the bottom of my blinds. I’m reminded of my foresight last night to lower them so that my present self’s retinas wouldn’t be burned. I mentally pat myself on the back for it. I then laugh at myself for mentally giving myself a pat on the back.&lt;/p&gt;
&lt;p&gt;At any rate, the sunlight demands my attention. It is bright but balanced by the darkness of the crevices it cannot reach on my messy table. The area is bright enough to stir yet dark enough to soothe. I’m surprised at how natural this feels — was it always like this? No, my old room didn’t even have a window in the first place. In my trance, I realize the coherency of my thoughts. I rather quickly raise my upper half from under my tempting sheets, rub both eyes with either hand, and check the time.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Unnoticed &lt;a href=&quot;#unnoticed&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If your second semester in college was unexceptional, then yours wasn’t so far off from mine. Mostly monotonous weeks passed until any novelty arose at all. But only an inkling, a turning ambiance: an inappreciably small shift. I stand at a distance, across the room, far from the window. Peering through it produces in me a feeling I never knew I yearned for. Even as I type this paragraph several weeks later, I sense a radiating, motherly familiarity.&lt;/p&gt;
&lt;p&gt;An inanimate object, this window reminds me of our fickle randomness. Unappreciated. Unmoved. Unnoticed. Our myopia dawns on me. We stumble through life, deceiving, loving, becoming learned, then sputter out within the span of a dozen tree rings. What possesses you? Is it your career? Your homework? Money? Has gasping for breath at the workday’s close become routine? Reflect on your day-to-day: has a moment ever penetrated into &lt;em&gt;you&lt;/em&gt; as much as this window has into me?&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Author’s Note &lt;a href=&quot;#authors-note&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is a piece I wrote for a creative non-fiction class — I didn’t write it with a public audience in mind. Furthermore, this is the second piece of creative non-fiction I’ve ever produced. Take what you will from it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;time&gt; &lt;span&gt;Mar 5, 2022&lt;/span&gt;  &lt;/time&gt; This piece has been somewhat edited and published separately by &lt;a href=&quot;https://solemagazinebrown.wordpress.com/2022/03/04/windows/&quot;&gt;Sole Magazine&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 11 Aug 2021 02:30:00 GMT</pubDate></item><item><title>The “Great Books Idea” and liberal versus general education</title><link>https://kristofferbalintona.me/posts/202112071830/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202112071830/</guid><description>&lt;h2&gt;The origins of the “great books idea” &lt;a href=&quot;#the-origins-of-the-great-books-idea&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;em&gt;Great Books of the Western World&lt;/em&gt; is a landmark event for the manifestation of the “great books idea,” a campaign whose ideal was a liberal education. Throughout the 1920s, 1930s, and 1940s, the great books idea went from “being an academic experiment in New York City to a national phenomenon based in Chicago” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 86&lt;/a&gt;). The spearheads for the movement were Robert Hutchins and Mortimer Adler, the president and chancellor of the University of Chicago, respectively. The &lt;em&gt;Great Books of the Western World&lt;/em&gt;, edited by both Hutchins and Adler and published by the &lt;em&gt;Encyclopedia Britannia&lt;/em&gt;, where Adler was part of the board of directors, marks when the great books idea’s burst into the public sphere. The &lt;em&gt;Great Books of the Western World&lt;/em&gt; is a 54-volume set which compiles ‘great’ written works. The criteria for which works include but is not limited to those which have an “intellectual amplitude,” are “universally relevant and always contemporary,” are “indefinitely readable,” and “deemed indispensable… to a genuine, sound liberal education” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 269&lt;/a&gt;). The final criterion is what Hutchins, Adler, and the exponents for the great books idea most firmly thrust into the public eye.&lt;/p&gt;
&lt;p&gt;What exactly is the great books idea? It is the essence of why the &lt;em&gt;Great Books of the Western World&lt;/em&gt; found so much success and assent to intellectuals of the era. Its ideal was a universal liberal education — that every citizen be ‘intellectually rounded.’ The great books idea is an approach of what a &lt;em&gt;liberal&lt;/em&gt; education should be. Hutchins and Adler identified a gap in liberal education, namely, it wasn’t liberal enough. Hutchins, reflecting on what the great books idea means to him, during a celebratory party for the publication of the &lt;em&gt;Great Books of the Western World&lt;/em&gt;, described liberal education as the “education for leisure and citizenship” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 158&lt;/a&gt;). To them, a liberal education, is “but a means to intellectual freedom” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 158&lt;/a&gt;); this is the goal the &lt;em&gt;Great Books of the Western World&lt;/em&gt; embodies. This means that thinkers were envisioning something to put into perspective any other knowledge they have — an expansive notion of history and ideas of the past, undiluted from the dispositions and transience of the present, or as Clifton Fadiman asserted, it is a means to escape “from the thralldom of the current… the curse of the contemporary” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 157&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Chicago’s mayor, Martin Kennelly, proclaimed a “Great Books Week” in September 1948; its top attraction was a public demonstration spearheaded by Adler and Hutchins.
Though mostly performative, this demonstration provided an imagery of productive, healthy, organic intellectualism and dialogue the great books idea strove for:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Their discussion of Plato likely resembled the routine of Socratic questioning with which they had plagued unsuspecting University of Chicago students since the fall of 1930…  They sometimes argued “moot points” for the students’ “amusement”…  Of him Adler later recalled: “His lightning flash rejoinders left me speechless, astonishing those who were already his friends, but confounding others not so well disposed”… McNeill recalled Adler’s “argumentative skill” and “seriousness.” Thomas Aquinas’ “scholastic method” of posing questions and raising objections fit “Adler’s habit of mind perfectly.” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 85–86&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;The ideal of liberal education &lt;a href=&quot;#the-ideal-of-liberal-education&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The mission of the great books idea was to shift the attention of what the most important things to learn are. To Adler and Hutchins, the status quo in universities was characterized by vocational and professional training. They were diametrically opposed: “For college students seeking a liberal education, Hutchins, Adler, and his entire community of discourse predicted that their experience in higher education, focusing on specialization and vocationalism, would leave them unsatisfied…” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 223&lt;/a&gt;). The two believed that the education found through reading great books would provide a liberating feeling from the “stultifying, conformist tasks, students and laborers” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 224&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Underlying their call to a more liberal education was the aim to create a “thinking citizenry,” one which regularly regularly mulls over “liberal causes” of “education reform, world government, nuclear disarmament, free speech, and racial and economic equality” . Ultimately, Adler and Hutchins sought for a “more democratized culture, not the reification of an existing order” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 159&lt;/a&gt;) — they aspired to redefine our values. Though this ideal immediately applies to the university, it also applies to every member of society:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If the great books idea worked this way for [the university] cohorts, perhaps some family members experiencing repression, by way of conformity to gender and age expectations, might also escape into the great books. They could express themselves through buying and reading the great books, or participating in discussion groups. (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 224&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Compare this to contemporary popular discussions of education systems. For instance, education is often framed in economic terms: institutions do not have enough funding (&lt;a href=&quot;#citeproc_bib_item_5&quot;&gt;Zyngier&lt;/a&gt;). Though money is always involved in implementing educational practices, the conversation only tangentially addresses the fundamental problems of whether what funds are being allocated to is correct in the first place. This is clearly not an exhaustive description of contemporary conversation, but is indicative of how we often miss addressing the faults of the premises of our education institutions, that which everything grounded on. Similarly, concerns of imagination being ‘killed’ in our educational institutions “stifling creativity” leading to “problems in the classroom.” Students start to “act out, drift off, or shut down” (&lt;a href=&quot;#citeproc_bib_item_3&quot;&gt;Lynch&lt;/a&gt;), then we propose solutions such as physical movement. In other words, presents concerns often superficial chit-chat which neglect the core question of “What should we educate on?”&lt;/p&gt;
&lt;p&gt;In 1929, “Adler recalled that ‘reading the great books, both as a student and as a teacher, had done more for [his] mind than all the rest of the academic pursuits in which [he] had been so far engaged’” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 24&lt;/a&gt;). The great books ‘methodology’ is most critically founded on the prioritization of (i) facilitating conversation around “Great Ideas,” that is the “Great Conversation,” via (ii) a common corpus of texts. Return to the core aim of Adler and Hutchins to create a “thinking citizenry”: a functioning democracy requires a literate populace (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 26&lt;/a&gt;). Thus, one had to be aware of the larger issues and concerns of society — the Great Conversation: “… a discussion of ideas by authors who, though spread across twenty-five hundred years of Western history”  (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Adler 252&lt;/a&gt;). This followed from the claim that “…ideas can be studied only in their historical context” (&lt;a href=&quot;#citeproc_bib_item_1&quot;&gt;Adler 252&lt;/a&gt;). A common set of texts is vital in order to grapple with such broad and important ideas. Indeed, how can productive discourse occur without a &lt;em&gt;common set of facts&lt;/em&gt; that are agreed upon. In the words of Adler, a common set of texts “provided ‘common intellectual themes’ for students, and prevented conversations from ‘degenerating’ into small talk.’” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 23&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The 1950s was the peak of the great books idea:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;During the 1955-56 fiscal year… In 889 Canadian and American communities, 1,735 great books discussion groups existed by June 1956. By December 1961 the “world total” was 3,135 groups. Actual participants numbered around 26,000 in the mid-1950s, indicating a median steady state between 50,000 in 1947 and 17,000 in 1952. Estimates for late 1961 were 47,025. In 1956 the largest numbers of groups were in New York and Colorado (165 each), Illinois (129), and Ohio (115); the smallest in Idaho (2), Montana (3), and Vermont and Wyoming (4 each). The Foundation was based in Chicago, but its reading groups spread all over the country. (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 226–27&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This speaks to the appeal the public found in the values of liberal education. Furthermore, the great books idea complicates the common intuition that education is an &lt;em&gt;individualistic&lt;/em&gt; pursuit. Although learning occurs with the individual, the value of dialogue should not be neglected.&lt;/p&gt;
&lt;h2&gt;A case against Adler and Hutchins &lt;a href=&quot;#a-case-against-adler-and-hutchins&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Although there substantial momentum around the great books idea and its values of liberal education in the 50s, the 60s and particularly the 70s marked its nadir. The great books idea is promising: an ideal for the intellectual optimum of every citizen, found in participating in the “great conversation.” It seemed to be a panacea. The “encyclopedia businesses” of the early 1950s are an ostensive signal that for the growing belief that, in a world becoming more and more complex, “Buying the great books, or encyclopedias, secured your child’s place in America’s middle class” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 221&lt;/a&gt;); in reading the great books of the past all can cut passed the bombardment of information that was coming with mass media such as television. But it is problematic: the ideal hinges on the student being a &lt;em&gt;reader&lt;/em&gt;. What happens if one isn’t?&lt;/p&gt;
&lt;p&gt;Let’s return to the our common intuition that education is a pursuit for the individual. Why is that? There certainly is a kernel of truth: information and wisdom are held within books, but that is only useful for facilitating growth; the growth only occurs once the individual has taken the steps to utilize that resource. Mere reading is not enough; reading is not &lt;em&gt;intrinsically&lt;/em&gt; useful. Reading can be good or bad, it is up to the individual to get take the effort and time to make use of what a book has to offer. It is indisputable that there is effective and ineffective reading. That is, there will always be members of the public who do not like or want to read, and will therefore get less out of out of a book compared to inherent readers. Compare the software engineer who sees the smartphone as a miracle of human ingenuity and the layperson who only sees convenience. This observation complicates the proposition of universitization liberal education: how can a pedagogical philosophy possibly be suitable for a population which arguably is unreceptive to deeply reading the classics of Western society?&lt;/p&gt;
&lt;p&gt;Beneath the exciting and grand promise of liberal education is the suspicious presupposition that a liberal education is the best &lt;em&gt;general education&lt;/em&gt;. A liberal education is one with “considered to be subject centered, with a fairly fixed body of content material, logically organized. Its goal is also the stimulation of reflective thinking, with less emphasis on behavior, and it draws its clientele from the intellectual elite.” In contrast, a general education is one designed to “fit all students — not just the upper ten percent… liberal education as often defined and practiced, will not fit all students” (&lt;a href=&quot;#citeproc_bib_item_4&quot;&gt;Zayed 42&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;And Alder and Hutchins did indeed envision this as an ideal for the public. For instance, in their talks for a promotional movie in 1954, Adler and Hutchins wanted to market the movie as a ‘family-friendly’, relaxing venture, “Benton directed Adler to ‘imagine that the movie is to be shown in a home to small group of people…  make it as intimate and friendly and relaxed as possible.’ Benton reminded him: ‘You are not lecturing; you are teaching.’ Adler and Hutchins heeded Benton’s input” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 234&lt;/a&gt;). Thus, ironically, although the great books idea argues that liberal education is the path to being the ideal citizen, the ideal is inherently exclusionary. For instance, what the &lt;em&gt;general public&lt;/em&gt; should read is likely different from what a reader &lt;em&gt;already receptive to reading&lt;/em&gt; should read.&lt;/p&gt;
&lt;p&gt;This is more than theoretical. The great books idea only became a cultural phenomenon after coming from a plea originating from the “planes of high culture” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 159&lt;/a&gt;), “The Great Books came to be a form of mass culture, subject to the concerns of business: sales, marketing, production, profits, standardization, and efficiency. Once the great books idea took a fixed form, critics targeted it as the commodification of culture” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 159&lt;/a&gt;). The movement, however, never quite grew out of this population. The 1962 Marplan-Chicago Great Books Awareness study analyzed the market of the &lt;em&gt;Great Books of the Western World&lt;/em&gt; and concluded the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A typical great books owner’s social and personal profile in 1962, according to Marplan, began with the fact that they were “upper middle class.” They filled occupations “structured and governed by definite rules, such as medicine, engineering, accounting, and middle management jobs.” Because of their “high intelligence,” however, they correctly perceived “their lack of knowledge in the philosophical and liberal arts fields.” The Great Books and the Syntopicon enabled them to remedy their knowledge deficit without forcing them to “contemplate ambiguities” or determine the “appropriateness of… vague ideas.” The set offered them “satisfaction” in that they could find “the answer to questions.” Owners were “action” driven people who liked to accomplish “something,” or “complet[e] a task with perceivable results.” In sum, “the Great books appeal to the core culture [of] individuals who strive to function efficiently and within the outlines of what is proper and correct.” So long as America’s larger culture retained this tendency, centering on order and propriety, then the great books idea would maintain its appeal. (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 256–57&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Despite the aspirations for a ‘responsible citizen’, a goal directly broadly, the ones who took up the mantle of the great books idea were those already predisposed to doing so already. In other words, the great books idea remained localized to a self-selecting populous. The actions of Adler himself during the great books idea’s nadir shows that, despite his words, his audience was not the common man, “Adler had been involved in Aspen seminars, which utilized a great-books approach to learning, regularly since the 1950s, but the seminars were aimed at business and government executives: the elite” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 264&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;To Adler, “the great books should be read ‘to deepen and broaden our intelligence and imagination, not to acquire up-to-date information’” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 244&lt;/a&gt;). At the heart of the great books idea is the &lt;em&gt;universal imposition of a value&lt;/em&gt;, namely of reading the greats as the best path for self-improvement and ideal citizenship, that the “most satisfactory byproduct of reading the Great Books was that you ended up “a much more satisfactory companion to yourself” (&lt;a href=&quot;#citeproc_bib_item_2&quot;&gt;Lacy 240&lt;/a&gt;). The great books idea is alluring solution to a definite problem but with too broad a scope. The great books idea, and by extension liberal education, is not a &lt;em&gt;pedagogical panacea&lt;/em&gt;; it is more suitable as a personal goal — for one’s personal education, not as a standard.&lt;/p&gt;
&lt;h2&gt;Author’s note &lt;a href=&quot;#authors-note&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This a paper I wrote for one of my classes. It is in an incomplete state but I put a lot of work into it and think that someone &lt;em&gt;might&lt;/em&gt; enjoy taking a peek at it.&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;a&gt;&lt;/a&gt;Adler, Mortimer Jerome. &lt;i&gt;Philosopher at Large: An Intellectual Autobiography&lt;/i&gt;. Macmillan, 1977.&lt;/div&gt;&lt;div&gt;&lt;a&gt;&lt;/a&gt;Lacy, Tim. &lt;i&gt;Making a Democratic Culture: The Great Books Idea, Mortimer J. Adler, and Twentieth-Century America&lt;/i&gt;. 2006, &lt;a href=&quot;https://www.proquest.com/dissertations-theses/making-democratic-culture-great-books-idea/docview/305319330/se-2?accountid=9758&quot;&gt;https://www.proquest.com/dissertations-theses/making-democratic-culture-great-books-idea/docview/305319330/se-2?accountid=9758&lt;/a&gt;. Ann Arbor.&lt;/div&gt;&lt;div&gt;&lt;a&gt;&lt;/a&gt;Lynch, Matthew. “Is Education Killing Imagination?” &lt;i&gt;The Edvocate&lt;/i&gt;, 5 Sep. 2016, &lt;a href=&quot;https://www.theedadvocate.org/is-education-killing-imagination/&quot;&gt;https://www.theedadvocate.org/is-education-killing-imagination/&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;a&gt;&lt;/a&gt;Zayed, Kevin. “The Paradox of Mortimer J. Adler: Revisiting the Distinction between Liberal and General Education.” 2013.&lt;/div&gt;&lt;div&gt;&lt;a&gt;&lt;/a&gt;Zyngier, David. “Test Shock: Is Our Education System Failing Students?” &lt;i&gt;The Conversation&lt;/i&gt;, &lt;a href=&quot;http://theconversation.com/test-shock-is-our-education-system-failing-students-11308&quot;&gt;http://theconversation.com/test-shock-is-our-education-system-failing-students-11308&lt;/a&gt;. Accessed 30 Nov. 2021.&lt;/div&gt;&lt;/div&gt;</description><pubDate>Tue, 07 Dec 2021 18:30:00 GMT</pubDate></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_Z1sRXH2.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1912&quot; height=&quot;365&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_1jG5ol.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;273&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_Rjb5y.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;347&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_ZAyxp6.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1062&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_Z21KI57.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;55&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_Z1mblwP.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;364&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_1juv78.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;367&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_Z1CdtRg.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;50&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_fGoA0.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;363&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_27j1lQ.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1729&quot; height=&quot;918&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_2mlP4E.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;337&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></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_JLiux.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1073&quot; height=&quot;1018&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_Z2s8Lfp.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1886&quot; height=&quot;693&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_2rhXxL.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;957&quot; height=&quot;1060&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_27oQ5x.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;1057&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></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></item><item><title>True Emacs Transparency</title><link>https://kristofferbalintona.me/posts/202206071500/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202206071500/</guid><description>&lt;p&gt;Transparency in Emacs isn’t that great. Every source I find regarding transparency of Emacs (as of writing this) points to setting the &lt;code&gt;alpha&lt;/code&gt; frame parameter. For instance:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.emacswiki.org/emacs/TransparentEmacs&quot;&gt;EmacsWiki: Transparent Emacs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://emacs.stackexchange.com/questions/22663/how-can-transparency-be-toggled&quot;&gt;How can transparency be toggled? - Emacs Stack Exchange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2935520/how-to-set-a-key-binding-to-make-emacs-as-transparent-opaque-as-i-want&quot;&gt;How to set a key binding to make Emacs as transparent/opaque&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/emacs/comments/ljev64/any_advice_on_getting_transparency_to_work_in/&quot;&gt;Any Advice On Getting Transparency To Work In Emacs Window Manager&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The issue with &lt;code&gt;alpha&lt;/code&gt; is that it sets the transparency of the &lt;em&gt;entire window&lt;/em&gt;; what this means is that &lt;em&gt;text and background&lt;/em&gt; become transparent together. Clearly this is undesirable for some: the &lt;code&gt;alpha&lt;/code&gt; parameter needs to be near 100, otherwise the text becomes illegible. Ideally, the text remains opaque while the background becomes transparent.&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The solution came from a &lt;a href=&quot;https://github.com/TheVaffel/emacs&quot;&gt;patched version of Emacs made by Håkon Flatval&lt;/a&gt; back in November 2021—his announcement that month &lt;a href=&quot;https://www.reddit.com/r/emacs/comments/qm3tsv/i_implemented_partial_support_for_background/&quot;&gt;on Reddit&lt;/a&gt; received some attention. The patch adds the &lt;code&gt;alpha-background&lt;/code&gt; frame parameter which makes &lt;strong&gt;only the background&lt;/strong&gt; of a frame transparent:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-06-05_20-57-01_screenshot.D8KfuE8S_Zhgbm1.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;1058&quot; /&gt;&lt;figcaption&gt;&lt;code&gt;alpha-background&lt;/code&gt; set to 75.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;You can set the &lt;code&gt;alpha-background&lt;/code&gt; of a particular frame with the &lt;code&gt;set-frame-parameter&lt;/code&gt; function, and the default value for frames by adding to &lt;code&gt;default-frame-alist&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; For example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;set-frame-parameter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;alpha-background&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; For current frame&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-to-list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;default-frame-alist&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;alpha-background &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; For all new frames henceforth&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I’ve also defined my own command for toggling between a frame having &lt;code&gt;alpha-background&lt;/code&gt; values of 100 and 72:&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/toggle-window-transparency&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Toggle the value of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;alpha-background&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Toggles between 100 and 72 by default.  Can choose which value to change&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;to if called with ARG, or any prefix argument.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;P&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;transparency &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pcase&lt;/span&gt;&lt;span&gt; arg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;pred numberp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; arg&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;pred &lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;read-number&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Change the transparency to which value (0-100)? &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pcase&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;frame-parameter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;alpha-background)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;72&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;72&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                           &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;))))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;set-frame-parameter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;alpha-background&lt;/span&gt;&lt;span&gt; transparency&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Mar 8, 2025&lt;/span&gt;  &lt;/time&gt; Readers should be aware that the above code snippet may have potential incompatibilities with other versions of Emacs. Small modifications may be necessary in such cases.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;In practice, this is what toggling transparency looks like:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/emacs-transparency.9LiHIQJI_Z1D3nMO.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1620&quot; height=&quot;911&quot; /&gt;&lt;figcaption&gt;Live-toggling of the &lt;code&gt;alpha-background&lt;/code&gt; parameter.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;I had been using Håkon’s patched version since becoming aware of it, and it’s been perfect for me. My only gripe was that without the expertise of patching future releases of Emacs (Håkon wasn’t updating his repository), I would inevitably be using an increasingly out-of-date version of Emacs.&lt;/p&gt;
&lt;p&gt;However, I recently returned to check if there had been any updates to the repo. Though there were no new commits to the repository, I decided to check if there was work on mainline Emacs yet. I searched the repo for matches of &lt;code&gt;alpha-background&lt;/code&gt;, and sure enough, I found a hit! &lt;strong&gt;On January 30, 2022, &lt;a href=&quot;https://github.com/emacs-mirror/emacs/commit/5c87d826201a5cae242ce5887a0aa7e24ad6f5ee&quot;&gt;Po Lu silently announced the merging of the patch&lt;/a&gt;&lt;/strong&gt;. Accordingly, this means that &lt;em&gt;the &lt;code&gt;alpha-background&lt;/code&gt; frame parameter is available to all builds after January 30, 2022&lt;/em&gt;. I’ll also note that do not know what went on behind-the-scenes to get this merged, so I’ll make it clear that I am not attributing the development of this feature to only Håkon and Po Lu.&lt;/p&gt;
&lt;p&gt;Of course, transparency in Emacs (alongside any other application on your system) is only possible if you are using a compositor (e.g. Picom). Regarding build flags, Håkon’s patch supported transparency only with Emacs compiled with GTK3 and cairo support. I do not know for certain if this is still the case. If it is, then an Emacs built with the &lt;code&gt;--with-cairo&lt;/code&gt; and &lt;code&gt;--with-x-toolkit=gtk3&lt;/code&gt; flags is necessary (meaning this feature is only available on machines using &lt;code&gt;X Window&lt;/code&gt;). However, &lt;a href=&quot;https://www.reddit.com/r/emacs/comments/v72tu6/comment/ibioym9/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;according to this Reddit comment thread&lt;/a&gt;, it seems like only cairo is necessary, while GTK3 is not necessary. That is, &lt;code&gt;--with-x-toolkit=no&lt;/code&gt; works as well.&lt;/p&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Jun 8, 2022&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Note that a compositor is necessary for transparency.&lt;/li&gt;
&lt;li&gt;Added statement about GTK3 perhaps not being necessary that links to a corresponding Reddit comment thread.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Mar 8, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Update code snippet for &lt;code&gt;kb/toggle-window-transparency&lt;/code&gt;. Also add note about potential incompatibilities between this code snippet and other versions of Emacs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I work exclusively on a 14-inch laptop, so screen real-estate is valuable. I often use transparency to watch videos (e.g. YouTube, Netflix, lecture) while working on something in Emacs—I benefit from having the space of my entire screen.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;The behavior of &lt;code&gt;alpha-background&lt;/code&gt; matches that of &lt;code&gt;alpha&lt;/code&gt;; that is, 100 is fully opaque while 0 is fully transparent.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;The reason why my frame is not &lt;em&gt;fully&lt;/em&gt; opaque when &lt;code&gt;alpha-background&lt;/code&gt; is 100 is because I’ve additionally set &lt;code&gt;alpha&lt;/code&gt; to 98.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Tue, 07 Jun 2022 15:00:00 GMT</pubDate><category>Emacs</category></item><item><title>Citations in org-mode: Org-cite and Citar</title><link>https://kristofferbalintona.me/posts/202206142352/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202206142352/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#helpful-sources&quot;&gt;Helpful sources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-are-citation-systems&quot;&gt;What are citation systems?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org-cite&quot;&gt;Org-cite&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#understanding-org-cite-export-processors&quot;&gt;Understanding &lt;code&gt;org-cite&lt;/code&gt; export processors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#which-processor-should-i-use&quot;&gt;Which processor should I use?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#configuration&quot;&gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#usage&quot;&gt;Usage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#citar&quot;&gt;Citar&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#capturing-outdated&quot;&gt;Capturing (Outdated)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#h:20241106T044538.716623&quot;&gt;Advising &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; (Outdated)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#aesthetics&quot;&gt;Aesthetics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#other-interesting-packages&quot;&gt;Other interesting packages&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#zotero&quot;&gt;Zotero&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#embark&quot;&gt;Embark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org-roam-bibtex&quot;&gt;Org-roam-bibtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#citar-capf&quot;&gt;Citar-capf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org-ref&quot;&gt;Org-ref&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#changelog&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Summary &lt;a href=&quot;#summary&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Jul 20, 2023&lt;/span&gt;  &lt;/time&gt; Readers should be aware that some package-specific information in this article may be outdated. Thus, readers are advised from outright copying code in this article without verifying (e.g. reading docstrings) the intended behavior. Nevertheless, the concepts related to &lt;code&gt;org-cite&lt;/code&gt; and citation management should remain relevant and insightful.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;First, I’ll outline the broadest components to producing files in &lt;code&gt;org-mode&lt;/code&gt; with a citation system (e.g. &lt;code&gt;org-cite&lt;/code&gt;, &lt;code&gt;org-ref&lt;/code&gt;). Then I’ll introduce &lt;code&gt;org-cite&lt;/code&gt; and the differences between its &lt;code&gt;bibtex&lt;/code&gt;, &lt;code&gt;csl&lt;/code&gt;, and &lt;code&gt;basic&lt;/code&gt; export processors. Then, I will walk through my configuration for &lt;code&gt;org-cite&lt;/code&gt; and &lt;code&gt;citar&lt;/code&gt; (formerly &lt;code&gt;bibtex-actions&lt;/code&gt;). You can see a &lt;a href=&quot;https://gitlab.com/PreciousPudding/main-emacs/-/snippets/2351789&quot;&gt;gist/snippet of all the code present in this post here (alongside other additions of mine)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My goal is to plot the landscape, preparing you to understand other available sources which are more suited for a user already familiar with the landscape.&lt;/p&gt;
&lt;h2&gt;Helpful sources &lt;a href=&quot;#helpful-sources&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I recommend the following reading for more information regarding how &lt;code&gt;org-cite&lt;/code&gt; works:&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a href=&quot;https://orgmode.org/manual/Citation-handling.html#Citation-handling&quot;&gt;Citation handling (The Org Manual)&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;The first source you should visit should almost always be the manual (available within Emacs via &lt;code&gt;info&lt;/code&gt;, i.e. &lt;code&gt;M-x info&lt;/code&gt;). It covers the fundamentals to understanding how to use &lt;code&gt;org-cite&lt;/code&gt;. Isn’t well documented currently, but that will change in the future.&lt;/dd&gt;&lt;dt&gt;&lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html&quot;&gt;Org-cite guide by tecosaur&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;I’ll be referencing this frequently, for good reason.&lt;/dd&gt;&lt;/dl&gt;
&lt;h2&gt;What are citation systems? &lt;a href=&quot;#what-are-citation-systems&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There are roughly three moving parts to citation management.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The tool that produces the bibliography file.&lt;/strong&gt;&lt;br /&gt;
A bibliography file is where information regarding sources are stored. This almost always comes in the form of a &lt;a href=&quot;https://file.org/extension/bib&quot;&gt;.bib file&lt;/a&gt;; usually one is sufficient. There are various ways to create these files. Though you can manually create your own &lt;code&gt;.bib&lt;/code&gt; files, the most common way is exporting a Zotero library (see &lt;a href=&quot;#zotero&quot;&gt;Zotero&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The text processor.&lt;/strong&gt;&lt;br /&gt;
This is the software the user (you) directly writes in. In our case, it’s Emacs!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The “layer” from text to product.&lt;/strong&gt;&lt;br /&gt;
This is the code that lies in between your plain text writing and an output file (e.g. PDF). Sometimes this is identical to the text processor—in our case it isn’t. For instance, Microsoft Word is both a text editor and the producer of an output file, such as a PDF or a &lt;code&gt;.docx&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;org-cite&lt;/code&gt; lies closer to (3) because it is responsible for exporting citations, whereas &lt;code&gt;citar&lt;/code&gt; is closer to (2) because it is an interface for inserting citations into the buffer. A software like Zotero is responsible for (1).&lt;/p&gt;
&lt;h2&gt;Org-cite &lt;a href=&quot;#org-cite&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In around July of 2021, &lt;code&gt;org-cite&lt;/code&gt; was publicly released. &lt;code&gt;org-cite&lt;/code&gt; a library packaged with &lt;code&gt;org-mode&lt;/code&gt; that processes &lt;code&gt;org&lt;/code&gt; citations (e.g. &lt;code&gt;[cite:@wittgensteinTractatusLogicoPhilosophicus2021]&lt;/code&gt;). To those not familiar with another citation workflow (e.g. &lt;code&gt;biblatex&lt;/code&gt; in LaTeX), it is quite daunting to leap into citations in Emacs. This was certainly the case for me: I leapt into &lt;code&gt;org-mode&lt;/code&gt; citation integration with Zotero and LaTeX with no experience in &lt;code&gt;org&lt;/code&gt;, Zotero, or LaTeX! Nonetheless, &lt;code&gt;org-cite&lt;/code&gt; is quite simple once laid out. After reading this post or section, I recommend taking a look at tecosaur’s &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html&quot;&gt;fabulous guide&lt;/a&gt; to using &lt;code&gt;org-cite&lt;/code&gt;. His explanation of &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html#cite-syntax&quot;&gt;the citation styles of org-cite and their variants&lt;/a&gt; is particularly useful.&lt;/p&gt;
&lt;h3&gt;Understanding &lt;code&gt;org-cite&lt;/code&gt; export processors &lt;a href=&quot;#understanding-org-cite-export-processors&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The most crucial concept to &lt;code&gt;org-cite&lt;/code&gt; are “export processors.” Take a look at the following passage from the documentation for &lt;code&gt;org-cite-export-processors&lt;/code&gt; (as it is at the time of writing):&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;When non-nil, the value is an association list between export back-ends and&lt;br /&gt;
citation export processors:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    (BACK-END . PROCESSOR)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;where BACK-END is the name of an export back-end or t, and PROCESSOR is a&lt;br /&gt;
triplet following the pattern&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    (NAME BIBLIOGRAPHY-STYLE CITATION-STYLE)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There, NAME is the name of a registered citation processor providing export&lt;br /&gt;
functionality, as a symbol.  BIBLIOGRAPHY-STYLE (respectively CITATION-STYLE)&lt;br /&gt;
is the desired default style to use when printing a bibliography (respectively&lt;br /&gt;
exporting a citation), as a string or nil.  Both BIBLIOGRAPHY-STYLE and&lt;br /&gt;
CITATION-STYLE are optional.  NAME is mandatory.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;What this suggests is that different combinations of “processors,” “bibliography styles,” and “citation styles” can be configured to work with different &lt;code&gt;org-export&lt;/code&gt; backends. Presently, there are three processors available: &lt;code&gt;basic&lt;/code&gt;, &lt;code&gt;csl&lt;/code&gt;, &lt;code&gt;natbib&lt;/code&gt;, and &lt;code&gt;bibtex&lt;/code&gt;.  Though &lt;code&gt;org-cite&lt;/code&gt; citations will always follow the same format, &lt;strong&gt;the output text that is exported will change depending on the processor used&lt;/strong&gt;. I will go over these differences now, focusing primarily on the &lt;code&gt;bibtex&lt;/code&gt; and &lt;code&gt;csl&lt;/code&gt; backends&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The &lt;code&gt;bibtex&lt;/code&gt; processor can only be used with the &lt;code&gt;latex&lt;/code&gt; backend.&lt;/strong&gt; Using this processor exports citations using the &lt;a href=&quot;https://www.ctan.org/pkg/biblatex&quot;&gt;BibLaTex LaTeX package&lt;/a&gt;. That means that &lt;code&gt;[cite:@bradleyAppearanceRealityMetaphysical2011 82–5;]&lt;/code&gt; will export into a LaTeX command like &lt;code&gt;\cite[82–5]{bradleyAppearanceRealityMetaphysical2011}&lt;/code&gt;. Compiling the &lt;code&gt;org&lt;/code&gt; exported LaTeX file will in turn produce a PDF whose citations are handled by &lt;code&gt;biblatex&lt;/code&gt;. The end &lt;em&gt;citation style&lt;/em&gt; will be determined by the provided package options (e.g. &lt;code&gt;style=mla-new&lt;/code&gt;). Read the &lt;a href=&quot;https://www.ctan.org/pkg/biblatex&quot;&gt;biblatex documentation&lt;/a&gt; for more information (namely, section 3.1.1 in the February 2, 2022 version of the manual).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;natbib&lt;/code&gt; processor unsurprisingly uses the &lt;code&gt;natbib&lt;/code&gt; LaTeX package. &lt;code&gt;biblatex&lt;/code&gt; is slowly growing to replace the older &lt;code&gt;natbib&lt;/code&gt; package, though some users may circumstantially be limited to &lt;code&gt;natbib&lt;/code&gt;​—you can read more about the differences between &lt;code&gt;natbib&lt;/code&gt; and &lt;code&gt;biblatex&lt;/code&gt; &lt;a href=&quot;https://tex.stackexchange.com/a/25702&quot;&gt;here&lt;/a&gt;. I have not personally used the &lt;code&gt;natbib&lt;/code&gt;, but I suspect its usage is similar if not identical to the &lt;code&gt;bibtex&lt;/code&gt; processor.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;csl&lt;/code&gt; processor will use CSL to export citations. &lt;a href=&quot;https://en.wikipedia.org/wiki/Citation_Style_Language&quot;&gt;Citation Style Language&lt;/a&gt; (CSL) is a language used to instruct the formatting of citations and bibliographies; citation styles are provided by &lt;code&gt;.csl&lt;/code&gt; files. &lt;strong&gt;Most importantly, CSL is intended to be a universal standard for citation formatting.&lt;/strong&gt; Accordingly, &lt;code&gt;.csl&lt;/code&gt; supports essentially every output format.&lt;/p&gt;
&lt;p&gt;In sum:&lt;/p&gt;
&lt;img alt=&quot;diagram&quot; loading=&quot;lazy&quot; src=&quot;https://kristofferbalintona.me/d2/articles/202206141852--citations_in_org_mode_org_cite_and_citar/index-0.svg&quot; width=&quot;1198&quot; height=&quot;984&quot; /&gt;
&lt;h3&gt;Which processor should I use? &lt;a href=&quot;#which-processor-should-i-use&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The most common confusion comes from realizing that CSL can also export to LaTeX. So, when exporting to LaTeX: &lt;em&gt;should you use the &lt;code&gt;csl&lt;/code&gt; or &lt;code&gt;bibtex/natbib&lt;/code&gt; processor?&lt;/em&gt; The difference lies in whether or not you want to rely on the &lt;code&gt;biblatex&lt;/code&gt; package to manage exports.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The important difference is that &lt;code&gt;csl&lt;/code&gt; exports to &lt;em&gt;rendered text&lt;/em&gt;&lt;/strong&gt;. Rendered text is text whose end formatting will match that of &lt;code&gt;org&lt;/code&gt;’s, e.g. italic text in &lt;code&gt;org-mode&lt;/code&gt; will become wrapped in, say, &lt;code&gt;\emph{}&lt;/code&gt; in LaTeX. So, for instance, if I export &lt;code&gt;[cite:@bradleyAppearanceRealityMetaphysical2011 82–5;]&lt;/code&gt; into a LaTeX file using the &lt;code&gt;csl&lt;/code&gt; processor using a CSL file for the Modern Language Association (MLA) citation style, I will see the following in-text citation in the LaTeX file as: &lt;code&gt;(Bradley 82–85)&lt;/code&gt;​—if anything needed to be bold, italicized, etc., then that would be wrapped in the appropriate LaTeX command. Contrast that with the LaTeX command in the paragraphs above.&lt;/p&gt;
&lt;p&gt;So when it comes to exporting to LaTeX, &lt;em&gt;when wouldn’t rendered text be enough&lt;/em&gt;? If you want the most basic functionality, i.e. “Seeing in-text citations and bibliographies in my documents is enough,” then CSL will always cover you. However, if you want access to the more complex or nuanced facilities of &lt;code&gt;biblatex&lt;/code&gt;, use the &lt;code&gt;bibtex&lt;/code&gt; processor instead. &lt;code&gt;biblatex&lt;/code&gt; use cases include (i) using obscure or uncommon field and entry types and (ii) wanting “automation” in the citation variant. By (ii) I mean that &lt;code&gt;biblatex&lt;/code&gt; handles the variant whereas you must manually list the variant in the &lt;code&gt;org-cite&lt;/code&gt; citation when using CSL (see the above link to tecosaur’s guide).&lt;/p&gt;
&lt;p&gt;I will give an example. Basic MLA in-text citations following a &lt;code&gt;(AUTHOR PAGE)&lt;/code&gt; format. However, closely following MLA means that subsequent in-text citations from the same source should have a &lt;code&gt;(PAGE)&lt;/code&gt; format. Using the &lt;code&gt;csl&lt;/code&gt; processor, without specifying a style or variant in the &lt;code&gt;org-cite&lt;/code&gt; citation, will &lt;em&gt;always&lt;/em&gt; output the former formatting as rendered text; as &lt;a href=&quot;https://www.reddit.com/r/orgmode/comments/vchefn/comment/icgt0ql/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;r/bdarcus explains in his comment&lt;/a&gt;, CSL focuses on higher-level commands in order to be agnostic of output format. On the other hand, &lt;code&gt;org-cite&lt;/code&gt; will, by default, leverage the &lt;code&gt;\autocite&lt;/code&gt; command (see &lt;code&gt;org-cite-biblatex-styles&lt;/code&gt;). This tells &lt;code&gt;biblatex&lt;/code&gt; to &lt;strong&gt;change the variant when appropriate&lt;/strong&gt;. This is an immensely powerful upside to using the &lt;code&gt;bibtex&lt;/code&gt; processor—though it is minor in this particular case, this demonstrates the advantages of the &lt;code&gt;biblatex&lt;/code&gt; package. You can read more about the differences between CSL and &lt;code&gt;biblatex&lt;/code&gt; in this &lt;a href=&quot;https://tex.stackexchange.com/a/435004&quot;&gt;thorough StackExchange explanation&lt;/a&gt;. Of course, however, &lt;code&gt;biblatex&lt;/code&gt; is only available when exporting to LaTeX, whereas &lt;strong&gt;CSL can be used to export into any format&lt;/strong&gt; (e.g. HTML, Markdown, ODT, plain-text).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In sum&lt;/em&gt;, use the &lt;code&gt;bibtex&lt;/code&gt; processor &lt;strong&gt;when you are exporting to LaTeX and only LaTeX&lt;/strong&gt; and&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;want automatic selection of citation variants&lt;/li&gt;
&lt;li&gt;or have rare field or entry types in your &lt;code&gt;.bib&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Otherwise&lt;/em&gt;, use the &lt;code&gt;csl&lt;/code&gt; processor&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; (assuming you have a &lt;code&gt;.csl&lt;/code&gt; file for your desired citation style).&lt;/p&gt;
&lt;p&gt;Finally, it should be noted that &lt;strong&gt;the &lt;code&gt;csl&lt;/code&gt; and &lt;code&gt;bibtex&lt;/code&gt; processors use different locators in citations&lt;/strong&gt;. As explained in &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html#cite-syntax&quot;&gt;tecosaur’s guide&lt;/a&gt;, the &lt;code&gt;csl&lt;/code&gt; processor uses locators like &lt;code&gt;bk.&lt;/code&gt; and &lt;code&gt;vol.&lt;/code&gt;, so citations may look like &lt;code&gt;[cite/noauthor:See@mollisonNietzscheContraStoicism2018 pp. 28–9;@priestWhyItIrrational2001 pp. 14;]&lt;/code&gt;​—CSL processes these locators. On the other hand, a citation key’s suffix is &lt;em&gt;directly passed as an option to BibLaTeX commands&lt;/em&gt;, so an equivalent to the above would be &lt;code&gt;[cite/noauthor:See@mollisonNietzscheContraStoicism2018 28–9;@priestWhyItIrrational2001 14;]&lt;/code&gt;, which doesn’t have CSL locators.&lt;/p&gt;
&lt;h3&gt;Configuration &lt;a href=&quot;#configuration&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Luckily, the difficulty in &lt;code&gt;org-cite&lt;/code&gt; is only conceptually: configuring it is incredibly straightforward. There are two main variables that affect functionality. The first is crucial, and the second is useful to be aware of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;org-cite-global-bibliography&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org-cite-export-processors&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;org-cite-global-bibliography&lt;/code&gt; is the bare minimum to getting &lt;code&gt;org-cite&lt;/code&gt; ready to work. This should be a list of bibliography file (&lt;code&gt;.bib&lt;/code&gt;) paths. I have mine set to a list whose single element is a file that Zotero exports:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Actually, I set this value to &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;kb/bib-files&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, which is a list of file paths.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; I set that as the value of any variable that requires bibliography files,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; such as &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;citar&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, as you&apos;ll see below.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-global-bibliography&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/Documents/org-database/roam/references/master-lib.bib&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Alternatively, you can use the org-mode &lt;code&gt;#+BIBLIOGRAPHY:&lt;/code&gt; keyword to set this value per-file; it’s value should be a file path.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;org-cite-export-processors&lt;/code&gt; is useful as a means to tweak how you’d like &lt;code&gt;org-cite&lt;/code&gt; to export citations. You can also set a file-local value using the &lt;code&gt;#+CITE_EXPORT&lt;/code&gt; file keyword (e.g. &lt;code&gt;#+CITE_EXPORT: csl chicago-author-date.csl&lt;/code&gt;); see &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html#more-exporting&quot;&gt;this section in tecosaur’s guide&lt;/a&gt; for an example of how to set the processor, bibliography style, and citation style with this keyword. For a given backend&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;, you can choose how &lt;code&gt;org-cite&lt;/code&gt; exports it. For instance, here is mine:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-export-processors&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;md &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;csl &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;chicago-fullnote-bibliography.csl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;; Footnote reliant&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;latex biblatex&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;                                   &lt;/span&gt;&lt;span&gt;; For humanities&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;odt &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;csl &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;chicago-fullnote-bibliography.csl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;; Footnote reliant&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;csl &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;modern-language-association.csl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;; Fallback&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;As you can see, I have CSL be the default in every case aside from LaTeX. The styles can either be a file path or a file name in &lt;code&gt;org-cite-csl-styles-dir&lt;/code&gt;​—see &lt;a href=&quot;#zotero&quot;&gt;Zotero&lt;/a&gt; for how to easily acquire CSL files.&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; (I use LaTeX strictly for my academic papers, so I really enjoy &lt;code&gt;biblatex&lt;/code&gt;’s features.)&lt;/p&gt;
&lt;p&gt;I also choose to customize faces—I prefer the green faces that &lt;code&gt;org-ref&lt;/code&gt; uses:&lt;sup&gt;&lt;a href=&quot;#fn-5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom-face&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Have citation link faces look closer to as they were for &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-ref&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:foreground&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;DarkSeaGreen4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-key &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;t &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:foreground&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;forest green&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:slant&lt;/span&gt;&lt;span&gt; italic&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Usage &lt;a href=&quot;#usage&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Using &lt;code&gt;org-cite&lt;/code&gt; is incredibly simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;org-cite-insert&lt;/code&gt; to insert citations in &lt;code&gt;org&lt;/code&gt; files, and&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#+PRINT_BIBLIOGRAPHY:&lt;/code&gt; within a document to mark where the bibliography/references/works cited should be.&lt;sup&gt;&lt;a href=&quot;#fn-6&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Citar &lt;a href=&quot;#citar&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Using &lt;code&gt;org-cite&lt;/code&gt; is really simple. But many users will find the interface… too bare. &lt;a href=&quot;https://github.com/emacs-citar/citar&quot;&gt;Citar&lt;/a&gt; is, roughly, the foremost attempt to provide a pleasing frontend to &lt;code&gt;org-cite&lt;/code&gt;. It adds the &lt;code&gt;citar&lt;/code&gt; citation-insert processor. The following is the &lt;strong&gt;minimum&lt;/strong&gt; to start using &lt;code&gt;citar&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; citar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; The &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;:straight&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; keyword is not necessary. However, I do this to set a value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; for the &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;:includes&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; keyword. This keyword tells use-package that those&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; package(s) are provided by this package, and not to search for them on&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Melpa for download. Alternatively, you can set the &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;:straight&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; keyword to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; nil in those package(s) use-package declaration.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:straight&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar &lt;/span&gt;&lt;span&gt;:type&lt;/span&gt;&lt;span&gt; git &lt;/span&gt;&lt;span&gt;:host&lt;/span&gt;&lt;span&gt; github &lt;/span&gt;&lt;span&gt;:repo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;emacs-citar/citar&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:includes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-org&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; A list of bib files. A good idea would be having its value be identical to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; that of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-cite-global-bibliography&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;. For me, I have all my bib file(s)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; as a list of strings in &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;kb/bib-files&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-bibliography kb/bib-files&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Use &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;citar&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; with &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-cite&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; citar-org&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; oc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-insert-processor &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;citar)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-follow-processor &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;citar)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-activate-processor &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;citar))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can then set keybinds for common &lt;code&gt;citar&lt;/code&gt; commands. For example, in the &lt;code&gt;:general&lt;/code&gt; use-package keyword:&lt;sup&gt;&lt;a href=&quot;#fn-7&quot;&gt;[7]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:keymaps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;org-mode-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;:prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C-c b&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;citar-insert-citation &lt;/span&gt;&lt;span&gt;:wk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Insert citation&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;citar-insert-reference &lt;/span&gt;&lt;span&gt;:wk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Insert reference&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;o&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;citar-open-notes &lt;/span&gt;&lt;span&gt;:wk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Open note&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you use &lt;code&gt;embark&lt;/code&gt; and &lt;code&gt;org-roam&lt;/code&gt; you can also set these variables:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-notes-paths &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; kb/roam-dir&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; List of directories for reference nodes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-open-note-function &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;orb-citar-edit-note)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Open notes in &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;org-roam&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-at-point-function &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;embark-act)&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;; Use &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;embark&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Capturing (Outdated) &lt;a href=&quot;#capturing-outdated&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Aug 19, 2023&lt;/span&gt;  &lt;/time&gt; The &lt;a href=&quot;https://github.com/emacs-citar/citar-org-roam&quot;&gt;citar-org-roam&lt;/a&gt; package provides all that is mentioned in this section and more. That package should be used instead in any instance of a desired integration between &lt;code&gt;org-roam&lt;/code&gt; and &lt;code&gt;citar&lt;/code&gt;.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;If you use &lt;code&gt;org-roam&lt;/code&gt;, then the following is how you select bibliographic source and create an &lt;code&gt;org-roam&lt;/code&gt; node from it. All credit goes to &lt;a href=&quot;https://www.jethro.dev/&quot;&gt;Jethro Kuan&lt;/a&gt;, the creator of &lt;code&gt;org-roam&lt;/code&gt;, though I’ve made a few of my own customizations:&lt;sup&gt;&lt;a href=&quot;#fn-8&quot;&gt;[8]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Create a new node from a bibliographic source. taken from&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; https://jethrokuan.github.io/org-roam-guide/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/org-roam-node-from-cite&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;keys-entries&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-select-ref &lt;/span&gt;&lt;span&gt;:multiple&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:rebuild-cache&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;title &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar--format-entry-no-widths &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cdr&lt;/span&gt;&lt;span&gt; keys-entries&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                              &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${author editor}${date urldate} :: ${title}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-roam-capture- &lt;/span&gt;&lt;span&gt;:templates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                       &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;reference&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; plain&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;%?&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;:if-new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file+head &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;references/${citekey}.org&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                             &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:properties:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:roam_refs: [cite:@${citekey}]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:end:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;#+title: ${title}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;#+filetags: %(kb/insert-lit-category)&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;:immediate-finish&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;:unnarrowed&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                       &lt;/span&gt;&lt;span&gt;:info&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:citekey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt; keys-entries&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                       &lt;/span&gt;&lt;span&gt;:node&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-roam-node-create &lt;/span&gt;&lt;span&gt;:title&lt;/span&gt;&lt;span&gt; title&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                       &lt;/span&gt;&lt;span&gt;:props&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;:finalize&lt;/span&gt;&lt;span&gt; find-file&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I add it to an accessible keybinding:&lt;sup&gt;&lt;a href=&quot;#fn-9&quot;&gt;[9]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:general&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;kb/note-keys                           &lt;/span&gt;&lt;span&gt;; global-map&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;(&lt;/span&gt;&lt;span&gt;kb/org-roam-node-from-cite &lt;/span&gt;&lt;span&gt;:wk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Citar-capture&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Advising &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; (Outdated) &lt;a href=&quot;#h:20241106T044538.716623&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Jul 20, 2023&lt;/span&gt;  &lt;/time&gt; &lt;a href=&quot;https://github.com/emacs-citar/citar/commit/648ef552283fd9de18e6ccdf088d55fa26fe3cd8&quot;&gt;Upstream has recently merged&lt;/a&gt; changes to &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt;, renaming it to &lt;code&gt;citar-org-update-prefix-suffix&lt;/code&gt; and ensuring that a single space is left between citekeys and their suffixes. Therefore, the code directly below is now unnecessary.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;A useful command is &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt;. This command sets the prefix and suffix of a citation key (a single citation can have multiple keys). This is notable since a citation’s suffix is where you provide a locator (e.g. a page number). The command is bound to &lt;code&gt;M-p&lt;/code&gt; when the point is on a citation key.&lt;/p&gt;
&lt;p&gt;Before advising &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt;, I first advise &lt;code&gt;org-cite-insert&lt;/code&gt; such that &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; is run immediately after inserting a citation:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Run &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;citar-org-update-pre-suffix&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; after inserting a citation to immediately&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; set its prefix and suffix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;advice-add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;org-cite-insert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&apos;(&lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;save-excursion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;left-char&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; First move point inside citation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-org-update-pre-suffix&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A limitation with this code is that this only calls &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; on the last citation key, which is fine when only one key is inserted at once, and not when multiple are inserted. (Though, &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; can still be called manually on the other citation keys afterward.)&lt;/p&gt;
&lt;p&gt;Additionally, I override &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; with my own version which adds the following functionality:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Temporarily enable &lt;a href=&quot;https://github.com/jorgenschaefer/typoel&quot;&gt;typo-mode&lt;/a&gt;.&lt;sup&gt;&lt;a href=&quot;#fn-10&quot;&gt;[10]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Avoid manually inserting a separating space in the suffix.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; kb/citar-org-update-pre-suffix&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Change the pre/suffix text of the reference at point.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;My version also adds a space in the suffix so I don&apos;t always have&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;to manually add one myself.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;interactive&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Enable &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;typo&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; typographic character cycling in minibuffer. Particularly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; useful in adding en- and em-dashes in citation suffixes (e.g. for page&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; ranges)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;featurep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;typo)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-mode-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;typo-mode))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Enable dashes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let* &lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;datum &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-context&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;datum-type &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-type datum&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ref &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;eq&lt;/span&gt;&lt;span&gt; datum-type &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;citation-reference)&lt;/span&gt;&lt;span&gt; datum&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Not on a citation reference&lt;/span&gt;&lt;span&gt;&quot;)&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-property &lt;/span&gt;&lt;span&gt;:key&lt;/span&gt;&lt;span&gt; ref&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;;; TODO handle space delimiter elegantly.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pre &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;read-string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Prefix text: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-property &lt;/span&gt;&lt;span&gt;:prefix&lt;/span&gt;&lt;span&gt; ref&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;post &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;read-string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Suffix text: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-property &lt;/span&gt;&lt;span&gt;:suffix&lt;/span&gt;&lt;span&gt; ref&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;;; Change post to automatically have one space prior to any user-inputted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;;; suffix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq post&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;replace-regexp-in-string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;\&lt;/span&gt;&lt;span&gt;s-*&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;; If there is nothing of substance (e.g. an empty string)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;replace-regexp-in-string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;^[&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;s-]*&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Only begin with one space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setf &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;buffer-substring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-property &lt;/span&gt;&lt;span&gt;:begin&lt;/span&gt;&lt;span&gt; ref&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                            &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-property &lt;/span&gt;&lt;span&gt;:end&lt;/span&gt;&lt;span&gt; ref&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-element-interpret-data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;`(&lt;/span&gt;&lt;span&gt;citation-reference&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;:key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;key &lt;/span&gt;&lt;span&gt;:prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;pre &lt;/span&gt;&lt;span&gt;:suffix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;post&lt;/span&gt;&lt;span&gt;)))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Remove hook if it was added earlier&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;remove-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;minibuffer-mode-hook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;typo-mode))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;advice-add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;citar-org-update-pre-suffix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:override&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/citar-org-update-pre-suffix)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;One can also add this command to &lt;code&gt;citar-citation-map&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;#fn-11&quot;&gt;[11]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3&gt;Aesthetics &lt;a href=&quot;#aesthetics&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Finally, we can change the way the &lt;code&gt;citar&lt;/code&gt; interface appears. The most relevant variables are &lt;code&gt;citar-templates&lt;/code&gt; and &lt;code&gt;citar-symbols&lt;/code&gt;. Below is my configuration for these variables. Notably, my definition for &lt;code&gt;citar-symbols&lt;/code&gt; utilizes &lt;code&gt;all-the-icons&lt;/code&gt; icons to fancify the candidates (&lt;code&gt;all-the-icons&lt;/code&gt; must be installed in order to have the faces below available):&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-templates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;((&lt;/span&gt;&lt;span&gt;main &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${author editor:30}   ${date year issued:4}    ${title:110}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;suffix &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;     ${=type=:20}    ${tags keywords keywords:*}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;preview &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${author editor} (${year issued date}) ${title}, ${journal journaltitle publisher container-title collection-title}.&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;note &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;#+title: Notes on ${author editor}, ${title}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; For new notes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Configuring all-the-icons. From&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; https://github.com/bdarcus/citar#rich-ui&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-symbols&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`((&lt;/span&gt;&lt;span&gt;file ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-faicon &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;file-o&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;all-the-icons-green&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-0.1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-faicon &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;file-o&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/citar-icon-dim&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-0.1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;note ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-material &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;speaker_notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;all-the-icons-blue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-0.3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-material &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;speaker_notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/citar-icon-dim&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-0.3&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;link ,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-octicon &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;all-the-icons-orange&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.01&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;all-the-icons-octicon &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:face&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;kb/citar-icon-dim&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:v-adjust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.01&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;citar-symbol-separator &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Here we define a face to dim non &apos;active&apos; icons, but preserve alignment.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Change to your own theme&apos;s background(s)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defface&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kb/citar-icon-dim&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Change these colors to match your theme. Using something like&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;face-attribute&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; to get the value of a particular attribute of a face might&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; be more convenient.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;((((&lt;/span&gt;&lt;span&gt;background dark&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:foreground&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;#212428&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;(((&lt;/span&gt;&lt;span&gt;background light&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:foreground&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;#f0f0f0&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Face for having icons&apos; color be identical to the theme&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;background when &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;&quot;not shown&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;&quot;.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Here’s the end-result:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kristofferbalintona.me/_astro/2022-06-15_12-52-26_screenshot.BpWLWz0W_20jtuG.webp&quot; alt=&quot;img&quot; loading=&quot;lazy&quot; width=&quot;1911&quot; height=&quot;1057&quot; /&gt;&lt;figcaption&gt;Visual improvements to &lt;code&gt;citar&lt;/code&gt;’s minibuffer interface.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2&gt;Other interesting packages &lt;a href=&quot;#other-interesting-packages&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h3&gt;Zotero &lt;a href=&quot;#zotero&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.zotero.org/support/&quot;&gt;Zotero&lt;/a&gt; isn’t an Emacs package, but it is crucial to most users’ workflow, so it deserves attention. Zotero makes gathering, storing, and exporting bibliographic data infinitely easier. For instance, an ISBN or DOI of a source is all that is necessary for an entry’s fields to be populated. There are two things to note about my setup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I install the &lt;a href=&quot;https://retorque.re/zotero-better-bibtex/installation/&quot;&gt;BetterBibLaTex&lt;/a&gt; add-on (see its features in the &lt;a href=&quot;https://retorque.re/zotero-better-bibtex/#features&quot;&gt;official documentation page&lt;/a&gt;. Its main benefits include unique citation key generation and exporting facilities),&lt;/li&gt;
&lt;li&gt;and export my library using the BetterBibLaTeX format. I also tick the “Keep Updated” option; this continually updates the &lt;code&gt;.bib&lt;/code&gt; file as I make changes to my library. I then point &lt;code&gt;org-cite-global-bibliography&lt;/code&gt; and &lt;code&gt;citar-bibliography&lt;/code&gt; to this file.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Additionally, for over a year now, I’ve been using Zotero’s own PDF viewer and annotator. &lt;a href=&quot;https://www.zotero.org/blog/zotero-6/&quot;&gt;Until recently&lt;/a&gt;, this feature had only been available in &lt;a href=&quot;https://www.zotero.org/support/dev_builds&quot;&gt;Zotero Beta&lt;/a&gt;, but it is now merged onto the main branch. Though it isn’t powerful, it gets the job done for me, and the convenience is what sells it.&lt;/p&gt;
&lt;p&gt;Finally, a &lt;em&gt;very handy&lt;/em&gt; tip is to &lt;strong&gt;use the CSL files that Zotero already provides&lt;/strong&gt; (credit to &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html#working-with-zotero&quot;&gt;this section of tecosaur’s guide&lt;/a&gt;). The CSL files (which provide citation styles) are located in &lt;code&gt;ZOTERO_DIR/styles/&lt;/code&gt;. You can set &lt;code&gt;org-cite-csl-styles-dir&lt;/code&gt; to this path:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;org-cite-csl-styles-dir&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;expand-file-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;~/Documents/Zotero/styles/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3&gt;Embark &lt;a href=&quot;#embark&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/oantolin/embark/&quot;&gt;Embark&lt;/a&gt; provides menus (essentially keymaps) based on “context,” that is, the type of thing the point is on. As a result, &lt;code&gt;embark&lt;/code&gt; has immense potential. &lt;code&gt;Citar&lt;/code&gt; is built to exploit &lt;code&gt;embark&lt;/code&gt; without requiring it—for instance, see &lt;code&gt;citar-citation-map&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Org-roam-bibtex &lt;a href=&quot;#org-roam-bibtex&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/org-roam/org-roam-bibtex&quot;&gt;Org-roam-bibtex&lt;/a&gt; integrates &lt;a href=&quot;https://github.com/org-roam/org-roam&quot;&gt;org-roam&lt;/a&gt; with citation systems, such as &lt;code&gt;org-cite&lt;/code&gt;. This packages allows &lt;code&gt;org-roam&lt;/code&gt; to recognize particular nodes as bibliographic (i.e. associated with a particular &lt;code&gt;.bib&lt;/code&gt; entry).&lt;/p&gt;
&lt;p&gt;Additionally, as &lt;a href=&quot;https://www.reddit.com/r/orgmode/comments/vchefn/comment/icg0sha/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;as &lt;code&gt;citar&lt;/code&gt;’s author, u/bdarcus, shares here&lt;/a&gt;, there is work being done on &lt;code&gt;citar&lt;/code&gt;’s end to more tightly integrate &lt;code&gt;org-roam&lt;/code&gt; with &lt;code&gt;citar&lt;/code&gt;, in the form of &lt;code&gt;citar-org-roam&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Citar-capf &lt;a href=&quot;#citar-capf&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/mclear-tools/citar-capf&quot;&gt;Citar-capf&lt;/a&gt; provides a &lt;code&gt;complation-at-point-function&lt;/code&gt;&lt;sup&gt;&lt;a href=&quot;#fn-12&quot;&gt;[12]&lt;/a&gt;&lt;/sup&gt; for citations. However, if you’re reading this in the future, there’s a likely chance that &lt;a href=&quot;https://github.com/emacs-citar/citar/commit/784791a090f9a2ed293f8b3ebd5636c690b718bc&quot;&gt;this commit&lt;/a&gt; would have been merged. The commit merges &lt;code&gt;citar-capf&lt;/code&gt; with &lt;code&gt;citar&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Org-ref &lt;a href=&quot;#org-ref&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jkitchin/org-ref&quot;&gt;Org-ref&lt;/a&gt; has historically been the dominant citation system for &lt;code&gt;org-mode&lt;/code&gt;. I elect to use &lt;code&gt;org-cite&lt;/code&gt; instead because (i) it comes with &lt;code&gt;org-mode&lt;/code&gt;, meaning there is one less conceptual- and configuration-layer to navigate, (ii) Moreover, &lt;code&gt;org-ref&lt;/code&gt; uses a format that follows &lt;code&gt;org&lt;/code&gt; conventions less closely, and (iii) I have read that is arguably more robust and future-proof. Nevertheless, some users still prefer it.&lt;/p&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Jun 15, 2022&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Better clarity in &lt;a href=&quot;#h:20241106T044538.716623&quot;&gt;Advising &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt; (Outdated)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Mention the merging of &lt;code&gt;citar-capf&lt;/code&gt; into &lt;code&gt;citar&lt;/code&gt; (see &lt;a href=&quot;#citar-capf&quot;&gt;Citar-capf&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Added &lt;a href=&quot;#embark&quot;&gt;Embark&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Mention &lt;code&gt;citar-org-roam&lt;/code&gt; in &lt;a href=&quot;#org-roam-bibtex&quot;&gt;Org-roam-bibtex&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Made comments clarifying &lt;code&gt;kb/bib-files&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add screenshot that showcases visually improved &lt;code&gt;citar&lt;/code&gt; interface (see &lt;a href=&quot;#aesthetics&quot;&gt;Aesthetics&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Jun 19, 2022&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;a href=&quot;#helpful-sources&quot;&gt;Helpful sources&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Change processor explanations to include the &lt;code&gt;natbib&lt;/code&gt; processor.&lt;/li&gt;
&lt;li&gt;Change processor explanations to recognize the difference between plain-text and rendered text.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Jul 20, 2023&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Noted that some package-specific information in this article may be outdated.&lt;/li&gt;
&lt;li&gt;Noted update to &lt;code&gt;citar-org-update-pre-suffix&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Aug 19, 2023&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Mentioned &lt;code&gt;citar-org-roam&lt;/code&gt; as preferable to any desired integration between &lt;code&gt;org-roam&lt;/code&gt; and &lt;code&gt;citar&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Nov 20, 2023&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Updated GitLab Gist.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;The &lt;code&gt;basic&lt;/code&gt; processor provides bare functionality and should never be preferred over the alternative, if possible.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;See &lt;a href=&quot;#configuration&quot;&gt;Configuration&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This is an &lt;code&gt;org-export&lt;/code&gt; backend. This means that, for instance, &lt;code&gt;md&lt;/code&gt; refers to the &lt;code&gt;org-export&lt;/code&gt; &lt;code&gt;md&lt;/code&gt; backend as well as any other derived backends. Read the documentation for &lt;code&gt;org-export-define-derived-backend&lt;/code&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-4&quot;&gt;[4]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Notice that a citation style is required for the &lt;code&gt;csl&lt;/code&gt; processor, and not for the &lt;code&gt;bibtex&lt;/code&gt; processor.&lt;/p&gt;  &lt;a href=&quot;#fnref-4&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-5&quot;&gt;[5]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Be aware that I use &lt;code&gt;use-package&lt;/code&gt;’s &lt;code&gt;:custom-face&lt;/code&gt; keyword to redefine these two faces. One can just as easily use the built-in &lt;code&gt;defface&lt;/code&gt; of &lt;code&gt;set-face-attribute&lt;/code&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-5&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-6&quot;&gt;[6]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Also see &lt;a href=&quot;https://blog.tecosaur.com/tmio/2021-07-31-citations.html#basic-usage&quot;&gt;this section of tecosaur’s guide&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-6&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-7&quot;&gt;[7]&lt;/a&gt; &lt;div&gt; &lt;p&gt;You can also just use the built-in &lt;code&gt;define-key&lt;/code&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-7&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-8&quot;&gt;[8]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This assumes that you have &lt;code&gt;org-roam-bibtex&lt;/code&gt; installed and enabled. See &lt;a href=&quot;#org-roam-bibtex&quot;&gt;Org-roam-bibtex&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-8&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-9&quot;&gt;[9]&lt;/a&gt; &lt;div&gt; &lt;p&gt;&lt;code&gt;kb/note-keys&lt;/code&gt; is my own &lt;code&gt;general.el&lt;/code&gt; leader key. I’ve mapped its prefix to &lt;code&gt;C-c n&lt;/code&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-9&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-10&quot;&gt;[10]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I prefer directly inserting curly quotes, em-dashes, and en-dashes into my buffers. I enable &lt;code&gt;typo-mode&lt;/code&gt; here so that typing page ranges properly inserts en-dashes.&lt;/p&gt;  &lt;a href=&quot;#fnref-10&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-11&quot;&gt;[11]&lt;/a&gt; &lt;div&gt; &lt;p&gt;See &lt;a href=&quot;#embark&quot;&gt;Embark&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-11&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-12&quot;&gt;[12]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Also see &lt;a href=&quot;https://kristofferbalintona.me/articles/Vertico-Marginalia-All-the-icons-completion-and-Orderless/&quot;&gt;Vertico, Marginalia, All-the-icons-completion, and Orderless&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-12&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Tue, 14 Jun 2022 23:52:00 GMT</pubDate><category>Emacs</category></item><item><title>Knowledge: A Very Short Introduction by Jennifer Nagel</title><link>https://kristofferbalintona.me/posts/202301030514/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202301030514/</guid><description>&lt;p&gt;&lt;a href=&quot;https://www.goodreads.com/book/show/20749121-knowledge&quot;&gt;Knowledge: A Very Short Introduction by Jennifer Nagel (2014)&lt;/a&gt; &lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; is a phenomenal introduction to epistemology. Spanning a little over 100 pages, one would not expect an in-depth overview of the field. Indeed, Nagel does not bog down the reader with terms nor the intricacies epistemologists would be interested in—but the ideas often linger in the air for the reader to dwell on, and Nagel doesn’t fall short in teasing the magnitude of what hasn’t been explained. Unequivocal, the pace of the book is digestible yet the book demands the reader stay on their toes—each paragraph is productive.&lt;/p&gt;
&lt;p&gt;Nagel is incredibly accessible and engaging. He does an outstanding job (i) using demonstrative examples accessible to the layperson, (ii) inserting examples that probe the inquiry, (iii) and treating each topic evenhandedly, not privileging one view over another (at least, from the perspective of a novice reader). Consequently, the reader feels naturally propelled from one inquiry to another. This is another strength of Nagel: the book is inquiry-driven, that is, grounded by the common sense questions that follow an exposition. He slithers through the touchstone topics of epistemology with ease: skepticism, rationalism and empiricism, internalism and externalism.&lt;/p&gt;
&lt;p&gt;Of course, such brevity can only be achieved by omitting a lot of what would otherwise be interesting to the reader. Nagel doesn’t present even approximations of a “final answer;” there are only open questions here. But, the book fulfills the role readers would expect it to fill: it enticingly introduces subtopics within epistemology that invites curiosity.&lt;/p&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;The Oxford &lt;a href=&quot;https://global.oup.com/academic/content/series/v/very-short-introductions-vsi/?cc=us&amp;amp;lang=en&amp;amp;&quot;&gt;A Very Short Introduction&lt;/a&gt; series is a phenomenal set of introductory books. The series is highly regarded and spans dozens of fields and subfields. Each entry in the series generally maintains more-or-less a standard of brevity (~100 pages) and clarity.&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>Tue, 03 Jan 2023 05:14:00 GMT</pubDate><category>Philosophy</category></item><item><title>Think: A compelling introduction to philosophy by Simon Blackburn</title><link>https://kristofferbalintona.me/posts/202301102210/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202301102210/</guid><description>&lt;p&gt;I first encountered a mention of Simon Blackburn’s 1999 &lt;a href=&quot;https://www.goodreads.com/en/book/show/1038873.Think&quot;&gt;&lt;em&gt;Think: A compelling introduction to philosophy&lt;/em&gt;&lt;/a&gt; when I was looking for a good introductory book to philosophy. At the time, I was a Senior in high school not having read an once of philosophy. The hope was for something broad yet with an appreciation for nuance. It didn’t take long for me to discover &lt;em&gt;Think&lt;/em&gt;, one of the few books &lt;a href=&quot;https://www.reddit.com/r/philosophy/wiki/readinglist/#wiki_general_introductory_texts&quot;&gt;r/philosophy recommends as a general introduction&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We may indeed hope that it survives in the seas of thought I have tried to stir up this chapter. (269)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Found at the end of one of the later chapters, Blackburn’s style of teaching can be summed up in the above. Blackburn dares &lt;em&gt;to stir, complicate, and entangle&lt;/em&gt; philosophical ideas in an introduction to philosophy—but not carelessly. Blackburn is extremely cautious (and successful) at straddling the line between writing that is intimidating, burdensome, or vexing to the novice and writing that is tantalizing and invites curiosity. His writing is not technical but manages to respect the necessary nuances of exploring the landscape of philosophy. For instance, in the span of about ten pages (namely 200–210), Blackburn covers formal logic and its interactions with language (i.e. pragmatics and semantics). Having been a topic I later learned about across several months in university, I recognized the sheer land that Blackburn was covering. This is one of many nuggets of gold that the novice may recognize but will only appreciate as they learn more about philosophy. Blackburn presents connections only an experienced philosopher could make, making the book useful even to someone somewhat studied. In sum, Blackburn exposes nuance without technical burden.&lt;/p&gt;
&lt;p&gt;Furthermore, the bountiful beginner-friendly working examples and analogies are in the best interest of the novice philosopher. Blackburn captures an analogy with a clarity of mind to point to a fishiness or suspicion the reader readily picks up on. The points he makes are expectedly down-to-Earth and digestible and have the dual purposes of exposition and highlighting implications that drive the inquiry forward. And he returns to many analogies throughout, extending them hundreds of pages later. He uses his examples more like “intellectual toys,” twisting them until they break and make way for further progression. This all contributes to an interconnected conceptual map for the reader. At the very least, he is effective at &lt;em&gt;familiarizing&lt;/em&gt; the reader with philosophical ideas.&lt;/p&gt;
&lt;p&gt;But &lt;em&gt;Think&lt;/em&gt; is not a survey, organized by author or period. Though the book is not historically propelled, it is historical in the sense that Blackburn sits as a judge like a historian, only caring about an idea insofar as it bears relevance and import. The reader who picks up &lt;em&gt;Think&lt;/em&gt; is in the business of fostering their curiosity, and Blackburn’s inquiry-driven tour caters to precisely this audience. Blackburn captures the common sense objections at the tip of the layperson’s tongue into deftly formulated argument or suspicion that motivates the reader to flip to the next stage of the journey. Time and time again a chain of relationships like this develops: “X idea was a natural offshoot of the shortcomings of Y idea that came before or existed with X.” This is a demonstration of Blackburn’s philosophical and pedagogical expertise. Organized by questions, Blackburn is indifferent to chronology and author; they only influence his decisions insofar as they are relevant to the progression of ideas. He transitions smoothly between sections and chapters as if the topics were meant to be placed in that order; descriptions of Hume’s problem of induction (Hume was writing in the 1700s) are adjacent to descriptions of Frege’s proto-quantificational logic (the turn of the nineteenth century). Recognizing conceptual continuities is a boon for any student trying to organically yet thoroughly learn any field. Though this necessarily blurs conceptually (e.g. logic to Bayesian statistics in 211–24), it serves the more important purpose of familiarizing and guiding. Indeed, it is &lt;em&gt;compelling&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Finally, Blackburn does not fear making his philosophical preferences apparent. Some may disagree with his choice to openly state his ultimate positions to the learning reader, but a philosopher will necessarily hold preferences, so an author that comes off as impartial is merely feigning. Take the last chapter. Blackburn declaratively rebukes psychological egoism, and his rebuke is the entry point to the rest of the chapter. Importantly, this does not render the book dogmatic or one-sided. Because Blackburn does not bury his intent, the reader is aware of where they are being pulled to and is therefore armed to push back. Overall, I found Blackburn mindful of the novice’s concerns yet respectful to the depths of the topics.&lt;/p&gt;</description><pubDate>Tue, 10 Jan 2023 22:10:00 GMT</pubDate><category>Philosophy</category></item><item><title>When the Noise Falls Away</title><link>https://kristofferbalintona.me/posts/202301290756/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202301290756/</guid><description>&lt;p&gt;I found my room remarkably quiet. I returned passed sunset, yet my suitemates hadn’t arrive at our dorm yet. I swung my room’s door open and… nothing. Nothing grand, not that I was expecting anything. The emptiness was just what struck me. How empty the room felt. My pre-move cleaning is responsible—I was happy with that. But the room no longer wears the mantle it does when things are amiss and the semester is bustling. It’s just a room. It doesn’t radiate companionship like a humble abode would.&lt;/p&gt;
&lt;p&gt;I sit and contemplate my trip, and realize something crucial. There comes with traveling—traveling alone, that is—an intense interior awareness. A mental state characterized by the feeling of “no one else is the room but me.” By “room” I mean my mental space. School assignments, social pressures, household responsibilities, music, videos, friends… these all normally clutter the mind, forms of interrupting noise vying for space. All layers of stimuli that demand attention, distract. From what? From the Self experiencing. The static noise of everyday experience shrouds the Self, the only constant. Traveling is like a nice, warm shower in that it disarms the defensive walls we instinctively erect around our internal reality. Without mental cruft to lure, the only option left is for the Self to turn inward and confront your internal shadow, secrets and all. Traveling renders me barren, leaving my mind to confront itself.&lt;/p&gt;
&lt;p&gt;You only get such an interiority in early mornings, warm showers, withdrawn travel, and the quietude of an empty dorm room. Don’t underestimate what’s left when you deprive yourself of external stimuli. Those moments show a wholly clear tint of reality.&lt;/p&gt;
&lt;p&gt;Something I once heard comes to mind. Entertain the time period when lovers didn’t have the ability to see one another once parted. This was the world before it was connected, before trains, cars, and phones. How much would that affect the intensity of your emotions? Wouldn’t that transform moments between you? Might love have a truly different taste?&lt;/p&gt;</description><pubDate>Sun, 29 Jan 2023 07:56:00 GMT</pubDate></item><item><title>Neat behavior of M-x occur</title><link>https://kristofferbalintona.me/posts/202411090600/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202411090600/</guid><description>&lt;p&gt;Having used Emacs for several years now, I somehow hadn’t come across the prefix argument and active region behavior for one of the most well-known commands: &lt;code&gt;occur&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Below is the docstring of &lt;code&gt;occur&lt;/code&gt; reads, with the relevant portions preserved:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;occur is an interactive native-comp-function in replace.el.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It is bound to M-s o.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;(occur REGEXP &amp;amp;optional &lt;strong&gt;NLINES REGION&lt;/strong&gt;)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Inferred type: (function (t &amp;amp;optional t t) t)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Show all lines in the current buffer containing a match for REGEXP.&lt;br /&gt;
If a match spreads across multiple lines, all those lines are shown.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;[…]&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Each line is displayed with NLINES lines before and after, or -NLINES&lt;br /&gt;
before if NLINES is negative.&lt;br /&gt;
NLINES defaults to list-matching-lines-default-context-lines.&lt;br /&gt;
Interactively it is the prefix arg.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Optional arg REGION, if non-nil, mean restrict search to the&lt;br /&gt;
specified region.  Otherwise search the entire buffer.*&lt;br /&gt;
*REGION must be a list of (START . END) positions as returned by&lt;br /&gt;
region-bounds.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;[…]&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;When NLINES is a string or when the function is called&lt;br /&gt;
interactively with prefix argument without a number (C-u alone&lt;br /&gt;
as prefix) the matching strings are collected into the ‘*Occur*’&lt;br /&gt;
buffer by using NLINES as a replacement regexp.  NLINES may&lt;br /&gt;
contain \&amp;amp; and \N which convention follows replace-match.&lt;br /&gt;
For example, providing “defun\s +$\S +$” for REGEXP and&lt;br /&gt;
“\1” for NLINES collects all the function names in a lisp&lt;br /&gt;
program.  When there is no parenthesized subexpressions in REGEXP&lt;br /&gt;
the entire match is collected.  In any case the searched buffer&lt;br /&gt;
is not modified.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;[…]&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;So:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When called on a region, on that region is searched.&lt;/li&gt;
&lt;li&gt;When called with a numerical prefix argument, that many lines before and after every match is added to the search results. (This reminds me of &lt;code&gt;next-screen-context-lines&lt;/code&gt;.) &lt;em&gt;This functionality is particularly useful to me since added context is sometimes necessary.&lt;/em&gt;&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;When called with a universal argument, just the matching string (not the entire line) is inserted into a line in a read-only buffer.&lt;/li&gt;
&lt;li&gt;If called from elisp and &lt;code&gt;NLINES&lt;/code&gt; is provided (as a regexp string), then the behavior is like &lt;code&gt;C-u&lt;/code&gt; but matches can be modified like &lt;code&gt;replace-match&lt;/code&gt;. (See &lt;code&gt;(elisp) Replacing Match&lt;/code&gt; for more information.)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Also, searching “NLINES” with &lt;code&gt;apropos-documentation&lt;/code&gt; brings up a few other built-in commands that have similar functionality. &lt;code&gt;isearch-occur&lt;/code&gt;, &lt;code&gt;multi-occur&lt;/code&gt;, &lt;code&gt;list-matching-lines&lt;/code&gt;, and &lt;code&gt;occur-context-lines&lt;/code&gt; to name a few.&lt;/p&gt;
&lt;p&gt;Pretty neat!&lt;/p&gt;
&lt;h2&gt;Further Reading &lt;a href=&quot;#further-reading&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.masteringemacs.org/article/searching-buffers-occur-mode&quot;&gt;Searching and Editing in Buffers with Occur Mode - Mastering Emacs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/emacs/comments/1466y8d/what_do_you_use_for_occur/&quot;&gt;What do you use for occur?  - Reddit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://protesilaos.com/codelog/2019-08-04-emacs-occur/&quot;&gt;Emacs’ powerful OCCUR function in practice | Protesilaos Stavrou&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.emacswiki.org/emacs/OccurMode&quot;&gt;EmacsWiki: Occur Mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I sometimes use &lt;code&gt;occur-edit-mode&lt;/code&gt; (bound to &lt;code&gt;e&lt;/code&gt; in &lt;code&gt;occur-mode&lt;/code&gt; buffers), and the added context lines can be relevant to the edits I want to make to the matched text.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Sat, 09 Nov 2024 06:00:00 GMT</pubDate><category>Emacs</category></item><item><title>A surprising upside to vc-dir marks over magit</title><link>https://kristofferbalintona.me/posts/202411270440/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202411270440/</guid><description>&lt;p&gt;Vc.el is Emacs’s built-in interface for version control CLI tools. With respect to Git, magit has for several years now been the most favored (with respect to popularity) Git&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; interface. At least in the r/emacs subreddit, magit is frequently considered a killer-feature—an irreplaceable feature unique to Emacs.&lt;/p&gt;
&lt;p&gt;For the most part I am inclined to agree. However, in the last few months, I’ve been regularly experimenting using &lt;code&gt;vc&lt;/code&gt;. This is in part motivated by recent improvements to &lt;code&gt;vc&lt;/code&gt;’s implementation of Git, and another part motivated by a curiosity to see whether I’d end up enjoying some parts of the &lt;code&gt;vc&lt;/code&gt;-way of doing things over the magit-way of doing things.&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;On such insight has been the surprising benefits of calling &lt;code&gt;vc-dir&lt;/code&gt; instead of &lt;code&gt;magit-status&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;The nicety of &lt;code&gt;vc-dir&lt;/code&gt; marks &lt;a href=&quot;#the-nicety-of-vc-dir-marks&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In &lt;code&gt;magit-status&lt;/code&gt;, I would typically stage various files and hunks and commit them when ready. &lt;code&gt;vc&lt;/code&gt; does not use Git’s “staging” concept (because not all version control systems use such a concept). So instead, to achieve something analogous, a user might call &lt;code&gt;vc-dir&lt;/code&gt; (or, much more commonly for me, &lt;code&gt;project-vc-dir&lt;/code&gt;), mark edited files (or entire directories!) using &lt;code&gt;vc-dir-mark&lt;/code&gt; (&lt;code&gt;m&lt;/code&gt;), and check out (commit) those changes via &lt;code&gt;vc-next-action&lt;/code&gt; (&lt;code&gt;v&lt;/code&gt;) or see a diff of those changes with &lt;code&gt;vc-diff&lt;/code&gt; (&lt;code&gt;=&lt;/code&gt;) and commit the changes in that diff-mode buffer (&lt;code&gt;v&lt;/code&gt;).&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;A problem for the magit interface, however, is &lt;em&gt;visual clarity&lt;/em&gt; when it comes to focusing on changes in a certain subset of files. For example, sometimes I am working with changes in files within a single directory alongside many other uncommitted changes elsewhere in the repository. To make a commit with magit, I would need to navigate past or fold changed hunks/files I want to ignore. With many unstaged changes this means many files to ignore. &lt;strong&gt;This leads to a significant reduction in visual clarity since I end up having to ignore more files than I’m currently working on.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There is a subtle solution in vc.el. The secret lies in the fact that &lt;em&gt;marks, which can be used to selectively create diff buffers and commit changes from those buffers, are preserved&lt;/em&gt; in &lt;code&gt;vc-dir&lt;/code&gt; buffers after changes are committed. A mark is only removed once the corresponding line is removed via something like &lt;code&gt;vc-dir-hide-up-to-date&lt;/code&gt; (&lt;code&gt;x&lt;/code&gt;) or &lt;code&gt;vc-dir-kill-line&lt;/code&gt; (&lt;code&gt;C-k&lt;/code&gt;). Marks are magical because they let me &lt;em&gt;focus&lt;/em&gt; on the files relevant to my current work: I can mark the files and directories I am focusing on &lt;strong&gt;then call &lt;code&gt;vc-next-action&lt;/code&gt; in the &lt;code&gt;vc-dir&lt;/code&gt; buffer to commit changes only in those files and directories&lt;/strong&gt; (or, if I want to be selective about the hunks I commit: first call &lt;code&gt;vc-diff&lt;/code&gt; to see the diff of just the marked files, kill/remove the hunks I don’t want to commit, then &lt;code&gt;vc-next-action&lt;/code&gt;).Then I can write more changes and make more commits in the same way. (Furthermore, while this &lt;code&gt;vc&lt;/code&gt; workflow might seem like it would necessarily involve many more keystrokes, I found this not to be the case under certain scenarios.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In short,&lt;/strong&gt; with vc.el, a really efficient workflow is&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;vc-diff&lt;/code&gt; or &lt;code&gt;vc-root-diff&lt;/code&gt; → &lt;code&gt;vc-next-action&lt;/code&gt; and&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vc-dir&lt;/code&gt; (with persistent marks) → &lt;code&gt;vc-diff&lt;/code&gt; → &lt;code&gt;vc-next-action&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The latter is unique to vc.el, and a feature I don’t think the magit UI can replicate. So while magit can sometimes become visually cluttered, &lt;code&gt;vc-dir&lt;/code&gt; marks let users focus on their current work by easily excluding &lt;em&gt;from view&lt;/em&gt; files and directories one is not concerned with currently.&lt;/p&gt;
&lt;h2&gt;A caveat &lt;a href=&quot;#a-caveat&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Historically, I’ve found this especially fruitful when working on my literate Emacs config&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; (wherein any “single change” involves changes to the .org file as well as the resulting tangled file(s)) and Emacs packages. Still, I think I prefer magit in cases where the staging functionality of Git is crucial. For instance, I have a repository that houses all my org notes and org-agenda files. There are frequently many changes for this repository, so the convenience of staging/unstaging has been crucial for me. In cases like these, I haven’t found an equivalent for vc.el yet.&lt;/p&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Mar 25, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Add clarifying prose to paragraph.&lt;/li&gt;
&lt;li&gt;Change formatting of “vc.el” and “magit.”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;magit is an interface for Git, whereas vc.el is an interface for other version control tools, albeit older ones, some of which may follow a non-decentralized version control paradigm (read the Emacs Info node &lt;code&gt;(emacs) Version Control Systems&lt;/code&gt; for more information):&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;CVS&lt;/li&gt;
&lt;li&gt;Subversion (svn)&lt;/li&gt;
&lt;li&gt;SCCS&lt;/li&gt;
&lt;li&gt;CSSC&lt;/li&gt;
&lt;li&gt;Mercurial (hg)&lt;/li&gt;
&lt;li&gt;Bazaar (bzr)&lt;/li&gt;
&lt;li&gt;SRC (src)&lt;/li&gt;
&lt;/ul&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;A philosophical tangent: the interface of a tool (digital or analog/physical) influences how users interact with that tool and how users accomplish the purposes of the tool. As such, what seems at first as a subtle difference in workflow or interface to achieve the same end almost always overlooks aspects relevant to the workflow’s effectiveness.&lt;/p&gt;&lt;p&gt;For instance, users of Emacs will readily recognize that Emacs is thoroughly characterized by an “emacs-y” way of doing things. The total network of keybinds, conventions, and procedures of using Emacs might accomplish the same purposes as other software (combined or standalone), but this specific network of “ways to interface with Emacs-as-a-tool” enables Emacs to offer a uniquely effective experience.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;If I want to commit changes with much fewer unstaged changes present, then a faster method would be: call &lt;code&gt;vc-root-diff&lt;/code&gt; (&lt;code&gt;C-x v D&lt;/code&gt;), modify the diff-mode buffer accordingly with &lt;code&gt;diff-hunk-kill&lt;/code&gt; (&lt;code&gt;k&lt;/code&gt;) or &lt;code&gt;diff-delete-other-hunks&lt;/code&gt; (&lt;code&gt;C-c RET n&lt;/code&gt;; a recent addition to Emacs-30), then commit the changes with &lt;code&gt;vc-next-action&lt;/code&gt; (&lt;code&gt;v&lt;/code&gt;). &lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-4&quot;&gt;[4]&lt;/a&gt; &lt;div&gt; &lt;p&gt;See also &lt;a href=&quot;#target-1&quot;&gt;footnote 3&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-4&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Wed, 27 Nov 2024 04:40:00 GMT</pubDate><category>Emacs</category><category>VCS</category></item><item><title>Org-review: A way to never forget org-agenda todos</title><link>https://kristofferbalintona.me/posts/Org-review-A-way-to-never-forget-org-agenda-todos/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/Org-review-A-way-to-never-forget-org-agenda-todos/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#the-ideal-separating-now-and-very-soon-from-everything-else&quot;&gt;The ideal: Separating “now” and “very soon” from everything else&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#later&quot;&gt;“Later”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#unsure-when&quot;&gt;“Unsure when”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#never&quot;&gt;“Never”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#1-occlusion&quot;&gt;1: Occlusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#2-prioritization&quot;&gt;2: Prioritization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#3-reviewing&quot;&gt;3: Reviewing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#two-org-agenda-views&quot;&gt;Two org-agenda views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org-review-immediately-identify-which-tasks-need-addressing&quot;&gt;Org-review: Immediately identify which tasks need addressing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-ideal-separating-now-and-very-soon-from-everything-else-1&quot;&gt;The ideal: Separating “now” and “very soon” from everything else&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#later-1&quot;&gt;“Later”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#unsure-when-1&quot;&gt;“Unsure when”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#never-1&quot;&gt;“Never”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#1-occlusion-1&quot;&gt;1: Occlusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#2-prioritization-1&quot;&gt;2: Prioritization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#3-reviewing-1&quot;&gt;3: Reviewing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#two-org-agenda-views-1&quot;&gt;Two org-agenda views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org-review-immediately-identify-which-tasks-need-addressing-1&quot;&gt;Org-review: Immediately identify which tasks need addressing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#bonus-bespoke-org-agenda-scatter-function&quot;&gt;Bonus: bespoke org-agenda scatter function&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the last few months I’ve revamped my org-agenda workflow to a state I’ve never been more satisfied with. I’ll share here how &lt;a href=&quot;https://github.com/brabalan/org-review&quot;&gt;org-review&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; made it possible.&lt;/p&gt;
&lt;h2&gt;The ideal: Separating “now” and “very soon” from everything else &lt;a href=&quot;#the-ideal-separating-now-and-very-soon-from-everything-else&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In my view, the primary purpose of a “task management” is system is to show you only the tasks you need to be shown, while hiding the rest until it becomes urgent to do them, their importance to other tasks rise, or you simply feel like doing them now. &lt;strong&gt;As such, we should distinguish tasks which are relevant to “now” and “very soon” from everything else: “later,” “never,” and “unsure when.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’d bet (i) is a familiar and intuitive ideal for most Emacs users since we tend to be the type to think about the workflows/systems we use and how we might reshape them to suit our needs better. An org-agenda without (i) is like a workflow where one simply calls &lt;code&gt;M-x org-agenda t&lt;/code&gt; (“List of all todo entries”). It’ll be obvious to those who have hundreds or even thousands of todos how seeing a gigantic running list of all your tasks doesn’t help. We need to fulfill (i) because, otherwise, the looking at your todo list to decide what task you need to do now becomes a task in itself—and that means we expend time and energy figuring out &lt;em&gt;what&lt;/em&gt; to do rather than &lt;em&gt;doing&lt;/em&gt; what needs to be done.&lt;/p&gt;
&lt;h2&gt;”Later&quot; &lt;a href=&quot;#later&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;&quot;Unsure when&quot; &lt;a href=&quot;#unsure-when&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;&quot;Never” &lt;a href=&quot;#never&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;1: Occlusion &lt;a href=&quot;#1-occlusion&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As such, an ideal org-agenda means &lt;strong&gt;(i) occluding (hiding) or separating tasks non-relevant to the present&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;There are two common straightforward ways to fulfill (i):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Having an “inbox.” An inbox separates tasks which one has already committed to from ones they haven’t yet committed to.&lt;/li&gt;
&lt;li&gt;Add scheduling and deadline information to tasks and occlude (hide) them until they approach. This is to delay visibility of tasks until a date more appropriate to attending to that task.&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have used and continue to use both strategies to occlude tasks.&lt;/p&gt;
&lt;h2&gt;2: Prioritization &lt;a href=&quot;#2-prioritization&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;However, those two strategies are not enough. Even with an inbox and hiding tasks until their scheduled/deadline date approaches, I still had dozens (at least) of todos simultaneously visible in my org-agenda views. I committed to these tasks, but there was a problem: although I committed to all these tasks, &lt;em&gt;when considering factors such as urgency, life-priorities, mood, and time available, only a small portion of these tasks were ones I should be worked on now&lt;/em&gt;. The rest were ones that I could worry about later, whether next week, two weeks from now, a month from now, or some ambiguous, yet-to-be-determined point in the future.&lt;/p&gt;
&lt;p&gt;This suggested another pillar for my org-agenda: *(ii) the ability to discern&lt;/p&gt;
&lt;p&gt;Consequently, I naturally moved to crafting an org-agenda practice reliant on org-agenda’s built-in priorities and effort estimates. I had previously used priorities and time efforts sporadically, but&lt;/p&gt;
&lt;p&gt;My previous org-agenda set up tried to cut down the number of non-inbox todos by abusing the scheduling functionality of org. The functionality of deadlines remained as intended, but I re-tooled scheduling in an atypical way: &lt;strong&gt;a task’s scheduled date was the date I wanted to see that task again&lt;/strong&gt;. In my org-agenda views, the tasks meant for “now” were the ones whose scheduled date was today or in the past. &lt;em&gt;There was flexibility in the method, since I could also use the scheduled date as simply a date I wanted to check back in with a todo, deciding whether I should move it to the inbox, do it now, or defer it again.&lt;/em&gt; (Of course, abusing scheduling like this meant there was no longer an equivalent to the typical schedule-deadline difference.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Effectively, this was a way to &lt;em&gt;snooze&lt;/em&gt;&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; tasks until later—that is, I would defer tasks, which is a temporal way to occlude todos.&lt;/strong&gt; I ended up sticking with this workflow for over a year.&lt;/p&gt;
&lt;p&gt;But over time, I discovered a significant issue. I realized that (i) wasn’t enough: &lt;strong&gt;there was no way to tell how long a todo sat in my agenda, waiting for me to attend to it&lt;/strong&gt;. As such, although I could hide a task for another day, once it became visible and I was actively working on it, if I forgot about the task or de-prioritized it, &lt;strong&gt;there was nothing in the system that would tell me that too much time had passed since I was last productive on that task&lt;/strong&gt;. Consequently, there were many todos that fell through my workflow because I started work on them, did not complete them, and the time I should’ve had it completed by had passed. (Strictly speaking, one could use deadlines for this purpose, but I never could find a way for such deadlined todos to be prominent nor distinguished from other deadlines used in the typical “this is an actual deadline” way.)&lt;/p&gt;
&lt;p&gt;Therefore, in addition to (i), there is &lt;strong&gt;(ii): visible (non-occluded) tasks should have a way of indicating to me that they should be checked on&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In sum, there should be a way to occlude tasks (i.e., make a todo visible until a specified date)—this is (i)---&lt;em&gt;while also indicating a certain date when my future self should be concerned it is not yet completed&lt;/em&gt; (i.e., specify another date for reviewing a todo) whether to re-defer it, to move it the inbox, or to start working on again—this is (ii).&lt;/p&gt;
&lt;h2&gt;3: Reviewing &lt;a href=&quot;#3-reviewing&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Two org-agenda views &lt;a href=&quot;#two-org-agenda-views&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Retaining (i) while achieving (ii) is what I have made perfect use of org-review for. My current org-agenda is much more effective and simpler, not requiring a re-conceptualization of org’s scheduling functionality.&lt;/p&gt;
&lt;p&gt;Currently, I have (in outline) two org agenda views.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;One org-agenda view for tasks whose scheduled or deadline date is today (or in the past) and other tasks (non-schedule, non-deadline) that I’m either working on now or will work on soon—the urgency and priority of these tasks are determined using org priorities and effort estimates, although it’s ultimately up to me what I choose to work on any given day.&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; This is my main, “time to be productive” org-agenda view.&lt;/li&gt;
&lt;li&gt;The other org agenda view shows my “inbox” and “to-review tasks”---&lt;em&gt;this is where org-review comes in&lt;/em&gt;. A task tagged with “inbox” is in the inbox org-agenda block &lt;em&gt;until&lt;/em&gt; I call &lt;code&gt;org-review-insert-next-review&lt;/code&gt; on it, selecting the date on which this task will reappear as a task to review.&lt;sup&gt;&lt;a href=&quot;#fn-5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt; (Alternatively, I can just remove the inbox tag and this task will appear in my first agenda view: it is a task that I am working on now or will work on soon. In these cases, I also call &lt;code&gt;org-review-insert-next-review&lt;/code&gt;, or &lt;code&gt;org-review-insert-last-review&lt;/code&gt; which automatically sets the &lt;code&gt;NEXT_REVIEW&lt;/code&gt; property value if &lt;code&gt;org-review-sets-next-date&lt;/code&gt; is non-nil. I explain why later.) In this same agenda view, I have another org-agenda block for tasks whose &lt;code&gt;NEXT_REVIEW&lt;/code&gt; date is today or in the past.&lt;sup&gt;&lt;a href=&quot;#fn-6&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt; It is here that I decide what to do with a task. Do I move it to my main, first agenda view by removing the inbox tag? Do I call &lt;code&gt;org-review-insert-next-review&lt;/code&gt; again to re-defer it? Or do I remove its &lt;code&gt;NEXT_REVIEW&lt;/code&gt; property because I’m no longer sure whether or when this task should be deferred to.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Org-review: Immediately identify which tasks need addressing &lt;a href=&quot;#org-review-immediately-identify-which-tasks-need-addressing&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;These two views, however, are not uniquely made possible by org-review. In fact, I had very similar views when I used scheduling instead of org-review’s &lt;code&gt;org-review-insert-next-review&lt;/code&gt;: instead of filtering by the date in the &lt;code&gt;NEXT_REVIEW&lt;/code&gt; property, I would filter by the scheduled date. (Although, of course, using &lt;code&gt;NEXT_REVIEW&lt;/code&gt; instead of scheduling allows actually scheduled tasks to always appear in my main agenda view, which is a plus.) The benefit unique to org-review is my usage of the &lt;code&gt;NEXT_REVIEW&lt;/code&gt; property in tasks that are &lt;strong&gt;also in my main agenda view&lt;/strong&gt;. That is, with org-review, I can set a date in which tasks I’ve set out to do “now or soon” can be reviewed (without using schedules or deadlines, which would remove the possibility of using schedules or deadlines for other purposes). I do this with another org-agenda block in that agenda view, showing tasks that aren’t in the inbox and whose &lt;code&gt;NEXT_REVIEW&lt;/code&gt; date is today or passed.&lt;/p&gt;
&lt;p&gt;This solves the issue of (ii), that tasks need to be done soon otherwise too many pile up and either require long sessions of reviewing todos or important or urgent todos to pass by with you realizing (tk is this the essence of it?). The tasks in the to-review agenda block in my main view are those which my past-self determined should be checked on (put back on the inbox, re-prioritized, cancelled, etc.) by now. So, when I fall behind in work, I can review the tasks in the to-review block and not worry about having important or urgent tasks slip by me—the non-schedule, non-deadline tasks in this view but not in that block are ones that aren’t in-need of review now, and thus are fine not having been done already.&lt;/p&gt;
&lt;p&gt;There are many more details to how I use org-agenda, but I hope this write-up explains my usage of org-review in a way that might’ve shown you a way to use the package you haven’t already thought of.&lt;/p&gt;
&lt;p&gt;In the last few months I’ve revamped my org-agenda workflow to a state I’ve never been more satisfied with. I’ll share here how &lt;a href=&quot;https://github.com/brabalan/org-review&quot;&gt;org-review&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; made it possible.&lt;/p&gt;
&lt;h2&gt;The ideal: Separating “now” and “very soon” from everything else &lt;a href=&quot;#the-ideal-separating-now-and-very-soon-from-everything-else-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In my view, the primary purpose of a “task management” is system is to show you only the tasks you need to be shown, while hiding the rest until it becomes urgent to do them, their importance to other tasks rise, or you simply feel like doing them now. &lt;strong&gt;As such, we should distinguish tasks which are relevant to “now” and “very soon” from everything else: “later,” “never,” and “unsure when.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’d bet (i) is a familiar and intuitive ideal for most Emacs users since we tend to be the type to think about the workflows/systems we use and how we might reshape them to suit our needs better. An org-agenda without (i) is like a workflow where one simply calls &lt;code&gt;M-x org-agenda t&lt;/code&gt; (“List of all todo entries”). It’ll be obvious to those who have hundreds or even thousands of todos how seeing a gigantic running list of all your tasks doesn’t help. We need to fulfill (i) because, otherwise, the looking at your todo list to decide what task you need to do now becomes a task in itself—and that means we expend time and energy figuring out &lt;em&gt;what&lt;/em&gt; to do rather than &lt;em&gt;doing&lt;/em&gt; what needs to be done.&lt;/p&gt;
&lt;h2&gt;”Later&quot; &lt;a href=&quot;#later-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;&quot;Unsure when&quot; &lt;a href=&quot;#unsure-when-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;&quot;Never” &lt;a href=&quot;#never-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;1: Occlusion &lt;a href=&quot;#1-occlusion-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As such, an ideal org-agenda means &lt;strong&gt;(i) occluding (hiding) or separating tasks non-relevant to the present&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;There are two common straightforward ways to fulfill (i):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Having an “inbox.” An inbox separates tasks which one has already committed to from ones they haven’t yet committed to.&lt;/li&gt;
&lt;li&gt;Add scheduling and deadline information to tasks and occlude (hide) them until they approach. This is to delay visibility of tasks until a date more appropriate to attending to that task.&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have used and continue to use both strategies to occlude tasks.&lt;/p&gt;
&lt;h2&gt;2: Prioritization &lt;a href=&quot;#2-prioritization-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;However, those two strategies are not enough. Even with an inbox and hiding tasks until their scheduled/deadline date approaches, I still had dozens (at least) of todos simultaneously visible in my org-agenda views. I committed to these tasks, but there was a problem: although I committed to all these tasks, &lt;em&gt;when considering factors such as urgency, life-priorities, mood, and time available, only a small portion of these tasks were ones I should be worked on now&lt;/em&gt;. The rest were ones that I could worry about later, whether next week, two weeks from now, a month from now, or some ambiguous, yet-to-be-determined point in the future.&lt;/p&gt;
&lt;p&gt;This suggested another pillar for my org-agenda: *(ii) the ability to discern&lt;/p&gt;
&lt;p&gt;Consequently, I naturally moved to crafting an org-agenda practice reliant on org-agenda’s built-in priorities and effort estimates. I had previously used priorities and time efforts sporadically, but&lt;/p&gt;
&lt;p&gt;My previous org-agenda set up tried to cut down the number of non-inbox todos by abusing the scheduling functionality of org. The functionality of deadlines remained as intended, but I re-tooled scheduling in an atypical way: &lt;strong&gt;a task’s scheduled date was the date I wanted to see that task again&lt;/strong&gt;. In my org-agenda views, the tasks meant for “now” were the ones whose scheduled date was today or in the past. &lt;em&gt;There was flexibility in the method, since I could also use the scheduled date as simply a date I wanted to check back in with a todo, deciding whether I should move it to the inbox, do it now, or defer it again.&lt;/em&gt; (Of course, abusing scheduling like this meant there was no longer an equivalent to the typical schedule-deadline difference.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Effectively, this was a way to &lt;em&gt;snooze&lt;/em&gt;&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; tasks until later—that is, I would defer tasks, which is a temporal way to occlude todos.&lt;/strong&gt; I ended up sticking with this workflow for over a year.&lt;/p&gt;
&lt;p&gt;But over time, I discovered a significant issue. I realized that (i) wasn’t enough: &lt;strong&gt;there was no way to tell how long a todo sat in my agenda, waiting for me to attend to it&lt;/strong&gt;. As such, although I could hide a task for another day, once it became visible and I was actively working on it, if I forgot about the task or de-prioritized it, &lt;strong&gt;there was nothing in the system that would tell me that too much time had passed since I was last productive on that task&lt;/strong&gt;. Consequently, there were many todos that fell through my workflow because I started work on them, did not complete them, and the time I should’ve had it completed by had passed. (Strictly speaking, one could use deadlines for this purpose, but I never could find a way for such deadlined todos to be prominent nor distinguished from other deadlines used in the typical “this is an actual deadline” way.)&lt;/p&gt;
&lt;p&gt;Therefore, in addition to (i), there is &lt;strong&gt;(ii): visible (non-occluded) tasks should have a way of indicating to me that they should be checked on&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In sum, there should be a way to occlude tasks (i.e., make a todo visible until a specified date)—this is (i)---&lt;em&gt;while also indicating a certain date when my future self should be concerned it is not yet completed&lt;/em&gt; (i.e., specify another date for reviewing a todo) whether to re-defer it, to move it the inbox, or to start working on again—this is (ii).&lt;/p&gt;
&lt;h2&gt;3: Reviewing &lt;a href=&quot;#3-reviewing-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Two org-agenda views &lt;a href=&quot;#two-org-agenda-views-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Retaining (i) while achieving (ii) is what I have made perfect use of org-review for. My current org-agenda is much more effective and simpler, not requiring a re-conceptualization of org’s scheduling functionality.&lt;/p&gt;
&lt;p&gt;Currently, I have (in outline) two org agenda views.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;One org-agenda view for tasks whose scheduled or deadline date is today (or in the past) and other tasks (non-schedule, non-deadline) that I’m either working on now or will work on soon—the urgency and priority of these tasks are determined using org priorities and effort estimates, although it’s ultimately up to me what I choose to work on any given day.&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt; This is my main, “time to be productive” org-agenda view.&lt;/li&gt;
&lt;li&gt;The other org agenda view shows my “inbox” and “to-review tasks”---&lt;em&gt;this is where org-review comes in&lt;/em&gt;. A task tagged with “inbox” is in the inbox org-agenda block &lt;em&gt;until&lt;/em&gt; I call &lt;code&gt;org-review-insert-next-review&lt;/code&gt; on it, selecting the date on which this task will reappear as a task to review.&lt;sup&gt;&lt;a href=&quot;#fn-5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt; (Alternatively, I can just remove the inbox tag and this task will appear in my first agenda view: it is a task that I am working on now or will work on soon. In these cases, I also call &lt;code&gt;org-review-insert-next-review&lt;/code&gt;, or &lt;code&gt;org-review-insert-last-review&lt;/code&gt; which automatically sets the &lt;code&gt;NEXT_REVIEW&lt;/code&gt; property value if &lt;code&gt;org-review-sets-next-date&lt;/code&gt; is non-nil. I explain why later.) In this same agenda view, I have another org-agenda block for tasks whose &lt;code&gt;NEXT_REVIEW&lt;/code&gt; date is today or in the past.&lt;sup&gt;&lt;a href=&quot;#fn-6&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt; It is here that I decide what to do with a task. Do I move it to my main, first agenda view by removing the inbox tag? Do I call &lt;code&gt;org-review-insert-next-review&lt;/code&gt; again to re-defer it? Or do I remove its &lt;code&gt;NEXT_REVIEW&lt;/code&gt; property because I’m no longer sure whether or when this task should be deferred to.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Org-review: Immediately identify which tasks need addressing &lt;a href=&quot;#org-review-immediately-identify-which-tasks-need-addressing-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;These two views, however, are not uniquely made possible by org-review. In fact, I had very similar views when I used scheduling instead of org-review’s &lt;code&gt;org-review-insert-next-review&lt;/code&gt;: instead of filtering by the date in the &lt;code&gt;NEXT_REVIEW&lt;/code&gt; property, I would filter by the scheduled date. (Although, of course, using &lt;code&gt;NEXT_REVIEW&lt;/code&gt; instead of scheduling allows actually scheduled tasks to always appear in my main agenda view, which is a plus.) The benefit unique to org-review is my usage of the &lt;code&gt;NEXT_REVIEW&lt;/code&gt; property in tasks that are &lt;strong&gt;also in my main agenda view&lt;/strong&gt;. That is, with org-review, I can set a date in which tasks I’ve set out to do “now or soon” can be reviewed (without using schedules or deadlines, which would remove the possibility of using schedules or deadlines for other purposes). I do this with another org-agenda block in that agenda view, showing tasks that aren’t in the inbox and whose &lt;code&gt;NEXT_REVIEW&lt;/code&gt; date is today or passed.&lt;/p&gt;
&lt;p&gt;This solves the issue of (ii), that tasks need to be done soon otherwise too many pile up and either require long sessions of reviewing todos or important or urgent todos to pass by with you realizing (tk is this the essence of it?). The tasks in the to-review agenda block in my main view are those which my past-self determined should be checked on (put back on the inbox, re-prioritized, cancelled, etc.) by now. So, when I fall behind in work, I can review the tasks in the to-review block and not worry about having important or urgent tasks slip by me—the non-schedule, non-deadline tasks in this view but not in that block are ones that aren’t in-need of review now, and thus are fine not having been done already.&lt;/p&gt;
&lt;p&gt;There are many more details to how I use org-agenda, but I hope this write-up explains my usage of org-review in a way that might’ve shown you a way to use the package you haven’t already thought of.&lt;/p&gt;
&lt;h2&gt;Bonus: bespoke org-agenda scatter function &lt;a href=&quot;#bonus-bespoke-org-agenda-scatter-function&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;go over my &lt;code&gt;krisb-org-review-randomize&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;for when a lot of todos happen; I mark ones I know I want to put off sometime in the far-ish future (e.g. 1–2 months), but don’t want them appearing on the same day (manually adding offsets is a mental burden and unreliable at solving the “too much on one day” problem anyway). Around that time, or sometime before or after that is undetermined.&lt;/p&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I first dismissed org-review over a year ago when I first discovered it, but revisited the package after reading this article from Sacha Chua, where John Weigley briefly mentions his recent experiments with the package: &lt;a href=&quot;https://sachachua.com/blog/2024/11/excerpts-from-a-conversation-with-john-wiegley-johnw-and-adam-porter-alphapapa-about-personal-information-management/&quot;&gt;Excerpts from a conversation with John Wiegley (johnw) and Adam Porter (alphapapa) about p!ersonal information management&lt;/a&gt;.&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;Org-agenda users can specify a global, directory-local, buffer-local, or headline-specific number of days until which scheduled and deadlined todos are shown in the agenda. See the &lt;code&gt;(org) Deadlines and Scheduling&lt;/code&gt; page in the Org Info manual for more information.&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;Those familiar with Gmail’s “snooze” function can think of that as a similar 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 a condition for a successfully flexible task management system: of the tasks presented to me now, I can choose which one(s) I am most suited to doing now and are most suited to my current life-context.&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;Every time I call &lt;code&gt;org-review-insert-next-review&lt;/code&gt; I also call &lt;code&gt;org-review-insert-last-review&lt;/code&gt;, since my setting the &lt;code&gt;NEXT_REVIEW&lt;/code&gt; property is a recognition that I have reviewed the task: hence, I also set the &lt;code&gt;LAST_REVIEW&lt;/code&gt; property for record-keeping.&lt;/p&gt;  &lt;a href=&quot;#fnref-5&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-6&quot;&gt;[6]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Org-review provides &lt;code&gt;org-review-agenda-skip&lt;/code&gt;, a predicate meant to be used as a value of &lt;code&gt;org-agenda-skip-function&lt;/code&gt;, which I set locally via &lt;code&gt;org-agenda-custom-commands&lt;/code&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-6&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Sat, 22 Mar 2025 19:40:00 GMT</pubDate><category>Emacs</category><category>Org-agenda</category></item><item><title>Zettelkasten: Memorization and Inspiration through Traversal and Surprise</title><link>https://kristofferbalintona.me/posts/Zettelkasten-Memorization-and-Inspiration-through-Traversal-and-Surprise/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/Zettelkasten-Memorization-and-Inspiration-through-Traversal-and-Surprise/</guid><pubDate>Wed, 26 Mar 2025 16:27:00 GMT</pubDate><category>Emacs</category><category>Zettelkasten</category><category>Folgezettel</category></item><item><title>Jujutsu (jj) VCS workflows and the convenience of its “operation log”</title><link>https://kristofferbalintona.me/posts/202503270835/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202503270835/</guid><description>&lt;p&gt;Over the last month or two I’ve been trying out the relatively new &lt;a href=&quot;https://jj-vcs.github.io/jj/latest/&quot;&gt;jujutsu&lt;/a&gt; version control system (VCS) — and loving it. At first, I discovered it and read their &lt;a href=&quot;https://github.com/jj-vcs/jj&quot;&gt;GitHub README&lt;/a&gt; with curiosity but skepticism. Then I sought a few &lt;a href=&quot;https://www.youtube.com/results?search_query=what+is+jujutsu+vcs&quot;&gt;YouTube videos&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; demonstrating jj in action, and &lt;a href=&quot;https://jj-vcs.github.io/jj/latest/&quot;&gt;a tutorial&lt;/a&gt; for a text-based reference. I became very interested. I initialized a jj repo in one of my small git projects and played around. Since then, I’ve migrated all of my personal repositories to jj, and use jj for practically everything.&lt;/p&gt;
&lt;p&gt;From the time I’ve spent with jj, I’ve felt myself sliding into some general workflows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A &lt;code&gt;jj squash&lt;/code&gt; workflow&lt;br /&gt;
In git, this would be a workflow where you make a commit and continually amend/extend that commit until its intended goal is completed.
&lt;ol&gt;
&lt;li&gt;Make progress toward a desired goal.&lt;/li&gt;
&lt;li&gt;Commit (&lt;code&gt;jj commit&lt;/code&gt;, or &lt;code&gt;jj new&lt;/code&gt; then &lt;code&gt;jj describe -m &quot;...&quot;&lt;/code&gt;) with a message describing this unit of work.&lt;/li&gt;
&lt;li&gt;Continue making changes.&lt;/li&gt;
&lt;li&gt;Squash (perhaps interactively: &lt;code&gt;jj squash -i&lt;/code&gt;&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;) new changes until the desired goal is accomplished.&lt;/li&gt;
&lt;li&gt;Maybe change the description of the previous commit commit.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Work in the working copy
&lt;ol&gt;
&lt;li&gt;Envision a goal for a new commit. Express that into the description of the working copy commit: &lt;code&gt;jj describe -m &quot;...&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Work until much of that goal is met.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jj new&lt;/code&gt; to work on the next goal. Or &lt;code&gt;jj split -i&lt;/code&gt; if some of the changes in the working copy belong in the next commit.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jj edit&lt;/code&gt; to hop between commits and work on each until completion. Perhaps &lt;code&gt;jj new -A ...&lt;/code&gt; one or more times when when you don’t want certain changes in a commit: make changes across however many of those commits, then &lt;code&gt;jj squash&lt;/code&gt; them all into your original commit when you’re happy. (You’re basically creating a new git branch!)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Concurrent commits workflow&lt;br /&gt;
Work on several commits simultaneously, using combinations of &lt;code&gt;jj squash&lt;/code&gt;, &lt;code&gt;jj new&lt;/code&gt;, and &lt;code&gt;jj rebase&lt;/code&gt; to make make reversible changes while having a clean &lt;code&gt;jj log&lt;/code&gt; at the end. In essence, this is point (3.4) above but with room for added complexity.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I’m not a VCS expert, and my projects are small, but I’ve gravitated to (1) and (2) without feeling any mental strain of keeping track of where this and that change is and what CLI operations avoid x problem or y merging conflict (which, by the way, jj permits! Jujutsu treats conflicts as first-class, so conflicts and their resolutions percolate through ancestors and descendants without problem.)&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Perhaps the most exciting part of using jj is fearlessly making changes and experimenting. This has been an extraordinary boon for my learning about how to use jj in accordance to its VCS concepts. The reason is jj’s operation log (&lt;code&gt;jj op log&lt;/code&gt;) and the ability to &lt;strong&gt;revert back to &lt;em&gt;any&lt;/em&gt; past repository state&lt;/strong&gt; (&lt;code&gt;jj op restore OPERATION_ID&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;With &lt;code&gt;jj op restore&lt;/code&gt;, I can merge branches, create conflicts, resolve conflicts, mess up… then go back as if it never happened. I can make sweeping repository changes without fear! In git, I’d be walking on egg shells, worried about the potential to ruin the entire state of my local repository if I’m not careful…&lt;/p&gt;
&lt;p&gt;I’d definitely recommend trying jj out if you haven’t already! Easily turn a git repo into a jj repo with a git backend: &lt;code&gt;jj git init \-\-colocate&lt;/code&gt;.&lt;/p&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I found &lt;a href=&quot;https://www.youtube.com/watch?v=bx_LGilOuE4&quot;&gt;this talk&lt;/a&gt; by the originator of jujutsu, Martin von Zweigbergk, a senior software engineer at Google, especially insightful with respect to the technical merits of jj over git. If jj is meant to potentially eventually handle Google’s gigantic monorepo (86 terabytes of data, ~2 billion lines of code across 9 million source files!), then surely there’s something to it! The talk justifies the existence of jj.&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;Without the &lt;code&gt;-u&lt;/code&gt; flag, &lt;code&gt;jj squash -i&lt;/code&gt; effectively behaves like &lt;code&gt;git commit \-\-amend&lt;/code&gt; when your working copy has a description (e.g., with &lt;code&gt;jj desc -m &quot;...&quot;&lt;/code&gt; or if you &lt;code&gt;jj edit&lt;/code&gt; to a past commit). Without a commit, &lt;code&gt;jj squash -i&lt;/code&gt; is like &lt;code&gt;git commit \-\-amend \-\-no-edit&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;A great resource on the matter of “conflicts as first-class” is &lt;a href=&quot;https://youtu.be/LV0JzI8IcCY?si=n0xrGZfRx6vZGNmr&amp;amp;t=553&quot;&gt;this talk&lt;/a&gt; by the mind behind jj.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Thu, 27 Mar 2025 08:35:00 GMT</pubDate><category>VCS</category></item><item><title>Complement corfu, vertico, and completion-preview with prescient.el sorting</title><link>https://kristofferbalintona.me/posts/202504051423/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202504051423/</guid><description>&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Apr 7, 2025&lt;/span&gt;  &lt;/time&gt; With several commits made on April 6, 2025, vertico spun off its sorting functionality into an extension: &lt;a href=&quot;https://github.com/minad/vertico/blob/main/extensions/vertico-sort.el&quot;&gt;vertico-sort&lt;/a&gt;. As explained in vertico-sort.el’s commentary section, it includes a new feature: when &lt;code&gt;history-delete-duplicates&lt;/code&gt; is nil, all sorting functions defined in vertico-sort.el now rank &lt;em&gt;recently&lt;/em&gt; selected candidates above frequently selected candidates. This approximates the sorting strategy of prescient.el. I think I’ll stick with prescient.el sorting because I like &lt;code&gt;history-delete-duplicates&lt;/code&gt; set to non-nil, but try it out yourself!&lt;/p&gt; &lt;/blockquote&gt;
&lt;blockquote&gt; &lt;p&gt;&lt;time&gt; &lt;span&gt;Apr 22, 2025&lt;/span&gt;  &lt;/time&gt; Corfu now offers a similar functionality as vertic-sort does for vertico with the new &lt;a href=&quot;https://github.com/minad/corfu/blob/main/extensions/corfu-history.el&quot;&gt;corfu-sort&lt;/a&gt; extension. Like vertico-sort, corfu-sort requires &lt;code&gt;history-delete-duplicates&lt;/code&gt; to be nil.&lt;/p&gt; &lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/radian-software/prescient.el&quot;&gt;Prescient.el&lt;/a&gt; is a package that was popular during the era of ivy and helm. Nowadays, I don’t see it mentioned much because of the very popular corfu + vertico + marginalia + orderless combination which enhance built-in Emacs completion and overtaken ivy and helm in terms of popularity. (And it’s deserved! I use this combination, too.)&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; But I’ve found prescient.el a noticeable convenience that complements this set of packages.&lt;/p&gt;
&lt;p&gt;The reason is prescient.el’s sorting. Roughly, we can think of completion as having two halves: filtering and sorting. Filtering is what &lt;code&gt;completion-styles&lt;/code&gt; does: among the generated completion candidates, which are shown to the user? Sorting is the order in which the filtered candidates are shown. One might think that orderless, which is filters candidates with its completion-style, also sorts candidates—but it doesn’t. As explained in the &lt;a href=&quot;https://github.com/oantolin/orderless?tab=readme-ov-file#prescient&quot;&gt;orderless README&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/radian-software/prescient.el&quot;&gt;prescient.el&lt;/a&gt; library also provides matching of space-separated components in any order. It offers a completion-style that can be used with Emacs’ default completion UI, Mct, Vertico or with Icomplete. Furthermore Ivy is supported. The components can be matched literally, as regexps, as initialisms or in the flex style (called “fuzzy” in prescient). Prescient does not offer the same flexibility as Orderless with its style dispatchers. However in addition to matching, &lt;strong&gt;Prescient supports sorting of candidates, while Orderless leaves that up to the candidate source and the completion UI.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As such, in the corfu + vertico + marginalia + orderless world, vertico (for minibuffer completions) and corfu (for in-inline completions) are responsible for sorting candidates.&lt;/p&gt;
&lt;p&gt;The problem is this: although orderless brilliantly narrows down candidates, both vertico and corfu have somewhat naive sorting algorithms (see &lt;code&gt;vertico-sort-function&lt;/code&gt; and &lt;code&gt;corfu-sort-function&lt;/code&gt;). Vertico offers &lt;code&gt;vertico-sort-history-alpha&lt;/code&gt; and &lt;code&gt;vertico-sort-history-length-alpha&lt;/code&gt;, and corfu offers &lt;code&gt;corfu-history-mode&lt;/code&gt;. In my limited experience, however, I give prescient.el’s sorting algorithm an edge to both. (YMMV—feel free to try them!) Oftentimes vertico and corfu will &lt;strong&gt;consistently show the candidate you have in mind later in the list&lt;/strong&gt;. This tends to be the case when using certain common commands and certain &lt;code&gt;completion-at-point-functions&lt;/code&gt;: I would common seek out certain candidates that orderless would place third or fourth in the list.&lt;/p&gt;
&lt;p&gt;Prescient.el almost entirely solved this issue for me. Prescient.el offers a &lt;code&gt;completion-style&lt;/code&gt;—this is its filtering functionality—but it also offers sorting functionality. The sorting functionality is what’s relevant here:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When sorting, &lt;strong&gt;the last few candidates you selected are displayed first, followed by the most frequently selected ones&lt;/strong&gt;, and then the remaining candidates are sorted by length.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Prescient.el is the core package, and there are several &lt;a href=&quot;https://github.com/radian-software/prescient.el?tab=readme-ov-file#usage&quot;&gt;auxiliary packages&lt;/a&gt; to integrate prescient with vertico, corfu, and others. We can enable prescient’s sorting for vertico and corfu (but not its filtering; I want to leave this to orderless) with something like the following:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Core package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; prescient&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; My settings for relevant user options:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (prescient-aggressive-file-save t)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (prescient-sort-length-enable nil)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (prescient-sort-full-matches-first t)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (prescient-history-length 200)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (prescient-frequency-decay 0.997)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (prescient-frequency-threshold 0.05)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Optional: persist prescient statistics to an on-disk cache&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; (&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;prescient-save-file&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;prescient-persist-mode &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Integration with corfu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; corfu-prescient&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; The :after keyword defers loading this package, meaning this package is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; only loaded until something else wants something from it.  If we want&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-prescient-mode&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; to be enabled in the :config block, we need to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; prevent deferral with the :demand keyword. In combination with our :after&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; block, the package is immediately loaded only after both corfu and&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; prescient are loaded.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:demand&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; corfu prescient&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Sorting.  These are the default values but I include them here to be&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; explicit.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-prescient-enable-sorting t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-prescient-override-sorting &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Don&apos;t override &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;display-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Filtering&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-prescient-enable-filtering &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; We want orderless to do the filtering&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; See also &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-prescient-completion-styles&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-prescient-completion-category-overrides&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; and&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;prescient--completion-recommended-overrides&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.  Those options apply only&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; when &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-prescient-enable-filtering&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; is non-nil.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;corfu-prescient-mode &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Integration with vertico&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;use-package&lt;/span&gt;&lt;span&gt; vertico-prescient&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; The :after keyword defers loading this package, meaning this package is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; only loaded until something else wants something from it.  If we want&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;vertico-prescient-mode&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; to be enabled in the :config block, we need to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; prevent deferral with the :demand keyword. In combination with our :after&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; block, the package is immediately loaded only after both vertico and&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; prescient are loaded.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:demand&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:after&lt;/span&gt;&lt;span&gt; vertico prescient&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:custom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Sorting.  These are the default values but I include them here to be&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; explicit.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-prescient-enable-sorting t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-prescient-override-sorting &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; Don&apos;t override &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;display-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Filtering&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-prescient-enable-filtering &lt;/span&gt;&lt;span&gt;nil)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;; We want orderless to do the filtering&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; See also &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;vertico-prescient-completion-styles&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;vertico-prescient-completion-category-overrides&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, and&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;prescient--completion-recommended-overrides&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.  Those options apply only&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; when when &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;vertico-prescient-enable-filtering&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; is non-nil.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;vertico-prescient-mode &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The result is using orderless for completion filtering and prescient for completion sorting everywhere—for in-line completions with corfu and minibuffer completions with vertico. With this, among the candidates filtered by orderless, the most recent and common ones will be bumped up to the beginning. Try it out!&lt;/p&gt;
&lt;h2&gt;Bonus: integration with &lt;code&gt;completion-preview-mode&lt;/code&gt; &lt;a href=&quot;#bonus-integration-with-completion-preview-mode&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Emacs 30.1 ships with the new &lt;code&gt;completion-preview-mode&lt;/code&gt;. You can read about it &lt;a href=&quot;https://eshelyaron.com/posts/2023-11-17-completion-preview-in-emacs.html&quot;&gt;in this blog post&lt;/a&gt; but also in the Emacs 30.1 news (i.e., &lt;code&gt;C-u 30 C-h n&lt;/code&gt;). Apparently, &lt;code&gt;completion-preview-mode&lt;/code&gt;
has its own sorting function—which makes sense, since it isn’t hooked into either corfu nor vertico (which we set up to use prescient above). The relevant user option to modify its sorting is &lt;code&gt;completion-preview-sort-function&lt;/code&gt;. So we just have to make sure that function matches prescient’s. We can do that like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;with-eval-after-load&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;prescient&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;;; Have &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-preview-mode&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; use prescient&apos;s sorting algorithm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setopt completion-preview-sort-function &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;prescient-completion-sort))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;But, if you also use corfu on top of &lt;code&gt;completion-preview-mode&lt;/code&gt;, you’ll still notice a discrepancy between corfu’s first candidate and completion-preview’s candidate. They should be the same with the same sorting algorithm but they’re not! I’m not 100%, but I’m fairly confident that corfu-prescient keeps track of corfu-specific completion usage, which is separate from non-corfu-specific use. Consequently, the statistics used to sort candidates ends up different between corfu and &lt;code&gt;prescient-completion-sort&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In any case, below is a simple fix that gets corfu and completion-preview on the same page:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; We set completion-preview&apos;s sorting function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; (&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-preview-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;) to corfu&apos;s sorting function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; (&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;with-eval-after-load&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setopt completion-preview-sort-function corfu-sort-function&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; Alternative: for a solution that ensures &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-preview-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; always matches &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, we can use a variable watcher.  This is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; my preference.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; The below accounts for cases in which (i) the user has buffer-local values&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; for &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; or (ii) the user changes the global value of&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; (e.g., from minor modes that disable/enable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; functionality).  It is a robust solution, and although I have not tested its&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;;; performance overhead, it should cause no problems.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;add-variable-watcher&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                      &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;_symbol&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newval&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;operation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;where&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Match the value of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-preview-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; to &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;If &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; is set buffer-locally, also set&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-preview-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; buffer-locally.  Otherwise, change&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;the default value of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;completion-preview-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; accordingly.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;This action only applies when the value of &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;corfu-sort-function&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;set (i.e., OPERATION is \\=&apos;set).  This excludes, e.g., let bindings.&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;equal&lt;/span&gt;&lt;span&gt; operation &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;set)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; where&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                              &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;with-current-buffer&lt;/span&gt;&lt;span&gt; where&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                                &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq-local&lt;/span&gt;&lt;span&gt; completion-preview-sort-function newval&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                            &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setopt completion-preview-sort-function newval&lt;/span&gt;&lt;span&gt;)))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Apr 7, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Fixed several typos.&lt;/li&gt;
&lt;li&gt;Added clarity to several phrases.&lt;/li&gt;
&lt;li&gt;Added a note mentioning the new vertico-sort extension.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Apr 5, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Correction to explanation according to &lt;a href=&quot;https://www.reddit.com/r/emacs/comments/1js6xvw/comment/mlkpge6/?utm_source=share&amp;amp;utm_medium=web3x&amp;amp;utm_name=web3xcss&amp;amp;utm_term=1&amp;amp;utm_content=share_button&quot;&gt;r/JDRiverRun’s comment&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;Apr 22, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Added a note mentioning the new corfu-history extension.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;In my opinion, each package is much more modular than the helm or ivy ecosystems while being more performant, integrated with existing Emacs functionality, and just as useful, if not more. Though a bit dated, I’ve previously written a big about how to configure this set of packages: &lt;a href=&quot;https://kristofferbalintona.me/articles/Vertico-Marginalia-All-the-icons-completion-and-Orderless/&quot;&gt;Vertico, Marginalia, All-the-icons-completion, and Orderless&lt;/a&gt;.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Sat, 05 Apr 2025 14:23:00 GMT</pubDate><category>Emacs</category></item><item><title>Keeping a tidy .emacs.d/ with no-littering.el</title><link>https://kristofferbalintona.me/posts/202504210034/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202504210034/</guid><description>&lt;p&gt;&lt;a href=&quot;https://github.com/emacscollective/no-littering&quot;&gt;No-littering.el&lt;/a&gt; keeps your .emacs.d clean. I’ve been using it for years—in fact it’s one of the only third-party packages I first installed several years ago when I started using Emacs that I still have in my config today.&lt;/p&gt;
&lt;p&gt;It establishes conventions for keeping files created from packages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;no-littering-etc-directory&lt;/code&gt;. The directory where packages place their configuration files.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;no-littering-var-directory&lt;/code&gt;. The directory where packages place their persistent data files.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If every package followed this convention, then no files should litter (pun intended) your emacs configuration directory. Unfortunately, not every package does… fortunately, no-littering already sets the relevant option of dozens of packages to use these directories. But if you use a package that isn’t already set, you can easily use &lt;code&gt;no-littering-expand-var-file-name&lt;/code&gt; and &lt;code&gt;no-littering-expand-etc-file-name&lt;/code&gt; to change that. For example: &lt;code&gt;(setopt cursory-latest-state-file (no-littering-expand-var-file-name &quot;cursory/cursory-latest-state&quot;))&lt;/code&gt; sets &lt;code&gt;cursory-latest-state-file&lt;/code&gt; to &lt;code&gt;~/.emacs.d/var/cursory/cursory-latest-state&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here’s a look at my own directories.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;My &lt;code&gt;no-littering-etc-directory&lt;/code&gt;, located at &lt;code&gt;~/.emacs.d/etc/&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$ tree -L 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── abbrev.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── custom.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── gnus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── transient&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;3 directories, 2 files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;My &lt;code&gt;no-littering-var-directory&lt;/code&gt;, located at &lt;code&gt;~/.emacs.d/var/&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$ tree -L 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── abbrev-mode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── amx-save.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── anaconda-mode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── annotations.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── auto-save&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── backup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── bookmark-default.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── citre&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── company&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── cursory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── dap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── dape-adapters&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── desktop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── devdocs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── diary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eaf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eafpdf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eglot-java&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── elfeed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── emacs-gc-stats.eld.gz&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── emms&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── emojify&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── erc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eshell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eww&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── flycheck&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── fontaine&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── fontaine-latest-state.eld&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── forge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── gamegrid-user-score&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── gdb-bp-session&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── .gitignore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── .gitmodules&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── gnus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── helm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── ielm-history.eld&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── image-dired&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── irony&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── ispell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── keyfreq.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── languagetool&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── ledger&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── logview-cache&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── lsp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── mc-list.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── multisession&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── newsticker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── nov-save-place.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── nsm-settings.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── org&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── org-remark&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── persist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── popweb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── prescient-save.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── projectile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── project-list.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── project-x&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── psession&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── racket-mode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── recentf-save.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── savehist.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── save-place.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── semantic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── shadow&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── speed-type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── spell-fu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── srecode-map.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── svg-lib&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── tempel-templates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── tramp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── transient&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── trash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── treemacs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── treesit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── tree-sitter&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── type-break.el&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── undohist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── url&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── vimish-fold&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── wombag&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;60 directories, 22 files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Without no-littering, I would either (i) have a ton of directories in my .emacs.d or (ii) have to define my own variables whose values are directories and manually, whenever I install a new package, set their options to write their files into these directories—basically what no-littering already does but without no-littering’s existing integrations. This way, my Emacs directory is neater.&lt;/p&gt;
&lt;h2&gt;Bonus: &lt;code&gt;(no-littering-theme-backups)&lt;/code&gt; &lt;a href=&quot;#bonus-no-littering-theme-backups&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No-littering also provides the little-known &lt;code&gt;no-littering-theme-backups&lt;/code&gt;. The TL;DR is this: this function makes Emacs’s built-in auto-saving and backing up functions create files within no-littering’s directories so that sensitive data is not written to disk in unsecured locations. Calling this function sets the value of three variables:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;auto-save-file-name-transforms&lt;/code&gt;: Transforms to apply to buffer file name before making auto-save file name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backup-directory-alist&lt;/code&gt;: Similar to &lt;code&gt;auto-save-file-name-transforms&lt;/code&gt; but for backup files.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;undo-tree-history-directory-alist&lt;/code&gt; (from undo-tree): Similar to &lt;code&gt;auto-save-file-name-transforms&lt;/code&gt; but for backup files.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Its docstring elaborates the mechanism and purpose of this function in greater depth:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;no-littering-theme-backups is an autoloaded native-comp-function in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;no-littering.el.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(no-littering-theme-backups)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Theme locations where backups of various sorts are created.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;The purpose of this package is to store data files of various&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sorts in a handful of central locations, instead of spreading&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;them all over the place.  When doing that for temporary files,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;which contain backups of some sort, that increases the odds that&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sensitive data is written to disk in clear text and/or that such&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;clear text files persist longer, if they would be created anyway.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Because of that, simply loading ‘no-littering’ does not theme&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;certain, potentially unsafe variables.  Instead, this function is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;provided, so that you can decide whether to take the risk or not.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Calling this function sets these variables:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- auto-save-file-name-transforms (built-in)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- backup-directory-alist (built-in)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- undo-tree-history-directory-alist (from ‘undo-tree’)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;The default values of these variables cause additional files to&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;be created in the same directories as the files that are being&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;visited.  Calling this function changes the values of these&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;variables, so that this is only done for visited files located in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;certain directories.  For all other visited files, the additional&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;files are created in files inside no-littering-var-directory.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Additional files are created in the same directory as the visited&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;file, for files located in:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- &quot;/tmp/&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- &quot;/dev/shm&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- temporary-file-directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;With these settings it is still possible that sensitive data is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;written to additional files, but you are more likely to spot it,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;and because these directories usually use a ‘tmpfs’ file-system,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;the leaked secrets should not persist after a reboot.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;If you do *not* call this function, then these additional files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;are always created in the same directory as the visited files,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;regardless of the location of the visited files.  In other words,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;even when using the default values, there is a significant risk&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;of leaking sensitive data, and if you want to reduce that, then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;you must turn of these features completely.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;</description><pubDate>Mon, 21 Apr 2025 00:34:00 GMT</pubDate><category>Emacs</category></item><item><title>Some Notes Setting Up Syncthing in NixOS</title><link>https://kristofferbalintona.me/posts/202505050319/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202505050319/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#the-configuration&quot;&gt;The configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#devices&quot;&gt;Devices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#folders&quot;&gt;Folders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#closing-remarks&quot;&gt;Closing remarks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#other-resources&quot;&gt;Other resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#changelog&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I recently got around to trying out NixOS. Part of that experience was setting up Syncthing, which I’ve used on the past on my machines and mobile phone to sync files related to note-taking.&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; It was a bit confusing since I had to fill-in-the-blanks for a few steps. Here, I write about a bit of the blanks I had to fill in myself, stuff that was not clear from the existing docs and forum posts I discovered.&lt;/p&gt;
&lt;h2&gt;The configuration &lt;a href=&quot;#the-configuration&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Below is the final NixOS configuration I have (with IDs elided for privacy) alongside commentary via comments:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;systemd&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;syncthing&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;environment&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;STNODEFAULTFOLDER&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;# Don&apos;t create default ~/Sync folder.  See https://wiki.nixos.org/wiki/Syncthing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;syncthing&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;openDefaultPorts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# I change the address SyncThing uses (which is also how you access the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# browser UI).  This is to avoid conflicts with the other SyncThing instances&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# I have on the same machine.  Namely, from different WSL2 instances.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;guiAddress&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;127.0.0.1:8385&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;krisbalintona&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;group&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;users&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;configDir&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/.config/syncthing&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Override all settings set from the GUI.  This is necessary if I don&apos;t want&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# to have changes made from the GUI apply.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;overrideDevices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;overrideFolders&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Settings: this is where you set up devices and folders&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;settings&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# Name of SyncThing instance on other machine&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OQHSZRL-L2TT7IC-7USSLNU-ST7JYML-FOO-BAR&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Elided for privacy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# Name of SyncThing instance on mobile device&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OVGYOBT-JPFQJKE-6CKRY7J-JULRCWK-FOO-BAR&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Elided for privacy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;k4vqh-foo&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;# The ID of a folder you&apos;d like to sync&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Agenda&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# Optional device-specific folder name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/Documents/org-database/agenda/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Share with these devices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch WSL2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;qtuzy-foo&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;# The ID of a folder you&apos;d like to sync&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Optional device-specific folder name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/Documents/org-database/notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Share with these devices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It was pretty straightforward to figure out the general settings for Syncthing by referencing &lt;a href=&quot;https://search.nixos.org/options?channel=unstable&quot;&gt;NixOS Search&lt;/a&gt;. The tricky part was the “devices” and “folders” section. What should I put there? Below are the important bits.&lt;/p&gt;
&lt;h2&gt;Devices &lt;a href=&quot;#devices&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;“Devices” are Machines/devices you’d like Syncthing to be aware of.&lt;/li&gt;
&lt;li&gt;Each machine has an ID.&lt;/li&gt;
&lt;li&gt;Each machine can optionally have a “label” (probably a human-readable name, like “Home computer”).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Looking at the relevant portion of my configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Name of SyncThing instance on other machine&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OQHSZRL-L2TT7IC-7USSLNU-ST7JYML-FOO-BAR&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Elided for privacy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# Name of SyncThing instance on mobile device&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OVGYOBT-JPFQJKE-6CKRY7J-JULRCWK-FOO-BAR&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Elided for privacy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This tells Syncthing that I have two devices:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;One labeled “G14 2024 Arch” with an ID of &lt;code&gt;&quot;OQHSZRL-L2TT7IC-7USSLNU-ST7JYML-FOO-BAR&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Another labeled “OnePlus 7 Pro” with an ID of &lt;code&gt;&quot;OVGYOBT-JPFQJKE-6CKRY7J-JULRCWK-FOO-BAR&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now that Syncthing is aware of these devices, I can reference them by their label later in the folders section to specify which folders should be shared to which devices.&lt;/p&gt;
&lt;h2&gt;Folders &lt;a href=&quot;#folders&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Folders are the directories you’d like Syncthing to be aware of.&lt;/li&gt;
&lt;li&gt;Each folder has an ID.&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Each folder may optionally have a label (probably a human-readable name, like “Agenda”). This is basically a nickname you give to the folder specific to the current device.&lt;/li&gt;
&lt;li&gt;Folders are only shared to devices specified for each folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Looking at the relevant portion of my configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;k4vqh-foo&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;# The ID of a folder you&apos;d like to sync&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Agenda&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;# Optional device-specific folder name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/Documents/org-database/agenda/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Share with these devices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch WSL2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;qtuzy-foo&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;               &lt;/span&gt;&lt;span&gt;# The ID of a folder you&apos;d like to sync&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# Optional device-specific folder name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/home/krisbalintona/Documents/org-database/notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Share with these devices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;G14 2024 Arch&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;OnePlus 7 Pro&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This tells Syncthing that I want to share two folders:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Share folder &lt;code&gt;&quot;k4vqh-foo&quot;&lt;/code&gt;, whose label is “Agenda,” with two devices: the one labeled “G14 2024 Arch WSL2” and another labeled “OnePlus 7 Pro.”&lt;/li&gt;
&lt;li&gt;Share folder &lt;code&gt;&quot;qtuzy-foo&quot;&lt;/code&gt;, whose label is “Notes,” with two devices: the one labeled “G14 2024 Arch WSL2” and another labeled “OnePlus 7 Pro.”&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It is important that the “devices” section be specified, otherwise Syncthing will not sync those folders to other devices.&lt;/p&gt;
&lt;h2&gt;Closing remarks &lt;a href=&quot;#closing-remarks&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And with that, I was done!&lt;/p&gt;
&lt;p&gt;In sum:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Devices
&lt;ul&gt;
&lt;li&gt;“Devices” are Machines/devices you’d like Syncthing to be aware of.&lt;/li&gt;
&lt;li&gt;Each machine has an ID.&lt;/li&gt;
&lt;li&gt;Each machine can optionally have a “label” (probably a human-readable name, like “Home computer”).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Folders
&lt;ul&gt;
&lt;li&gt;Folders are the directories you’d like Syncthing to be aware of.&lt;/li&gt;
&lt;li&gt;Each folder has an ID.&lt;/li&gt;
&lt;li&gt;Each folder may optionally have a label (probably a human-readable name, like “Agenda”). This is basically a nickname you give to the folder specific to the current device.&lt;/li&gt;
&lt;li&gt;Folders are only shared to devices specified for each folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Simple, but it wasn’t obvious from the resources I encountered online, so I had to do some tinkering to figure it out myself.&lt;/p&gt;
&lt;p&gt;For those who heavily customize Syncthing, there are other NixOS options available to tweak. You can find them &lt;a href=&quot;https://search.nixos.org/options?channel=unstable&amp;amp;from=0&amp;amp;size=50&amp;amp;sort=relevance&amp;amp;type=packages&amp;amp;query=syncthing&quot;&gt;in the NixOS Search for options&lt;/a&gt;. Additionally, if you are trying to migrate an existing Syncthing configuration to Nix, then you can check out your config file at &lt;code&gt;~/.config/syncthing/config.xml&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; With this, you can see the value of every Syncthing setting (although the file will, of course, be in JSON format).&lt;/p&gt;
&lt;h2&gt;Other resources &lt;a href=&quot;#other-resources&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a href=&quot;https://wiki.nixos.org/wiki/Syncthing&quot;&gt;Syncthing - NixOS Wiki&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;General resource; good starting point.&lt;/dd&gt;&lt;dt&gt;&lt;a href=&quot;https://www.youtube.com/@vimjoyer&quot;&gt;Vimjoyer - YouTube&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;A fantastic visual resource of making full use of Nix and NixOS. Has some beginner-friendly videos, but most videos are for intermediate or advanced users, ones looking to explore the ecosystem, full potential of Nix, and already having a familiarity with navigating Nix.&lt;/dd&gt;&lt;/dl&gt;
&lt;h2&gt;Changelog &lt;a href=&quot;#changelog&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;time&gt; &lt;span&gt;May 17, 2025&lt;/span&gt;  &lt;/time&gt;
&lt;ul&gt;
&lt;li&gt;Add link to the &lt;a href=&quot;https://docs.syncthing.net/users/config.html&quot;&gt;Syncthing configuration file documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I use Emacs’s org-agenda to manage todos, and I’ve set up &lt;a href=&quot;https://github.com/orgzly-revived/orgzly-android-revived&quot;&gt;Orgzly Revived&lt;/a&gt; for basic creation and editing of org todos on my phone.&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;You can see the ID of shared folders in the Syncthing GUI by expanding the collapsed info section a folder under the folders section of the GUI’s homepage.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Users can refer to the &lt;a href=&quot;https://docs.syncthing.net/users/config.html&quot;&gt;Syncthing configuration file documentation&lt;/a&gt; in order to understand the contents of this file.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Mon, 05 May 2025 03:19:00 GMT</pubDate><category>Nix</category></item><item><title>Surprisingly, Emacs on Android is pretty good</title><link>https://kristofferbalintona.me/posts/202505291938/</link><guid isPermaLink="true">https://kristofferbalintona.me/posts/202505291938/</guid><description>&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#the-good-and-bad-what-to-expect-on-android&quot;&gt;The good and bad: what to expect on Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#installation&quot;&gt;Installation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#option-1&quot;&gt;Option 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#recommended-installation&quot;&gt;Option 2 (recommended)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#configuring-an-android-specific-emacs&quot;&gt;Configuring an Android-specific Emacs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#necessary-reading-the-manual&quot;&gt;Necessary reading: the manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#how-to-configure-your-initel-on-a-mobile-device&quot;&gt;How to configure your &lt;code&gt;init.el&lt;/code&gt; on a mobile device?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#first-step-a-better-ui-for-touchscreens&quot;&gt;First step: A Better UI for touchscreens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#android-specific-commands&quot;&gt;Android-specific Commands and Options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#virtual-keyboards&quot;&gt;Use a Special virtual keyboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#fonts&quot;&gt;Fonts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#tip-you-can-remap-the-volume-buttons&quot;&gt;Tip: You can remap the volume buttons&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#conclusion&quot;&gt;Conclusion&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#bonus-my-wish-list&quot;&gt;Bonus: My wish list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recently I got around to making steps toward a better mobile-PC workflow. Until now, I’ve pretty much exclusively been using the community-developed &lt;a href=&quot;https://github.com/orgzly-revived/orgzly-android-revived&quot;&gt;orgzly-revived&lt;/a&gt; app on Android. My intention was to use orgzly-revived for simple todo management and another app for more note-taking purposes—but I could never find another app I was happy with on Android. But I happened to remember reading good things about the &lt;em&gt;native&lt;/em&gt; Emacs app on Android a few months ago. So I tried it out… and was immediately sold!&lt;/p&gt;
&lt;h2&gt;The good and bad: what to expect on Android &lt;a href=&quot;#the-good-and-bad-what-to-expect-on-android&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;First, let’s make sure our expectations are tempered: Emacs on Android won’t be as pleasant as the full desktop experience.&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; Of course. A phone’s screen is tiny, and unless you have a physical keyboard connected, you’ll have to manage with a virtual one (see &lt;a href=&quot;#virtual-keyboards&quot;&gt;Use a Special virtual keyboard&lt;/a&gt;). On top of that:&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;Tooling&lt;/dt&gt;&lt;dd&gt;To have non-Emacs programs available, you have to install Emacs in a particular way with Termux to expose Termux’s binaries to Emacs. (See &lt;a href=&quot;#recommended-installation&quot;&gt;the recommended way to install Emacs&lt;/a&gt;.) The initial set up is longer, but it’s worth it.&lt;/dd&gt;&lt;dt&gt;File paths&lt;/dt&gt;&lt;dd&gt;Android “sandboxes” each app. You can think of each app having their own “section” of the file system that they can read or write to (unless they are given explicit access to that outside directory; see &lt;code&gt;info &quot;(emacs) Android Document Providers&quot;&lt;/code&gt;). As such, one finds themselves fiddling with the obnoxiously long Android file paths if they want to, for instance, access their notes directory that is outside the Emacs app sandbox.&lt;sup&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt; This is a minor inconvenience though.&lt;/dd&gt;&lt;dt&gt;Writing to the file system&lt;/dt&gt;&lt;dd&gt;Relatively speaking, writing to the file system can be long sometimes. Not too long, but long nonetheless, As far as I’ve experienced, this has only been the case when saving files that are outside the Emacs sandbox.&lt;/dd&gt;&lt;/dl&gt;
&lt;p&gt;So, really, the situation is pretty good!&lt;/p&gt;
&lt;p&gt;And finally: YMMV on other Android devices. My current phone is the OnePlus 7 Pro running Android version 12.&lt;/p&gt;
&lt;h2&gt;Installation &lt;a href=&quot;#installation&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Option 1 &lt;a href=&quot;#option-1&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The first option is as easy as it can get, but you won’t have a way to access other CLI tools:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the &lt;a href=&quot;https://f-droid.org/&quot;&gt;F-droid&lt;/a&gt; app store. For the layperson who doesn’t know what it is: it’s basically an alternative to the Play Store. Some apps that can’t be on the Play Store (fact check, maybe link tk) are there.&lt;/li&gt;
&lt;li&gt;Download the &lt;a href=&quot;https://f-droid.org/en/packages/org.gnu.emacs/&quot;&gt;Emacs&lt;/a&gt; app.&lt;/li&gt;
&lt;li&gt;Open Emacs! The version of Emacs as I write this that is available is Emacs 30.1.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Using Emacs this way is totally possible if all you need is elisp. But if you need other tools, like git, I recommend the second way to install Emacs.&lt;/p&gt;
&lt;h3&gt;Option 2 (recommended) &lt;a href=&quot;#recommended-installation&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This option makes other CLI tools accessible to the Emacs Android application container. It is a little bit more of a hassle.&lt;/p&gt;
&lt;p&gt;The method is &lt;a href=&quot;https://sourceforge.net/projects/android-ports-for-gnu-emacs/files/termux/&quot;&gt;outlined in this SourceForge repository&lt;/a&gt;. In essence, inside the &lt;code&gt;termux/&lt;/code&gt; directory of this SourceForge repository are modified Emacs .apk files. These .apk files allow the Emacs app container to access the Termux (explain what Termux is tk) app container, meaning the CLI tools installed with Termux will become accessible to Emacs. But the installation is specific; read the instructions detailed inside that repository. I will outline them briefly below, but be careful if you are reading this in the future, for the instructions could have changed relevantly.&lt;/p&gt;
&lt;p&gt;In short,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Delete any existing Emacs or Termux apps.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensure you have enabled the setting that allows you to install third-party apps (i.e., non-Play Store apps) on your phone.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Termux. Don’t open Termux yet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the .apk file appropriate to your phone. There are various .apk files for different versions of Emacs and devices.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Emacs through this .apk.  (If your phone refuses to install the .apk, you might have selected the wrong type of .apk file for your device. So try different .apk files for the same Emacs version.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In Termux, run &lt;code&gt;pkg update &amp;amp;&amp;amp; pkg upgrade&lt;/code&gt;. Say “yes” to each of the prompts.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Emacs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a &lt;code&gt;~/.emacs.d/early-init.el&lt;/code&gt; and place the following inside of it:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setenv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;PATH&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/data/data/com.termux/files/usr/bin&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                       &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getenv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;PATH&lt;/span&gt;&lt;span&gt;&quot;))&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/data/data/com.termux/files/usr/bin&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; exec-path&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And you’re done! Programs installed through Termux will be made accessible to Emacs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Configuring an Android-specific Emacs &lt;a href=&quot;#configuring-an-android-specific-emacs&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Necessary reading: the manual &lt;a href=&quot;#necessary-reading-the-manual&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Chances are that you don’t know that the Emacs manual has its own section for the Android system: &lt;code&gt;(info &quot;(emacs) Android&quot;)&lt;/code&gt;. Before anything, I highly recommend you peruse this section, returning to and reading more deeply specific parts as you see fit. In particular, I found the following Info nodes essential:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;(info &quot;(emacs) Android File System&quot;)&lt;/code&gt; (This one is particularly important if you wan to understand what the &lt;code&gt;~/&lt;/code&gt; path means for Emacs.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(info &quot;(emacs) Android Document Providers&quot;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(info &quot;(emacs) Android Fonts&quot;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(info &quot;(emacs) Android Windowing&quot;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A lot of the information here is found directly inside these Info pages.&lt;/p&gt;
&lt;p&gt;Additionally, I also think reading about Emacs’ facilities for touchscreens and virtual keyboards (bet you didn’t know this was in the manual either!) is essential: &lt;code&gt;(info &quot;(emacs) Other Input&quot;)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Moments like these are truly a testament to Emacs’ dedication to an accessible editor.&lt;/p&gt;
&lt;h3&gt;How to configure your &lt;code&gt;init.el&lt;/code&gt; on a mobile device? &lt;a href=&quot;#how-to-configure-your-initel-on-a-mobile-device&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Later I’ll explain how you make typing code on a touchscreen device easier by installing &lt;a href=&quot;#virtual-keyboards&quot;&gt;a handy virtual keyboard&lt;/a&gt;. But I highly recommend that until you’ve settled on a configuration you’re willing to type out that you &lt;strong&gt;heavily utilize the customize interface&lt;/strong&gt;. This means accessing the Customize interfaces via the tool-bar&lt;sup&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; buttons then using your touchscreen to tap the buttons available in &lt;code&gt;customize-mode&lt;/code&gt; buffers. (Then, if you prefer, after setting many options with Customize, you can refactor the options Customize put in your &lt;code&gt;init.el&lt;/code&gt; into e.g. use-package forms.)&lt;/p&gt;
&lt;p&gt;If you haven’t used Customize much before, you can check out the available Customize commands via &lt;code&gt;C-h a&lt;/code&gt; (&lt;code&gt;apropos-command&lt;/code&gt;), search for “customize.” The most useful commands are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;customize-group&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;customize-option&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;customize-face&lt;/code&gt;,&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;First step: A Better UI for touchscreens &lt;a href=&quot;#first-step-a-better-ui-for-touchscreens&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The very first thing I did when I opened Emacs was enable these minor modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;modifier-bar-mode&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tool-bar-mode&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;and set &lt;code&gt;tool-bar-position&lt;/code&gt; to &lt;code&gt;‘bottom&lt;/code&gt;, placing it closer to where my fingers and the virtual keyboard are.&lt;/p&gt;
&lt;p&gt;Desktop users might have disabled these years ago in favor of keyboard-centric workflow, but they are awesome for touchscreens in my opinion.&lt;/p&gt;
&lt;h3&gt;Android-specific Commands and Options &lt;a href=&quot;#android-specific-commands&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There are a few built-in Android commands and options you should be aware of. (Pro tip: one can &lt;code&gt;M-x Info-index&lt;/code&gt; or press &lt;code&gt;i&lt;/code&gt; in the Emacs Info manual, itself accessible via &lt;code&gt;C-h r&lt;/code&gt;, or &lt;code&gt;M-x info-emacs-manual&lt;/code&gt;, then search for the string “android” to find all the specific mentions off “Android.”)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Commands:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;android-request-directory-access&lt;/code&gt; to request access to file paths of other apps&lt;sup&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;and its inverse, &lt;code&gt;android-relinquish-directory-access&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Options:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;android-pass-multimedia-buttons-to-system&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;android-intercept-control-space&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;touch-screen-display-keyboard&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;(and more not useful to me).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, don’t forget to let Emacs display over other apps. This is a device setting, not an Emacs one.&lt;/p&gt;
&lt;h3&gt;Use a Special virtual keyboard &lt;a href=&quot;#virtual-keyboards&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Unless you have a physical keyboard connected to your mobile device, typing will be a pain. For that, we install a virtual keyword that gives us easier access to modifier keys, function keys, arrow keys, and symbols. As far as I know, there are currently two main options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://f-droid.org/packages/org.pocketworkstation.pckeyboard/&quot;&gt;Hacker’s Keyboard&lt;/a&gt;, available in F-Droid.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=juloo.keyboard2&amp;amp;hl=en-US&amp;amp;pli=1&quot;&gt;Unexpected Keyboard&lt;/a&gt;, available in the Play Store.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Having briefly tried both, I personally prefer the latter. Though the former works just fine if you like it.&lt;/p&gt;
&lt;h3&gt;Fonts &lt;a href=&quot;#fonts&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You might want a set of fonts not already installed on your Android system. If that’s the case, you should read the &lt;code&gt;(info &quot;(emacs) Android Fonts&quot;)&lt;/code&gt; manual page.&lt;/p&gt;
&lt;p&gt;That page explains that if you want to install fonts for your user (in the Emacs app container), you should place them in &lt;code&gt;~/fonts/&lt;/code&gt;.&lt;sup&gt;&lt;a href=&quot;#fn-5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt; Getting those fonts was somewhat cumbersome for me: I had to manually download them, unzip them with Termux, place them inside a directory Emacs had access to (see &lt;a href=&quot;#android-specific-commands&quot;&gt;Android-specific Commands and Options&lt;/a&gt;), then copy them to &lt;code&gt;~/fonts/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Note: in my experience, &lt;em&gt;fonts are not recursively checked inside this directory&lt;/em&gt;. That is, you should place your e.g. .ttf files inside that folder, not any subdirectories.&lt;/p&gt;
&lt;h3&gt;Tip: You can remap the volume buttons &lt;a href=&quot;#tip-you-can-remap-the-volume-buttons&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Volume buttons are un-mapped by default (see &lt;code&gt;android-pass-multimedia-buttons-to-system&lt;/code&gt;). That’s find with me, but if you feel inclined, you can rebind them to something else after setting &lt;code&gt;android-pass-multimedia-buttons-to-system&lt;/code&gt; appropriately. Some possibilities would be for navigation between headings, tk list more.&lt;/p&gt;
&lt;h2&gt;Conclusion &lt;a href=&quot;#conclusion&quot;&gt;  
§
&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In conclusion,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make heavy use of the Customize interface. (At least initially—after you’re comfy in Emacs, you can refactor it into a form more familiar to a desktop &lt;code&gt;init.el&lt;/code&gt;.)&lt;/li&gt;
&lt;li&gt;Enable minor modes and options specific to touchscreen-driven usage.&lt;/li&gt;
&lt;li&gt;Install a virtual keyboard to get access to modifiers, function keys, and more.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Right now I’ve achieved a set up I’m happy with. I migrated the portions of my configuration relevant to org, org-capture, and org-node, but in the future if I need more from Emacs-on-mobile, I’ll look to expand my config as necessary. (This includes version-controlling my &lt;code&gt;init.el&lt;/code&gt;.)&lt;/p&gt;
&lt;p&gt;And finally: YMMV on other Android devices. My current phone is the OnePlus 7 Pro running Android version 12.&lt;/p&gt;
&lt;h3&gt;Bonus: My wish list &lt;a href=&quot;#bonus-my-wish-list&quot;&gt;  
§
&lt;/a&gt;&lt;/h3&gt;
&lt;dl&gt;&lt;dt&gt;Touchscreen gestures&lt;/dt&gt;&lt;dd&gt;There is the built-in strokes.el, but strokes.el, as far as I can tell, does not work for touchscreens. Additionally, significant changes would be required to its code base to make it compatible for touchscreens. So, for now, we have to settle with virtual keyboards…&lt;/dd&gt;&lt;dt&gt;Automatic keyboard/IME switching&lt;/dt&gt;&lt;dd&gt;Ideally, I’d have my special virtual keyboard be automatically selected using Emacs and deselected when not using Emacs. Right now, I have to manually switch to it. As far as I know, there is no easy way to accomplish this.&lt;/dd&gt;&lt;dt&gt;Larger tool bar and menu bar&lt;/dt&gt;&lt;dd&gt;The tool bar and menu bar are useful, but they’re also small. I wish they were larger and easier to tap.&lt;/dd&gt;&lt;/dl&gt;
&lt;footer&gt; &lt;h2&gt;&lt;p&gt;Footnotes&lt;/p&gt;&lt;/h2&gt; &lt;ol&gt; &lt;li&gt;   &lt;a href=&quot;#fnref-1&quot;&gt;[1]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Although, some users might find benefits from “typing” via voice input…&lt;/p&gt;  &lt;a href=&quot;#fnref-1&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-2&quot;&gt;[2]&lt;/a&gt; &lt;div&gt; &lt;p&gt;This is what I do: I use Syncthing to share my notes across devices. On my phone, they are located in &lt;code&gt;&quot;/content/storage/com.android.externalstorage.documents/primary:Org files/&lt;/code&gt;… quite a long file path.&lt;/p&gt;  &lt;a href=&quot;#fnref-2&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-3&quot;&gt;[3]&lt;/a&gt; &lt;div&gt; &lt;p&gt;See &lt;a href=&quot;#android-specific-commands&quot;&gt;Android-specific Commands and Options&lt;/a&gt; for why to use the tool-bar tk.&lt;/p&gt;  &lt;a href=&quot;#fnref-3&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-4&quot;&gt;[4]&lt;/a&gt; &lt;div&gt; &lt;p&gt;I use this to access my files shared through Syncthing.&lt;/p&gt;  &lt;a href=&quot;#fnref-4&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt;&lt;li&gt;   &lt;a href=&quot;#fnref-5&quot;&gt;[5]&lt;/a&gt; &lt;div&gt; &lt;p&gt;Recall what &lt;code&gt;(info &quot;(emacs) Android File System&quot;)&lt;/code&gt; explains the “home” for the Emacs app container is.&lt;/p&gt;  &lt;a href=&quot;#fnref-5&quot;&gt;↩&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/footer&gt;</description><pubDate>Thu, 29 May 2025 19:38:00 GMT</pubDate><category>Emacs</category><category>Android</category></item></channel></rss>