<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/assets/rss.xsl" type="text/xsl"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"

>
<channel>
	<title>Sacha Chua - category - stream</title>
	<atom:link href="https://sachachua.com/blog/category/stream/feed/index.xml" rel="self" type="application/rss+xml" />
	<atom:link href="https://sachachua.com/blog/category/stream" rel="alternate" type="text/html" />
	<link>https://sachachua.com/blog/category/stream/feed/index.xml</link>
	<description>Emacs, sketches, and life</description>
  
	<lastBuildDate>Tue, 02 Jun 2026 17:42:19 GMT</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>11ty</generator>
  <item>
		<title>YE29: Sacha, Prot, and Philip Kaludercic Talk Emacs: Newcomer Experience</title>
		<link>https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Sun, 17 May 2026 13:21:07 GMT</pubDate>
    <category>emacs</category>
<category>community</category>
<category>yay-emacs</category>
<category>stream</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/</guid>
		<description><![CDATA[<div class="update" id="org3eacafd">
<p>
<span class="timestamp-wrapper"><time class="timestamp" datetime="2026-05-18">[2026-05-18 Mon]</time></span>: Updated transcript
</p>

</div>

<p>
<a href="https://social.sdfeu.org/@pkal/116500474344904460">Philip Kaludercic</a> wanted to continue the conversation from <a href="https://sachachua.com/blog/2026/04/yay-emacs-sacha-and-prot-talk-emacs-newbies-starter-kits/">YE24: Sacha and Prot Talk Emacs - Newbies/Starter Kits</a>. He's spent a lot of time thinking about this as one of the main contributors to newcomers-presets.
We talked about newcomers-presets, the idea of a "reset theme" that lets experienced users pin defaults to a specific version of Emacs, upcoming changes, and working with emacs-devel.
</p>

<p>
<video preload="none" controls="1" src="https://archive.org/download/ye29-prot-and-pkal-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience.mp4" type="video/mp4"><track kind="subtitles" label="Captions" src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience.vtt" srclang="en" default=""></video>
</p>

<p>
<a href="https://archive.org/details/ye29-prot-and-pkal-emacs-newcomer-experience">View in the Internet Archive</a>, <a href="https://youtube.com/live/UqfZZRl_eNw">watch or comment on YouTube</a>, <a href="https://sachachua.com/blog/feed/index.xml#ID-ye29-transcript">read the transcript online</a>, <a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience.vtt">download the transcript</a>, or <a href="mailto:sacha@sachachua.com">e-mail me</a>.
</p>

<style>
span[data-speaker="Sacha"] .speaker-name { color: var(&#45;&#45;modus-rainbow-1); }
span[data-speaker="Prot"] .speaker-name { color: var(&#45;&#45;modus-rainbow-2); }
span[data-speaker="Philip"] .speaker-name { color: var(&#45;&#45;modus-rainbow-4); }
</style>
<div class="sticky-toc" id="org717b2a5">
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-related-links">Related links</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-chapters">Chapters</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-transcript">Transcript</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-chat">Chat</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-some-types-of-new-users-to-think-about">Some types of new users to think about</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-part-of-a-learning-journey">Sketching out their learning journey</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-other-notes">Other notes</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-some-screenshots-of-a-fresh-emacs">Some screenshots of a fresh Emacs</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-trying-pkal-s-emacs-configuration-generator">Trying pkal's Emacs Configuration Generator</a></li>
</ul>
</div>

</div>
<div id="outline-container-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-related-links" class="outline-3">
<h3 id="may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-related-links"><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-related-links">Related links</a></h3>
<div class="outline-text-3" id="text-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-related-links">
<ul class="org-ul">
<li><a href="https://yhetil.org/emacs-devel/87wm0f2rng.fsf@posteo.net/">A proposal for a "beginners" (user-option) theme - Philip Kaludercic</a></li>
<li><a href="https://yhetil.org/emacs-devel/87tsuucbkh.fsf@posteo.net/">Re: some file-related options to consider for newcomers-presets - Philip Kaludercic</a></li>
<li><a href="https://yhetil.org/emacs-devel/CABPi7cHxEoMKwvDkuXGZXaHDpUuqS6ry60JOcdSZbSuYB47LSg@mail.gmail.com/">A newcomer's feedback on newcomer presets - Abdulnafe Toulaimat</a></li>
<li><a href="https://codeberg.org/pkal/ecg/src/branch/master/ecg.lisp">Emacs Configuration Generator</a> - old source code</li>
</ul>
</div>
</div>
<div id="outline-container-ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-chapters" class="outline-3">
<h3 id="ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-chapters"><a href="https://sachachua.com/blog/feed/index.xml#ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-chapters">Chapters</a></h3>
<div class="outline-text-3" id="text-ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-chapters">
<p>
</p><ul class="org-ul">
<li><span class="audio-time" data-start="0.487" data-stop="1.608">0:00</span> Opening</li>
<li><span class="audio-time" data-start="179.240" data-stop="181.676">2:59</span> newcomers-presets user option theme; would be nice to explain what the changes are</li>
<li><span class="audio-time" data-start="300.240" data-stop="303.727">5:00</span> finding a balance between "it's fine the way it is" and "just use Doom Emacs"</li>
<li><span class="audio-time" data-start="397.520" data-stop="399.039">6:37</span> people value stability, but also conventions have shifted.</li>
<li><span class="audio-time" data-start="410.320" data-stop="413.039">6:50</span> ways Emacs does things differently: ex: terminal vs eshell, output is editable; new users want to edit the previous prompt; sometimes goes against people's intuitions</li>
<li><span class="audio-time" data-start="561.440" data-stop="563.458">9:21</span> How do people develop Emacs intuition? Immersion</li>
<li><span class="audio-time" data-start="595.680" data-stop="598.002">9:55</span> example: dabbrev, there's no undo? Ah, it's just the regular undo.</li>
<li><span class="audio-time" data-start="660.400" data-stop="663.147">11:00</span> newcomers presets: smooth over the intuition-disrupting things that are not actually necessary/beneficial; ex: enable which-key</li>
<li><span class="audio-time" data-start="872.720" data-stop="875.578">14:32</span> newcomers-presets choice is not saved at the moment</li>
<li><span class="audio-time" data-start="1028.200" data-stop="1029.759">17:08</span> newcomers without much computing experience might even find it easier (no C-c expectations, C-v etc)</li>
<li><span class="audio-time" data-start="1110.340" data-stop="1112.400">18:30</span> Focus group?</li>
<li><span class="audio-time" data-start="1335.400" data-stop="1338.880">22:15</span> Emacs survey before</li>
<li><span class="audio-time" data-start="1368.880" data-stop="1370.880">22:48</span> people's backgrounds influence their responses</li>
<li><span class="audio-time" data-start="1426.440" data-stop="1429.312">23:46</span> Hypothetical: Reset themes, to reset things back to the defaults of a specific Emacs version</li>
<li><span class="audio-time" data-start="1462.000" data-stop="1462.967">24:22</span> package-autosuggest-mode suggests based on file extension</li>
<li><span class="audio-time" data-start="1672.880" data-stop="1678.080">27:52</span> Emacs 32: bundled versions of Emacs (Big Emacs - distributions that include more packages)</li>
<li><span class="audio-time" data-start="1794.160" data-stop="1798.120">29:54</span> Selection versus multiple completion</li>
<li><span class="audio-time" data-start="2079.720" data-stop="2081.467">34:39</span> Manuals</li>
<li><span class="audio-time" data-start="2108.620" data-stop="2111.133">35:08</span> More examples?</li>
<li><span class="audio-time" data-start="2182.600" data-stop="2184.153">36:22</span> find-user-init-file?</li>
<li><span class="audio-time" data-start="2318.401" data-stop="2320.182">38:38</span> Getting over the reverence for Emacs's history</li>
<li><span class="audio-time" data-start="2411.030" data-stop="2413.213">40:11</span> Changes are more likely to happen when someone puts in the work to make a patch</li>
<li><span class="audio-time" data-start="2643.536" data-stop="2646.200">44:03</span> Preserving Git history of packages absorbed into the core</li>
<li><span class="audio-time" data-start="2760.280" data-stop="2762.125">46:00</span> Dealing with multiple types of Emacs</li>
<li><span class="audio-time" data-start="2889.380" data-stop="2891.500">48:09</span> Fat Emacs is just about bundling more packages from ELPA, not changing the configuration for them</li>
<li><span class="audio-time" data-start="3083.040" data-stop="3084.233">51:23</span> Customize</li>
<li><span class="audio-time" data-start="3281.040" data-stop="3284.343">54:41</span> CUA - Common User Access</li>
<li><span class="audio-time" data-start="3300.520" data-stop="3304.835">55:00</span> ini file format? <a href="https://sdf.org/~pkal//blog/emacs/ini-init.html">https://sdf.org/~pkal//blog/emacs/ini-init.html</a></li>
<li><span class="audio-time" data-start="3310.800" data-stop="3313.779">55:10</span> Emacs configuration generator</li>

<li><span class="audio-time" data-start="3354.480" data-stop="3356.431">55:54</span> INI-style configuration</li>
<li><span class="audio-time" data-start="3621.800" data-stop="3625.158">1:00:21</span> Quick summary</li>
<li><span class="audio-time" data-start="3747.540" data-stop="3749.100">1:02:27</span> Continuing with INI</li>
<li><span class="audio-time" data-start="3882.940" data-stop="3885.576">1:04:42</span> Motivation</li>
<li><span class="audio-time" data-start="4010.880" data-stop="4014.559">1:06:50</span> Politics and philosophy</li>
<li><span class="audio-time" data-start="4163.480" data-stop="4166.233">1:09:23</span> Experimenting with things outside core</li>
<li><span class="audio-time" data-start="4242.960" data-stop="4245.500">1:10:42</span> Extending the core</li>
<li><span class="audio-time" data-start="4312.040" data-stop="4315.375">1:11:52</span> Guide to contributing to ELPA</li>

<li><span class="audio-time" data-start="4391.420" data-stop="4393.500">1:13:11</span> Making the newcomer experience better</li>
<li><span class="audio-time" data-start="4470.320" data-stop="4473.212">1:14:30</span> "user option themes" versus "appearance themes"</li>
<li><span class="audio-time" data-start="4524.200" data-stop="4527.399">1:15:24</span> find-library</li>
<li><span class="audio-time" data-start="4609.380" data-stop="4614.436">1:16:49</span> configuration generator in Emacs? maybe more wizards?</li>
<li><span class="audio-time" data-start="4619.860" data-stop="4624.255">1:16:59</span> Starter kits</li>
<li><span class="audio-time" data-start="4659.760" data-stop="4662.772">1:17:39</span> Configuration generator in Emacs Lisp?</li>
<li><span class="audio-time" data-start="4720.500" data-stop="4722.758">1:18:40</span> extending the archive format</li>
<li><span class="audio-time" data-start="4856.960" data-stop="4858.679">1:20:56</span> User interfaces</li>
</ul>

<p></p>
</div>
</div>
<div id="outline-container-ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-transcript" class="outline-3">
<h3 id="ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-transcript"><a href="https://sachachua.com/blog/feed/index.xml#ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-transcript">Transcript</a></h3>
<div class="outline-text-3" id="text-ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-transcript">
<details class="code-details"><a name="ID-ye29-transcript"></a><summary>Expand this to read the transcript</summary>
<p>
</p><div class="full-transcript"><p></p><div class="transcript-heading"><span class="audio-time" data-start="0.000000">0:00</span> <strong>Opening</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="0.487000" data-stop="1.608000"><strong class="speaker-name">Sacha:</strong>  I'm going to start recording.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1.628000" data-stop="2.369000">I'm going to do the thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2.409000" data-stop="3.030000">I'll let you know.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3.150000" data-stop="3.370000">Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3.570000" data-stop="4.792000">Let's do this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4.832000" data-stop="4.952000">Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4.972000" data-stop="6.494000"><strong class="speaker-name">Prot:</strong>  Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="6.514000" data-stop="7.633000"><strong class="speaker-name">Sacha:</strong>  Yeah. Okay. Hang on a second.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="7.634000" data-stop="10.933000">Starting, going live.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="10.934000" data-stop="12.800000">Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="12.801000" data-stop="15.167000">So, hello, everyone.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="15.168000" data-stop="17.267000">This is Yay Emacs 29.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="17.268000" data-stop="19.633000">And today I am here with Prot and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="19.634000" data-stop="23.100000">Philip Kaludercic.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="23.101000" data-stop="27.200000">We're having this conversation about Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="27.201000" data-stop="31.534000">newcomer experience, which started off with an</span> <span class="audio-time caption" data-speaker="Sacha" data-start="31.535000" data-stop="34.645000">Emacs carnival last month about newbies and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="34.646000" data-stop="38.165000">starter kits, which Cena started and you fleshed</span> <span class="audio-time caption" data-speaker="Sacha" data-start="38.166000" data-stop="39.999000">out with more questions.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="40.000000" data-stop="42.254000">And now this is snowballing to, okay, let's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="42.255000" data-stop="44.719000">figure out what we can do to make Emacs easier</span> <span class="audio-time caption" data-speaker="Sacha" data-start="44.720000" data-stop="47.664000">for newbies who are coming in, maybe they're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="47.665000" data-stop="50.825000">non-developers who have heard good things about</span> <span class="audio-time caption" data-speaker="Sacha" data-start="50.826000" data-stop="54.141000">Org Mode, or maybe they're developers who want to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="54.142000" data-stop="57.350000">try out what this Emacs thing is and what's all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="57.351000" data-stop="60.332000">the fuss about having an editor that's been</span> <span class="audio-time caption" data-speaker="Sacha" data-start="60.333000" data-stop="61.719000">around for so long.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="61.720000" data-stop="64.882000">Or maybe they're actually still VS Code or Vim</span> <span class="audio-time caption" data-speaker="Sacha" data-start="64.883000" data-stop="68.222000">fans, but they really just want to use Magit, so</span> <span class="audio-time caption" data-speaker="Sacha" data-start="68.223000" data-stop="70.519000">they're coming in just for that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="70.520000" data-stop="75.999000">A lot of different paths to coming into Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="76.000000" data-stop="78.448000">We do have this live stream, so if people have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="78.449000" data-stop="81.029000">questions, I will at some point figure out where</span> <span class="audio-time caption" data-speaker="Sacha" data-start="81.030000" data-stop="83.601000">the chat is on my screen so I can read them out</span> <span class="audio-time caption" data-speaker="Sacha" data-start="83.602000" data-stop="84.039000">to you.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="84.040000" data-stop="86.530000">But my plan here is I'll just be in the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="86.531000" data-stop="89.374000">background taking notes most of the time and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="89.375000" data-stop="91.959000">interjecting with occasional questions.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="91.960000" data-stop="94.788000">And maybe Philip and Prot, you can go brain dump</span> <span class="audio-time caption" data-speaker="Sacha" data-start="94.789000" data-stop="97.472000">all the wonderful things you've been thinking</span> <span class="audio-time caption" data-speaker="Sacha" data-start="97.473000" data-stop="102.059000">about the Emacs newcomer experience.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="102.060000" data-stop="103.700000"><strong class="speaker-name">Philip:</strong>  At this point, regret not having</span> <span class="audio-time caption" data-speaker="Philip" data-start="103.701000" data-stop="105.421000">written down any notes from the last video or</span> <span class="audio-time caption" data-speaker="Philip" data-start="105.422000" data-stop="108.496000">from your last recording of YouTube, because I</span> <span class="audio-time caption" data-speaker="Philip" data-start="108.497000" data-stop="111.351000">noticed I had a few things I wanted to add</span> <span class="audio-time caption" data-speaker="Philip" data-start="111.352000" data-stop="112.439000">or intersperse.</span> <span class="audio-time caption" data-speaker="Philip" data-start="112.440000" data-stop="115.119000">But I guess we can take a look at two things.</span> <span class="audio-time caption" data-speaker="Philip" data-start="115.120000" data-stop="120.266000">So first one is the state of introducing people</span> <span class="audio-time caption" data-speaker="Philip" data-start="120.267000" data-stop="121.799000">to Emacs now.</span> <span class="audio-time caption" data-speaker="Philip" data-start="121.800000" data-stop="124.589000">And the question there is, who are we introducing</span> <span class="audio-time caption" data-speaker="Philip" data-start="124.590000" data-stop="125.159000">Emacs to?</span> <span class="audio-time caption" data-speaker="Philip" data-start="125.160000" data-stop="127.339000">Just like you said, you sketched out a few</span> <span class="audio-time caption" data-speaker="Philip" data-start="127.340000" data-stop="131.196000">different profiles of people who presumably have</span> <span class="audio-time caption" data-speaker="Philip" data-start="131.197000" data-stop="132.479000">entirely different</span> <span class="audio-time caption" data-speaker="Philip" data-start="132.480000" data-stop="136.590000">interests, motivations, like if someone wants to</span> <span class="audio-time caption" data-speaker="Philip" data-start="136.591000" data-stop="139.759000">just use Magit like Emacs is there.</span> <span class="audio-time caption" data-speaker="Philip" data-start="139.760000" data-stop="142.924000">It's the tool, it's the GUI that implements</span> <span class="audio-time caption" data-speaker="Philip" data-start="142.925000" data-stop="145.958000">Magit, then these people have an entirely</span> <span class="audio-time caption" data-speaker="Philip" data-start="145.959000" data-stop="149.385000">different motivation than someone who actually</span> <span class="audio-time caption" data-speaker="Philip" data-start="149.386000" data-stop="151.599000">says, well, I'm coming at it from, I heard it's</span> <span class="audio-time caption" data-speaker="Philip" data-start="151.600000" data-stop="156.759000">an interesting tool for free software development.</span> <span class="audio-time caption" data-speaker="Philip" data-start="156.760000" data-stop="159.707000">Build your own or understand free software</span> <span class="audio-time caption" data-speaker="Philip" data-start="159.708000" data-stop="161.359000">in a different sense, where you can actually do</span> <span class="audio-time caption" data-speaker="Philip" data-start="161.360000" data-stop="163.867000">find-function and open the definition of the</span> <span class="audio-time caption" data-speaker="Philip" data-start="163.868000" data-stop="166.919000">function you just used.</span> <span class="audio-time caption" data-speaker="Philip" data-start="166.920000" data-stop="171.085000">I think malleable is the current catch word</span> <span class="audio-time caption" data-speaker="Philip" data-start="171.086000" data-stop="174.719000">that people like to use in that context.</span> <span class="audio-time caption" data-speaker="Philip" data-start="174.720000" data-stop="179.239000">So there's some issue in that sense.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="179.000000">2:59</span> <strong>newcomers-presets user option theme; would be nice to explain what the changes are</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="179.240000" data-stop="181.676000"><strong class="speaker-name">Philip:</strong> And then the specific comment from the last</span> <span class="audio-time caption" data-speaker="Philip" data-start="181.677000" data-stop="183.999000">discussion which caught my attention was</span> <span class="audio-time caption" data-speaker="Philip" data-start="184.000000" data-stop="187.904000">We were talking about Emacs 31, there's this</span> <span class="audio-time caption" data-speaker="Philip" data-start="187.905000" data-stop="191.719000">preset theme, the newcomers-presets theme,</span> <span class="audio-time caption" data-speaker="Philip" data-start="191.720000" data-stop="194.458000">which is implemented as a user option theme, or</span> <span class="audio-time caption" data-speaker="Philip" data-start="194.459000" data-stop="196.439000">that's how I like to refer to it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="196.440000" data-stop="199.056000">And I probably should just briefly stop and say</span> <span class="audio-time caption" data-speaker="Philip" data-start="199.057000" data-stop="201.155000">that everything I'm saying is from my</span> <span class="audio-time caption" data-speaker="Philip" data-start="201.156000" data-stop="202.119000">own perspective.</span> <span class="audio-time caption" data-speaker="Philip" data-start="202.120000" data-stop="205.238000">I don't feel comfortable saying that this is the</span> <span class="audio-time caption" data-speaker="Philip" data-start="205.239000" data-stop="208.387000">Emacs-devel perspective or that any other of the</span> <span class="audio-time caption" data-speaker="Philip" data-start="208.388000" data-stop="211.197000">Emacs developers necessarily have to agree</span> <span class="audio-time caption" data-speaker="Philip" data-start="211.198000" data-stop="211.799000">with me.</span> <span class="audio-time caption" data-speaker="Philip" data-start="211.800000" data-stop="214.439000">I just think that I might have a few things.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="214.440000" data-stop="215.679000"><strong class="speaker-name">Prot:</strong>  Sorry, I lost your audio.</span> <span class="audio-time caption" data-speaker="Prot" data-start="215.680000" data-stop="220.319000">Just to say I lost your audio, Philip.</span> <span class="audio-time caption" data-speaker="Prot" data-start="220.320000" data-stop="221.039000">Excuse me.</span> <span class="audio-time caption" data-speaker="Prot" data-start="221.040000" data-stop="222.919000">Sorry, I lost your audio for a second.</span> <span class="audio-time caption" data-speaker="Prot" data-start="222.920000" data-stop="224.039000">You could hear it fine.</span> <span class="audio-time caption" data-speaker="Prot" data-start="224.040000" data-stop="227.119000">I will hear it in the recording.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="227.120000" data-stop="230.845000"><strong class="speaker-name">Sacha:</strong>  Okay, so basically, you can repeat it,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="230.846000" data-stop="231.559000">I guess.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="231.560000" data-stop="234.139000">Go ahead.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="234.140000" data-stop="235.679000"><strong class="speaker-name">Philip:</strong>  What did I say?</span> <span class="audio-time caption" data-speaker="Philip" data-start="235.680000" data-stop="237.334000">So you were saying that... I'm not</span> <span class="audio-time caption" data-speaker="Philip" data-start="237.335000" data-stop="238.599000">representing emacs-devel.</span> <span class="audio-time caption" data-speaker="Philip" data-start="238.600000" data-stop="241.700000">These are my views which are informed by the</span> <span class="audio-time caption" data-speaker="Philip" data-start="241.701000" data-stop="244.467000">discussions that we had in emacs-devel that I</span> <span class="audio-time caption" data-speaker="Philip" data-start="244.468000" data-stop="250.199000">hope will be represented.</span> <span class="audio-time caption" data-speaker="Philip" data-start="250.200000" data-stop="253.504000">I think I'm the maintainer of the preset theme,</span> <span class="audio-time caption" data-speaker="Philip" data-start="253.505000" data-stop="256.921000">but of course other people are also contributing</span> <span class="audio-time caption" data-speaker="Philip" data-start="256.922000" data-stop="259.199000">to it and adding other options.</span> <span class="audio-time caption" data-speaker="Philip" data-start="259.200000" data-stop="261.884000">Specific points I had like the target audience of</span> <span class="audio-time caption" data-speaker="Philip" data-start="261.885000" data-stop="264.329000">the preset theme was not people who would be</span> <span class="audio-time caption" data-speaker="Philip" data-start="264.330000" data-stop="265.719000">particularly interested.</span> <span class="audio-time caption" data-speaker="Philip" data-start="265.720000" data-stop="267.439000">What the options are.</span> <span class="audio-time caption" data-speaker="Philip" data-start="267.440000" data-stop="270.199000">I think that was a discussion point last time.</span> <span class="audio-time caption" data-speaker="Philip" data-start="270.200000" data-stop="274.479000">I admit it's a technical deficiency currently.</span> <span class="audio-time caption" data-speaker="Philip" data-start="274.480000" data-stop="275.799000">There's no pretty way.</span> <span class="audio-time caption" data-speaker="Philip" data-start="275.800000" data-stop="278.607000">I think it would be nice if we extended describe</span> <span class="audio-time caption" data-speaker="Philip" data-start="278.608000" data-stop="281.145000">theme to actually list the options that are</span> <span class="audio-time caption" data-speaker="Philip" data-start="281.146000" data-stop="283.961000">modified with hyperlinks so that you could look</span> <span class="audio-time caption" data-speaker="Philip" data-start="283.962000" data-stop="285.159000">into these options.</span> <span class="audio-time caption" data-speaker="Philip" data-start="285.160000" data-stop="287.199000">That's currently not there.</span> <span class="audio-time caption" data-speaker="Philip" data-start="287.200000" data-stop="290.383000">We didn't add it in time for the feature cut for</span> <span class="audio-time caption" data-speaker="Philip" data-start="290.384000" data-stop="293.546000">Emacs 31, but I think for Emacs 32 that's going</span> <span class="audio-time caption" data-speaker="Philip" data-start="293.547000" data-stop="294.959000">to be an interesting</span> <span class="audio-time caption" data-speaker="Philip" data-start="294.960000" data-stop="300.239000">Feature to have at some point.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="300.000000">5:00</span> <strong>finding a balance between "it's fine the way it is" and "just use Doom Emacs"</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="300.240000" data-stop="303.727000"><strong class="speaker-name">Philip:</strong> And actually the idea had been floating around I</span> <span class="audio-time caption" data-speaker="Philip" data-start="303.728000" data-stop="307.084000">think like every time there was like there's a</span> <span class="audio-time caption" data-speaker="Philip" data-start="307.085000" data-stop="310.605000">periodic, periodical discussions like how should</span> <span class="audio-time caption" data-speaker="Philip" data-start="310.606000" data-stop="314.076000">we make Emacs more user-friendly on Emacs level</span> <span class="audio-time caption" data-speaker="Philip" data-start="314.077000" data-stop="317.658000">and people say we have to like say the extremist</span> <span class="audio-time caption" data-speaker="Philip" data-start="317.659000" data-stop="321.239000">position is what do you mean not user-friendly.</span> <span class="audio-time caption" data-speaker="Philip" data-start="321.240000" data-stop="325.679000">It's perfect the way it is.</span> <span class="audio-time caption" data-speaker="Philip" data-start="325.680000" data-stop="325.879000">It's</span> <span class="audio-time caption" data-speaker="Philip" data-start="325.880000" data-stop="328.559000">God-given configuration.</span> <span class="audio-time caption" data-speaker="Philip" data-start="328.560000" data-stop="330.738000">And the other people who say, well, why don't we</span> <span class="audio-time caption" data-speaker="Philip" data-start="330.739000" data-stop="332.632000">just install Doom Emacs and make that the</span> <span class="audio-time caption" data-speaker="Philip" data-start="332.633000" data-stop="333.279000">default then?</span> <span class="audio-time caption" data-speaker="Philip" data-start="333.280000" data-stop="335.870000">Somewhere in between, I think there is a</span> <span class="audio-time caption" data-speaker="Philip" data-start="335.871000" data-stop="337.879000">reasonable position to be had.</span> <span class="audio-time caption" data-speaker="Philip" data-start="337.880000" data-stop="341.909000">But in these discussions, one of the reasons this</span> <span class="audio-time caption" data-speaker="Philip" data-start="341.910000" data-stop="345.199000">came... I participated maybe in</span> <span class="audio-time caption" data-speaker="Philip" data-start="345.200000" data-stop="348.319000">four or five of them, and then this point came up:</span> <span class="audio-time caption" data-speaker="Philip" data-start="348.320000" data-stop="350.781000">why don't we have a theme, like a collection of</span> <span class="audio-time caption" data-speaker="Philip" data-start="350.782000" data-stop="353.304000">user options, which you can toggle in one switch,</span> <span class="audio-time caption" data-speaker="Philip" data-start="353.305000" data-stop="358.067000">which enable all the options from which we would</span> <span class="audio-time caption" data-speaker="Philip" data-start="358.068000" data-stop="360.767000">not find, which existing users would not find</span> <span class="audio-time caption" data-speaker="Philip" data-start="360.768000" data-stop="362.200000">interesting, which are always the bulk of the</span> <span class="audio-time caption" data-speaker="Philip" data-start="362.201000" data-stop="364.200000">users. Most people are already existing users. They</span> <span class="audio-time caption" data-speaker="Philip" data-start="364.201000" data-stop="365.962000">don't come in and... One of the things is, lots of</span> <span class="audio-time caption" data-speaker="Philip" data-start="365.963000" data-stop="367.959000">existing users, I'm thinking of like</span> <span class="audio-time caption" data-speaker="Philip" data-start="367.960000" data-stop="371.240000">a 60-year-old professor who has been using Emacs</span> <span class="audio-time caption" data-speaker="Philip" data-start="371.241000" data-stop="374.473000">for 30 years, or a software engineer who's using</span> <span class="audio-time caption" data-speaker="Philip" data-start="374.474000" data-stop="377.321000">it, and maybe consciously or unconsciously</span> <span class="audio-time caption" data-speaker="Philip" data-start="377.322000" data-stop="380.782000">appreciates the fact that it doesn't change every</span> <span class="audio-time caption" data-speaker="Philip" data-start="380.783000" data-stop="381.559000">few years.</span> <span class="audio-time caption" data-speaker="Philip" data-start="381.560000" data-stop="384.359000">You don't have a graphic designer.</span> <span class="audio-time caption" data-speaker="Philip" data-start="384.360000" data-stop="387.111000">This is, of course, me against graphic designers</span> <span class="audio-time caption" data-speaker="Philip" data-start="387.112000" data-stop="389.890000">and UI designers who have a need to reinvent the</span> <span class="audio-time caption" data-speaker="Philip" data-start="389.891000" data-stop="392.074000">UI interface every few years and then</span> <span class="audio-time caption" data-speaker="Philip" data-start="392.075000" data-stop="392.959000">things change.</span> <span class="audio-time caption" data-speaker="Philip" data-start="392.960000" data-stop="394.079000">And how do I save now?</span> <span class="audio-time caption" data-speaker="Philip" data-start="394.080000" data-stop="395.119000">What's the...</span> <span class="audio-time caption" data-speaker="Philip" data-start="395.120000" data-stop="396.439000">What's the button to do this?</span> <span class="audio-time caption" data-speaker="Philip" data-start="396.440000" data-stop="397.519000">And the UI changes.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="397.000000">6:37</span> <strong>people value stability, but also conventions have shifted.</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="397.520000" data-stop="399.039000"><strong class="speaker-name">Philip:</strong> The people who value the stability.</span> <span class="audio-time caption" data-speaker="Philip" data-start="399.040000" data-stop="402.613000">But of course, the common conventions have</span> <span class="audio-time caption" data-speaker="Philip" data-start="402.614000" data-stop="403.719000">grown apart.</span> <span class="audio-time caption" data-speaker="Philip" data-start="403.720000" data-stop="408.669000">What Emacs does and what people are used to from</span> <span class="audio-time caption" data-speaker="Philip" data-start="408.670000" data-stop="410.319000">other programs.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="410.000000">6:50</span> <strong>ways Emacs does things differently: ex: terminal vs eshell, output is editable; new users want to edit the previous prompt; sometimes goes against people's intuitions</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="410.320000" data-stop="413.039000"><strong class="speaker-name">Philip:</strong> Now, at this point, we also have to distinguish</span> <span class="audio-time caption" data-speaker="Philip" data-start="413.040000" data-stop="415.850000">that there are things which Emacs doesn't do the</span> <span class="audio-time caption" data-speaker="Philip" data-start="415.851000" data-stop="417.959000">way other programs do, which are...</span> <span class="audio-time caption" data-speaker="Philip" data-start="417.960000" data-stop="420.839000">Which I would argue are actually sensible.</span> <span class="audio-time caption" data-speaker="Philip" data-start="420.840000" data-stop="425.600000">For example, I think one issue I remember was</span> <span class="audio-time caption" data-speaker="Philip" data-start="425.601000" data-stop="427.217000">when I first started using Emacs, I had a</span> <span class="audio-time caption" data-speaker="Philip" data-start="427.218000" data-stop="428.639000">terminal emulator.</span> <span class="audio-time caption" data-speaker="Philip" data-start="428.640000" data-stop="430.999000">I wanted to have a terminal emulator within Emacs.</span> <span class="audio-time caption" data-speaker="Philip" data-start="431.000000" data-stop="435.888000">Nowadays I use Emacs Shell, which to me seems</span> <span class="audio-time caption" data-speaker="Philip" data-start="435.889000" data-stop="439.799000">like a more truer Emacs experience.</span> <span class="audio-time caption" data-speaker="Philip" data-start="439.800000" data-stop="442.479000">It's an opinion, a strong opinion maybe.</span> <span class="audio-time caption" data-speaker="Philip" data-start="442.480000" data-stop="445.093000">And it's also influenced by a history of using</span> <span class="audio-time caption" data-speaker="Philip" data-start="445.094000" data-stop="447.797000">Plan 9 and that kind of terminal where actually</span> <span class="audio-time caption" data-speaker="Philip" data-start="447.798000" data-stop="449.639000">the output is just as editable.</span> <span class="audio-time caption" data-speaker="Philip" data-start="449.640000" data-stop="450.439000">You can just search it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="450.440000" data-stop="451.079000">You can edit it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="451.080000" data-stop="451.919000">You can cut it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="451.920000" data-stop="454.982000">You can interact with the output any way you</span> <span class="audio-time caption" data-speaker="Philip" data-start="454.983000" data-stop="458.284000">would use a normal text, which is not something</span> <span class="audio-time caption" data-speaker="Philip" data-start="458.285000" data-stop="459.099000">you can do with a terminal for purely</span> <span class="audio-time caption" data-speaker="Philip" data-start="459.100000" data-stop="464.419000">historical reasons.</span> <span class="audio-time caption" data-speaker="Philip" data-start="464.420000" data-stop="466.033000">At my university, the university where I studied</span> <span class="audio-time caption" data-speaker="Philip" data-start="466.034000" data-stop="469.676000">computer science, I frequently helped people in</span> <span class="audio-time caption" data-speaker="Philip" data-start="469.677000" data-stop="472.079000">the introductory Linux course.</span> <span class="audio-time caption" data-speaker="Philip" data-start="472.080000" data-stop="473.587000">One thing you notice there, these are</span> <span class="audio-time caption" data-speaker="Philip" data-start="473.588000" data-stop="474.239000">real newcomers.</span> <span class="audio-time caption" data-speaker="Philip" data-start="474.240000" data-stop="475.988000">These are people who have never used Linux or a</span> <span class="audio-time caption" data-speaker="Philip" data-start="475.989000" data-stop="477.439000">terminal or anything like that before.</span> <span class="audio-time caption" data-speaker="Philip" data-start="477.440000" data-stop="480.306000">The first thing they do when they want to, like,</span> <span class="audio-time caption" data-speaker="Philip" data-start="480.307000" data-stop="483.081000">they use the arrow keys expecting or click on,</span> <span class="audio-time caption" data-speaker="Philip" data-start="483.082000" data-stop="485.233000">they use the mouse and click on the</span> <span class="audio-time caption" data-speaker="Philip" data-start="485.234000" data-stop="486.279000">previous prompt.</span> <span class="audio-time caption" data-speaker="Philip" data-start="486.280000" data-stop="487.999000">And they want to modify the previous prompt.</span> <span class="audio-time caption" data-speaker="Philip" data-start="488.000000" data-stop="490.250000">Of course, that doesn't work because that's not</span> <span class="audio-time caption" data-speaker="Philip" data-start="490.251000" data-stop="491.639000">how terminal emulators work.</span> <span class="audio-time caption" data-speaker="Philip" data-start="491.640000" data-stop="494.199000">All the previous output, that's fixed.</span> <span class="audio-time caption" data-speaker="Philip" data-start="494.200000" data-stop="495.319000">You don't touch that anymore.</span> <span class="audio-time caption" data-speaker="Philip" data-start="495.320000" data-stop="498.003000">Everyone, I guess even people who we describe</span> <span class="audio-time caption" data-speaker="Philip" data-start="498.004000" data-stop="500.519000">as newcomers, talking about Emacs,</span> <span class="audio-time caption" data-speaker="Philip" data-start="500.520000" data-stop="501.759000">obviously know</span> <span class="audio-time caption" data-speaker="Philip" data-start="501.760000" data-stop="503.957000">of course you don't touch the previous prompt in</span> <span class="audio-time caption" data-speaker="Philip" data-start="503.958000" data-stop="504.599000">the terminal.</span> <span class="audio-time caption" data-speaker="Philip" data-start="504.600000" data-stop="507.255000">These are some expectations you have, if you use</span> <span class="audio-time caption" data-speaker="Philip" data-start="507.256000" data-stop="509.881000">Eclipse, if you use VS Code, if you use... I'm</span> <span class="audio-time caption" data-speaker="Philip" data-start="509.882000" data-stop="512.679000">not sure how the NeoVim terminal emulator works.</span> <span class="audio-time caption" data-speaker="Philip" data-start="512.680000" data-stop="513.799000">I know they have a built-in one.</span> <span class="audio-time caption" data-speaker="Philip" data-start="513.800000" data-stop="516.439000">I think Vim also, but I'm guessing right now.</span> <span class="audio-time caption" data-speaker="Philip" data-start="516.440000" data-stop="518.962000">So there are some accumulated intuitions which</span> <span class="audio-time caption" data-speaker="Philip" data-start="518.963000" data-stop="521.759000">Emacs actually intentionally doesn't want to give,</span> <span class="audio-time caption" data-speaker="Philip" data-start="521.760000" data-stop="525.302000">doesn't want to give in all purpose, because I'd</span> <span class="audio-time caption" data-speaker="Philip" data-start="525.303000" data-stop="528.490000">argue that one of the strengths of Emacs is</span> <span class="audio-time caption" data-speaker="Philip" data-start="528.491000" data-stop="532.143000">really having this uniform text interface where I</span> <span class="audio-time caption" data-speaker="Philip" data-start="532.144000" data-stop="535.749000">can use isearch, I can use occur, I can use the</span> <span class="audio-time caption" data-speaker="Philip" data-start="535.750000" data-stop="539.477000">highlighting commands, I can just select a region</span> <span class="audio-time caption" data-speaker="Philip" data-start="539.478000" data-stop="541.759000">and write it out to a buffer,</span> <span class="audio-time caption" data-speaker="Philip" data-start="541.760000" data-stop="543.479000">and stuff like that.</span> <span class="audio-time caption" data-speaker="Philip" data-start="543.480000" data-stop="546.013000">That shell buffer is no different than anything</span> <span class="audio-time caption" data-speaker="Philip" data-start="546.014000" data-stop="547.199000">else in that respect.</span> <span class="audio-time caption" data-speaker="Philip" data-start="547.200000" data-stop="550.159000">Please interrupt me by the way.</span> <span class="audio-time caption" data-speaker="Philip" data-start="550.160000" data-stop="551.999000">This is not supposed to be a monologue.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="552.000000" data-stop="553.719000"><strong class="speaker-name">Prot:</strong>  No, no, no.</span> <span class="audio-time caption" data-speaker="Prot" data-start="553.720000" data-stop="556.239000">Go ahead.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="556.240000" data-stop="558.067000"><strong class="speaker-name">Sacha:</strong>  So it sounds like there's an interesting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="558.068000" data-stop="558.179000">challenge here.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="558.180000" data-stop="559.610000"><strong class="speaker-name">Philip:</strong>  Breaking some of these intuitions</span> <span class="audio-time caption" data-speaker="Philip" data-start="559.611000" data-stop="560.159000">is legitimate.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="560.160000" data-stop="561.439000"><strong class="speaker-name">Sacha:</strong>  Yeah.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="561.000000">9:21</span> <strong>How do people develop Emacs intuition? Immersion</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="561.440000" data-stop="563.458000"><strong class="speaker-name">Sacha:</strong> How do we help people develop the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="563.459000" data-stop="566.339000">Emacs intuitions?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="566.340000" data-stop="568.261000"><strong class="speaker-name">Philip:</strong>  To some degree, it really feels like it</span> <span class="audio-time caption" data-speaker="Philip" data-start="568.262000" data-stop="572.039000">has to be something that you immerse yourself in.</span> <span class="audio-time caption" data-speaker="Philip" data-start="572.040000" data-stop="574.747000">The issue, I guess, is, well, I know, I mean, I</span> <span class="audio-time caption" data-speaker="Philip" data-start="574.748000" data-stop="576.879000">knew people who actually used Emacs.</span> <span class="audio-time caption" data-speaker="Philip" data-start="576.880000" data-stop="579.866000">I mean, you can help them in a face-to-face</span> <span class="audio-time caption" data-speaker="Philip" data-start="579.867000" data-stop="582.133000">setting or like Prot does in his</span> <span class="audio-time caption" data-speaker="Philip" data-start="582.134000" data-stop="583.479000">teaching settings.</span> <span class="audio-time caption" data-speaker="Philip" data-start="583.480000" data-stop="586.456000">Then you communicate certain things, which I</span> <span class="audio-time caption" data-speaker="Philip" data-start="586.457000" data-stop="588.959000">don't want to say they're ineffable.</span> <span class="audio-time caption" data-speaker="Philip" data-start="588.960000" data-stop="591.361000">It's not like you couldn't write them down in a</span> <span class="audio-time caption" data-speaker="Philip" data-start="591.362000" data-stop="592.639000">manual, but it's also...</span> <span class="audio-time caption" data-speaker="Philip" data-start="592.640000" data-stop="595.679000">Like the mentality that people have.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="595.000000">9:55</span> <strong>example: dabbrev, there's no undo? Ah, it's just the regular undo.</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="595.680000" data-stop="598.002000"><strong class="speaker-name">Philip:</strong> A different example I have, like, I remember I</span> <span class="audio-time caption" data-speaker="Philip" data-start="598.003000" data-stop="599.958000">was using daabrev for the first time</span> <span class="audio-time caption" data-speaker="Philip" data-start="599.959000" data-stop="600.679000">or something.</span> <span class="audio-time caption" data-speaker="Philip" data-start="600.680000" data-stop="602.519000">For a while I was irritated.</span> <span class="audio-time caption" data-speaker="Philip" data-start="602.520000" data-stop="603.399000">There was no undo.</span> <span class="audio-time caption" data-speaker="Philip" data-start="603.400000" data-stop="606.185000">Like, how do I go back to the previous</span> <span class="audio-time caption" data-speaker="Philip" data-start="606.186000" data-stop="607.359000">text expansion?</span> <span class="audio-time caption" data-speaker="Philip" data-start="607.360000" data-stop="609.609000">Until at some point I realized, oh wait, it's</span> <span class="audio-time caption" data-speaker="Philip" data-start="609.610000" data-stop="610.559000">just regular undo.</span> <span class="audio-time caption" data-speaker="Philip" data-start="610.560000" data-stop="614.519000">That's just the way you undo it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="614.520000" data-stop="619.679000">But somehow writing this down in a manual is...</span> <span class="audio-time caption" data-speaker="Philip" data-start="619.680000" data-stop="622.511000">It's not an easy thing to always think of</span> <span class="audio-time caption" data-speaker="Philip" data-start="622.512000" data-stop="623.479000">these things.</span> <span class="audio-time caption" data-speaker="Philip" data-start="623.480000" data-stop="625.804000">For me it seems obvious now, but at that point I</span> <span class="audio-time caption" data-speaker="Philip" data-start="625.805000" data-stop="627.839000">specifically remember it was unintuitive.</span> <span class="audio-time caption" data-speaker="Philip" data-start="627.840000" data-stop="631.000000">I had this accumulated expectation from other</span> <span class="audio-time caption" data-speaker="Philip" data-start="631.001000" data-stop="634.250000">programmers if I have a text expansion in this</span> <span class="audio-time caption" data-speaker="Philip" data-start="634.251000" data-stop="637.312000">case that I'm actually cycling through some</span> <span class="audio-time caption" data-speaker="Philip" data-start="637.313000" data-stop="640.772000">special sort of menu, not thinking of it as just</span> <span class="audio-time caption" data-speaker="Philip" data-start="640.773000" data-stop="643.079000">regular text buffer operations.</span> <span class="audio-time caption" data-speaker="Philip" data-start="643.080000" data-stop="645.839000">Just text editing in some fancy way.</span> <span class="audio-time caption" data-speaker="Philip" data-start="645.840000" data-stop="648.079000">But that's one</span> <span class="audio-time caption" data-speaker="Philip" data-start="648.080000" data-stop="650.919000">We should keep in mind.</span> <span class="audio-time caption" data-speaker="Philip" data-start="650.920000" data-stop="654.951000">This was all related to the preset theme in some</span> <span class="audio-time caption" data-speaker="Philip" data-start="654.952000" data-stop="655.959000">way, right?</span> <span class="audio-time caption" data-speaker="Philip" data-start="655.960000" data-stop="656.999000">You're writing this down.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="657.000000" data-stop="658.639000"><strong class="speaker-name">Sacha:</strong>  Yes, I'm writing this down.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="658.640000" data-stop="660.399000">That's why we have notes.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="660.000000">11:00</span> <strong>newcomers presets: smooth over the intuition-disrupting things that are not actually necessary/beneficial; ex: enable which-key</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="660.400000" data-stop="663.147000"><strong class="speaker-name">Sacha:</strong> So what I'm thinking is you wanted the idea</span> <span class="audio-time caption" data-speaker="Sacha" data-start="663.148000" data-stop="666.294000">behind the newcomers presets is to kind of smooth</span> <span class="audio-time caption" data-speaker="Sacha" data-start="666.295000" data-stop="669.270000">over some of those intuition disrupting things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="669.271000" data-stop="671.688000">where people are coming in with maybe</span> <span class="audio-time caption" data-speaker="Sacha" data-start="671.689000" data-stop="674.481000">expectations of how stuff should work in a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="674.482000" data-stop="675.919000">modern editor.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="675.920000" data-stop="680.379000"><strong class="speaker-name">Philip:</strong>  Specifically, the intuition.</span> <span class="audio-time caption" data-speaker="Philip" data-start="680.380000" data-stop="682.570000">Specifically, the intuition-disrupting things</span> <span class="audio-time caption" data-speaker="Philip" data-start="682.571000" data-stop="685.616000">which are not necessary, in some sense. Like, we</span> <span class="audio-time caption" data-speaker="Philip" data-start="685.617000" data-stop="691.033000">wouldn't want to be an intuition disrupt... like you</span> <span class="audio-time caption" data-speaker="Philip" data-start="691.034000" data-stop="694.433000">could probably... Like Cua mode or something, that</span> <span class="audio-time caption" data-speaker="Philip" data-start="694.434000" data-stop="696.833000">would be something where people if they would</span> <span class="audio-time caption" data-speaker="Philip" data-start="696.834000" data-stop="699.900000">start using... If you would enable Cua-mode</span> <span class="audio-time caption" data-speaker="Philip" data-start="699.901000" data-stop="701.792000">by default, that would inhibit further development,</span> <span class="audio-time caption" data-speaker="Philip" data-start="701.793000" data-stop="704.951000">because then it might be confusing with using</span> <span class="audio-time caption" data-speaker="Philip" data-start="704.952000" data-stop="707.479000">C-c, like if you... because suddenly</span> <span class="audio-time caption" data-speaker="Philip" data-start="707.480000" data-stop="711.347000">Delay becomes a user input, which is usually not</span> <span class="audio-time caption" data-speaker="Philip" data-start="711.348000" data-stop="713.039000">the case with Emacs.</span> <span class="audio-time caption" data-speaker="Philip" data-start="713.040000" data-stop="715.200000">I know which-key is an exception in that case,</span> <span class="audio-time caption" data-speaker="Philip" data-start="715.201000" data-stop="719.300000">because which-key pausing actually is an action</span> <span class="audio-time caption" data-speaker="Philip" data-start="719.301000" data-stop="720.439000">and displays a pop-up buffer.</span> <span class="audio-time caption" data-speaker="Philip" data-start="720.440000" data-stop="723.282000">And we do enable which-key due to popular requests</span> <span class="audio-time caption" data-speaker="Philip" data-start="723.283000" data-stop="724.559000">and the preset theme.</span> <span class="audio-time caption" data-speaker="Philip" data-start="724.560000" data-stop="727.269000">I personally was a bit hesitant about that one,</span> <span class="audio-time caption" data-speaker="Philip" data-start="727.270000" data-stop="728.999000">but it seems to be something.</span> <span class="audio-time caption" data-speaker="Philip" data-start="729.000000" data-stop="731.305000">where you have to really weigh it on a</span> <span class="audio-time caption" data-speaker="Philip" data-start="731.306000" data-stop="732.519000">case-to-case basis.</span> <span class="audio-time caption" data-speaker="Philip" data-start="732.520000" data-stop="735.780000">But, Sacha, do you have the... What version of</span> <span class="audio-time caption" data-speaker="Philip" data-start="735.781000" data-stop="738.119000">Emacs do you have running there?</span> <span class="audio-time caption" data-speaker="Philip" data-start="738.120000" data-stop="739.599000">I can't make it out.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="739.600000" data-stop="742.964000"><strong class="speaker-name">Sacha:</strong>  Yeah, this is Emacs 31, so I do have...</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="742.965000" data-stop="746.066000"><strong class="speaker-name">Philip:</strong>  So you can open the preset theme, right?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="746.067000" data-stop="747.133000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah. Hang on a second.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="747.134000" data-stop="752.613000">Let me bring up a... I have now a terminal, so I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="752.614000" data-stop="757.119000">can... Let me bring up a completely fresh Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="757.120000" data-stop="759.239000"><strong class="speaker-name">Philip:</strong>  No, I just want you to open the file.</span> <span class="audio-time caption" data-speaker="Philip" data-start="759.240000" data-stop="761.839000">Because in the file there is a prelude.</span> <span class="audio-time caption" data-speaker="Philip" data-start="761.840000" data-stop="763.708000">There's a commentary section that actually</span> <span class="audio-time caption" data-speaker="Philip" data-start="763.709000" data-stop="765.267000">explains the curve.</span> <span class="audio-time caption" data-speaker="Philip" data-start="765.268000" data-stop="766.833000">It's not a library.</span> <span class="audio-time caption" data-speaker="Philip" data-start="766.834000" data-stop="768.805000"></span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="768.806000" data-stop="771.439000"><strong class="speaker-name">Prot:</strong>  Yeah, that's part of the problem with those themes.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="771.440000" data-stop="772.319000"><strong class="speaker-name">Philip:</strong>  That's the problem.</span> <span class="audio-time caption" data-speaker="Philip" data-start="772.320000" data-stop="773.719000">Themes are not libraries.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="773.720000" data-stop="776.439000"><strong class="speaker-name">Prot:</strong>  It would be easier if they were all there.</span> <span class="audio-time caption" data-speaker="Prot" data-start="776.440000" data-stop="779.031000">It's a kind of an implementation detail that from</span> <span class="audio-time caption" data-speaker="Prot" data-start="779.032000" data-stop="782.499000">a user, it doesn't really make a difference.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="782.500000" data-stop="784.439000"><strong class="speaker-name">Sacha:</strong>  All right, newcomers-presets.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="784.440000" data-stop="785.919000"><strong class="speaker-name">Philip:</strong>  If I remember correctly...</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="786.360000" data-stop="788.639000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah, exactly.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="788.640000" data-stop="790.979000"><strong class="speaker-name">Philip:</strong>  Yeah, and you see up there the commentary section?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="790.980000" data-stop="791.739000"><strong class="speaker-name">Sacha:</strong>  Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="791.740000" data-stop="798.399000"><strong class="speaker-name">Philip:</strong>  If you scroll up a bit, it's above line 37.</span> <span class="audio-time caption" data-speaker="Philip" data-start="798.400000" data-stop="802.133000">The theme configures which we can reasonably</span> <span class="audio-time caption" data-speaker="Philip" data-start="802.134000" data-stop="803.533000">expect the average user to want to enable, but</span> <span class="audio-time caption" data-speaker="Philip" data-start="803.534000" data-stop="807.801000">would otherwise be unlikely to discover on</span> <span class="audio-time caption" data-speaker="Philip" data-start="807.802000" data-stop="808.919000">their own.</span> <span class="audio-time caption" data-speaker="Philip" data-start="808.920000" data-stop="812.549000">That's sort of the overall guide of what options</span> <span class="audio-time caption" data-speaker="Philip" data-start="812.550000" data-stop="813.759000">we want to add.</span> <span class="audio-time caption" data-speaker="Philip" data-start="813.760000" data-stop="816.349000">That's why it's also an option on the</span> <span class="audio-time caption" data-speaker="Philip" data-start="816.350000" data-stop="817.399000">splash screen.</span> <span class="audio-time caption" data-speaker="Philip" data-start="817.400000" data-stop="823.100000">You just tick it, and then the user options</span> <span class="audio-time caption" data-speaker="Philip" data-start="823.101000" data-stop="826.199000">enabled in the theme should be activated by default.</span> <span class="audio-time caption" data-speaker="Philip" data-start="826.200000" data-stop="828.479000">That's sort of the idea.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="828.480000" data-stop="831.359000"><strong class="speaker-name">Sacha:</strong>  It is available on the splash screen.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="831.360000" data-stop="834.533000">So if I say display-splash...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="834.534000" data-stop="840.779000">Oh my goodness, how do I get to the splash screen?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="840.780000" data-stop="843.767000"><strong class="speaker-name">Prot:</strong>  It's C-h C-a or not?</span> <span class="audio-time caption" data-speaker="Prot" data-start="843.768000" data-stop="845.459000">I forgot. C-h a maybe?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="845.460000" data-stop="846.100000"><strong class="speaker-name">Philip:</strong>  There are two things.</span> <span class="audio-time caption" data-speaker="Philip" data-start="846.101000" data-stop="847.959000">There's a splash screen and there's the...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="848.420000" data-stop="849.033000"><strong class="speaker-name">Sacha:</strong>  Hang on a second.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="849.034000" data-stop="850.567000">I'm just going to start a new Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="850.568000" data-stop="853.140000"><strong class="speaker-name">Prot:</strong>  Yeah, I haven't done that in, like, I don't know...</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="853.141000" data-stop="854.719000"><strong class="speaker-name">Philip:</strong>  That's the about Emacs screen.</span> <span class="audio-time caption" data-speaker="Philip" data-start="854.720000" data-stop="855.639000">But you have a display splash screen.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="855.640000" data-stop="857.639000"><strong class="speaker-name">Prot:</strong>  C-h C-a on mine.</span> <span class="audio-time caption" data-speaker="Prot" data-start="857.640000" data-stop="860.519000">About Emacs.</span> <span class="audio-time caption" data-speaker="Prot" data-start="860.520000" data-stop="861.639000">M-x about-emacs.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="861.640000" data-stop="862.900000"><strong class="speaker-name">Sacha:</strong>  No, I have a better idea.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="862.901000" data-stop="864.433000">I'm going to start this new Emacs person.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="864.434000" data-stop="865.100000">Okay, here we go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="865.101000" data-stop="866.067000">New Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="866.068000" data-stop="867.333000">Fresh person.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience-00-14-32-733.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience-00-14-32-733.jpg" alt="image from video 00:14:32.733" data-time="00:14:32.733"></a><span class="audio-time caption" data-speaker="Sacha" data-start="867.334000" data-stop="869.719000"><strong class="speaker-name">Sacha:</strong> So we click on this, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="869.720000" data-stop="872.719000">And it turns on a bunch of things including the tab bar.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="872.000000">14:32</span> <strong>newcomers-presets choice is not saved at the moment</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="872.720000" data-stop="875.578000"><strong class="speaker-name">Sacha:</strong> I wasn't entirely sure how people would save that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="875.579000" data-stop="877.679000">so that it happens again next time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="877.680000" data-stop="879.239000">Is the idea that they just keep</span> <span class="audio-time caption" data-speaker="Sacha" data-start="879.240000" data-stop="879.999000">checking that box?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="880.000000" data-stop="881.319000"><strong class="speaker-name">Philip:</strong>  That's not done currently.</span> <span class="audio-time caption" data-speaker="Philip" data-start="881.320000" data-stop="884.199000">That's something we haven't simply decided on.</span> <span class="audio-time caption" data-speaker="Philip" data-start="884.200000" data-stop="887.162000">The current presentation is you enable</span> <span class="audio-time caption" data-speaker="Philip" data-start="887.163000" data-stop="890.145000">it in that mode and then you'd have to, which is</span> <span class="audio-time caption" data-speaker="Philip" data-start="890.146000" data-stop="892.844000">of course saying it out loud makes it sound</span> <span class="audio-time caption" data-speaker="Philip" data-start="892.845000" data-stop="895.592000">stupid, but you'd have to persistently save</span> <span class="audio-time caption" data-speaker="Philip" data-start="895.593000" data-stop="896.359000">the themes.</span> <span class="audio-time caption" data-speaker="Philip" data-start="896.360000" data-stop="898.967000">So then I think it's optional to save themes</span> <span class="audio-time caption" data-speaker="Philip" data-start="898.968000" data-stop="901.199000">and then...</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience-00-15-14-000.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience-00-15-14-000.jpg" alt="image from video 00:15:14.000" data-time="00:15:14.000"></a><span class="audio-time caption" data-speaker="Sacha" data-start="901.200000" data-stop="903.487000"><strong class="speaker-name">Sacha:</strong>  It is possible for people to get to it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="903.488000" data-stop="905.999000">if we leave them a breadcrumb.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="906.000000" data-stop="910.067000">But it's not going to occur to them because it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="910.068000" data-stop="911.933000">would never occur to them to say customize Emacs,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="911.934000" data-stop="917.099000">custom themes, and then I can pick newcomers themes from here.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="917.100000" data-stop="921.033000"><strong class="speaker-name">Philip:</strong>  It's a point that I at least intended</span> <span class="audio-time caption" data-speaker="Philip" data-start="921.034000" data-stop="923.067000">to mention at some point on</span> <span class="audio-time caption" data-speaker="Philip" data-start="923.068000" data-stop="925.300000">emacs-devel, whether we want to make this, because</span> <span class="audio-time caption" data-speaker="Philip" data-start="925.301000" data-stop="927.124000">currently it just loads the theme, but it doesn't</span> <span class="audio-time caption" data-speaker="Philip" data-start="927.125000" data-stop="929.183000">persist the choice, but it could just as well</span> <span class="audio-time caption" data-speaker="Philip" data-start="929.184000" data-stop="930.119000">persist the choice.</span> <span class="audio-time caption" data-speaker="Philip" data-start="930.120000" data-stop="932.383000">There's a discussion to be had which of these two</span> <span class="audio-time caption" data-speaker="Philip" data-start="932.384000" data-stop="934.611000">behaviors is more intuitive, because of course, if</span> <span class="audio-time caption" data-speaker="Philip" data-start="934.612000" data-stop="937.467000">you persist the option, then you have the</span> <span class="audio-time caption" data-speaker="Philip" data-start="937.468000" data-stop="938.595000">disadvantage that someone might enable it, but</span> <span class="audio-time caption" data-speaker="Philip" data-start="938.596000" data-stop="940.783000">doesn't actually want it, but now somehow their</span> <span class="audio-time caption" data-speaker="Philip" data-start="940.784000" data-stop="942.639000">Emacs is broken from their perspective.</span> <span class="audio-time caption" data-speaker="Philip" data-start="942.640000" data-stop="945.171000">I don't want tabs or whatever they say, or I don't</span> <span class="audio-time caption" data-speaker="Philip" data-start="945.172000" data-stop="947.738000">want which-key, and they don't know how to disable it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="947.739000" data-stop="949.239000">So this is...</span> <span class="audio-time caption" data-speaker="Philip" data-start="949.240000" data-stop="951.447000">I wouldn't say it's an obvious decision in</span> <span class="audio-time caption" data-speaker="Philip" data-start="951.448000" data-stop="953.579000">either direction.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="953.580000" data-stop="955.716000"><strong class="speaker-name">Prot:</strong>  Like if there is an enable button or</span> <span class="audio-time caption" data-speaker="Prot" data-start="955.717000" data-stop="958.697000">save, there should be a disable and unsave,</span> <span class="audio-time caption" data-speaker="Prot" data-start="958.698000" data-stop="959.599000">like remove.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="959.600000" data-stop="962.359000"><strong class="speaker-name">Philip:</strong>  Yeah, that's the checkbox idea in that case.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="962.360000" data-stop="966.800000"><strong class="speaker-name">Prot:</strong>  That would be the tricky part.</span> <span class="audio-time caption" data-speaker="Prot" data-start="966.801000" data-stop="970.143000">And especially, finding the place on the splash</span> <span class="audio-time caption" data-speaker="Prot" data-start="970.144000" data-stop="971.959000">screen so that this actually works for everyone...</span> <span class="audio-time caption" data-speaker="Prot" data-start="971.960000" data-stop="975.258000">Because if you open it in a TUI mode, I think then</span> <span class="audio-time caption" data-speaker="Prot" data-start="975.259000" data-stop="978.451000">initially, if I remember correctly, we had this</span> <span class="audio-time caption" data-speaker="Prot" data-start="978.452000" data-stop="981.695000">button or this new to Emacs line was underneath</span> <span class="audio-time caption" data-speaker="Prot" data-start="981.696000" data-stop="983.379000">the copyrights.</span> <span class="audio-time caption" data-speaker="Prot" data-start="983.380000" data-stop="984.319000">No, no, that was a different thing.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience-00-16-46-233.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience-00-16-46-233.jpg" alt="image from video 00:16:46.233" data-time="00:16:46.233"></a><span class="audio-time caption" data-speaker="Prot" data-start="984.320000" data-stop="987.039000"><strong class="speaker-name">Prot:</strong> If you click on newcomers preset, for example,</span> <span class="audio-time caption" data-speaker="Prot" data-start="987.040000" data-stop="992.339000">then you are redirected to the manual entry.</span> <span class="audio-time caption" data-speaker="Prot" data-start="992.340000" data-stop="994.636000">And I think we had some, yeah, there's this, the</span> <span class="audio-time caption" data-speaker="Prot" data-start="994.637000" data-stop="995.519000">top line.</span> <span class="audio-time caption" data-speaker="Prot" data-start="995.520000" data-stop="998.141000">If you got here by clicking the link on the</span> <span class="audio-time caption" data-speaker="Prot" data-start="998.142000" data-stop="1000.519000">splash screen, that was on the bottom.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1000.520000" data-stop="1002.399000">That was on the bottom of the manual entry.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1002.400000" data-stop="1006.212000">But if you open it up in an 80x24 terminal, you</span> <span class="audio-time caption" data-speaker="Prot" data-start="1006.213000" data-stop="1008.459000">wouldn't see this line.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1008.460000" data-stop="1010.902000"><strong class="speaker-name">Sacha:</strong>  You can't see it and you don't know how</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1010.903000" data-stop="1013.622000">to... These are the complications that you have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1013.623000" data-stop="1015.359000">to keep in mind in that case.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1015.360000" data-stop="1017.777000"><strong class="speaker-name">Philip:</strong>  You might not have the intuition that</span> <span class="audio-time caption" data-speaker="Philip" data-start="1017.778000" data-stop="1020.347000">SPC is scroll, which I think that's the case</span> <span class="audio-time caption" data-speaker="Philip" data-start="1020.348000" data-stop="1020.839000">in less.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1020.840000" data-stop="1023.033000">But yes, again, you have this accumulated</span> <span class="audio-time caption" data-speaker="Philip" data-start="1023.034000" data-stop="1024.799000">intuition from using Unix tools.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1024.800000" data-stop="1028.199000">Which is one of the points I wanted to bring up.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1028.000000">17:08</span> <strong>newcomers without much computing experience might even find it easier (no C-c expectations, C-v etc)</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="1028.200000" data-stop="1029.759000"><strong class="speaker-name">Philip:</strong> Who is this mythical newcomer?</span> <span class="audio-time caption" data-speaker="Philip" data-start="1029.760000" data-stop="1032.039000">What's their actual background?</span> <span class="audio-time caption" data-speaker="Philip" data-start="1032.040000" data-stop="1035.379000">Because I claim, and this might be controversial,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1035.380000" data-stop="1038.729000">that if someone's actually new to using computers</span> <span class="audio-time caption" data-speaker="Philip" data-start="1038.730000" data-stop="1041.748000">at all, which is something I have seen, like</span> <span class="audio-time caption" data-speaker="Philip" data-start="1041.749000" data-stop="1043.567000">people who have never programmed, people who have</span> <span class="audio-time caption" data-speaker="Philip" data-start="1043.568000" data-stop="1046.767000">never used Unix, people who have never used more</span> <span class="audio-time caption" data-speaker="Philip" data-start="1046.768000" data-stop="1051.233000">than a web browser, to exaggerate, they appear to</span> <span class="audio-time caption" data-speaker="Philip" data-start="1051.234000" data-stop="1052.933000">do fine with Emacs because they have no</span> <span class="audio-time caption" data-speaker="Philip" data-start="1052.934000" data-stop="1056.067000">expectation of using C-c, C-v, C-c, and so on.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1056.068000" data-stop="1058.200000">They know that they have to use the buttons</span> <span class="audio-time caption" data-speaker="Philip" data-start="1058.201000" data-stop="1058.767000">up there.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1058.768000" data-stop="1060.100000">So in that sense, they're fine.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1060.101000" data-stop="1063.329000">There's an optimization loop</span> <span class="audio-time caption" data-speaker="Philip" data-start="1063.330000" data-stop="1065.367000">when you're used to these shortcuts</span> <span class="audio-time caption" data-speaker="Philip" data-start="1065.368000" data-stop="1067.433000">and a few of these conventions how to move around,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1067.434000" data-stop="1074.359000">that Emacs defaults appear to be inconvenient.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1074.360000" data-stop="1076.767000">So that's also a distinction you have to make in</span> <span class="audio-time caption" data-speaker="Philip" data-start="1076.768000" data-stop="1078.900000">that setting.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1078.901000" data-stop="1080.467000"><strong class="speaker-name">Prot:</strong>  Exactly, exactly.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1080.468000" data-stop="1083.000000">Plus you cannot optimize for everybody.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1083.001000" data-stop="1086.040000">Eventually you just have to make some assumptions.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1086.041000" data-stop="1087.580000"><strong class="speaker-name">Philip:</strong>  Exactly.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1087.581000" data-stop="1090.600000">But what these assumptions are is the controversial...</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1090.600000" data-stop="1092.280000"><strong class="speaker-name">Prot:</strong>  I think the way you approached it</span> <span class="audio-time caption" data-speaker="Prot" data-start="1092.280000" data-stop="1093.880000">makes sense.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1093.880000" data-stop="1096.067000">This is the reasonable way, I think, to do it.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1096.068000" data-stop="1097.767000">You have to assume that they have this</span> <span class="audio-time caption" data-speaker="Prot" data-start="1097.768000" data-stop="1098.700000">background knowledge.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1098.701000" data-stop="1100.767000">And if they don't, it's what you said.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1100.768000" data-stop="1103.833000">They don't have to relearn something because they</span> <span class="audio-time caption" data-speaker="Prot" data-start="1103.834000" data-stop="1105.100000">didn't know it to begin with.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1105.101000" data-stop="1110.339000">So they start from a good basis.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1110.000000">18:30</span> <strong>Focus group?</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1110.340000" data-stop="1112.400000"><strong class="speaker-name">Sacha:</strong>  Is there interest in having some kind of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1112.401000" data-stop="1116.767000">focus group or something like that so that if we</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1116.768000" data-stop="1119.467000">come across newbies, we can say, hey, you know,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1119.468000" data-stop="1121.840000">the developers would like to be able to float</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1121.841000" data-stop="1124.067000">some questions once in a while to see what actual</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1124.068000" data-stop="1126.619000">newbies would think of this?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1126.620000" data-stop="1128.967000"><strong class="speaker-name">Philip:</strong>  I have actually tried this once.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1128.960000" data-stop="1132.680000">I was in a hacker... what's it called?</span> <span class="audio-time caption" data-speaker="Philip" data-start="1132.680000" data-stop="1135.880000">There's this computer club in Germany and they</span> <span class="audio-time caption" data-speaker="Philip" data-start="1135.880000" data-stop="1139.760000">have local events on a regular basis and I was</span> <span class="audio-time caption" data-speaker="Philip" data-start="1139.760000" data-stop="1142.920000">going to one anyway because a few friends of mine</span> <span class="audio-time caption" data-speaker="Philip" data-start="1142.920000" data-stop="1144.840000">were going there and then I did an introduction</span> <span class="audio-time caption" data-speaker="Philip" data-start="1144.840000" data-stop="1149.320000">to Emacs course there and printed out a survey</span> <span class="audio-time caption" data-speaker="Philip" data-start="1149.320000" data-stop="1152.640000">basically, a questionnaire for Emacs neophytes.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1152.640000" data-stop="1155.320000">I think if you search for that string on the</span> <span class="audio-time caption" data-speaker="Philip" data-start="1155.320000" data-stop="1157.760000">Emacs development list, you're going to find that.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1157.760000" data-stop="1160.040000">And I gave a few people these texts.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1160.040000" data-stop="1160.800000">I printed it out.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1160.800000" data-stop="1163.600000">It was actually pieces of paper, so it wouldn't be</span> <span class="audio-time caption" data-speaker="Philip" data-start="1163.600000" data-stop="1166.560000">personally identified. There wouldn't be any</span> <span class="audio-time caption" data-speaker="Philip" data-start="1166.560000" data-stop="1168.280000">information there.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1168.280000" data-stop="1170.040000">And one of the things I thought was interesting</span> <span class="audio-time caption" data-speaker="Philip" data-start="1170.040000" data-stop="1171.920000">in the results was that the main thing people</span> <span class="audio-time caption" data-speaker="Philip" data-start="1171.920000" data-stop="1175.560000">were saying was it's overwhelming.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1175.560000" data-stop="1178.600000">Like the amount of things...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1178.600000" data-stop="1179.760000">Just the default Emacs.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1179.760000" data-stop="1186.480000">No configuration, no options, no auto-completion,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1186.480000" data-stop="1189.720000">no fido, whatever.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1189.720000" data-stop="1192.840000">It was just so many new things, so many</span> <span class="audio-time caption" data-speaker="Philip" data-start="1192.840000" data-stop="1196.160000">differences that they lost an overview, basically.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1196.160000" data-stop="1201.520000">This was a group of people who, I think there</span> <span class="audio-time caption" data-speaker="Philip" data-start="1201.520000" data-stop="1204.320000">were questions, and they were like, how long have</span> <span class="audio-time caption" data-speaker="Philip" data-start="1204.320000" data-stop="1205.680000">you been using computers?</span> <span class="audio-time caption" data-speaker="Philip" data-start="1205.680000" data-stop="1207.880000">Because, of course, it was so generic.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1207.880000" data-stop="1211.800000">What previous UIs have you had experience with?</span> <span class="audio-time caption" data-speaker="Philip" data-start="1211.800000" data-stop="1216.360000">Most people use Eclipse or Vi, NeoVim and even</span> <span class="audio-time caption" data-speaker="Philip" data-start="1216.360000" data-stop="1219.440000">reasonably complex Vim configurations.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1219.440000" data-stop="1222.760000">Of course, this is a bias due to the setting in</span> <span class="audio-time caption" data-speaker="Philip" data-start="1222.760000" data-stop="1225.440000">which I was asking these questions.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1225.440000" data-stop="1228.160000">I'm actually planning to repeat this experiment</span> <span class="audio-time caption" data-speaker="Philip" data-start="1228.160000" data-stop="1229.880000">because I'm going to</span> <span class="audio-time caption" data-speaker="Philip" data-start="1229.880000" data-stop="1234.160000">another one of these congresses or these meetups</span> <span class="audio-time caption" data-speaker="Philip" data-start="1234.160000" data-stop="1235.267000">in a month or so.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1235.268000" data-stop="1237.367000">I wanted to offer this again to people,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1237.368000" data-stop="1243.480000">specifically seeing if these newcomer presets are</span> <span class="audio-time caption" data-speaker="Philip" data-start="1243.480000" data-stop="1245.840000">valuable or if they help people or not.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1245.880000" data-stop="1248.485000">But of course, doing this in a properly</span> <span class="audio-time caption" data-speaker="Philip" data-start="1248.486000" data-stop="1251.759000">scientific setting would be much more difficult.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1251.760000" data-stop="1253.799000">Yeah, of course.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1253.800000" data-stop="1254.719000">We need money.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1254.720000" data-stop="1257.679000">Difficult steps of doing this.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1257.680000" data-stop="1260.479000"><strong class="speaker-name">Sacha:</strong>  Maybe even like a mailing list.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1260.480000" data-stop="1262.200000">We can say, hey, you know, you're new to Emacs,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1262.201000" data-stop="1267.599000">but you kind of want to make it better.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1267.600000" data-stop="1269.360000">Email this person.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1269.360000" data-stop="1271.880000">And every so often when developers have a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1271.880000" data-stop="1275.040000">question, they can say like, does this make sense</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1275.040000" data-stop="1275.280000">to you?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1275.280000" data-stop="1276.320000">Here's a screenshot.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1276.320000" data-stop="1279.459000">Or would you prefer this versus this?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1279.460000" data-stop="1281.233000"><strong class="speaker-name">Philip:</strong>  As in, we would send an email to all</span> <span class="audio-time caption" data-speaker="Philip" data-start="1281.234000" data-stop="1283.400000">the people, but then I think, I mean, the big</span> <span class="audio-time caption" data-speaker="Philip" data-start="1283.401000" data-stop="1286.680000">question, difficulty in that sense is then data</span> <span class="audio-time caption" data-speaker="Philip" data-start="1286.680000" data-stop="1287.520000">protection, I think.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1287.520000" data-stop="1289.480000">That's what I was trying to avoid with having</span> <span class="audio-time caption" data-speaker="Philip" data-start="1289.480000" data-stop="1292.080000">this just printed out and no personal</span> <span class="audio-time caption" data-speaker="Philip" data-start="1292.080000" data-stop="1293.967000">identification, because then we have to store</span> <span class="audio-time caption" data-speaker="Philip" data-start="1293.968000" data-stop="1296.200000">email addresses.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1296.201000" data-stop="1297.667000"><strong class="speaker-name">Sacha:</strong>  Okay, all right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1297.668000" data-stop="1298.300000">That's fine.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1298.301000" data-stop="1300.880000">That's fair.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1300.880000" data-stop="1304.240000"><strong class="speaker-name">Philip:</strong>  So, sounds like an excuse.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1304.240000" data-stop="1308.400000">Partially it is, but something like, I mean...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1308.400000" data-stop="1311.360000">I'm not saying that my approach, what I was doing</span> <span class="audio-time caption" data-speaker="Philip" data-start="1311.360000" data-stop="1312.600000">was unbiased.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1312.600000" data-stop="1316.200000">There are people who would be more willing to</span> <span class="audio-time caption" data-speaker="Philip" data-start="1316.200000" data-stop="1317.560000">answer these things and people who are</span> <span class="audio-time caption" data-speaker="Philip" data-start="1317.560000" data-stop="1320.320000">less willing.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1320.320000" data-stop="1322.440000">I know the bias in this case because I actually</span> <span class="audio-time caption" data-speaker="Philip" data-start="1322.440000" data-stop="1324.520000">saw the people and I had a feeling for what kind</span> <span class="audio-time caption" data-speaker="Philip" data-start="1324.520000" data-stop="1325.920000">of people they were.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1325.920000" data-stop="1329.520000">So I think I'm in a better position to factor</span> <span class="audio-time caption" data-speaker="Philip" data-start="1329.520000" data-stop="1329.880000">it out.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1329.880000" data-stop="1332.560000">But if it's actually properly, if you just have</span> <span class="audio-time caption" data-speaker="Philip" data-start="1332.560000" data-stop="1335.400000">people who you send emails to</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1335.000000">22:15</span> <strong>Emacs survey before</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="1335.400000" data-stop="1338.880000"><strong class="speaker-name">Philip:</strong> I'm not sure if it remains represented because</span> <span class="audio-time caption" data-speaker="Philip" data-start="1338.880000" data-stop="1342.319000">there have been these Emacs surveys in the past.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1342.320000" data-stop="1346.200000">I remember at least two generations.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1346.200000" data-stop="1348.600000">And they're of course the ones which are</span> <span class="audio-time caption" data-speaker="Philip" data-start="1348.600000" data-stop="1354.240000">circulated on Reddit, on Hacker News, on IRC,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1354.240000" data-stop="1356.440000">which I still think is a bubble of maybe</span> <span class="audio-time caption" data-speaker="Philip" data-start="1356.440000" data-stop="1359.280000">200 people.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1359.280000" data-stop="1363.600000">Like mainly 200 people and some people who are</span> <span class="audio-time caption" data-speaker="Philip" data-start="1363.600000" data-stop="1365.680000">Surrounding these groups.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1365.680000" data-stop="1368.640000">So I'm always sort of dubious because these are</span> <span class="audio-time caption" data-speaker="Philip" data-start="1368.640000" data-stop="1368.880000">the people.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1368.000000">22:48</span> <strong>people's backgrounds influence their responses</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="1368.880000" data-stop="1370.880000"><strong class="speaker-name">Philip:</strong> I mean, these are people who are much more likely</span> <span class="audio-time caption" data-speaker="Philip" data-start="1370.880000" data-stop="1376.800000">to have heard of, what's it called, Evil Mode or</span> <span class="audio-time caption" data-speaker="Philip" data-start="1376.800000" data-stop="1380.200000">something like that, or had some experience with</span> <span class="audio-time caption" data-speaker="Philip" data-start="1380.200000" data-stop="1381.320000">other editors.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1381.320000" data-stop="1387.760000">And these things all influence their responses.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1387.760000" data-stop="1389.520000">always taints the results.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1389.520000" data-stop="1392.840000">Every time these discussions are brought up on</span> <span class="audio-time caption" data-speaker="Philip" data-start="1392.865000" data-stop="1396.523000">Emacs devel, people have some level of doubts as</span> <span class="audio-time caption" data-speaker="Philip" data-start="1396.524000" data-stop="1400.239000">to how reliable the results are.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1400.240000" data-stop="1401.519000"><strong class="speaker-name">Prot:</strong>  Correct, correct.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1401.520000" data-stop="1404.904000">It's hard to get reliable results, though some</span> <span class="audio-time caption" data-speaker="Prot" data-start="1404.905000" data-stop="1407.479000">data is still better than nothing.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1407.480000" data-stop="1410.113000">But granted, you don't want to base decisions on</span> <span class="audio-time caption" data-speaker="Prot" data-start="1410.114000" data-stop="1412.239000">those results, of course not.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1412.240000" data-stop="1414.101000"><strong class="speaker-name">Philip:</strong>  Yeah, that shouldn't be the last</span> <span class="audio-time caption" data-speaker="Philip" data-start="1414.102000" data-stop="1415.439000">decision-making factor.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1415.440000" data-stop="1417.936000">You should just have a function where the input</span> <span class="audio-time caption" data-speaker="Philip" data-start="1417.937000" data-stop="1420.464000">is whatever the data is, and then the output is</span> <span class="audio-time caption" data-speaker="Philip" data-start="1420.465000" data-stop="1422.239000">mechanically determined by that.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1422.240000" data-stop="1426.439000">Yes?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1426.000000">23:46</span> <strong>Hypothetical: Reset themes, to reset things back to the defaults of a specific Emacs version</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="1426.440000" data-stop="1429.312000"><strong class="speaker-name">Philip:</strong> Now, related to the preset theme, there's also been</span> <span class="audio-time caption" data-speaker="Philip" data-start="1429.313000" data-stop="1431.663000">a discussion (I don't think this has been</span> <span class="audio-time caption" data-speaker="Philip" data-start="1431.664000" data-stop="1434.433000">mentioned much online) of so-called reset themes.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1434.434000" data-stop="1437.330000">I'm not sure if you've heard of these. So the idea</span> <span class="audio-time caption" data-speaker="Philip" data-start="1437.331000" data-stop="1440.177000">would be, additionally to having preset themes of</span> <span class="audio-time caption" data-speaker="Philip" data-start="1440.178000" data-stop="1442.799000">options, which we have changed, which we would</span> <span class="audio-time caption" data-speaker="Philip" data-start="1442.800000" data-stop="1445.375000">recommend because the newcomer</span> <span class="audio-time caption" data-speaker="Philip" data-start="1445.376000" data-stop="1448.150000">preset theme makes no real assumption that the</span> <span class="audio-time caption" data-speaker="Philip" data-start="1448.151000" data-stop="1450.954000">options will be stable, so we might change</span> <span class="audio-time caption" data-speaker="Philip" data-start="1450.955000" data-stop="1453.879000">them from version to version, this gives us</span> <span class="audio-time caption" data-speaker="Philip" data-start="1453.880000" data-stop="1458.520000">some flexibility to say we have a new option. Like,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1458.520000" data-stop="1459.820000">for example, if the preset theme had existed since</span> <span class="audio-time caption" data-speaker="Philip" data-start="1459.821000" data-stop="1461.999000">Emacs 29, and now in Emacs...</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1462.000000">24:22</span> <strong>package-autosuggest-mode suggests based on file extension</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="1462.000000" data-stop="1462.967000"><strong class="speaker-name">Philip:</strong> That was actually the</span> <span class="audio-time caption" data-speaker="Philip" data-start="1462.968000" data-stop="1465.700000">reason this entire discussion started when Emacs</span> <span class="audio-time caption" data-speaker="Philip" data-start="1465.701000" data-stop="1470.233000">31, that's the current release...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1470.234000" data-stop="1472.733000">to be released, there's this</span> <span class="audio-time caption" data-speaker="Philip" data-start="1472.734000" data-stop="1474.367000">package-autosuggest-mode</span> <span class="audio-time caption" data-speaker="Philip" data-start="1474.368000" data-stop="1476.833000">so that's a little prompt, when it's enabled,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1476.834000" data-stop="1478.967000">a little prompt in the mode line.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1478.968000" data-stop="1481.760000">You can click on it, Emacs installs the package</span> <span class="audio-time caption" data-speaker="Philip" data-start="1481.761000" data-stop="1481.760000">which it believes to be the right one</span> <span class="audio-time caption" data-speaker="Philip" data-start="1481.761000" data-stop="1487.080000">for the current file.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1487.081000" data-stop="1489.100000"><strong class="speaker-name">Prot:</strong>  The major mode, right?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1489.101000" data-stop="1490.000000"><strong class="speaker-name">Philip:</strong>  No, it's a minor mode.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1490.001000" data-stop="1490.833000">It's a global minor mode.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1490.834000" data-stop="1492.833000"><strong class="speaker-name">Prot:</strong>  No, no, I mean, but it installs based on</span> <span class="audio-time caption" data-speaker="Prot" data-start="1492.834000" data-stop="1494.100000">the major mode, right?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1494.101000" data-stop="1495.033000"><strong class="speaker-name">Philip:</strong>  Ah, yes, yes, yes.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1495.034000" data-stop="1500.767000">It installs a major mode package, which matches</span> <span class="audio-time caption" data-speaker="Philip" data-start="1500.768000" data-stop="1503.000000">the current file format being used based on</span> <span class="audio-time caption" data-speaker="Philip" data-start="1503.001000" data-stop="1506.132000">auto-mode-alist or the magic,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1506.133000" data-stop="1509.115000">what's it called, magic file alist</span> <span class="audio-time caption" data-speaker="Philip" data-start="1509.116000" data-stop="1511.359000">and all these things, and it can...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1511.360000" data-stop="1512.880000">We didn't want to enable this by default, but we</span> <span class="audio-time caption" data-speaker="Philip" data-start="1512.880000" data-stop="1515.360000">wanted to enable it for newcomers.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1515.400000" data-stop="1518.151000">That was actually the first option in the</span> <span class="audio-time caption" data-speaker="Philip" data-start="1518.152000" data-stop="1519.359000">newcomers preset.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1519.360000" data-stop="1522.156000">If the preset had been older, we would have still</span> <span class="audio-time caption" data-speaker="Philip" data-start="1522.157000" data-stop="1524.439000">wanted to add this to the preset theme.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1524.440000" data-stop="1525.759000">It's not supposed to be set in stone.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1525.760000" data-stop="1528.305000">Now the idea with the reset theme is, and this is</span> <span class="audio-time caption" data-speaker="Philip" data-start="1528.306000" data-stop="1530.770000">still hypothetical since we haven't implemented</span> <span class="audio-time caption" data-speaker="Philip" data-start="1530.771000" data-stop="1532.905000">it, is to have reset themes for specific</span> <span class="audio-time caption" data-speaker="Philip" data-start="1532.906000" data-stop="1533.759000">Emacs versions.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1533.760000" data-stop="1536.950000">So we, in Emacs 32, we might have an Emacs 31</span> <span class="audio-time caption" data-speaker="Philip" data-start="1536.920000" data-stop="1539.960000">reset theme for all the options that we have</span> <span class="audio-time caption" data-speaker="Philip" data-start="1539.960000" data-stop="1544.800000">changed in Emacs 31, in Emacs 32, so that we</span> <span class="audio-time caption" data-speaker="Philip" data-start="1544.800000" data-stop="1546.320000">could reset them to the previous option.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1546.320000" data-stop="1549.080000">So that in this sense too, if the discussion, if</span> <span class="audio-time caption" data-speaker="Philip" data-start="1549.080000" data-stop="1551.280000">the question is really just, we don't want to</span> <span class="audio-time caption" data-speaker="Philip" data-start="1551.280000" data-stop="1553.680000">annoy people who have...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1553.680000" data-stop="1555.800000">When upgrading, of course, it's still a minor</span> <span class="audio-time caption" data-speaker="Philip" data-start="1555.800000" data-stop="1557.320000">inconvenience because they have to write</span> <span class="audio-time caption" data-speaker="Philip" data-start="1557.320000" data-stop="1561.600000">load-theme emacs31-reset in their configuration, but</span> <span class="audio-time caption" data-speaker="Philip" data-start="1561.600000" data-stop="1564.160000">it would be easier for them to actually undo</span> <span class="audio-time caption" data-speaker="Philip" data-start="1564.160000" data-stop="1564.840000">any changes.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1564.840000" data-stop="1567.080000">And in future versions of Emacs, hopefully also</span> <span class="audio-time caption" data-speaker="Philip" data-start="1567.080000" data-stop="1569.880000">persist these changes so that you can really sort</span> <span class="audio-time caption" data-speaker="Philip" data-start="1569.880000" data-stop="1573.400000">of like pinning your version of Emacs, a soft</span> <span class="audio-time caption" data-speaker="Philip" data-start="1573.400000" data-stop="1574.400000">pinning of options.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1574.400000" data-stop="1577.480000">So this is something for the future.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1577.480000" data-stop="1579.880000">Consider as well, which would be reusing the</span> <span class="audio-time caption" data-speaker="Philip" data-start="1579.880000" data-stop="1582.320000">theme approach, which is another reason why I</span> <span class="audio-time caption" data-speaker="Philip" data-start="1582.320000" data-stop="1584.600000">hope that the notion of user option themes will</span> <span class="audio-time caption" data-speaker="Philip" data-start="1584.600000" data-stop="1587.000000">become more, because it's been there from</span> <span class="audio-time caption" data-speaker="Philip" data-start="1587.000000" data-stop="1587.200000">the beginning.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1587.200000" data-stop="1592.080000">The Customize system has always supported user</span> <span class="audio-time caption" data-speaker="Philip" data-start="1592.080000" data-stop="1593.800000">options to be added, but people have always only</span> <span class="audio-time caption" data-speaker="Philip" data-start="1593.800000" data-stop="1597.040000">customized, not only... I'm not sure no one has</span> <span class="audio-time caption" data-speaker="Philip" data-start="1597.040000" data-stop="1598.800000">ever done it, but it has not been a popular</span> <span class="audio-time caption" data-speaker="Philip" data-start="1598.800000" data-stop="1600.720000">approach to use the user options, even though the</span> <span class="audio-time caption" data-speaker="Philip" data-start="1600.720000" data-stop="1606.280000">technical facilities have been there all the time.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1606.280000" data-stop="1608.720000">That's also going to be interesting if the reset</span> <span class="audio-time caption" data-speaker="Philip" data-start="1608.720000" data-stop="1610.960000">theme would be forwards compatible.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1610.960000" data-stop="1614.480000">But that's another discussion that makes it even</span> <span class="audio-time caption" data-speaker="Philip" data-start="1614.480000" data-stop="1615.440000">more complicated.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1615.440000" data-stop="1619.040000">So that you could add them hypothetically to ELPA</span> <span class="audio-time caption" data-speaker="Philip" data-start="1619.040000" data-stop="1620.160000">as a core package.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1620.160000" data-stop="1620.680000"><strong class="speaker-name">Prot:</strong>  Nice. Yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1621.520000" data-stop="1622.320000">Of course, the reset themes, if you</span> <span class="audio-time caption" data-speaker="Prot" data-start="1622.320000" data-stop="1625.920000">implement them, that's great because it opens up</span> <span class="audio-time caption" data-speaker="Prot" data-start="1625.920000" data-stop="1630.560000">the possibility to be a little bit more ambitious</span> <span class="audio-time caption" data-speaker="Prot" data-start="1630.560000" data-stop="1632.880000">with the defaults and break.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1632.880000" data-stop="1636.400000"><strong class="speaker-name">Philip:</strong>  Yeah. Because that's exactly... Every core...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1636.400000" data-stop="1639.360000">Every default discussion boils down to: if we</span> <span class="audio-time caption" data-speaker="Philip" data-start="1639.360000" data-stop="1642.120000">break this, people won't understand what changed.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1642.120000" data-stop="1643.920000">If we change this, people won't understand</span> <span class="audio-time caption" data-speaker="Philip" data-start="1643.920000" data-stop="1646.920000">what broke. But on the other side, people like</span> <span class="audio-time caption" data-speaker="Philip" data-start="1646.920000" data-stop="1647.560000">all new...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1647.560000" data-stop="1650.560000">Can we reasonably assume that all new people</span> <span class="audio-time caption" data-speaker="Philip" data-start="1650.560000" data-stop="1652.480000">would actually want this theme?</span> <span class="audio-time caption" data-speaker="Philip" data-start="1652.480000" data-stop="1654.160000">Then we want to give us some sort of more</span> <span class="audio-time caption" data-speaker="Philip" data-start="1654.160000" data-stop="1656.200000">flexibility in this sense without actually the</span> <span class="audio-time caption" data-speaker="Philip" data-start="1656.200000" data-stop="1658.320000">support, because I think that the value</span> <span class="audio-time caption" data-speaker="Philip" data-start="1658.320000" data-stop="1661.680000">proposition of having a stable interface where</span> <span class="audio-time caption" data-speaker="Philip" data-start="1661.680000" data-stop="1665.440000">you can expect the appearance of the theme to be</span> <span class="audio-time caption" data-speaker="Philip" data-start="1665.440000" data-stop="1668.280000">somewhat stable over time, how Emacs behaves,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1668.280000" data-stop="1672.879000">that's actually a positive thing.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1672.000000">27:52</span> <strong>Emacs 32: bundled versions of Emacs (Big Emacs - distributions that include more packages)</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="1672.880000" data-stop="1678.080000"><strong class="speaker-name">Philip:</strong> And finally, in Emacs 32, this is also a finally.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1678.080000" data-stop="1680.760000">For now, one thing I just thought of, which I was</span> <span class="audio-time caption" data-speaker="Philip" data-start="1680.760000" data-stop="1684.320000">reminded of, there's a big plan for Emacs 31.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1684.320000" data-stop="1688.040000">This is one of, I've never pronounced his name,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1688.040000" data-stop="1692.440000">Sean Whitton, I think it should be pronounced.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1692.440000" data-stop="1696.160000">He said that one of his plans as a maintainer</span> <span class="audio-time caption" data-speaker="Philip" data-start="1696.160000" data-stop="1699.960000">will be to work on the bundled version of Emacs,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1699.960000" data-stop="1701.880000">which some people, including myself, have been</span> <span class="audio-time caption" data-speaker="Philip" data-start="1701.880000" data-stop="1703.440000">calling Fat Emacs.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1703.440000" data-stop="1707.240000">So adding, selecting certain packages from ELPA,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1707.240000" data-stop="1709.960000">from GNU ELPA, and bundle a secondary</span> <span class="audio-time caption" data-speaker="Philip" data-start="1709.960000" data-stop="1711.720000">distribution of Emacs which would include</span> <span class="audio-time caption" data-speaker="Philip" data-start="1711.720000" data-stop="1713.640000">additional packages,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1713.640000" data-stop="1715.760000">Which are currently, so for example, one example</span> <span class="audio-time caption" data-speaker="Philip" data-start="1715.760000" data-stop="1716.320000">would be org-tex.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1716.320000" data-stop="1718.880000">And then you could, when you install Emacs, you</span> <span class="audio-time caption" data-speaker="Philip" data-start="1718.880000" data-stop="1720.680000">could install, I don't know, big or fat</span> <span class="audio-time caption" data-speaker="Philip" data-start="1720.680000" data-stop="1721.840000">or whatever...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1721.840000" data-stop="1724.480000">Big Emacs with all these packages pre-installed,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1724.480000" data-stop="1726.320000">which would be pinned to the right version which</span> <span class="audio-time caption" data-speaker="Philip" data-start="1726.320000" data-stop="1728.600000">we would have</span> <span class="audio-time caption" data-speaker="Philip" data-start="1728.600000" data-stop="1730.920000">hopefully ensured that they're actually compatible</span> <span class="audio-time caption" data-speaker="Philip" data-start="1730.920000" data-stop="1731.400000">with one another.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1731.400000" data-stop="1733.920000">And then you have the normal Emacs, which would</span> <span class="audio-time caption" data-speaker="Philip" data-start="1733.920000" data-stop="1735.160000">be the thinner one.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1735.160000" data-stop="1737.000000">And an interesting corollary of all of this would</span> <span class="audio-time caption" data-speaker="Philip" data-start="1737.000000" data-stop="1740.760000">also be that if the way from ELPA into the core</span> <span class="audio-time caption" data-speaker="Philip" data-start="1740.760000" data-stop="1743.840000">would be made easier, that the way out of the</span> <span class="audio-time caption" data-speaker="Philip" data-start="1743.840000" data-stop="1747.160000">core into ELPA would also be made easier.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1747.160000" data-stop="1749.440000">Because that would mean it's more easier to</span> <span class="audio-time caption" data-speaker="Philip" data-start="1749.440000" data-stop="1752.680000">deprecate packages over time since you can</span> <span class="audio-time caption" data-speaker="Philip" data-start="1752.680000" data-stop="1753.840000">install it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1753.840000" data-stop="1756.040000">This protective layer, let's say, protective</span> <span class="audio-time caption" data-speaker="Philip" data-start="1756.040000" data-stop="1759.520000">layer, protected merely by inconvenience and the</span> <span class="audio-time caption" data-speaker="Philip" data-start="1759.520000" data-stop="1762.640000">annoyance of moving these packages in and out,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1762.640000" data-stop="1764.040000">would fade away over time.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1764.040000" data-stop="1767.640000">Some cruft within Emacs itself, within core</span> <span class="audio-time caption" data-speaker="Philip" data-start="1767.640000" data-stop="1770.520000">Emacs, could be moved to ELPA.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1770.520000" data-stop="1773.760000">So we could actually thin down Emacs.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1773.760000" data-stop="1775.120000">That's one possibility.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1775.120000" data-stop="1776.200000">Oh, that's big.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1776.200000" data-stop="1777.000000">Yeah.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1777.000000" data-stop="1778.440000">One strand of commentary in that direction.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1778.440000" data-stop="1783.400000">That's something that I'm planning to help in the</span> <span class="audio-time caption" data-speaker="Philip" data-start="1783.400000" data-stop="1785.680000">Emacs 32 development cycle.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1785.680000" data-stop="1788.080000">Because these options then could also be in...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1788.080000" data-stop="1791.600000">Any options related to this could also be added</span> <span class="audio-time caption" data-speaker="Philip" data-start="1791.600000" data-stop="1794.160000">to the newcomers preset theme.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1794.000000">29:54</span> <strong>Selection versus multiple completion</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="1794.160000" data-stop="1798.120000"><strong class="speaker-name">Philip:</strong> So one could of course... Vertico or these</span> <span class="audio-time caption" data-speaker="Philip" data-start="1798.120000" data-stop="1801.120000">interactive selection packages... I think I've</span> <span class="audio-time caption" data-speaker="Philip" data-start="1801.120000" data-stop="1802.800000">commented that before there is a certain</span> <span class="audio-time caption" data-speaker="Philip" data-start="1802.800000" data-stop="1804.560000">controversy there. I think that</span> <span class="audio-time caption" data-speaker="Philip" data-start="1804.560000" data-stop="1809.640000">there's a certain controversy that</span> <span class="audio-time caption" data-speaker="Philip" data-start="1809.640000" data-stop="1811.520000">selection is not always the same as text</span> <span class="audio-time caption" data-speaker="Philip" data-start="1811.520000" data-stop="1814.920000">expansion, which is sometimes like... There are, I</span> <span class="audio-time caption" data-speaker="Philip" data-start="1814.920000" data-stop="1820.200000">think, the certain... skeleton, or there's</span> <span class="audio-time caption" data-speaker="Philip" data-start="1820.200000" data-stop="1822.440000">this insert... what's it called, auto-insert command...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1822.440000" data-stop="1826.160000">It's not auto-insert, something like that, that</span> <span class="audio-time caption" data-speaker="Philip" data-start="1826.160000" data-stop="1829.160000">prompts the user for multiple things, but it's not</span> <span class="audio-time caption" data-speaker="Philip" data-start="1829.160000" data-stop="1831.400000">written using [completing-read-multiple], but it's</span> <span class="audio-time caption" data-speaker="Philip" data-start="1831.400000" data-stop="1832.720000">written in a way that there's a</span> <span class="audio-time caption" data-speaker="Philip" data-start="1832.720000" data-stop="1836.520000">manual loop, which waits for an empty input to</span> <span class="audio-time caption" data-speaker="Philip" data-start="1836.520000" data-stop="1839.640000">occur. But if you're using vertico or fido,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1839.640000" data-stop="1841.920000">by default, if you just press RET, you don't</span> <span class="audio-time caption" data-speaker="Philip" data-start="1841.920000" data-stop="1843.840000">actually have an empty input. You just select</span> <span class="audio-time caption" data-speaker="Philip" data-start="1843.840000" data-stop="1846.760000">the default option. There's settings like</span> <span class="audio-time caption" data-speaker="Philip" data-start="1846.760000" data-stop="1849.680000">these which where these sort of these two kinds</span> <span class="audio-time caption" data-speaker="Philip" data-start="1849.680000" data-stop="1853.120000">of completion diverge from one another which</span> <span class="audio-time caption" data-speaker="Philip" data-start="1853.120000" data-stop="1855.400000">which is also something I've been talking about</span> <span class="audio-time caption" data-speaker="Philip" data-start="1855.400000" data-stop="1857.720000">for a few years but never came around to</span> <span class="audio-time caption" data-speaker="Philip" data-start="1857.720000" data-stop="1859.480000">implementing that there should be an API</span> <span class="audio-time caption" data-speaker="Philip" data-start="1859.480000" data-stop="1862.080000">distinction between actually selecting user</span> <span class="audio-time caption" data-speaker="Philip" data-start="1862.080000" data-stop="1865.560000">options from a list and the completion interface</span> <span class="audio-time caption" data-speaker="Philip" data-start="1865.560000" data-stop="1868.720000">which we have for files or commands currently.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1868.720000" data-stop="1870.760000">These are semantically two different things, which</span> <span class="audio-time caption" data-speaker="Philip" data-start="1870.760000" data-stop="1874.520000">would be interesting to see if it would be worth</span> <span class="audio-time caption" data-speaker="Philip" data-start="1874.520000" data-stop="1878.440000">distinguishing the two in a technical sense,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1878.440000" data-stop="1880.800000">because that would mean that in certain settings,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1880.800000" data-stop="1882.800000">we could enable Fido. I totally admit that</span> <span class="audio-time caption" data-speaker="Philip" data-start="1882.800000" data-stop="1885.240000">Fido and Vertico have their advantages when it</span> <span class="audio-time caption" data-speaker="Philip" data-start="1885.240000" data-stop="1887.640000">comes to discoverability over standard</span> <span class="audio-time caption" data-speaker="Philip" data-start="1887.640000" data-stop="1888.400000">text completion.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1888.400000" data-stop="1891.440000">The compromise now was that in Emacs 31 there's</span> <span class="audio-time caption" data-speaker="Philip" data-start="1891.440000" data-stop="1894.560000">this option, I think it's eager completion</span> <span class="audio-time caption" data-speaker="Philip" data-start="1894.560000" data-stop="1896.520000">updating or something.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1896.520000" data-stop="1898.160000">It's a combination, it's a permutation of these</span> <span class="audio-time caption" data-speaker="Philip" data-start="1898.160000" data-stop="1901.640000">words in some sense.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1901.640000" data-stop="1904.960000">So that's if the completions buffer pops up.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1904.960000" data-stop="1908.033000">No, you don't have to...</span> <span class="audio-time caption" data-speaker="Philip" data-start="1908.034000" data-stop="1909.667000">It doesn't matter.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1909.668000" data-stop="1912.480000">You don't have to visualize it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1912.480000" data-stop="1915.160000">Yeah, where they update as you type.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1915.160000" data-stop="1917.040000">Updates as you type, yeah.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1917.040000" data-stop="1920.040000">But that doesn't occur down there, but it only</span> <span class="audio-time caption" data-speaker="Philip" data-start="1920.040000" data-stop="1922.160000">occurs in the completions buffer.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1922.160000" data-stop="1924.240000">That's sort of a compromise.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1924.240000" data-stop="1927.539000">That's Fido, right?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1927.520000" data-stop="1930.900000"><strong class="speaker-name">Prot:</strong>  But the generic completions has had a lot</span> <span class="audio-time caption" data-speaker="Prot" data-start="1930.901000" data-stop="1933.400000">of improvements over the last few years.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1933.400000" data-stop="1936.700000">And in Emacs 31, it's in a very good state, all</span> <span class="audio-time caption" data-speaker="Prot" data-start="1936.701000" data-stop="1938.479000">things considered.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1938.480000" data-stop="1941.333000"><strong class="speaker-name">Philip:</strong>  Which was also partially driven by your</span> <span class="audio-time caption" data-speaker="Philip" data-start="1941.334000" data-stop="1943.560000">MCT package?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1943.560000" data-stop="1944.600000"><strong class="speaker-name">Prot:</strong>  MCT, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1944.601000" data-stop="1946.520000">Which was an experiment, of course.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1946.520000" data-stop="1952.400000">But yeah, it's basically that idea.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1952.400000" data-stop="1954.760000">Because I have used this in earnest, like the</span> <span class="audio-time caption" data-speaker="Prot" data-start="1954.760000" data-stop="1957.040000">default like this, I have used it for a long time</span> <span class="audio-time caption" data-speaker="Prot" data-start="1957.040000" data-stop="1959.560000">in earnest, like just defaults.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1959.560000" data-stop="1960.200000">It's very good.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1960.200000" data-stop="1962.600000">It's for sure very good.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1962.600000" data-stop="1967.120000">Whereas Fido and Vertico are better if you are</span> <span class="audio-time caption" data-speaker="Prot" data-start="1967.120000" data-stop="1969.840000">just getting started and you don't know that</span> <span class="audio-time caption" data-speaker="Prot" data-start="1969.840000" data-stop="1972.560000">there is a completion on the mini buffer and</span> <span class="audio-time caption" data-speaker="Prot" data-start="1972.560000" data-stop="1975.000000">somehow there is a distinction between the two.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1975.000000" data-stop="1977.680000">Like, for somebody who is getting started</span> <span class="audio-time caption" data-speaker="Prot" data-start="1977.680000" data-stop="1980.720000">especially, I think this interface is not good.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1980.720000" data-stop="1982.880000">But if you know what you are doing, I think this</span> <span class="audio-time caption" data-speaker="Prot" data-start="1982.880000" data-stop="1985.200000">interface actually works perfectly.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1985.200000" data-stop="1987.960000">And it has a lot of options.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1987.960000" data-stop="1989.880000">So, Sacha, what you are showing there is the</span> <span class="audio-time caption" data-speaker="Prot" data-start="1989.880000" data-stop="1993.440000">absolute default, but it has so many options that</span> <span class="audio-time caption" data-speaker="Prot" data-start="1993.440000" data-stop="1996.240000">you can make it look actually quite different</span> <span class="audio-time caption" data-speaker="Prot" data-start="1996.240000" data-stop="1999.960000">from this and very similar to Vertico, for</span> <span class="audio-time caption" data-speaker="Prot" data-start="1999.960000" data-stop="2002.880000">example, in terms of the user experience.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2002.880000" data-stop="2005.419000">I just realized that...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2005.420000" data-stop="2007.133000"><strong class="speaker-name">Sacha:</strong>  Oh, I just realized that if you do the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2007.134000" data-stop="2010.833000">TAB TAB, if you do the TAB TAB, it now goes to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2010.834000" data-stop="2012.520000">that one, which is great, but you can't filter it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2012.520000" data-stop="2013.200000">from there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2013.200000" data-stop="2017.459000">You can't type into it and have stuff happen.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2017.460000" data-stop="2018.500000"><strong class="speaker-name">Philip:</strong>  Yeah, it's not down there.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2018.501000" data-stop="2021.640000">If you're down there in the mini-buffer, you type.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2021.641000" data-stop="2025.667000">There you have just a regular text buffer, so you</span> <span class="audio-time caption" data-speaker="Philip" data-start="2025.668000" data-stop="2028.920000">can search or you can select stuff out of there.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2028.920000" data-stop="2030.933000"><strong class="speaker-name">Prot:</strong>  And that's also an option, by the way.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2030.934000" data-stop="2033.840000">So what happens on the second tab, for example,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2033.840000" data-stop="2035.099000">so you can configure that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2035.100000" data-stop="2036.720000"><strong class="speaker-name">Sacha:</strong>  Right, so that was the second tab</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2036.720000" data-stop="2040.640000">behavior from newcomer-presets.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2040.640000" data-stop="2043.600000"><strong class="speaker-name">Philip:</strong>  That's the option I proposed and then</span> <span class="audio-time caption" data-speaker="Philip" data-start="2043.601000" data-stop="2044.920000">objected to.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2044.920000" data-stop="2046.880000"><strong class="speaker-name">Sacha:</strong>  Yes, work in progress.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2046.880000" data-stop="2048.920000">So basically, you have these newcomers.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2048.920000" data-stop="2051.720000">We're trying to figure out how to get them</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2051.720000" data-stop="2053.280000">through their learning journey.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2053.280000" data-stop="2056.000000">The newcomer presets can smooth over some of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2056.000000" data-stop="2056.840000">the edges.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2056.840000" data-stop="2058.520000">It can get over that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2058.520000" data-stop="2060.800000">"Yes, there are a lot of options, but at least</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2060.800000" data-stop="2063.200000">M-x with tab completion will show you the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2063.200000" data-stop="2064.967000">things so that you don't have to memorize the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2064.968000" data-stop="2066.000000">names as much."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2066.001000" data-stop="2068.100000">You can recognize them from the list.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2068.101000" data-stop="2070.479000">You can narrow it down.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2070.480000" data-stop="2072.533000"><strong class="speaker-name">Philip:</strong>  The behavior is supposed to actually be</span> <span class="audio-time caption" data-speaker="Philip" data-start="2072.534000" data-stop="2074.333000">similar to Bash,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2074.334000" data-stop="2079.720000">the way Bash does completion.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2079.000000">34:39</span> <strong>Manuals</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2079.720000" data-stop="2081.467000"><strong class="speaker-name">Sacha:</strong>  It's probably still... we're going to need</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2081.468000" data-stop="2085.320000">them to read the tutorial, and we're going to need</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2085.320000" data-stop="2093.160000">them to use a lot of patience as they get used to Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2093.160000" data-stop="2095.520000">I am not quite sure yet if we can get them all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2095.520000" data-stop="2098.240000">the way to, all right, here's how you open your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2098.240000" data-stop="2101.560000">config file and define your own keyboard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2101.560000" data-stop="2104.480000">shortcuts, for example.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2104.480000" data-stop="2108.619000">Bit of a journey.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2108.000000">35:08</span> <strong>More examples?</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="2108.620000" data-stop="2111.133000"><strong class="speaker-name">Prot:</strong>  I think that one way to do that is to</span> <span class="audio-time caption" data-speaker="Prot" data-start="2111.134000" data-stop="2112.880000">have more examples in the manual.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2112.880000" data-stop="2116.520000">Like, here is how you do this, here is how you</span> <span class="audio-time caption" data-speaker="Prot" data-start="2116.520000" data-stop="2117.000000">do that.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2117.034000" data-stop="2122.899000"><strong class="speaker-name">Philip:</strong>  Or there's this other manual, the Emacs FAQ.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2122.900000" data-stop="2125.720000"><strong class="speaker-name">Prot:</strong>  I don't mind where it would be, like FAQ</span> <span class="audio-time caption" data-speaker="Prot" data-start="2125.720000" data-stop="2126.680000">is totally fine.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2126.978000" data-stop="2128.019000">I don't mind exactly where it would be, but</span> <span class="audio-time caption" data-speaker="Prot" data-start="2128.459000" data-stop="2130.941000">somewhere in the documentation, like common</span> <span class="audio-time caption" data-speaker="Prot" data-start="2131.021000" data-stop="2133.523000">patterns of Emacs configuration kind of thing.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2134.044000" data-stop="2136.306000">Maybe it already exists, so if it exists, then of</span> <span class="audio-time caption" data-speaker="Prot" data-start="2136.346000" data-stop="2137.246000">course even better.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2138.507000" data-stop="2142.451000"><strong class="speaker-name">Philip:</strong>  Emacs FAQ has some things on finding</span> <span class="audio-time caption" data-speaker="Philip" data-start="2142.471000" data-stop="2143.952000">related packages,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2144.354000" data-stop="2147.300000">common requsts, bug reports, but maybe it was...</span> <span class="audio-time caption" data-speaker="Philip" data-start="2147.301000" data-stop="2149.467000">I remember there's something. If I link to it...</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2149.468000" data-stop="2151.779000"><strong class="speaker-name">Prot:</strong>  Where is the FAQ?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2151.780000" data-stop="2165.477000"><strong class="speaker-name">Philip:</strong>  It's a separate manual.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2165.478000" data-stop="2168.961000"><strong class="speaker-name">Sacha:</strong>  We do not have it from here, not from the splash screen,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2168.962000" data-stop="2178.459000">but it is available from the Help menu.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2178.460000" data-stop="2182.599000"><strong class="speaker-name">Philip:</strong>  I think it's not been that thoroughly maintained.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2182.000000">36:22</span> <strong>find-user-init-file?</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2182.600000" data-stop="2184.153000"><strong class="speaker-name">Sacha:</strong>  I'm going to take advantage of the fact</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2184.173000" data-stop="2186.096000">that you've actually been reading emacs-devel.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2187.579000" data-stop="2190.965000">Has there already been a long discussion about</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2191.025000" data-stop="2196.315000">whether a M-x visit-user-init-file makes sense?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2198.793000" data-stop="2202.499000">An interactive command that you can use to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2202.599000" data-stop="2205.763000">open... I was trying to find it, but even with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2205.783000" data-stop="2208.147000">Yhetil's search, I was like, okay, there are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2208.167000" data-stop="2208.728000">four threads.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2209.209000" data-stop="2211.392000">One of them was a long time ago, and the other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2211.472000" data-stop="2213.315000">one was from even longer than that, so I didn't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2213.355000" data-stop="2218.342000">know whether it was some other discussion.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2218.903000" data-stop="2220.726000"><strong class="speaker-name">Philip:</strong>  I don't recall any such discussion</span> <span class="audio-time caption" data-speaker="Philip" data-start="2220.946000" data-stop="2223.450000">recently, but I also don't think that anybody</span> <span class="audio-time caption" data-speaker="Philip" data-start="2224.358000" data-stop="2225.299000">Objection to it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2225.319000" data-stop="2227.943000">So it's really just a matter of someone writing</span> <span class="audio-time caption" data-speaker="Philip" data-start="2228.003000" data-stop="2230.065000">it down and adding the documentation.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2230.566000" data-stop="2231.587000"><strong class="speaker-name">Sacha:</strong>  I would like to do that.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2231.607000" data-stop="2235.332000"><strong class="speaker-name">Philip:</strong>  It would be quite likely 24 hours.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2235.352000" data-stop="2239.599000"><strong class="speaker-name">Sacha:</strong>  Okay.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2239.600000" data-stop="2242.041000"><strong class="speaker-name">Philip:</strong>  On the master branch and not Emacs 31</span> <span class="audio-time caption" data-speaker="Philip" data-start="2242.061000" data-stop="2244.164000">branch, which would be slightly...</span> <span class="audio-time caption" data-speaker="Philip" data-start="2244.284000" data-stop="2244.844000">It's fine.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2244.864000" data-stop="2245.966000"></span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2246.787000" data-stop="2248.790000"><strong class="speaker-name">Sacha:</strong>  If it makes it in someday, it doesn't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2248.810000" data-stop="2250.011000">have to be in the splash screen.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2250.031000" data-stop="2253.015000">It just has to start off being available through...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2253.130000" data-stop="2260.478000">And then we don't have to keep telling people, oh</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2260.498000" data-stop="2262.640000">yeah, do a describe-variable on the init file</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2262.680000" data-stop="2265.584000">just in case your init file is actually .emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2265.644000" data-stop="2268.867000">instead of the .emacs.d/init.el that other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2268.907000" data-stop="2270.309000">people are telling you to use instead.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2271.069000" data-stop="2272.031000">It's a bit of a mess, right?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2272.051000" data-stop="2273.172000"><strong class="speaker-name">Philip:</strong>  I think some people have been</span> <span class="audio-time caption" data-speaker="Philip" data-start="2273.232000" data-stop="2276.756000">recommending doing M-: and then calling</span> <span class="audio-time caption" data-speaker="Philip" data-start="2276.776000" data-stop="2278.918000">the [find-file] function with the user init...</span> <span class="audio-time caption" data-speaker="Philip" data-start="2279.455000" data-stop="2281.178000">What's the name of the variable again?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2281.278000" data-stop="2283.061000"><strong class="speaker-name">Sacha:</strong>  user-init-file.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2283.081000" data-stop="2285.245000"><strong class="speaker-name">Prot:</strong>  User Emacs file.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2285.285000" data-stop="2285.706000"><strong class="speaker-name">Sacha:</strong>  Here we go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2285.806000" data-stop="2286.667000">user-init-file.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2287.188000" data-stop="2287.629000">Here we go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2287.849000" data-stop="2288.751000">That's the thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2289.292000" data-stop="2290.013000">Yeah, exactly.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2290.434000" data-stop="2290.975000"><strong class="speaker-name">Philip:</strong>  And if you do</span> <span class="audio-time caption" data-speaker="Philip" data-start="2291.055000" data-stop="2295.042000">M-: (find-file user-init-file),</span> <span class="audio-time caption" data-speaker="Philip" data-start="2295.062000" data-stop="2296.644000">then it would basically do the</span> <span class="audio-time caption" data-speaker="Philip" data-start="2296.684000" data-stop="2296.965000">same thing.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2296.985000" data-stop="2300.491000">That's why I'm saying it's such a minor function</span> <span class="audio-time caption" data-speaker="Philip" data-start="2300.511000" data-stop="2303.556000">that I don't expect any objections.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2303.688000" data-stop="2304.489000"><strong class="speaker-name">Sacha:</strong>  Okay, okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2304.669000" data-stop="2307.031000">So I'm going to suggest that to Emacs Devel at</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2307.071000" data-stop="2307.872000">some point.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2307.892000" data-stop="2309.813000"><strong class="speaker-name">Philip:</strong>  I've had the same idea many times</span> <span class="audio-time caption" data-speaker="Philip" data-start="2309.893000" data-stop="2314.497000">myself, but the transience of memory has thrown</span> <span class="audio-time caption" data-speaker="Philip" data-start="2314.538000" data-stop="2317.220000">its way before I actually ended up doing it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2318.000000">38:38</span> <strong>Getting over the reverence for Emacs's history</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2318.401000" data-stop="2320.182000"><strong class="speaker-name">Sacha:</strong>  Sometimes I am reluctant to suggest</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2320.243000" data-stop="2322.304000">things because I figure Emacs is such a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2322.384000" data-stop="2324.046000">long history.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2324.306000" data-stop="2326.448000">Probably someone has thought of this already, and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2326.508000" data-stop="2328.310000">it's probably been discussed and bike-shedded.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2329.350000" data-stop="2332.173000">But I think there are little things that we</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2332.193000" data-stop="2331.719000">can do.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2331.720000" data-stop="2334.539000"><strong class="speaker-name">Philip:</strong>  Yeah, but then in that case,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2334.540000" data-stop="2338.948000">Yeah, but I think that's actually related to</span> <span class="audio-time caption" data-speaker="Philip" data-start="2338.988000" data-stop="2340.531000">another thing I wanted to talk about.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2340.571000" data-stop="2343.015000">There's a certain sort of reverence that people</span> <span class="audio-time caption" data-speaker="Philip" data-start="2343.056000" data-stop="2345.059000">have for Emacs, because it's such a</span> <span class="audio-time caption" data-speaker="Philip" data-start="2345.100000" data-stop="2345.961000">historical project.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2345.981000" data-stop="2347.965000">But I mean, the preset theme was something that</span> <span class="audio-time caption" data-speaker="Philip" data-start="2348.025000" data-stop="2350.410000">was discussed for many times, and there were</span> <span class="audio-time caption" data-speaker="Philip" data-start="2350.450000" data-stop="2351.612000">basically no objections.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2351.672000" data-stop="2353.336000">No one said, no, we shouldn't do this, this is a</span> <span class="audio-time caption" data-speaker="Philip" data-start="2353.396000" data-stop="2354.097000">bad idea.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2355.207000" data-stop="2357.891000">I hope it's not only because I proposed it or</span> <span class="audio-time caption" data-speaker="Philip" data-start="2357.911000" data-stop="2360.014000">something, or like the package also suggests that.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2360.475000" data-stop="2363.279000">Most of the things I've been working on for Emacs</span> <span class="audio-time caption" data-speaker="Philip" data-start="2363.299000" data-stop="2366.344000">31, no one objected to.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2366.364000" data-stop="2369.389000">And there's two sides to this.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2369.409000" data-stop="2373.375000">There's some people who actually go overboard</span> <span class="audio-time caption" data-speaker="Philip" data-start="2373.415000" data-stop="2374.837000">with this and try and reinvent.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2374.877000" data-stop="2377.281000">Like when reviewing packages, you see this a lot</span> <span class="audio-time caption" data-speaker="Philip" data-start="2377.301000" data-stop="2379.644000">of people try and reinvent functionality, which</span> <span class="audio-time caption" data-speaker="Philip" data-start="2379.965000" data-stop="2383.510000">is basically just giving a new name</span> <span class="audio-time caption" data-speaker="Philip" data-start="2384.198000" data-stop="2386.201000">Combining two things and giving it a new name</span> <span class="audio-time caption" data-speaker="Philip" data-start="2386.241000" data-stop="2390.868000">which isn't always necessary but might be useful</span> <span class="audio-time caption" data-speaker="Philip" data-start="2390.948000" data-stop="2392.751000">and then it's some discussion like can we</span> <span class="audio-time caption" data-speaker="Philip" data-start="2392.771000" data-stop="2394.874000">actually make more out of this and that's a</span> <span class="audio-time caption" data-speaker="Philip" data-start="2394.914000" data-stop="2398.719000">different thing but then there's the people who I</span> <span class="audio-time caption" data-speaker="Philip" data-start="2398.760000" data-stop="2401.263000">probably lean more towards that side when I think</span> <span class="audio-time caption" data-speaker="Philip" data-start="2401.303000" data-stop="2404.348000">to myself the way I'm doing this is stupid or</span> <span class="audio-time caption" data-speaker="Philip" data-start="2404.388000" data-stop="2406.711000">this is not as efficient people have been using</span> <span class="audio-time caption" data-speaker="Philip" data-start="2406.791000" data-stop="2408.995000">Emacs for 40 years of course there probably has</span> <span class="audio-time caption" data-speaker="Philip" data-start="2409.015000" data-stop="2410.577000">to be a better way to do this</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2411.000000">40:11</span> <strong>Changes are more likely to happen when someone puts in the work to make a patch</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="2411.030000" data-stop="2413.213000"><strong class="speaker-name">Philip:</strong> And sometimes it turns out it simply hasn't been</span> <span class="audio-time caption" data-speaker="Philip" data-start="2413.253000" data-stop="2417.098000">implemented and no one has simply done this</span> <span class="audio-time caption" data-speaker="Philip" data-start="2418.299000" data-stop="2420.682000">actually small effort of preparing a patch and</span> <span class="audio-time caption" data-speaker="Philip" data-start="2421.263000" data-stop="2423.646000">ironing out the details just some people don't</span> <span class="audio-time caption" data-speaker="Philip" data-start="2423.686000" data-stop="2425.048000">like discussions of course and it's</span> <span class="audio-time caption" data-speaker="Philip" data-start="2425.108000" data-stop="2428.673000">understandable but you can I mean there's really</span> <span class="audio-time caption" data-speaker="Philip" data-start="2428.753000" data-stop="2431.296000">no harm in sending a patch and then saying I'm</span> <span class="audio-time caption" data-speaker="Philip" data-start="2431.336000" data-stop="2432.177000">sorry I don't have</span> <span class="audio-time caption" data-speaker="Philip" data-start="2433.035000" data-stop="2434.597000">It's annoying, of course, from a</span> <span class="audio-time caption" data-speaker="Philip" data-start="2434.617000" data-stop="2435.699000">maintainer's perspective.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2435.799000" data-stop="2437.362000">I don't recommend doing it, because if you</span> <span class="audio-time caption" data-speaker="Philip" data-start="2437.782000" data-stop="2439.845000">prepare a patch but don't have the time to finish</span> <span class="audio-time caption" data-speaker="Philip" data-start="2439.906000" data-stop="2442.409000">it up, then if it's a useful thing and you</span> <span class="audio-time caption" data-speaker="Philip" data-start="2442.449000" data-stop="2444.553000">actually get someone to be interested in</span> <span class="audio-time caption" data-speaker="Philip" data-start="2444.613000" data-stop="2449.060000">maintaining it, then bringing the patch to</span> <span class="audio-time caption" data-speaker="Philip" data-start="2449.100000" data-stop="2453.767000">completion, then it's well worth just sending</span> <span class="audio-time caption" data-speaker="Philip" data-start="2453.787000" data-stop="2454.328000">a feature.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2454.348000" data-stop="2455.850000">Even sending a feature request, you don't even</span> <span class="audio-time caption" data-speaker="Philip" data-start="2455.910000" data-stop="2456.511000">have to...</span> <span class="audio-time caption" data-speaker="Philip" data-start="2456.896000" data-stop="2476.145000">I mentioned the idea of this preset theme</span> <span class="audio-time caption" data-speaker="Philip" data-start="2476.926000" data-stop="2477.807000">many times.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2479.087000" data-stop="2492.487000">I wish people would be more conscious of this</span> <span class="audio-time caption" data-speaker="Philip" data-start="2492.527000" data-stop="2496.193000">mentality, but I totally understand people who</span> <span class="audio-time caption" data-speaker="Philip" data-start="2496.533000" data-stop="2499.518000">think otherwise, because when the first time I</span> <span class="audio-time caption" data-speaker="Philip" data-start="2499.598000" data-stop="2502.963000">sent a patch to a mailing list, I was, I don't</span> <span class="audio-time caption" data-speaker="Philip" data-start="2502.983000" data-stop="2504.325000">want to say I was sweaty, but I was really</span> <span class="audio-time caption" data-speaker="Philip" data-start="2504.385000" data-stop="2507.052000">nervous because I don't know what if they</span> <span class="audio-time caption" data-speaker="Philip" data-start="2507.072000" data-stop="2508.600000">insult me or they say, "you fool,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2508.601000" data-stop="2510.733000">you didn't format the test properly,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2510.734000" data-stop="2515.167000">[??] secret handshake you have to do</span> <span class="audio-time caption" data-speaker="Philip" data-start="2515.168000" data-stop="2516.433000">every time you send a patch.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2516.434000" data-stop="2520.967000">Begone." Whatever. Which is of course not the case.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2520.968000" data-stop="2523.119000">Which is not to say that there are no</span> <span class="audio-time caption" data-speaker="Philip" data-start="2523.120000" data-stop="2524.600000">unpleasant people on mailing lists</span> <span class="audio-time caption" data-speaker="Philip" data-start="2524.601000" data-stop="2526.400000">but I think that there is</span> <span class="audio-time caption" data-speaker="Philip" data-start="2526.401000" data-stop="2532.233000">especially the GNU Kind Communication Guidelines,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2532.234000" data-stop="2539.299000">which are supposed to give some sort of goodwill,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2539.300000" data-stop="2544.567000">good faith, attention to how people</span> <span class="audio-time caption" data-speaker="Philip" data-start="2544.568000" data-stop="2547.167000">should behave on mailing lists, how they should</span> <span class="audio-time caption" data-speaker="Philip" data-start="2547.168000" data-stop="2550.019000">treat each other.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2550.020000" data-stop="2552.450000">Lots of these preconceptions turn out to be false</span> <span class="audio-time caption" data-speaker="Philip" data-start="2552.451000" data-stop="2553.399000">in there.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2553.400000" data-stop="2555.833000">That's why I also wanted to participate in this,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2555.834000" data-stop="2558.133000">so that people see, oh, the people maintaining</span> <span class="audio-time caption" data-speaker="Philip" data-start="2558.134000" data-stop="2563.500000">Emacs aren't wizards locked up in a tower, but</span> <span class="audio-time caption" data-speaker="Philip" data-start="2563.501000" data-stop="2566.233000">just, I hope, normal people who happen to spend more time with Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2566.234000" data-stop="2570.467000"><strong class="speaker-name">Prot:</strong>  Yeah, that's a very good point.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2570.468000" data-stop="2577.979000"><strong class="speaker-name">Philip:</strong>  Which is why they're valuable, these discussions.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2577.980000" data-stop="2580.831000"><strong class="speaker-name">Prot:</strong>  And I think, Philip, just to add to this,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2580.832000" data-stop="2584.033000">your example of leading with a patch, I think, is</span> <span class="audio-time caption" data-speaker="Prot" data-start="2584.034000" data-stop="2587.633000">also key here for someone who can write a patch,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2587.634000" data-stop="2591.067000">of course, because it cuts out a lot of that</span> <span class="audio-time caption" data-speaker="Prot" data-start="2591.068000" data-stop="2593.867000">noise, that initial discussion of, well, maybe</span> <span class="audio-time caption" data-speaker="Prot" data-start="2593.868000" data-stop="2597.479000">yes, maybe no, because it frames minds.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2597.480000" data-stop="2599.639000">It focuses the attention on something concrete.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2599.640000" data-stop="2602.819000">And that can also... Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2602.820000" data-stop="2604.479000"><strong class="speaker-name">Philip:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2604.480000" data-stop="2606.079000">And...</span> <span class="audio-time caption" data-speaker="Philip" data-start="2607.387000" data-stop="2610.250000">I mean, having a patch is useful, but getting</span> <span class="audio-time caption" data-speaker="Philip" data-start="2610.310000" data-stop="2612.893000">someone interested is also helpful.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2612.913000" data-stop="2616.156000">Like the discussion when we merged which-key, I</span> <span class="audio-time caption" data-speaker="Philip" data-start="2616.216000" data-stop="2618.218000">helped with that process.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2618.319000" data-stop="2621.422000">And I'm not, I think it was, I don't remember his</span> <span class="audio-time caption" data-speaker="Philip" data-start="2621.462000" data-stop="2627.488000">last name, Jeremy, who actually did most of</span> <span class="audio-time caption" data-speaker="Philip" data-start="2627.508000" data-stop="2627.809000">the work.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2627.829000" data-stop="2628.970000">And I was reviewing his patches.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2629.010000" data-stop="2630.371000">I was helping along, but I wasn't actually</span> <span class="audio-time caption" data-speaker="Philip" data-start="2630.411000" data-stop="2631.352000">writing most of the code.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2631.392000" data-stop="2634.195000">I was just going over the proposals and helping</span> <span class="audio-time caption" data-speaker="Philip" data-start="2634.256000" data-stop="2636.618000">along and basically pushing the...</span> <span class="audio-time caption" data-speaker="Philip" data-start="2637.087000" data-stop="2639.611000">Stunning the process whenever it got stuck so</span> <span class="audio-time caption" data-speaker="Philip" data-start="2639.651000" data-stop="2642.535000">that we actually made the necessary changes for</span> <span class="audio-time caption" data-speaker="Philip" data-start="2642.575000" data-stop="2643.516000">it to get merged.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2643.000000">44:03</span> <strong>Preserving Git history of packages absorbed into the core</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="2643.536000" data-stop="2646.200000"><strong class="speaker-name">Philip:</strong> And then I did the last finishing touches of</span> <span class="audio-time caption" data-speaker="Philip" data-start="2646.360000" data-stop="2649.785000">merging, because that was also something... Every</span> <span class="audio-time caption" data-speaker="Philip" data-start="2649.825000" data-stop="2652.509000">time... We'd like to preserve the Git history of</span> <span class="audio-time caption" data-speaker="Philip" data-start="2652.549000" data-stop="2655.033000">packages we merge upstream, which is probably</span> <span class="audio-time caption" data-speaker="Philip" data-start="2655.073000" data-stop="2657.356000">something we won't be doing in that way when we</span> <span class="audio-time caption" data-speaker="Philip" data-start="2657.396000" data-stop="2659.539000">do the Fat Emacs releases.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2660.040000" data-stop="2663.004000">But the entire history of Eglot and the entire</span> <span class="audio-time caption" data-speaker="Philip" data-start="2663.044000" data-stop="2665.508000">history of which-key is actually preserved in the</span> <span class="audio-time caption" data-speaker="Philip" data-start="2665.772000" data-stop="2669.267000">Emacs Git repository. So if you open the file, you have, it's</span> <span class="audio-time caption" data-speaker="Philip" data-start="2669.268000" data-stop="2671.720000">not anymore a tree in a computer science sense, but it's</span> <span class="audio-time caption" data-speaker="Philip" data-start="2671.721000" data-stop="2674.333000">actually a proper DAG, because suddenly you have multiple</span> <span class="audio-time caption" data-speaker="Philip" data-start="2674.334000" data-stop="2677.600000">roots of the project which come together with the history</span> <span class="audio-time caption" data-speaker="Philip" data-start="2677.601000" data-stop="2680.400000">preserved. And that's an annoying thing to do with Git, but</span> <span class="audio-time caption" data-speaker="Philip" data-start="2680.401000" data-stop="2684.100000">you can do it. And not everyone knows how to do it, but a few</span> <span class="audio-time caption" data-speaker="Philip" data-start="2684.101000" data-stop="2687.233000">people have the commands written down somewhere or look it</span> <span class="audio-time caption" data-speaker="Philip" data-start="2687.234000" data-stop="2692.539000">up on a mailing list, as I do. Then that goes through, but that's...</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2692.540000" data-stop="2694.448000"><strong class="speaker-name">Prot:</strong>  So they are wizards after all.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2696.335000" data-stop="2704.619000"><strong class="speaker-name">Philip:</strong>  Wizards just reading pre-written down spells.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2704.620000" data-stop="2706.166000"><strong class="speaker-name">Sacha:</strong>  It'll be interesting to see if some of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2706.206000" data-stop="2709.150000">the starter kits move to using that kind of fat</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2708.597000" data-stop="2712.679000">Emacs infrastructure once that's in place.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2712.680000" data-stop="2715.311000">Because a lot of times the starter kits are there</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2715.312000" data-stop="2716.439000">to package together.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2716.440000" data-stop="2719.559000">Okay, here's a list of the packages that it uses.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2719.560000" data-stop="2723.129000">Here's the configuration that makes them play</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2723.130000" data-stop="2724.319000">nice together.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2724.320000" data-stop="2725.559000">And then here's some kind of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2725.560000" data-stop="2728.420000">Documentation or videos or a demonstration on how</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2728.421000" data-stop="2732.659000">to use it to help people get started.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2732.660000" data-stop="2733.856000"><strong class="speaker-name">Philip:</strong>  So I'm curious to see, I mean, I went</span> <span class="audio-time caption" data-speaker="Philip" data-start="2733.857000" data-stop="2737.279000">reviewing the options to add to the preset theme.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2737.280000" data-stop="2739.856000">I actually went through a number of these starter</span> <span class="audio-time caption" data-speaker="Philip" data-start="2739.857000" data-stop="2741.959000">kits to see the options they suggested.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2741.960000" data-stop="2747.879000">Selected those out which seemed reasonable to me.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2747.880000" data-stop="2751.144000">And of course, this was discussed and people</span> <span class="audio-time caption" data-speaker="Philip" data-start="2751.145000" data-stop="2753.519000">objected or added other things.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2753.520000" data-stop="2756.279000">But I am curious to see how the starter kits will</span> <span class="audio-time caption" data-speaker="Philip" data-start="2756.280000" data-stop="2758.622000">evolve in the future, because that's also</span> <span class="audio-time caption" data-speaker="Philip" data-start="2758.623000" data-stop="2760.279000">something we should mention.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2760.000000">46:00</span> <strong>Dealing with multiple types of Emacs</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="2760.280000" data-stop="2762.125000"><strong class="speaker-name">Philip:</strong> I mean, there is a big problem with the fat Emacs</span> <span class="audio-time caption" data-speaker="Philip" data-start="2762.126000" data-stop="2763.775000">approach and suddenly you have two versions</span> <span class="audio-time caption" data-speaker="Philip" data-start="2763.776000" data-stop="2764.159000">of Emacs.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2764.160000" data-stop="2766.820000">You can write a package which appears to work</span> <span class="audio-time caption" data-speaker="Philip" data-start="2766.821000" data-stop="2769.579000">fine in fat Emacs, but it depends on a package</span> <span class="audio-time caption" data-speaker="Philip" data-start="2769.580000" data-stop="2770.959000">which is not in the</span> <span class="audio-time caption" data-speaker="Philip" data-start="2770.960000" data-stop="2774.897000">core Emacs release, and then that's</span> <span class="audio-time caption" data-speaker="Philip" data-start="2774.898000" data-stop="2778.903000">something we will have to deal with in the future</span> <span class="audio-time caption" data-speaker="Philip" data-start="2778.904000" data-stop="2779.639000">as well.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2779.640000" data-stop="2782.839000">Yeah, that's a tricky part indeed.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2782.840000" data-stop="2786.859000">Yeah, but another thing relating... Yeah, the</span> <span class="audio-time caption" data-speaker="Philip" data-start="2786.860000" data-stop="2790.879000">sort of fragmentation of what core Emacs is.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2790.880000" data-stop="2793.451000">It might be a showstopper, so maybe everything</span> <span class="audio-time caption" data-speaker="Philip" data-start="2793.452000" data-stop="2795.519000">I'm telling here is just a wishlist.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2795.520000" data-stop="2798.319000">It doesn't end up actualizing.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2798.320000" data-stop="2803.359000">And that fragmentation of the setup is one of the</span> <span class="audio-time caption" data-speaker="Philip" data-start="2803.360000" data-stop="2807.749000">things... Because it's not actually really</span> <span class="audio-time caption" data-speaker="Philip" data-start="2807.750000" data-stop="2809.839000">difficult to solve.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2809.840000" data-stop="2812.047000">I mean, if you have a package that depends on</span> <span class="audio-time caption" data-speaker="Philip" data-start="2812.048000" data-stop="2814.177000">something from Fat Emacs who just added to the</span> <span class="audio-time caption" data-speaker="Philip" data-start="2814.178000" data-stop="2816.393000">package requires lines, you explicitly state</span> <span class="audio-time caption" data-speaker="Philip" data-start="2816.394000" data-stop="2817.199000">the dependency.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2817.200000" data-stop="2819.925000">But if people are sloppy, then they might not</span> <span class="audio-time caption" data-speaker="Philip" data-start="2819.926000" data-stop="2821.439000">notice this immediately.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2821.440000" data-stop="2825.499000">And you have runtime issues when people are slow.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2825.500000" data-stop="2827.279000"><strong class="speaker-name">Sacha:</strong>  It's a little bit more than that, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2827.280000" data-stop="2829.549000">So for example, if you have a newbie asking a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2829.550000" data-stop="2831.982000">question, because they're using a starter kit or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2831.983000" data-stop="2834.382000">in the future, a fat Emacs thing with different</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2834.383000" data-stop="2836.756000">packages installed and different configuration</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2836.757000" data-stop="2839.079000">things that they have not personally set up.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2839.080000" data-stop="2841.643000">And they don't have the experience to know, oh</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2841.644000" data-stop="2844.039000">yeah, this is going to be related to that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2844.040000" data-stop="2846.519000">So I should mention it in the help message.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2846.520000" data-stop="2849.816000">I mean, large starter communities like, like Doom</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2849.817000" data-stop="2853.010000">Emacs and Spacemacs will have their own Discord</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2853.011000" data-stop="2855.986000">or mailing list where people can go and ask</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2855.987000" data-stop="2856.679000">for help.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2856.680000" data-stop="2858.706000">And so people will say, okay, I think I kind of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2858.707000" data-stop="2860.632000">know which starting point you're coming from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2860.633000" data-stop="2861.639000">because it's the base.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2861.640000" data-stop="2865.139000">But if we're, you know, with the smaller starter</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2865.140000" data-stop="2868.639000">kits, they don't even know how to ask for help.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2868.640000" data-stop="2871.381000">And everyone is like, on the regular Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2871.382000" data-stop="2874.479000">communities, there's a lot of back and forth if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2874.480000" data-stop="2877.098000">you want to dig into, okay, what do you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2877.099000" data-stop="2878.039000">have enabled?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2878.040000" data-stop="2880.279000">What is affecting your setup?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2880.280000" data-stop="2889.379000">Fat Emacs is going to run into that problem.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2889.000000">48:09</span> <strong>Fat Emacs is just about bundling more packages from ELPA, not changing the configuration for them</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="2889.380000" data-stop="2891.500000"><strong class="speaker-name">Philip:</strong>  To be fair, my understanding currently</span> <span class="audio-time caption" data-speaker="Philip" data-start="2891.501000" data-stop="2893.679000">is that it wouldn't enable any other options.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2893.680000" data-stop="2895.359000">It would just bundle more packages.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2895.360000" data-stop="2898.199000"><strong class="speaker-name">Sacha:</strong>  I see.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2898.200000" data-stop="2899.697000"><strong class="speaker-name">Prot:</strong>  So it would be more of an issue for</span> <span class="audio-time caption" data-speaker="Prot" data-start="2899.698000" data-stop="2902.359000">package authors.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2902.360000" data-stop="2903.439000"><strong class="speaker-name">Philip:</strong>  Yeah, for package options.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2903.440000" data-stop="2906.194000">The idea is, I mean, I've used Emacs in offline</span> <span class="audio-time caption" data-speaker="Philip" data-start="2906.195000" data-stop="2907.719000">settings where it's like,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2907.720000" data-stop="2913.033000">really inconvenient or impossible to install</span> <span class="audio-time caption" data-speaker="Philip" data-start="2913.034000" data-stop="2916.600000">additional packages, and just having more</span> <span class="audio-time caption" data-speaker="Philip" data-start="2916.601000" data-stop="2918.767000">functionality out of the box which ELPA provides</span> <span class="audio-time caption" data-speaker="Philip" data-start="2918.768000" data-stop="2920.886000">and you don't have to install additionally, is</span> <span class="audio-time caption" data-speaker="Philip" data-start="2920.887000" data-stop="2922.399000">basically the idea.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2922.400000" data-stop="2924.324000">Because this has been a project which has been</span> <span class="audio-time caption" data-speaker="Philip" data-start="2924.325000" data-stop="2925.119000">ongoing for years.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2925.120000" data-stop="2927.373000">I think this is ever since the conception of</span> <span class="audio-time caption" data-speaker="Philip" data-start="2927.374000" data-stop="2928.739000">ELPA itself,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2928.740000" data-stop="2930.887000">which is precisely the reason why GNU ELPA</span> <span class="audio-time caption" data-speaker="Philip" data-start="2930.888000" data-stop="2933.830000">requires all packages to be signed or to be</span> <span class="audio-time caption" data-speaker="Philip" data-start="2933.831000" data-stop="2937.236000">covered by the copyright assignments, while NonGNU</span> <span class="audio-time caption" data-speaker="Philip" data-start="2937.237000" data-stop="2940.019000">ELPA does not:</span> <span class="audio-time caption" data-speaker="Philip" data-start="2940.020000" data-stop="2941.159000">so that this is possible.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2941.160000" data-stop="2944.519000">It's just that finally it looks like we're</span> <span class="audio-time caption" data-speaker="Philip" data-start="2944.520000" data-stop="2948.499000">starting to move somewhere in that direction.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2948.500000" data-stop="2951.308000">It would be interesting if a decision were to be</span> <span class="audio-time caption" data-speaker="Philip" data-start="2951.309000" data-stop="2955.259000">made that we're going to give up on</span> <span class="audio-time caption" data-speaker="Philip" data-start="2955.260000" data-stop="2957.075000">this sort of bundling, what decisions that were</span> <span class="audio-time caption" data-speaker="Philip" data-start="2957.076000" data-stop="2961.859000">made for the legal status of GNU ELPA, if we</span> <span class="audio-time caption" data-speaker="Philip" data-start="2961.860000" data-stop="2963.753000">would merge GNU ELPA and NonGNU ELPA together,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2963.754000" data-stop="2965.919000">which is unlikely currently.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2965.920000" data-stop="2969.264000">This is just pure speculation at this point, but</span> <span class="audio-time caption" data-speaker="Philip" data-start="2969.265000" data-stop="2972.653000">it's something that might be a discussion, which</span> <span class="audio-time caption" data-speaker="Philip" data-start="2972.654000" data-stop="2976.559000">will be had in the future.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2976.560000" data-stop="2977.828000"><strong class="speaker-name">Sacha:</strong>  Okay, so it dispenses with a package</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2977.829000" data-stop="2981.285000">install part, and so people don't have to worry</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2981.286000" data-stop="2983.639000">about, okay, how do I make sure</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2983.640000" data-stop="2986.164000">The package archives are set up, and how do I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2986.165000" data-stop="2987.399000">install the packages?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2987.400000" data-stop="2989.700000">All that stuff will be pre-installed.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2989.701000" data-stop="2990.718000">The auto-mode-alist will be...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2990.719000" data-stop="2993.719000">Oh, sorry, go ahead.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2993.720000" data-stop="2994.530000"><strong class="speaker-name">Philip:</strong>  The package archives wouldn't matter</span> <span class="audio-time caption" data-speaker="Philip" data-start="2994.531000" data-stop="2996.966000">that much, since we are just talking about the</span> <span class="audio-time caption" data-speaker="Philip" data-start="2996.967000" data-stop="2999.071000">GNU ELPA packages, which are installed</span> <span class="audio-time caption" data-speaker="Philip" data-start="2999.072000" data-stop="2999.719000">by default.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2999.720000" data-stop="3003.202000">It's really just that you don't have to install</span> <span class="audio-time caption" data-speaker="Philip" data-start="3003.203000" data-stop="3004.759000">additional packages.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3004.760000" data-stop="3005.879000">You don't need a network connection.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3005.880000" data-stop="3008.088000">You don't need to know about the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3008.089000" data-stop="3009.399000">package existence.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3009.400000" data-stop="3010.550000">It would be registered in the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3010.551000" data-stop="3011.999000">auto-mode-alist anyway.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3012.000000" data-stop="3015.147000">So if you open a, I don't know, what's the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3015.148000" data-stop="3018.489000">package, some major mode that's not going to</span> <span class="audio-time caption" data-speaker="Philip" data-start="3018.490000" data-stop="3022.179000">open, which is not in the core.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3022.180000" data-stop="3025.159000"><strong class="speaker-name">Prot:</strong>  I think you might [??] earlier.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3025.160000" data-stop="3027.519000">I think that would qualify.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3027.520000" data-stop="3029.941000">I think you mentioned auctex earlier, which is</span> <span class="audio-time caption" data-speaker="Prot" data-start="3029.942000" data-stop="3031.679000">on ELPA, but not in Core.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3031.680000" data-stop="3034.847000"><strong class="speaker-name">Philip:</strong>  The tricky thing there is that Emacs</span> <span class="audio-time caption" data-speaker="Philip" data-start="3034.848000" data-stop="3037.982000">already has a LaTeX mode by default, and that</span> <span class="audio-time caption" data-speaker="Philip" data-start="3037.983000" data-stop="3039.567000">already applies, but auctex extends it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3039.568000" data-stop="3050.059000">That's why I was looking for another example.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3050.060000" data-stop="3051.567000">Okay, that's the idea, but it wouldn't only be</span> <span class="audio-time caption" data-speaker="Philip" data-start="3051.568000" data-stop="3052.639000">major modes, I assume.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3052.640000" data-stop="3054.967000">There's going to be some discussion as to what</span> <span class="audio-time caption" data-speaker="Philip" data-start="3054.968000" data-stop="3056.599000">packages we want to add.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3056.600000" data-stop="3061.799000">Currently, it's not certain.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3061.800000" data-stop="3064.719000">Because we're working on finishing up Emacs 31.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3064.720000" data-stop="3068.083000">That's where most of the bug fixing efforts are</span> <span class="audio-time caption" data-speaker="Philip" data-start="3068.084000" data-stop="3071.280000">going in right now before we progress to any</span> <span class="audio-time caption" data-speaker="Philip" data-start="3071.281000" data-stop="3072.879000">further developments.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3072.880000" data-stop="3076.039000">But that also includes proposals.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3076.040000" data-stop="3078.827000">That includes proposals as to the preset theme,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3078.828000" data-stop="3083.039000">which I am still interested in reading.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3083.000000">51:23</span> <strong>Customize</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3083.040000" data-stop="3084.233000"><strong class="speaker-name">Sacha:</strong>  I want to come back to something Prot</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3084.234000" data-stop="3087.089000">mentioned in my conversation with him about</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3087.090000" data-stop="3090.243000">newcomers, and that is the Customize interface</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3090.244000" data-stop="3093.599000">versus getting people to the Emacs Lisp directly.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3093.600000" data-stop="3095.805000">And I think, Prot, you were not very keen</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3095.806000" data-stop="3097.599000">on Customize.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3097.600000" data-stop="3099.511000"><strong class="speaker-name">Prot:</strong>  Yeah, basically if I say it in one</span> <span class="audio-time caption" data-speaker="Prot" data-start="3099.512000" data-stop="3102.697000">sentence is: I think the earlier they get into</span> <span class="audio-time caption" data-speaker="Prot" data-start="3102.698000" data-stop="3106.063000">Emacs Lisp, like seeing it and interacting with</span> <span class="audio-time caption" data-speaker="Prot" data-start="3106.064000" data-stop="3108.999000">it, the better it is for them long term.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3109.000000" data-stop="3111.879000">Granted, I am making the assumption that this is</span> <span class="audio-time caption" data-speaker="Prot" data-start="3111.880000" data-stop="3114.519000">a user that will be there long term, right?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3114.520000" data-stop="3115.439000"><strong class="speaker-name">Philip:</strong>  Of course.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3115.440000" data-stop="3119.778000">And this is specifically about the Customize</span> <span class="audio-time caption" data-speaker="Philip" data-start="3119.779000" data-stop="3122.619000">UI, right?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3122.620000" data-stop="3123.926000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah, not the underlying</span> <span class="audio-time caption" data-speaker="Prot" data-start="3123.927000" data-stop="3134.099000">functionality, like, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3134.100000" data-stop="3137.200000"><strong class="speaker-name">Sacha:</strong>  It's great for simple options like, yes,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3137.201000" data-stop="3139.233000">we can check the checkbox, or we can select from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3139.234000" data-stop="3142.867000">the drop-down list or whatever, but browsing it is,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3142.868000" data-stop="3145.367000">as you mentioned, overwhelming in the general sense</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3145.368000" data-stop="3150.500000">of Emacs being overwhelming, and when you start</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3150.501000" data-stop="3151.800000">wanting to do something slightly more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3151.801000" data-stop="3152.759000">sophisticated like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3152.760000" data-stop="3156.279000">you know, let's add some more capture templates,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3156.280000" data-stop="3158.719000">then it's challenging for people to do.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3158.720000" data-stop="3161.970000">So I'm wondering whether, in general, we should</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3161.971000" data-stop="3164.963000">be... Is our general strategy to be</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3164.964000" data-stop="3168.264000">guiding people to, yes, Customize is there, but</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3168.265000" data-stop="3171.261000">really you want to be doing Emacs Lisp as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3171.262000" data-stop="3172.759000">quickly as possible.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3172.760000" data-stop="3174.892000">Let's make it easier for you to get your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3174.893000" data-stop="3175.479000">init file.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3175.480000" data-stop="3179.159000">Let's make it easier for you to test your init</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3179.160000" data-stop="3181.240000">file and not fall apart when you miss a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3181.241000" data-stop="3184.280000">parenthesis and all, things like that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3184.281000" data-stop="3189.740000">Do we want to guide people that way?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3189.741000" data-stop="3192.037000"><strong class="speaker-name">Philip:</strong>  One question I think we should</span> <span class="audio-time caption" data-speaker="Philip" data-start="3192.038000" data-stop="3196.077000">distinguish is the idea of a UI the problem or is</span> <span class="audio-time caption" data-speaker="Philip" data-start="3196.078000" data-stop="3200.153000">it really... Because I personally I have a new Emacs</span> <span class="audio-time caption" data-speaker="Philip" data-start="3200.154000" data-stop="3204.123000">configuration at my day job, and I do everything</span> <span class="audio-time caption" data-speaker="Philip" data-start="3204.124000" data-stop="3205.559000">using Customize.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3205.560000" data-stop="3208.839000">I don't even care about using use-package</span> <span class="audio-time caption" data-speaker="Philip" data-start="3208.840000" data-stop="3209.879000">or whatever.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3209.880000" data-stop="3213.159000">Just customize the stuff using...</span> <span class="audio-time caption" data-speaker="Philip" data-start="3213.160000" data-stop="3215.653000">There's a big blob of user options which I've</span> <span class="audio-time caption" data-speaker="Philip" data-start="3215.654000" data-stop="3218.272000">modified, and that goes through, and I don't care</span> <span class="audio-time caption" data-speaker="Philip" data-start="3218.273000" data-stop="3220.965000">about it, but I claim to have some understanding</span> <span class="audio-time caption" data-speaker="Philip" data-start="3220.966000" data-stop="3223.630000">of what's going on, and the rest of the function</span> <span class="audio-time caption" data-speaker="Philip" data-start="3223.631000" data-stop="3226.239000">is just some defuns which I find convenient.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3226.240000" data-stop="3229.951000">But for me, it's okay, because I have some sort of</span> <span class="audio-time caption" data-speaker="Philip" data-start="3229.952000" data-stop="3233.999000">intuition of how the Customize UI works.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3234.000000" data-stop="3236.765000">If there were a better UI for Customize, would</span> <span class="audio-time caption" data-speaker="Philip" data-start="3236.766000" data-stop="3240.075000">you still say that if it were written in an</span> <span class="audio-time caption" data-speaker="Philip" data-start="3240.076000" data-stop="3241.999000">intuitive way, say using</span> <span class="audio-time caption" data-speaker="Philip" data-start="3242.000000" data-stop="3244.279000">Fido modes.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3244.280000" data-stop="3246.959000">So that's, it would use interactive narrowing and</span> <span class="audio-time caption" data-speaker="Philip" data-start="3246.960000" data-stop="3251.247000">it would somehow work in a build on existing</span> <span class="audio-time caption" data-speaker="Philip" data-start="3251.248000" data-stop="3254.714000">intuitions because the current Customize, the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3254.715000" data-stop="3256.733000">Customize UI, the easy customization interface I</span> <span class="audio-time caption" data-speaker="Philip" data-start="3256.734000" data-stop="3260.879000">think is a technical term to use is based around</span> <span class="audio-time caption" data-speaker="Philip" data-start="3260.880000" data-stop="3264.819000">this widget library interface and sort of make</span> <span class="audio-time caption" data-speaker="Philip" data-start="3264.820000" data-stop="3271.339000">replicating a TUI menu but not... And then you have to...</span> <span class="audio-time caption" data-speaker="Philip" data-start="3271.340000" data-stop="3273.400000">And yeah, of course, the intuition... Like, if you</span> <span class="audio-time caption" data-speaker="Philip" data-start="3273.401000" data-stop="3274.889000">click on things, it doesn't always behave the same</span> <span class="audio-time caption" data-speaker="Philip" data-start="3274.890000" data-stop="3277.558000">thing you would expect from a regular settings</span> <span class="audio-time caption" data-speaker="Philip" data-start="3277.559000" data-stop="3280.154000">menu, which is by the way also something that</span> <span class="audio-time caption" data-speaker="Philip" data-start="3280.155000" data-stop="3281.039000">CUA specifies.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3281.000000">54:41</span> <strong>CUA - Common User Access</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="3281.040000" data-stop="3284.343000"><strong class="speaker-name">Philip:</strong> I recently looked into what CUA lists. Like, if</span> <span class="audio-time caption" data-speaker="Philip" data-start="3284.344000" data-stop="3287.731000">you look at the Wikipedia page, CUA specifies that</span> <span class="audio-time caption" data-speaker="Philip" data-start="3287.732000" data-stop="3291.137000">every application has to have these settings menu</span> <span class="audio-time caption" data-speaker="Philip" data-start="3291.138000" data-stop="3294.568000">with tabs on the bottom on the top where it lists</span> <span class="audio-time caption" data-speaker="Philip" data-start="3294.569000" data-stop="3298.039000">all the options you can specify and interestingly</span> <span class="audio-time caption" data-speaker="Philip" data-start="3298.040000" data-stop="3300.519000">C-c and C-v is not listed as...</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3300.000000">55:00</span> <strong>ini file format? https://sdf.org/~pkal//blog/emacs/ini-init.html</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="3300.520000" data-stop="3304.835000"><strong class="speaker-name">Philip:</strong> Apparently not CUA, but Shift Insert and</span> <span class="audio-time caption" data-speaker="Philip" data-start="3304.836000" data-stop="3306.519000">Control Insert...</span> <span class="audio-time caption" data-speaker="Philip" data-start="3306.520000" data-stop="3309.632000">I might be misunderstanding this, but this seems</span> <span class="audio-time caption" data-speaker="Philip" data-start="3309.633000" data-stop="3310.799000">to be a misnomer.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3310.000000">55:10</span> <strong>Emacs configuration generator
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience-00-55-45-367.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience-00-55-45-367.jpg" alt="image from video 00:55:45.367" data-time="00:55:45.367"></a><span class="audio-time caption" data-speaker="Philip" data-start="3310.800000" data-stop="3313.779000"><strong class="speaker-name">Philip:</strong> But if we had some sort of a UI like this CUA</span> <span class="audio-time caption" data-speaker="Philip" data-start="3313.780000" data-stop="3316.851000">configuration UI, would that be something where</span> <span class="audio-time caption" data-speaker="Philip" data-start="3316.852000" data-stop="3319.709000">you'd say as an intermediate stage for just</span> <span class="audio-time caption" data-speaker="Philip" data-start="3319.710000" data-stop="3320.839000">setting options?</span> <span class="audio-time caption" data-speaker="Philip" data-start="3320.840000" data-stop="3325.452000">Because that was part of my thought process with</span> <span class="audio-time caption" data-speaker="Philip" data-start="3325.453000" data-stop="3328.239000">Emacs Configuration Generator.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3328.240000" data-stop="3332.786000">Just configuring Emacs is such a subset of Lisp</span> <span class="audio-time caption" data-speaker="Philip" data-start="3332.787000" data-stop="3336.559000">as it's actually not programming Lisp.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3336.560000" data-stop="3341.004000">You can easily get by by just using add-hook, set</span> <span class="audio-time caption" data-speaker="Philip" data-start="3341.005000" data-stop="3345.359000">up or setq, and add to list or stuff like that.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3345.360000" data-stop="3347.919000">But you don't really have to understand.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3347.920000" data-stop="3350.959000">It's just a peculiar syntax for how to</span> <span class="audio-time caption" data-speaker="Philip" data-start="3350.960000" data-stop="3354.479000">program Lisp.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3354.000000">55:54</span> <strong>INI-style configuration</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="3354.480000" data-stop="3356.431000"><strong class="speaker-name">Philip:</strong> I'm not sure if either of you have seen, I wrote</span> <span class="audio-time caption" data-speaker="Philip" data-start="3356.432000" data-stop="3357.519000">a blog post</span> <span class="audio-time caption" data-speaker="Philip" data-start="3357.520000" data-stop="3362.083000">last March, no, not March, what's the name of</span> <span class="audio-time caption" data-speaker="Philip" data-start="3362.084000" data-stop="3363.199000">the month?</span> <span class="audio-time caption" data-speaker="Philip" data-start="3363.200000" data-stop="3368.185000">November, October or something, where I gave a</span> <span class="audio-time caption" data-speaker="Philip" data-start="3368.186000" data-stop="3375.279000">prototype for a INI-like configuration syntax.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3375.280000" data-stop="3377.445000"><strong class="speaker-name">Prot:</strong>  I must have read it, but I don't</span> <span class="audio-time caption" data-speaker="Prot" data-start="3377.446000" data-stop="3378.799000">remember it.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3378.800000" data-stop="3381.039000">You must have read it.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3381.040000" data-stop="3383.991000">Yeah, yeah, yeah, because I always read my feeds,</span> <span class="audio-time caption" data-speaker="Prot" data-start="3383.992000" data-stop="3387.679000">but now it doesn't ring a bell.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3387.680000" data-stop="3388.079000"><strong class="speaker-name">Philip:</strong>  Exactly.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3388.080000" data-stop="3391.167000">You see there's this basically a simplified</span> <span class="audio-time caption" data-speaker="Philip" data-start="3391.168000" data-stop="3394.418000">syntax, which should be... The idea was it should</span> <span class="audio-time caption" data-speaker="Philip" data-start="3394.419000" data-stop="3397.840000">follow a conventional configuration-like format,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3397.841000" data-stop="3401.380000">and each of these lines gets translated directly</span> <span class="audio-time caption" data-speaker="Philip" data-start="3401.381000" data-stop="3403.519000">to an Emacs Lisp expression.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3403.520000" data-stop="3407.222000">And due to this, I don't want to call it an</span> <span class="audio-time caption" data-speaker="Philip" data-start="3407.223000" data-stop="3411.132000">isomorphism, but the easy translation in both</span> <span class="audio-time caption" data-speaker="Philip" data-start="3411.133000" data-stop="3414.923000">directions, I think that the expectation of</span> <span class="audio-time caption" data-speaker="Philip" data-start="3414.924000" data-stop="3417.039000">saying write Emacs Lisp...</span> <span class="audio-time caption" data-speaker="Philip" data-start="3417.040000" data-stop="3420.930000">There has to be some defun or something if you're</span> <span class="audio-time caption" data-speaker="Philip" data-start="3420.931000" data-stop="3422.519000">writing Emacs Lisp.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3422.520000" data-stop="3425.519000">That's to exaggerate.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3425.520000" data-stop="3428.190000">If you're just writing setq, set, add-hook,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3428.191000" data-stop="3431.248000">add-to-list, these common configuration patterns,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3431.249000" data-stop="3434.325000">which are well worth documenting in the manual, to</span> <span class="audio-time caption" data-speaker="Philip" data-start="3434.326000" data-stop="3437.430000">understand what are the patterns that you have to</span> <span class="audio-time caption" data-speaker="Philip" data-start="3437.431000" data-stop="3440.393000">use to configure a package, even understanding</span> <span class="audio-time caption" data-speaker="Philip" data-start="3440.394000" data-stop="3441.359000">the signature...</span> <span class="audio-time caption" data-speaker="Philip" data-start="3441.360000" data-stop="3444.084000">The distinction between add-to-list and add-hook</span> <span class="audio-time caption" data-speaker="Philip" data-start="3444.085000" data-stop="3446.893000">is that hooks are lists which can have mode-local</span> <span class="audio-time caption" data-speaker="Philip" data-start="3446.894000" data-stop="3449.759000">extensions but also inherit from global settings.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3449.760000" data-stop="3453.319000">Not obvious from the beginning to everyone.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3453.320000" data-stop="3459.739000">This is not list programming.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3459.740000" data-stop="3461.119000"><strong class="speaker-name">Prot:</strong>  Yeah, fair enough.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3461.120000" data-stop="3464.447000">Though even then, they start to see the</span> <span class="audio-time caption" data-speaker="Prot" data-start="3464.448000" data-stop="3467.519000">parentheses, get used to the syntax.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3467.520000" data-stop="3470.399000">They have to remember to quote stuff.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3470.400000" data-stop="3475.055000">Even though it's not really programming, I see</span> <span class="audio-time caption" data-speaker="Prot" data-start="3475.056000" data-stop="3477.079000">what you're saying.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3477.080000" data-stop="3482.319000">They put themselves in the situation.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3482.320000" data-stop="3484.089000"><strong class="speaker-name">Philip:</strong>  One of the ideas precisely in the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3484.090000" data-stop="3487.796000">config syntax is that if you have an option like</span> <span class="audio-time caption" data-speaker="Philip" data-start="3487.797000" data-stop="3491.098000">set, you see the first line, set mode line</span> <span class="audio-time caption" data-speaker="Philip" data-start="3491.099000" data-stop="3492.199000">compact long.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3492.200000" data-stop="3493.359000">Long is a symbol.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3493.360000" data-stop="3497.039000">I just use regular read to read this, and it's</span> <span class="audio-time caption" data-speaker="Philip" data-start="3497.040000" data-stop="3498.239000">not evaluated.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3498.240000" data-stop="3501.368000">There's an option down there somewhere, I think,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3501.369000" data-stop="3504.335000">eval set, where the format expression is an S</span> <span class="audio-time caption" data-speaker="Philip" data-start="3504.336000" data-stop="3507.039000">expression that's evaluated to a string.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3507.040000" data-stop="3511.039000">So you have to opt into evaluation.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3511.040000" data-stop="3514.133000">which seems more intuitive to me for a regular</span> <span class="audio-time caption" data-speaker="Philip" data-start="3514.134000" data-stop="3518.267000">configuration when you're writing it, because all</span> <span class="audio-time caption" data-speaker="Philip" data-start="3518.268000" data-stop="3519.500000">these things... Like, I have to think about quoting.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3519.480000" data-stop="3521.920000">Then there's the issue like with</span> <span class="audio-time caption" data-speaker="Philip" data-start="3521.920000" data-stop="3526.760000">with-eval-after-load... Can I customize this</span> <span class="audio-time caption" data-speaker="Philip" data-start="3526.760000" data-stop="3528.720000">variable before the package is loaded, after the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3528.720000" data-stop="3530.880000">package is loaded? If it has, like... If you're adding</span> <span class="audio-time caption" data-speaker="Philip" data-start="3530.880000" data-stop="3532.633000">something to a list and the list has a default</span> <span class="audio-time caption" data-speaker="Philip" data-start="3532.634000" data-stop="3534.760000">value that you don't want to set the value of the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3534.760000" data-stop="3537.040000">default, don't want to add it to the list because</span> <span class="audio-time caption" data-speaker="Philip" data-start="3537.076000" data-stop="3539.479000">then it's not loaded, and it</span> <span class="audio-time caption" data-speaker="Philip" data-start="3539.480000" data-stop="3542.719000">could trigger a undefined variable signal.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3542.720000" data-stop="3546.052000">So these are other inconveniences that I don't, I</span> <span class="audio-time caption" data-speaker="Philip" data-start="3546.053000" data-stop="3548.997000">personally do not see any value in teaching</span> <span class="audio-time caption" data-speaker="Philip" data-start="3548.998000" data-stop="3552.316000">people or having people to deal with these sorts</span> <span class="audio-time caption" data-speaker="Philip" data-start="3552.317000" data-stop="3554.781000">of issues before they have any</span> <span class="audio-time caption" data-speaker="Philip" data-start="3554.782000" data-stop="3556.119000">broader intuition.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3556.120000" data-stop="3564.719000">Which is a very idiosyncratic take perhaps, but...</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3564.720000" data-stop="3566.059000"><strong class="speaker-name">Prot:</strong>  No, no, it's fair.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3566.060000" data-stop="3570.221000"><strong class="speaker-name">Philip:</strong>  What I'm trying to get at is this sort</span> <span class="audio-time caption" data-speaker="Philip" data-start="3570.222000" data-stop="3573.091000">of any configuration syntax would be something</span> <span class="audio-time caption" data-speaker="Philip" data-start="3573.092000" data-stop="3575.976000">that a UI could generate a lot easier and in a</span> <span class="audio-time caption" data-speaker="Philip" data-start="3575.977000" data-stop="3578.754000">way that wouldn't have this artificial split</span> <span class="audio-time caption" data-speaker="Philip" data-start="3578.755000" data-stop="3581.115000">between your own personal handcrafted</span> <span class="audio-time caption" data-speaker="Philip" data-start="3581.116000" data-stop="3583.646000">configuration and the generated part of</span> <span class="audio-time caption" data-speaker="Philip" data-start="3583.647000" data-stop="3588.299000">the configuration.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3588.300000" data-stop="3590.567000">Mechanically changing this, finding the section</span> <span class="audio-time caption" data-speaker="Philip" data-start="3590.568000" data-stop="3592.700000">package avy, because it has all of these</span> <span class="audio-time caption" data-speaker="Philip" data-start="3592.701000" data-stop="3594.648000">primitives which didn't exist early on in Emacs,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3594.649000" data-stop="3597.839000">like packages and features exist and so on.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3597.840000" data-stop="3601.363000">The sort of structure which use-package</span> <span class="audio-time caption" data-speaker="Philip" data-start="3601.364000" data-stop="3603.799000">usually provides.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3603.800000" data-stop="3605.086000"><strong class="speaker-name">Sacha:</strong>  I have about one minute before the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3605.087000" data-stop="3607.516000">kiddo starts on lunch break, so I'm going to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3607.517000" data-stop="3609.999000">interrupt a little bit and do a quick summary.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3610.000000" data-stop="3611.839000">But the two of you are welcome to keep hanging</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3611.840000" data-stop="3612.559000">out and chatting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3612.560000" data-stop="3614.959000">I'll leave the Big Blue Button room open.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3614.960000" data-stop="3618.044000">And if you want, I can set it up so people can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3618.045000" data-stop="3621.048000">join you, depending on your time, et cetera,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3621.049000" data-stop="3621.799000">et cetera.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3621.000000">1:00:21</span> <strong>Quick summary</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3621.800000" data-stop="3625.158000"><strong class="speaker-name">Sacha:</strong> But basically, what I'm getting for a quick</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3625.159000" data-stop="3628.491000">summary of the conversation: Emacs 31: the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3628.492000" data-stop="3630.079000">newcomer presets is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3630.080000" data-stop="3631.519000">work in progress.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3631.520000" data-stop="3634.334000">People are definitely open to improvements,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3634.335000" data-stop="3635.800000">ideas, other suggestions for other features.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3635.801000" data-stop="3637.067000">The kiddo is just running out now.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3637.068000" data-stop="3643.399000">I will put the chat in the thing.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3643.400000" data-stop="3646.320000"><strong class="speaker-name">Prot:</strong>  Yeah, of course, of course.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3646.321000" data-stop="3652.079000">That's fun.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3652.840000" data-stop="3661.859000">So, what's happened?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3661.860000" data-stop="3663.567000"><strong class="speaker-name">Sacha:</strong>  Do you want me to open up the chat</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3663.568000" data-stop="3664.200000">to everybody?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3664.201000" data-stop="3667.100000">Or do you have other things?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3667.080000" data-stop="3669.920000"><strong class="speaker-name">Prot:</strong>  Me, I can stay for another 20 minutes.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3669.920000" data-stop="3671.680000">Just to say I can stay for another 20 minutes</span> <span class="audio-time caption" data-speaker="Prot" data-start="3671.680000" data-stop="3674.040000">because then I have to take the dog.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3674.040000" data-stop="3674.880000"><strong class="speaker-name">Sacha:</strong>  Yeah, and Phil?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3674.880000" data-stop="3677.460000">Oh, you have to leave.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3677.461000" data-stop="3679.280000"><strong class="speaker-name">Philip:</strong>  20 minutes is fine.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3679.280000" data-stop="3680.880000">20 minutes is fine for me as well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3680.880000" data-stop="3682.240000"><strong class="speaker-name">Sacha:</strong>  Okay, okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3682.280000" data-stop="3684.885000">I will put the thing in the chat and people can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3684.886000" data-stop="3687.159000">continue because the kiddo was like, ah!</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3687.160000" data-stop="3688.039000">Okay, yes.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3688.040000" data-stop="3689.959000"><strong class="speaker-name">Prot:</strong>  Okay, okay, okay.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3689.960000" data-stop="3690.159000">Good.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3690.160000" data-stop="3692.359000">So, yeah, of course, there is a chat going.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3692.360000" data-stop="3694.079000">Yeah, let's see.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3694.080000" data-stop="3696.599000">So, Sacha, you will link it there.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3696.600000" data-stop="3701.139000">Ah, nice.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3701.140000" data-stop="3703.264000"><strong class="speaker-name">Philip:</strong>  So, I presume there has been an</span> <span class="audio-time caption" data-speaker="Philip" data-start="3703.265000" data-stop="3706.439000">idea of people watching this.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3707.960000" data-stop="3710.433000"><strong class="speaker-name">Prot:</strong>  So this is live.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3710.434000" data-stop="3713.861000"><strong class="speaker-name">Sacha:</strong>  And I can copy the chat thus far since</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3713.862000" data-stop="3716.919000">we didn't even get to any other questions.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3716.920000" data-stop="3717.879000">Hang on a second.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3717.880000" data-stop="3719.579000">Where am I even?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3719.580000" data-stop="3721.879000"><strong class="speaker-name">Prot:</strong>  We're trying to deal with those, right?</span> <span class="audio-time caption" data-speaker="Prot" data-start="3721.880000" data-stop="3725.599000">Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3725.600000" data-stop="3728.000000">Well, eventually to have a discussion and also</span> <span class="audio-time caption" data-speaker="Prot" data-start="3728.001000" data-stop="3730.600000">take questions, eventually you need to have more</span> <span class="audio-time caption" data-speaker="Prot" data-start="3730.601000" data-stop="3731.433000">time, I guess.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3731.434000" data-stop="3732.119000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3732.120000" data-stop="3735.899000">But thank you all so much.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3735.900000" data-stop="3736.599000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3736.600000" data-stop="3736.959000">That's good.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3736.960000" data-stop="3737.759000">Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3737.760000" data-stop="3740.479000">Thank you, Sacha.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3740.480000" data-stop="3741.239000">Thank you very much.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3741.240000" data-stop="3747.539000">And of course, the kiddo overrides all.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3747.000000">1:02:27</span> <strong>Continuing with INI</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="3747.540000" data-stop="3749.100000"><strong class="speaker-name">Prot:</strong> That thing with the INI, I think it's</span> <span class="audio-time caption" data-speaker="Prot" data-start="3749.101000" data-stop="3749.679000">very promising.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3749.680000" data-stop="3751.779000">I mean, if you flesh that out.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3751.780000" data-stop="3755.367000">Because the other thing is, yeah, with the</span> <span class="audio-time caption" data-speaker="Prot" data-start="3755.368000" data-stop="3759.133000">INI configuration, because what would be, though,</span> <span class="audio-time caption" data-speaker="Prot" data-start="3759.134000" data-stop="3761.633000">the fate of what is now added, you know, when you</span> <span class="audio-time caption" data-speaker="Prot" data-start="3761.634000" data-stop="3764.400000">modify something and it adds this, you know, this</span> <span class="audio-time caption" data-speaker="Prot" data-start="3764.401000" data-stop="3766.157000">has been set by Custom, do not touch it kind</span> <span class="audio-time caption" data-speaker="Prot" data-start="3766.158000" data-stop="3766.799000">of thing.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3766.800000" data-stop="3769.299000">You know what I'm talking about, right?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3769.300000" data-stop="3771.967000"><strong class="speaker-name">Philip:</strong>  Yeah, you mean the generated user glob.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3771.968000" data-stop="3774.788000">Well, my idea, or if I were, if I had</span> <span class="audio-time caption" data-speaker="Philip" data-start="3774.789000" data-stop="3780.454000">the time /motivation/whatever to flesh this out,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3780.455000" data-stop="3781.439000">because currently it works...</span> <span class="audio-time caption" data-speaker="Philip" data-start="3781.440000" data-stop="3783.879000">Currently it's an actually existing Elisp file</span> <span class="audio-time caption" data-speaker="Philip" data-start="3783.880000" data-stop="3786.507000">which you could use, but I think it would be most</span> <span class="audio-time caption" data-speaker="Philip" data-start="3786.508000" data-stop="3788.599000">interesting if it would be upstreamed.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3788.600000" data-stop="3791.410000">It would sort of be like, if you don't have</span> <span class="audio-time caption" data-speaker="Philip" data-start="3791.411000" data-stop="3794.310000">a .el file, Emacs would look for it</span> <span class="audio-time caption" data-speaker="Philip" data-start="3794.311000" data-stop="3796.733000">.ini file,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3796.734000" data-stop="3799.067000">or emacs.ini file or something like that.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3799.068000" data-stop="3802.733000">Then, of course, you can check, like, does the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3802.734000" data-stop="3804.799000">INI file exist or does the .el file exist?</span> <span class="audio-time caption" data-speaker="Philip" data-start="3804.800000" data-stop="3807.733000">Probably there would be a user option to select</span> <span class="audio-time caption" data-speaker="Philip" data-start="3807.734000" data-stop="3810.479000">into which it would inject the new options.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3810.480000" data-stop="3814.034000">And by default, it would select, for example, if</span> <span class="audio-time caption" data-speaker="Philip" data-start="3814.035000" data-stop="3817.204000">the INI file exists, then it would use the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3817.205000" data-stop="3817.959000">INI file.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3817.960000" data-stop="3822.113000">But there is some controversy to this, because I</span> <span class="audio-time caption" data-speaker="Philip" data-start="3822.114000" data-stop="3824.067000">totally understand the sentiment we're coming</span> <span class="audio-time caption" data-speaker="Philip" data-start="3824.068000" data-stop="3825.867000">from with...</span> <span class="audio-time caption" data-speaker="Philip" data-start="3825.868000" data-stop="3831.279000">You're using Emacs, so you have to learn Lisp.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3831.280000" data-stop="3834.775000">But for me, the bar is a bit higher than just the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3834.776000" data-stop="3838.199000">inconvenience of writing out this more or less.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3838.200000" data-stop="3844.519000">It's, as Joel Sussman referred to it, this</span> <span class="audio-time caption" data-speaker="Philip" data-start="3844.520000" data-stop="3846.359000">ritualistic Lisp.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3846.360000" data-stop="3849.210000">You always have to repeat the same stuff all over</span> <span class="audio-time caption" data-speaker="Philip" data-start="3849.211000" data-stop="3851.479000">again, like with eval, afterload, set.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3851.480000" data-stop="3854.037000">add-to-list, then you have to quote the option in</span> <span class="audio-time caption" data-speaker="Philip" data-start="3854.038000" data-stop="3854.559000">one case.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3854.560000" data-stop="3856.859000">And if you change something in a map, then you</span> <span class="audio-time caption" data-speaker="Philip" data-start="3856.860000" data-stop="3857.959000">don't have to add it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3857.960000" data-stop="3860.067000">And of course, if you know Lisp, then you know</span> <span class="audio-time caption" data-speaker="Philip" data-start="3860.068000" data-stop="3865.467000">that in one case, a keymap is a cons cell, so</span> <span class="audio-time caption" data-speaker="Philip" data-start="3865.468000" data-stop="3867.200000">you're actually modifying the rest of the cons cell.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3867.201000" data-stop="3868.333000">That's why you don't need to quote it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3868.334000" data-stop="3869.933000">But in the other case, you're accessing it via</span> <span class="audio-time caption" data-speaker="Philip" data-start="3869.934000" data-stop="3871.133000">symbols, so you need to quote it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3871.134000" data-stop="3875.959000">But this is all technical details.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3875.960000" data-stop="3877.479000">There's no necessity in it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3877.480000" data-stop="3880.719000">It doesn't have to be that way.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3880.720000" data-stop="3881.956000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah, yeah, that's fair, that's fair,</span> <span class="audio-time caption" data-speaker="Prot" data-start="3881.957000" data-stop="3882.939000">of course.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3882.000000">1:04:42</span> <strong>Motivation</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="3882.940000" data-stop="3885.576000"><strong class="speaker-name">Philip:</strong>  One thing I wanted to bring up in the discussion</span> <span class="audio-time caption" data-speaker="Philip" data-start="3885.577000" data-stop="3888.480000">when we were talking about reverence was there</span> <span class="audio-time caption" data-speaker="Philip" data-start="3888.481000" data-stop="3891.399000">is, I mean, one part of the thing that gave me</span> <span class="audio-time caption" data-speaker="Philip" data-start="3891.400000" data-stop="3894.530000">the motivation to go through with learning Emacs,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3894.531000" data-stop="3897.629000">even though I didn't use the tutorial initially,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3897.630000" data-stop="3900.599000">was sort of a reputation I heard about Emacs.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3900.600000" data-stop="3902.595000">And the videos I saw, wow, you can do these</span> <span class="audio-time caption" data-speaker="Philip" data-start="3902.596000" data-stop="3903.199000">cool things.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3903.200000" data-stop="3907.519000">And this motivation, this image I had of Emacs</span> <span class="audio-time caption" data-speaker="Philip" data-start="3907.520000" data-stop="3912.088000">help me go through, but if you overshoot this</span> <span class="audio-time caption" data-speaker="Philip" data-start="3912.080000" data-stop="3914.680000">approach, then people expect too much in the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3914.680000" data-stop="3916.560000">beginning and are disappointed in the end and</span> <span class="audio-time caption" data-speaker="Philip" data-start="3916.560000" data-stop="3920.880000">don't pull through.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3920.901000" data-stop="3927.769000">There's this question of having, how's it called,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3927.770000" data-stop="3929.119000">the ??...</span> <span class="audio-time caption" data-speaker="Philip" data-start="3929.120000" data-stop="3932.732000">How to motivate people enough to be interested in</span> <span class="audio-time caption" data-speaker="Philip" data-start="3932.733000" data-stop="3935.662000">Emacs, to actually learn it, but not to</span> <span class="audio-time caption" data-speaker="Philip" data-start="3935.663000" data-stop="3936.639000">oversell it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3936.640000" data-stop="3939.595000">If you give some sort of a demo of using Emacs,</span> <span class="audio-time caption" data-speaker="Philip" data-start="3939.596000" data-stop="3942.389000">which is simply not representative of how it</span> <span class="audio-time caption" data-speaker="Philip" data-start="3942.390000" data-stop="3945.166000">actually works, then that's something which</span> <span class="audio-time caption" data-speaker="Philip" data-start="3945.167000" data-stop="3946.199000">would backfire.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3946.200000" data-stop="3948.459000">But I guess we can take a look at the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3948.460000" data-stop="3949.559000">questions, right?</span> <span class="audio-time caption" data-speaker="Philip" data-start="3949.560000" data-stop="3950.959000">Yeah, let's see.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3950.960000" data-stop="3952.859000">Let's see.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3952.860000" data-stop="3953.839000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3953.840000" data-stop="3954.999000">So yeah, I didn't read them.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3955.000000" data-stop="3957.541000">I had the chat open, but I didn't have</span> <span class="audio-time caption" data-speaker="Prot" data-start="3957.542000" data-stop="3958.759000">the time to read them.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3958.760000" data-stop="3961.139000">Sorry?</span> <span class="audio-time caption" data-speaker="Prot" data-start="3961.140000" data-stop="3963.400000"></span> <span class="audio-time caption" data-speaker="Prot" data-start="3963.401000" data-stop="3965.859000">Is this from top to bottom?</span> <span class="audio-time caption" data-speaker="Prot" data-start="3965.860000" data-stop="3968.676000"></span> <span class="audio-time caption" data-speaker="Prot" data-start="3968.677000" data-stop="3970.519000">arrived in the chat.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3970.520000" data-stop="3974.159000">The top is the earliest.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3974.160000" data-stop="3976.319000"><strong class="speaker-name">Philip:</strong>  The usernames are mentioned below.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3976.320000" data-stop="3978.559000"><strong class="speaker-name">Prot:</strong>  I guess that's a copy-paste thing.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3978.560000" data-stop="3980.239000">Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3980.240000" data-stop="3986.079000">So there are some...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3986.080000" data-stop="3989.919000"><strong class="speaker-name">Sacha:</strong>  I gave the kiddo some packed lunch, so I'm back.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3989.920000" data-stop="3992.619000"><strong class="speaker-name">Prot:</strong>  Oh, hello there!</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3992.620000" data-stop="3994.471000"><strong class="speaker-name">Philip:</strong>  We were just wondering about how to</span> <span class="audio-time caption" data-speaker="Philip" data-start="3994.472000" data-stop="3996.119000">read the comments you posted.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3996.120000" data-stop="3999.279000">Maybe you have a better UI.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3999.280000" data-stop="4001.599000"><strong class="speaker-name">Sacha:</strong>  I pasted them into the chat.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4001.600000" data-stop="4003.393000">So in the Big Blue Button...</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4003.394000" data-stop="4005.939000"><strong class="speaker-name">Philip:</strong>  But that's the order of occurrence?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4005.940000" data-stop="4007.719000"><strong class="speaker-name">Sacha:</strong>  That's order of occurrence.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4007.720000" data-stop="4010.210000">It's totally not very... It's just like a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4010.211000" data-stop="4010.879000">big paste.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4010.000000">1:06:50</span> <strong>Politics and philosophy</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="4010.880000" data-stop="4014.559000"><strong class="speaker-name">Prot:</strong>  While you read it, let me...</span> <span class="audio-time caption" data-speaker="Prot" data-start="4014.560000" data-stop="4019.878000">Yeah, there is a comment there from LC2000 about</span> <span class="audio-time caption" data-speaker="Prot" data-start="4019.879000" data-stop="4025.371000">the splash screen having a lot of emphasis on the</span> <span class="audio-time caption" data-speaker="Prot" data-start="4025.372000" data-stop="4029.519000">legal side, which is a fair comment.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4029.520000" data-stop="4032.068000">I think the legal side is important though,</span> <span class="audio-time caption" data-speaker="Prot" data-start="4032.069000" data-stop="4034.990000">because of course, free software and all that, but</span> <span class="audio-time caption" data-speaker="Prot" data-start="4034.991000" data-stop="4037.738000">of course, it could be rearranged. So maybe you</span> <span class="audio-time caption" data-speaker="Prot" data-start="4037.739000" data-stop="4040.743000">don't want to have it at the top front and center,</span> <span class="audio-time caption" data-speaker="Prot" data-start="4040.744000" data-stop="4043.579000">you want to have it further down. Maybe. I don't</span> <span class="audio-time caption" data-speaker="Prot" data-start="4043.580000" data-stop="4046.434000">know. I don't have a strong opinion, but I think</span> <span class="audio-time caption" data-speaker="Prot" data-start="4046.435000" data-stop="4049.380000">the legal side is it should be there at some</span> <span class="audio-time caption" data-speaker="Prot" data-start="4049.381000" data-stop="4051.553000">point. I feel like it's a political</span> <span class="audio-time caption" data-speaker="Prot" data-start="4051.554000" data-stop="4055.379000">minefield though.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4055.380000" data-stop="4056.233000"><strong class="speaker-name">Sacha:</strong>  Just leave that alone.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4056.234000" data-stop="4058.679000">Otherwise: 200 comments on emacs-devel,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4058.680000" data-stop="4063.779000">one of those really long threads.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4063.780000" data-stop="4066.756000"><strong class="speaker-name">Philip:</strong>  I cannot under-emphasize how surprised</span> <span class="audio-time caption" data-speaker="Philip" data-start="4066.757000" data-stop="4070.845000">I was when my suggestion to add a checkbox on the</span> <span class="audio-time caption" data-speaker="Philip" data-start="4070.846000" data-stop="4073.599000">splash screen just went through.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4073.600000" data-stop="4077.929000">Because I expected people to object, no, we can't</span> <span class="audio-time caption" data-speaker="Philip" data-start="4077.930000" data-stop="4081.199000">add it there because of some system.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4081.200000" data-stop="4083.551000">It wouldn't look the way it should look and that</span> <span class="audio-time caption" data-speaker="Philip" data-start="4083.552000" data-stop="4085.119000">would be confusing or whatever.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4085.120000" data-stop="4089.119000">But apparently change is possible.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4089.120000" data-stop="4093.659000">You have to be careful and be patient.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4093.660000" data-stop="4095.437000"><strong class="speaker-name">Prot:</strong>  And I guess here there is an</span> <span class="audio-time caption" data-speaker="Prot" data-start="4095.438000" data-stop="4096.999000">assumption, right?</span> <span class="audio-time caption" data-speaker="Prot" data-start="4097.000000" data-stop="4099.979000">There is also an assumption that people will</span> <span class="audio-time caption" data-speaker="Prot" data-start="4099.980000" data-stop="4102.079000">attack you or be unreasonable.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4102.080000" data-stop="4104.959000">And I think this is not true.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4104.960000" data-stop="4106.599000">You mentioned it earlier as well.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4106.600000" data-stop="4109.377000">Eventually you have to get on the mailing list</span> <span class="audio-time caption" data-speaker="Prot" data-start="4109.378000" data-stop="4112.242000">because people, if they don't hear the opinion,</span> <span class="audio-time caption" data-speaker="Prot" data-start="4112.243000" data-stop="4115.281000">the counterpoint, they will never know what to do</span> <span class="audio-time caption" data-speaker="Prot" data-start="4115.282000" data-stop="4116.799000">with it.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4116.800000" data-stop="4118.538000"><strong class="speaker-name">Philip:</strong>  But it's not entirely unreasonable</span> <span class="audio-time caption" data-speaker="Philip" data-start="4118.539000" data-stop="4121.429000">because there are discussions that can be... There</span> <span class="audio-time caption" data-speaker="Philip" data-start="4121.430000" data-stop="4123.839000">are people on emacs-devel, it's sad to admit it, but</span> <span class="audio-time caption" data-speaker="Philip" data-start="4123.840000" data-stop="4127.306000">there are people who voice strong opinions, like</span> <span class="audio-time caption" data-speaker="Philip" data-start="4127.307000" data-stop="4130.235000">strong opinions, with no power behind them, which</span> <span class="audio-time caption" data-speaker="Philip" data-start="4130.236000" data-stop="4133.122000">can scare people away because there's no... There</span> <span class="audio-time caption" data-speaker="Philip" data-start="4133.123000" data-stop="4135.914000">are no tags. There's no index of</span> <span class="audio-time caption" data-speaker="Philip" data-start="4135.915000" data-stop="4141.499000">people on emacs-devel, so you don't know if some</span> <span class="audio-time caption" data-speaker="Philip" data-start="4141.500000" data-stop="4143.900000">John Doe responding to your message, if he's</span> <span class="audio-time caption" data-speaker="Philip" data-start="4143.901000" data-stop="4146.615000">actually responsible for this and makes a</span> <span class="audio-time caption" data-speaker="Philip" data-start="4146.616000" data-stop="4150.873000">decision, or if it's if Eli is sending a message</span> <span class="audio-time caption" data-speaker="Philip" data-start="4150.874000" data-stop="4154.656000">and his decision on the discussion actually</span> <span class="audio-time caption" data-speaker="Philip" data-start="4154.657000" data-stop="4163.479000">weighs a lot more than other matters.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4163.000000">1:09:23</span> <strong>Experimenting with things outside core</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4163.480000" data-stop="4166.233000"><strong class="speaker-name">Sacha:</strong>  I feel like sometimes experimenting with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4166.234000" data-stop="4168.933000">newbie-focused resources, like the unofficial</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4168.934000" data-stop="4172.233000">ones that are around... At least we can try the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4172.234000" data-stop="4175.600000">ideas out and then say, hey, here's the patch and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4175.601000" data-stop="4178.704000">also here's what people have been using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4178.705000" data-stop="4182.839000">it for, so you can see it a bit more concretely,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4182.840000" data-stop="4185.961000">than dropping an idea into the discussion and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4185.962000" data-stop="4189.130000">then having the whole bike-shedding happening</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4189.131000" data-stop="4191.299000">without as much data.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4191.300000" data-stop="4193.759000"><strong class="speaker-name">Philip:</strong>  That's seriously my main recommendation.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4193.760000" data-stop="4196.287000">If you want to propose something, add a</span> <span class="audio-time caption" data-speaker="Philip" data-start="4196.288000" data-stop="4199.378000">prototype, add a patch, add something to narrow</span> <span class="audio-time caption" data-speaker="Philip" data-start="4199.379000" data-stop="4200.759000">down the discussion.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4200.760000" data-stop="4203.808000">That's something people would take away from this</span> <span class="audio-time caption" data-speaker="Philip" data-start="4203.809000" data-stop="4206.619000">discussion, from my experience.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4206.620000" data-stop="4207.839000"><strong class="speaker-name">Prot:</strong>  I 100% agree.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4207.840000" data-stop="4209.919000">I think that's the way to go.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4209.920000" data-stop="4212.706000">Just implement something so that it focuses</span> <span class="audio-time caption" data-speaker="Prot" data-start="4212.707000" data-stop="4213.679000">the attention.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4213.680000" data-stop="4216.012000">Otherwise, you will get those endless discussions</span> <span class="audio-time caption" data-speaker="Prot" data-start="4216.013000" data-stop="4217.419000">very quickly.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4217.420000" data-stop="4220.857000"><strong class="speaker-name">Sacha:</strong>  Or try it as a package first, and then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4220.858000" data-stop="4223.259000">it can be core.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4223.260000" data-stop="4224.339000"><strong class="speaker-name">Philip:</strong>  Excuse me?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4224.340000" data-stop="4226.519000"><strong class="speaker-name">Sacha:</strong>  Oh, I was thinking if it's possible to prototype</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4226.520000" data-stop="4228.848000">something as a package,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4228.849000" data-stop="4230.833000">now that Emacs has made it a lot easier for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4230.800000" data-stop="4235.640000">people to install packages, then at least it can be tested</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4235.640000" data-stop="4238.720000">before having all the conversations about whether it should</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4238.720000" data-stop="4240.367000">be as part of core</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4240.368000" data-stop="4242.200000">or part of the splash screen or everything else.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4242.000000">1:10:42</span> <strong>Extending the core</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="4242.960000" data-stop="4245.500000"><strong class="speaker-name">Philip:</strong>  The counter tendency I feel obliged to</span> <span class="audio-time caption" data-speaker="Philip" data-start="4245.501000" data-stop="4248.833000">mention is that many times proposing something as</span> <span class="audio-time caption" data-speaker="Philip" data-start="4248.834000" data-stop="4252.333000">a package or as an extension to the core can</span> <span class="audio-time caption" data-speaker="Philip" data-start="4252.334000" data-stop="4254.239000">actually simplify the implementation vastly.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4254.240000" data-stop="4257.994000">Especially if you need to make one or two twists</span> <span class="audio-time caption" data-speaker="Philip" data-start="4257.995000" data-stop="4261.080000">upstream and you need something like an</span> <span class="audio-time caption" data-speaker="Philip" data-start="4261.081000" data-stop="4264.879000">additional hook or something to exist upstream.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4264.880000" data-stop="4267.076000">If it's a package in the core, then it's a lot</span> <span class="audio-time caption" data-speaker="Philip" data-start="4267.077000" data-stop="4268.926000">easier to explain why you have to make</span> <span class="audio-time caption" data-speaker="Philip" data-start="4268.927000" data-stop="4269.559000">this change than</span> <span class="audio-time caption" data-speaker="Philip" data-start="4269.560000" data-stop="4271.802000">having to deal with some sort of advice and</span> <span class="audio-time caption" data-speaker="Philip" data-start="4271.803000" data-stop="4273.159000">changing a lot of things.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4273.160000" data-stop="4276.507000">There was a certain tendency during the</span> <span class="audio-time caption" data-speaker="Philip" data-start="4276.508000" data-stop="4280.799000">mid-2010s, which I only know from history, was to</span> <span class="audio-time caption" data-speaker="Philip" data-start="4280.800000" data-stop="4284.537000">re-implement a lot of stuff in logs, in packages,</span> <span class="audio-time caption" data-speaker="Philip" data-start="4284.538000" data-stop="4287.359000">instead of working on them upstream.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4287.360000" data-stop="4289.412000">That created a lot of divergence</span> <span class="audio-time caption" data-speaker="Philip" data-start="4289.413000" data-stop="4290.439000">between packages,</span> <span class="audio-time caption" data-speaker="Philip" data-start="4290.440000" data-stop="4293.088000">and in my opinion, complicated</span> <span class="audio-time caption" data-speaker="Philip" data-start="4293.089000" data-stop="4295.596000">things because it introduces this entire</span> <span class="audio-time caption" data-speaker="Philip" data-start="4295.597000" data-stop="4296.599000">choice fatigue.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4296.600000" data-stop="4297.719000">Should I use Flymake?</span> <span class="audio-time caption" data-speaker="Philip" data-start="4297.720000" data-stop="4298.639000">Should I use Flycheck?</span> <span class="audio-time caption" data-speaker="Philip" data-start="4298.640000" data-stop="4300.279000">Should I use LSP mode?</span> <span class="audio-time caption" data-speaker="Philip" data-start="4300.280000" data-stop="4301.039000">Should I use Eglot?</span> <span class="audio-time caption" data-speaker="Philip" data-start="4301.040000" data-stop="4303.099000">Which is not a historically accurate example in</span> <span class="audio-time caption" data-speaker="Philip" data-start="4303.100000" data-stop="4304.239000">the stats that I'm given,</span> <span class="audio-time caption" data-speaker="Philip" data-start="4304.240000" data-stop="4309.599000">But I'm certainly in favor of at least considering</span> <span class="audio-time caption" data-speaker="Philip" data-start="4309.600000" data-stop="4312.039000">upstream contributions.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4312.000000">1:11:52</span> <strong>Guide to contributing to ELPA
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience-01-12-27-567.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/ye29-prot-and-pkal-emacs-newcomer-experience-01-12-27-567.jpg" alt="image from video 01:12:27.567" data-time="01:12:27.567"></a><span class="audio-time caption" data-speaker="Philip" data-start="4312.040000" data-stop="4315.375000"><strong class="speaker-name">Philip:</strong> Even like packages, of course, it's the way we</span> <span class="audio-time caption" data-speaker="Philip" data-start="4315.376000" data-stop="4318.506000">recently published these guidelines, or not</span> <span class="audio-time caption" data-speaker="Philip" data-start="4318.507000" data-stop="4322.090000">guidelines, this contribution guide to publishing</span> <span class="audio-time caption" data-speaker="Philip" data-start="4322.091000" data-stop="4325.402000">packages on ELPA, which is on, if you want to</span> <span class="audio-time caption" data-speaker="Philip" data-start="4325.403000" data-stop="4328.371000">open it in the browser, it's on the ELPA</span> <span class="audio-time caption" data-speaker="Philip" data-start="4328.372000" data-stop="4332.054000">homepage, which lists sort of these hard criteria</span> <span class="audio-time caption" data-speaker="Philip" data-start="4332.055000" data-stop="4335.019000">which we require from ELPA.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4335.020000" data-stop="4337.359000">Just elpa.gnu.org, yeah, it's...</span> <span class="audio-time caption" data-speaker="Philip" data-start="4337.360000" data-stop="4341.679000">That's going to be a link to the page.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4341.680000" data-stop="4344.879000"><strong class="speaker-name">Sacha:</strong>  Yeah, this is pretty recent.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4344.880000" data-stop="4346.633000"><strong class="speaker-name">Philip:</strong>  This is recent, and then there's a list</span> <span class="audio-time caption" data-speaker="Philip" data-start="4346.634000" data-stop="4347.559000">of suggestions.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4347.560000" data-stop="4350.759000">But this is getting off the actual point.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4350.760000" data-stop="4354.600000">I'm just saying that relating to the general</span> <span class="audio-time caption" data-speaker="Philip" data-start="4354.601000" data-stop="4360.100000">point, my experience is that proposing something</span> <span class="audio-time caption" data-speaker="Philip" data-start="4360.101000" data-stop="4363.208000">concrete but also be open to hearing the opinions</span> <span class="audio-time caption" data-speaker="Philip" data-start="4363.209000" data-stop="4364.639000">of other people</span> <span class="audio-time caption" data-speaker="Philip" data-start="4364.640000" data-stop="4368.137000">These are the two necessary but maybe not always</span> <span class="audio-time caption" data-speaker="Philip" data-start="4368.138000" data-stop="4370.811000">sufficient ingredients to making the</span> <span class="audio-time caption" data-speaker="Philip" data-start="4370.812000" data-stop="4373.179000">changing stuff.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4373.180000" data-stop="4376.167000">Because if you just say, I want this to be</span> <span class="audio-time caption" data-speaker="Philip" data-start="4376.168000" data-stop="4377.057000">different but don't put in the work, then</span> <span class="audio-time caption" data-speaker="Philip" data-start="4377.058000" data-stop="4378.959000">everyone's going to forget it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4378.960000" data-stop="4381.256000">But if you propose something and then insist that</span> <span class="audio-time caption" data-speaker="Philip" data-start="4381.257000" data-stop="4383.490000">it has to be exactly this way, then you're just</span> <span class="audio-time caption" data-speaker="Philip" data-start="4383.491000" data-stop="4384.679000">creating social tension.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4384.680000" data-stop="4391.419000">Maybe missing out on interesting things.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4391.000000">1:13:11</span> <strong>Making the newcomer experience better</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4391.420000" data-stop="4393.500000"><strong class="speaker-name">Sacha:</strong>  And especially since people are using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4393.501000" data-stop="4395.967000">Emacs for so many different reasons and coming</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4395.968000" data-stop="4398.500000">from so many different backgrounds, what you are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4398.501000" data-stop="4400.459000">very firmly committed to might very well work for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4400.460000" data-stop="4403.348000">one set of people, but will run into these issues</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4403.349000" data-stop="4404.999000">for all these other people.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4405.000000" data-stop="4407.490000">So if we want to bring it back to this, you know,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4407.491000" data-stop="4409.879000">how do we make the newcomer experience better?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4409.880000" data-stop="4412.813000">It's great that in core, there's starting to be a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4412.814000" data-stop="4415.534000">little bit more infrastructure for supporting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4415.535000" data-stop="4417.939000">things like sets of reasonable defaults</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4417.940000" data-stop="4418.679000">for people.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4418.680000" data-stop="4421.888000">And maybe we as a community need to figure out,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4421.889000" data-stop="4424.673000">all right, how do we write documentation</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4424.674000" data-stop="4425.439000">around it?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4425.440000" data-stop="4426.959000">How do we make tutorial videos?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4426.960000" data-stop="4430.211000">How do we encapsulate, okay, this is what this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4430.212000" data-stop="4433.628000">typical newcomer experience is like for this set</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4433.629000" data-stop="4437.081000">of people and maybe these options or packages or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4437.082000" data-stop="4440.319000">a glue code might be helpful for this group?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4440.320000" data-stop="4445.659000">Maybe.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4445.660000" data-stop="4448.182000"><strong class="speaker-name">Prot:</strong>  Yeah, like in theory, you can imagine something</span> <span class="audio-time caption" data-speaker="Prot" data-start="4448.183000" data-stop="4450.920000">like, if you are a Python developer, here is your</span> <span class="audio-time caption" data-speaker="Prot" data-start="4450.921000" data-stop="4453.616000">Python presets theme. If you are doing</span> <span class="audio-time caption" data-speaker="Prot" data-start="4453.617000" data-stop="4456.336000">Org or whatever, here is your LaTeX and friends,</span> <span class="audio-time caption" data-speaker="Prot" data-start="4456.337000" data-stop="4459.038000">right, and you could also have extensions like</span> <span class="audio-time caption" data-speaker="Prot" data-start="4459.039000" data-stop="4461.779000">that in the future.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4461.780000" data-stop="4464.419000"><strong class="speaker-name">Philip:</strong>  I mean nothing about the idea is... It</span> <span class="audio-time caption" data-speaker="Philip" data-start="4464.420000" data-stop="4468.599000">could have been used as a package people can</span> <span class="audio-time caption" data-speaker="Philip" data-start="4468.600000" data-stop="4470.319000">load otherwise.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4470.000000">1:14:30</span> <strong>"user option themes" versus "appearance themes"</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="4470.320000" data-stop="4473.212000"><strong class="speaker-name">Philip:</strong>  And hopefully, as I said, there is</span> <span class="audio-time caption" data-speaker="Philip" data-start="4473.213000" data-stop="4476.399000">certainly additional work which can be put in to</span> <span class="audio-time caption" data-speaker="Philip" data-start="4476.400000" data-stop="4479.719000">support making user option themes better supported.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4479.720000" data-stop="4482.377000">I think one of the things that will be useful is</span> <span class="audio-time caption" data-speaker="Philip" data-start="4482.378000" data-stop="4485.004000">actually referring to them just in nomenclature</span> <span class="audio-time caption" data-speaker="Philip" data-start="4485.005000" data-stop="4487.452000">points as user option themes to distinguish</span> <span class="audio-time caption" data-speaker="Philip" data-start="4487.453000" data-stop="4488.839000">them from.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4488.840000" data-stop="4489.700000"><strong class="speaker-name">Sacha:</strong>  From themes.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4489.701000" data-stop="4491.239000"><strong class="speaker-name">Prot:</strong>  From color themes, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4491.240000" data-stop="4493.279000"><strong class="speaker-name">Philip:</strong>  Color themes, yeah.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4493.280000" data-stop="4496.278000">We even introduced the distinction that themes have</span> <span class="audio-time caption" data-speaker="Philip" data-start="4496.279000" data-stop="4498.039000">kinds since like Emacs 20.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4498.040000" data-stop="4501.459000"><strong class="speaker-name">Prot:</strong>  29, I think.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4501.460000" data-stop="4502.039000"><strong class="speaker-name">Philip:</strong>  29.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4502.600000" data-stop="4506.639000"><strong class="speaker-name">Prot:</strong>  I think you did that, right?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4506.640000" data-stop="4509.639000"><strong class="speaker-name">Philip:</strong>  I think I worked on a patch.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4509.640000" data-stop="4511.918000">But that was exactly, I mean, that was already</span> <span class="audio-time caption" data-speaker="Philip" data-start="4511.919000" data-stop="4514.015000">where the seeds for the current theme were</span> <span class="audio-time caption" data-speaker="Philip" data-start="4514.016000" data-stop="4516.491000">started, because we wanted to distinguish between</span> <span class="audio-time caption" data-speaker="Philip" data-start="4516.492000" data-stop="4518.159000">these different kinds of things.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4518.160000" data-stop="4523.059000">Were there any other questions?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4523.060000" data-stop="4524.199000"><strong class="speaker-name">Prot:</strong>  I don't think so.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4524.000000">1:15:24</span> <strong>find-library</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="4524.200000" data-stop="4527.399000"><strong class="speaker-name">Prot:</strong> But yeah, as we saw now with the find-library</span> <span class="audio-time caption" data-speaker="Prot" data-start="4527.400000" data-stop="4530.916000">that Sacha did in the beginning, it would be nice</span> <span class="audio-time caption" data-speaker="Prot" data-start="4530.917000" data-stop="4534.129000">to also eventually be able to find the theme</span> <span class="audio-time caption" data-speaker="Prot" data-start="4534.130000" data-stop="4535.079000">or whatever.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4535.080000" data-stop="4537.319000">Maybe it's a different find-theme,</span> <span class="audio-time caption" data-speaker="Prot" data-start="4537.320000" data-stop="4541.839000">if for whatever reason it cannot be find-library.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4541.840000" data-stop="4543.910000"><strong class="speaker-name">Philip:</strong>  That's actually no reason why that</span> <span class="audio-time caption" data-speaker="Philip" data-start="4543.911000" data-stop="4545.959000">shouldn't be the case.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4545.960000" data-stop="4548.729000">I mean, you could just extend the logic to not</span> <span class="audio-time caption" data-speaker="Philip" data-start="4548.730000" data-stop="4551.439000">only consider the load-list, but also the...</span> <span class="audio-time caption" data-speaker="Philip" data-start="4551.440000" data-stop="4553.561000">Whatever the variable is for the list, then it</span> <span class="audio-time caption" data-speaker="Philip" data-start="4553.562000" data-stop="4555.800000">should be able to find that as well, even though</span> <span class="audio-time caption" data-speaker="Philip" data-start="4555.801000" data-stop="4557.759000">it's strictly speaking, that's a library.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4557.760000" data-stop="4561.098000">But that's a decision that someone has to make at</span> <span class="audio-time caption" data-speaker="Philip" data-start="4561.099000" data-stop="4564.459000">some point or convince someone.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4564.460000" data-stop="4565.679000"><strong class="speaker-name">Sacha:</strong>  I think find-library does work for it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4565.680000" data-stop="4568.123000">Like, find-library will find it only if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4568.124000" data-stop="4568.959000">it's loaded.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4568.960000" data-stop="4570.159000">And then since I can't, like, undo it...</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4570.160000" data-stop="4571.479000"><strong class="speaker-name">Prot:</strong>  If it's a package...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4571.480000" data-stop="4572.599000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4572.600000" data-stop="4575.779000"><strong class="speaker-name">Prot:</strong>  If you install it as a package, yes.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4575.780000" data-stop="4577.145000"><strong class="speaker-name">Philip:</strong>  Because then the theme is in a</span> <span class="audio-time caption" data-speaker="Philip" data-start="4577.146000" data-stop="4579.679000">directory which package.el has added to a</span> <span class="audio-time caption" data-speaker="Philip" data-start="4579.680000" data-stop="4580.359000">load list.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4580.360000" data-stop="4584.585000"></span> <span class="audio-time caption" data-speaker="Philip" data-start="4584.586000" data-stop="4588.794000">me correct, then find library only looks through</span> <span class="audio-time caption" data-speaker="Philip" data-start="4588.795000" data-stop="4590.259000">load-path.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4590.260000" data-stop="4591.399000"><strong class="speaker-name">Sacha:</strong>  I see, I see.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4591.400000" data-stop="4594.639000">And etc/themes is not in the load-path.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4594.640000" data-stop="4595.767000"><strong class="speaker-name">Philip:</strong>  Exactly.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4595.768000" data-stop="4598.933000">Because these aren't, this is, I don't know why.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4598.934000" data-stop="4599.933000">It's not...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4599.934000" data-stop="4601.267000"><strong class="speaker-name">Sacha:</strong>  Okay, all right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4601.268000" data-stop="4609.379000">That's another message to emacs-devel.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4609.000000">1:16:49</span> <strong>configuration generator in Emacs? maybe more wizards?</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="4609.380000" data-stop="4614.436000"><strong class="speaker-name">Philip:</strong>  It's the sort of annoyance which from my</span> <span class="audio-time caption" data-speaker="Philip" data-start="4614.437000" data-stop="4616.233000">perspective is so inconvenient that I forget it</span> <span class="audio-time caption" data-speaker="Philip" data-start="4616.234000" data-stop="4619.859000">every time and then you don't change it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4619.000000">1:16:59</span> <strong>Starter kits</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4619.860000" data-stop="4624.255000"><strong class="speaker-name">Sacha:</strong>  @brongulus says the Doom Emacs module</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4624.256000" data-stop="4627.151000">approach is very nice for beginners and entices</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4627.152000" data-stop="4628.999000">them to get into things more.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4629.000000" data-stop="4631.066000">People interested in a certain common set of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4631.067000" data-stop="4633.201000">functionality can get an opinionated starting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4633.202000" data-stop="4635.420000">point in Emacs, rather than worrying about what</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4635.421000" data-stop="4635.999000">to install.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4636.000000" data-stop="4639.039000">And someone else in the previous</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4639.040000" data-stop="4642.439000">That's sort of like the theme approach, isn't it?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4642.440000" data-stop="4644.399000">Sort of, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4644.400000" data-stop="4647.331000">It's not just, hey, these are the packages and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4647.332000" data-stop="4650.470000">you can comment and uncomment lines that load the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4650.471000" data-stop="4654.533000">different modules, but also here's the glue to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4654.534000" data-stop="4656.435000">sort of start to make some of them work better</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4656.436000" data-stop="4659.759000">together or to change them to reasonable defaults.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4659.000000">1:17:39</span> <strong>Configuration generator in Emacs Lisp?</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4659.760000" data-stop="4662.772000"><strong class="speaker-name">Sacha:</strong> I was wondering, actually, along those lines, any</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4662.773000" data-stop="4665.266000">thoughts about making your configuration</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4665.267000" data-stop="4671.299000">generator type thing in Emacs?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4671.300000" data-stop="4673.767000"><strong class="speaker-name">Philip:</strong>  The reason I, in the configuration</span> <span class="audio-time caption" data-speaker="Philip" data-start="4673.768000" data-stop="4676.000000">generator, did not implement it in Emacs was</span> <span class="audio-time caption" data-speaker="Philip" data-start="4676.001000" data-stop="4679.000000">precisely due to if it were in Emacs and would</span> <span class="audio-time caption" data-speaker="Philip" data-start="4679.001000" data-stop="4679.493000">use, for example, something like the widget</span> <span class="audio-time caption" data-speaker="Philip" data-start="4679.494000" data-stop="4682.304000">library and there would be these fine UI</span> <span class="audio-time caption" data-speaker="Philip" data-start="4682.305000" data-stop="4685.489000">discrepancies which people wouldn't expect to</span> <span class="audio-time caption" data-speaker="Philip" data-start="4685.490000" data-stop="4688.780000">behave the way they do, then scrolling doesn't</span> <span class="audio-time caption" data-speaker="Philip" data-start="4688.781000" data-stop="4691.999000">behave exactly the way they expect it to do.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4692.000000" data-stop="4694.854000">But there has been an idea, I think, when I</span> <span class="audio-time caption" data-speaker="Philip" data-start="4694.855000" data-stop="4697.627000">mentioned the configuration generator the</span> <span class="audio-time caption" data-speaker="Philip" data-start="4697.628000" data-stop="4698.439000">first time.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4698.440000" data-stop="4701.236000">It was the notion of having actually a shared</span> <span class="audio-time caption" data-speaker="Philip" data-start="4701.237000" data-stop="4704.105000">file format behind it, just some S expression,</span> <span class="audio-time caption" data-speaker="Philip" data-start="4704.106000" data-stop="4707.049000">which could be loaded by both the configuration</span> <span class="audio-time caption" data-speaker="Philip" data-start="4707.050000" data-stop="4709.882000">generator and a generic configuration wizard,</span> <span class="audio-time caption" data-speaker="Philip" data-start="4709.883000" data-stop="4712.988000">which could also be used like every package could</span> <span class="audio-time caption" data-speaker="Philip" data-start="4712.989000" data-stop="4716.061000">define their own configuration wizard for asking</span> <span class="audio-time caption" data-speaker="Philip" data-start="4716.062000" data-stop="4720.499000">the user selected options and configuring these.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4720.000000">1:18:40</span> <strong>extending the archive format</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="4720.500000" data-stop="4722.758000"><strong class="speaker-name">Philip:</strong> That's also another thing in Emacs 32</span> <span class="audio-time caption" data-speaker="Philip" data-start="4722.759000" data-stop="4726.299000">which I plan to work on, to extend the package</span> <span class="audio-time caption" data-speaker="Philip" data-start="4726.300000" data-stop="4727.479000">archive format.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4727.480000" data-stop="4730.264000">Among other things, allowing for multiple</span> <span class="audio-time caption" data-speaker="Philip" data-start="4730.265000" data-stop="4733.408000">packages to be listed in it, because</span> <span class="audio-time caption" data-speaker="Philip" data-start="4733.409000" data-stop="4736.235000">GNU ELPA and NonGNU ELPA both store multiple</span> <span class="audio-time caption" data-speaker="Philip" data-start="4736.236000" data-stop="4739.171000">versions of all packages, but you can only</span> <span class="audio-time caption" data-speaker="Philip" data-start="4739.172000" data-stop="4741.199000">install the most recent one.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4741.200000" data-stop="4742.239000">That's why pinning doesn't work.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4742.240000" data-stop="4745.214000">Absolutely no technical reason why this shouldn't</span> <span class="audio-time caption" data-speaker="Philip" data-start="4745.215000" data-stop="4747.279000">also list other versions as well.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4747.280000" data-stop="4750.252000">And then you could have pinning without having to</span> <span class="audio-time caption" data-speaker="Philip" data-start="4750.253000" data-stop="4750.799000">use Git.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4750.800000" data-stop="4752.559000">Packages as well.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4752.560000" data-stop="4753.839000">And there are a few others.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4753.840000" data-stop="4756.969000">There was a thread I think earlier this year</span> <span class="audio-time caption" data-speaker="Philip" data-start="4756.970000" data-stop="4760.276000">where I collected a number of these extensions</span> <span class="audio-time caption" data-speaker="Philip" data-start="4760.277000" data-stop="4763.799000">for the archive formats which could be extended.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4763.800000" data-stop="4768.199000">And now I forgot my thread.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4768.200000" data-stop="4771.999000">Now I lost my thread of those.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4772.000000" data-stop="4774.003000"><strong class="speaker-name">Prot:</strong>  But basically extending package.el and</span> <span class="audio-time caption" data-speaker="Prot" data-start="4774.004000" data-stop="4775.839000">the archive, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4776.660000" data-stop="4780.559000"><strong class="speaker-name">Philip:</strong>  Specifically the archive, so that...</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4780.560000" data-stop="4783.167000"><strong class="speaker-name">Prot:</strong>  Showing the previous versions which are</span> <span class="audio-time caption" data-speaker="Prot" data-start="4783.168000" data-stop="4784.867000">already listed, like you said.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4784.868000" data-stop="4786.369000"><strong class="speaker-name">Philip:</strong>  Yeah, so that you could pin the version</span> <span class="audio-time caption" data-speaker="Philip" data-start="4786.370000" data-stop="4788.679000">so you could install the version.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4788.680000" data-stop="4791.867000">I honestly do not remember what I was saying just</span> <span class="audio-time caption" data-speaker="Philip" data-start="4791.868000" data-stop="4794.599000">a few seconds ago, which is embarrassing.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4794.600000" data-stop="4796.759000">Okay, that's another problem.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4796.760000" data-stop="4799.179000"><strong class="speaker-name">Prot:</strong>  Things happen, no worries.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4799.180000" data-stop="4802.199000"><strong class="speaker-name">Philip:</strong>  You were talking about Doom Emacs?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4802.200000" data-stop="4805.067000"><strong class="speaker-name">Prot:</strong>  There was a comment about the Doom Emacs</span> <span class="audio-time caption" data-speaker="Prot" data-start="4805.068000" data-stop="4806.429000">and specifically the fact that there are these</span> <span class="audio-time caption" data-speaker="Prot" data-start="4806.430000" data-stop="4809.044000">modules and you can load the module without</span> <span class="audio-time caption" data-speaker="Prot" data-start="4809.045000" data-stop="4811.599000">thinking specifically about the packages.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4811.600000" data-stop="4814.052000">But then Sacha told you about your package</span> <span class="audio-time caption" data-speaker="Prot" data-start="4814.053000" data-stop="4816.499000">configurator wizard.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4816.500000" data-stop="4818.720000"><strong class="speaker-name">Philip:</strong>  Package configurator wizard and then</span> <span class="audio-time caption" data-speaker="Philip" data-start="4818.721000" data-stop="4822.206000">extending the metadata could also include this</span> <span class="audio-time caption" data-speaker="Philip" data-start="4822.207000" data-stop="4824.479000">sort of configuration option.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4824.480000" data-stop="4826.980000">So that packages, in some sense, could specify</span> <span class="audio-time caption" data-speaker="Philip" data-start="4826.981000" data-stop="4829.178000">what options the user would primarily be</span> <span class="audio-time caption" data-speaker="Philip" data-start="4829.179000" data-stop="4831.416000">interested in and what order they should</span> <span class="audio-time caption" data-speaker="Philip" data-start="4831.417000" data-stop="4832.199000">be traversed.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4832.200000" data-stop="4834.046000">And you could have some sort of dependency,</span> <span class="audio-time caption" data-speaker="Philip" data-start="4834.047000" data-stop="4834.519000">of course.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4834.520000" data-stop="4837.679000">This is some effort which has to be put in, but</span> <span class="audio-time caption" data-speaker="Philip" data-start="4837.680000" data-stop="4840.805000">it's not something that's unreasonable, from a</span> <span class="audio-time caption" data-speaker="Philip" data-start="4840.806000" data-stop="4843.999000">technical perspective, from implementing this.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4844.000000" data-stop="4846.746000">And it would make, I think, it could make, if you</span> <span class="audio-time caption" data-speaker="Philip" data-start="4846.747000" data-stop="4849.522000">have the infrastructure for that, that would make</span> <span class="audio-time caption" data-speaker="Philip" data-start="4849.523000" data-stop="4851.959000">installing and using packages a lot nicer.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4851.960000" data-stop="4856.959000">It sounds very promising, for sure.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4856.000000">1:20:56</span> <strong>User interfaces</strong></div><p></p><span class="audio-time caption" data-speaker="Philip" data-start="4856.960000" data-stop="4858.679000"><strong class="speaker-name">Philip:</strong> The UI question remains the thing.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4858.680000" data-stop="4863.510000">Do you want to reuse the Customize UI, which has</span> <span class="audio-time caption" data-speaker="Philip" data-start="4863.511000" data-stop="4865.679000">its historical warts?</span> <span class="audio-time caption" data-speaker="Philip" data-start="4865.680000" data-stop="4867.159000">Of course, can they be ironed out?</span> <span class="audio-time caption" data-speaker="Philip" data-start="4867.160000" data-stop="4868.879000">That's a different question.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4868.880000" data-stop="4872.199000">Or do you reinvent something from scratch?</span> <span class="audio-time caption" data-speaker="Philip" data-start="4872.200000" data-stop="4874.759000">And I'm usually not that big of a fan of</span> <span class="audio-time caption" data-speaker="Philip" data-start="4874.760000" data-stop="4876.039000">reinventing the UI.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4876.040000" data-stop="4879.913000">I'm more in the reuse existing interfaces, just</span> <span class="audio-time caption" data-speaker="Philip" data-start="4879.914000" data-stop="4883.379000">into the back end.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4883.380000" data-stop="4884.452000"><strong class="speaker-name">Prot:</strong>  Plus, if you were to invent a new UI, you</span> <span class="audio-time caption" data-speaker="Prot" data-start="4884.453000" data-stop="4887.271000">wouldn't have this new feature already because</span> <span class="audio-time caption" data-speaker="Prot" data-start="4887.272000" data-stop="4889.644000">you have too many things that you need</span> <span class="audio-time caption" data-speaker="Prot" data-start="4889.645000" data-stop="4890.519000">to implement.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4890.520000" data-stop="4893.200000">Whereas just using custom UI allows you to just</span> <span class="audio-time caption" data-speaker="Prot" data-start="4893.201000" data-stop="4895.787000">implement the feature and then the interface,</span> <span class="audio-time caption" data-speaker="Prot" data-start="4895.788000" data-stop="4898.638000">maybe it's something that somebody else will work</span> <span class="audio-time caption" data-speaker="Prot" data-start="4898.639000" data-stop="4900.559000">on or you work on at the latest.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4900.560000" data-stop="4904.039000"><strong class="speaker-name">Philip:</strong>  Yeah, but then, of course, that's...</span> <span class="audio-time caption" data-speaker="Philip" data-start="4904.040000" data-stop="4906.859000">Even if that is the case, then you have to make</span> <span class="audio-time caption" data-speaker="Philip" data-start="4906.860000" data-stop="4909.772000">sure that you don't make assumptions that depend</span> <span class="audio-time caption" data-speaker="Philip" data-start="4909.773000" data-stop="4912.079000">on your own customizer in the future.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4912.605000" data-stop="4918.111000">It's a whole list of dependencies which is</span> <span class="audio-time caption" data-speaker="Philip" data-start="4918.131000" data-stop="4919.332000">just complicated.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4919.352000" data-stop="4921.354000"><strong class="speaker-name">Sacha:</strong>  That sounds like a newcomers presets to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4921.495000" data-stop="4925.459000">un-wartify Customize, a reset theme to put the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4925.479000" data-stop="4929.423000">warts back on as needed, and then we can use the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4929.463000" data-stop="4932.126000">slightly more modern interface for the things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4932.207000" data-stop="4938.419000">that we had wanted to do, maybe two or three years down the line.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4938.420000" data-stop="4944.259000"><strong class="speaker-name">Philip:</strong>  Maybe something like that. A little long-term planning.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4944.260000" data-stop="4947.734000"><strong class="speaker-name">Prot:</strong>  I think just to say this, but of course</span> <span class="audio-time caption" data-speaker="Prot" data-start="4947.774000" data-stop="4950.917000">everything we have covered thus far, always we</span> <span class="audio-time caption" data-speaker="Prot" data-start="4950.957000" data-stop="4951.558000">have to state it.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4952.459000" data-stop="4955.962000">Newcomers with an asterisk, right?</span> <span class="audio-time caption" data-speaker="Prot" data-start="4956.082000" data-stop="4959.005000">With the caveat that you still have to put in the</span> <span class="audio-time caption" data-speaker="Prot" data-start="4959.065000" data-stop="4961.507000">work, read the manual, be patient, all</span> <span class="audio-time caption" data-speaker="Prot" data-start="4961.567000" data-stop="4971.419000">that, right?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4971.420000" data-stop="4974.149000"><strong class="speaker-name">Philip:</strong>  Ideally, it would be nice if you could</span> <span class="audio-time caption" data-speaker="Philip" data-start="4974.229000" data-stop="4975.390000">even start without it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4975.430000" data-stop="4977.052000">I mean, I started without it, but it took me</span> <span class="audio-time caption" data-speaker="Philip" data-start="4977.072000" data-stop="4981.377000">three or four years to actually write this one.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4981.738000" data-stop="4983.640000">I didn't want to write defun.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4983.660000" data-stop="4984.140000">I thought, what?</span> <span class="audio-time caption" data-speaker="Philip" data-start="4984.160000" data-stop="4985.362000">I don't write my own functions.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4985.382000" data-stop="4987.885000">I just want to set options, which was wrong and</span> <span class="audio-time caption" data-speaker="Philip" data-start="4987.925000" data-stop="4988.526000">appealing to this.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4988.566000" data-stop="4990.107000">That was the point from the beginning.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4990.128000" data-stop="4992.250000">But I think, Sacha, you wanted to close there.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4992.685000" data-stop="4994.608000"><strong class="speaker-name">Sacha:</strong>  Oh, I just wanted to acknowledge that we</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4994.648000" data-stop="4997.011000">are coming up in the 20 minutes that you said you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4997.052000" data-stop="4997.893000">were available for.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4998.994000" data-stop="4999.836000">Yeah, yeah, yeah, I need to go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5000.056000" data-stop="5001.819000">Yeah, yeah, the dogs and everything.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="5002.560000" data-stop="5004.002000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah, I have to take them for a</span> <span class="audio-time caption" data-speaker="Prot" data-start="5004.042000" data-stop="5005.644000">walk because I have a meeting afterwards.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="5005.825000" data-stop="5006.506000"><strong class="speaker-name">Sacha:</strong>  Right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5006.526000" data-stop="5007.587000">I wanted to thank both of you.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5007.888000" data-stop="5010.091000">I really like this conversation and the heads up</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5010.151000" data-stop="5012.314000">and the interesting things coming down</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5012.354000" data-stop="5013.476000">the pipeline.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5013.656000" data-stop="5014.638000">So thank you for that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5014.520000" data-stop="5018.213000">We're going to continue, I think, working on the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5018.214000" data-stop="5020.599000">user experience for newcomers.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5020.600000" data-stop="5024.032000">which will probably be a mix of documentation and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5024.033000" data-stop="5027.209000">packages and other experiments and occasional</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5027.210000" data-stop="5030.569000">email to emacs-devel suggesting things like the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5030.570000" data-stop="5032.999000">find-user-init-file and whatever.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5033.000000" data-stop="5035.316000">But thank you so much to you and to everyone</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5035.317000" data-stop="5038.659000">who's tuned in.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="5038.660000" data-stop="5040.000000"><strong class="speaker-name">Prot:</strong>  You're welcome.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="5040.001000" data-stop="5041.167000"><strong class="speaker-name">Philip:</strong>  Thank you for hosting.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="5041.168000" data-stop="5043.219000"><strong class="speaker-name">Prot:</strong>  Thank you.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="5043.220000" data-stop="5044.267000"><strong class="speaker-name">Philip:</strong>  Thank you, Prot, for your comments as well.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="5044.268000" data-stop="5046.279000"><strong class="speaker-name">Prot:</strong>  Take care.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="5046.280000" data-stop="5046.599000"><strong class="speaker-name">Philip:</strong>  Bye-bye.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="5046.600000" data-stop="5049.339000"><strong class="speaker-name">Prot:</strong>  Goodbye, goodbye.</span> <span class="audio-time caption" data-speaker="Prot" data-start="5049.340000" data-stop="5052.659000">Where do we close from here?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="5052.660000" data-stop="5053.919000"><strong class="speaker-name">Philip:</strong>  I'm just going to close the tab.</span> <span class="audio-time caption" data-speaker="Philip" data-start="5053.920000" data-stop="5055.000000">Bye.</span></div>
<p></p>


<a name="end-ye29-transcript"></a></details>
</div>
</div>
<div id="outline-container-ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-chat" class="outline-3">
<h3 id="ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-chat"><a href="https://sachachua.com/blog/feed/index.xml#ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-chat">Chat</a></h3>
<div class="outline-text-3" id="text-ye29-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-chat">
<div class="chat" id="orgcba0c11">
<ul class="org-ul">
<li><span class="nick">protesilaos:</span> ​Hello folks!</li>
<li><span class="nick">MichaelVash7886:</span> ​hi</li>
<li><span class="nick">protesilaos:</span> ​We still have a few more minutes. Looking forward to it!</li>
<li><span class="nick">MichaelVash7886:</span> ​ended up starting on doom and the nice thing is anything I want to try out is either in there or it's a simple tweak away. but it's several layers of abstractions to change certain things</li>
<li><span class="nick">MichaelVash7886:</span> ​for me to go from using doom to being able to program with a vanilla emacs I know it's going to be a journey to get things like completion, eglot, etc all setup</li>
<li><span class="nick">MichaelVash7886:</span> ​also looking at moving away from evil to using something like Meow and vanilla emacs binds</li>
<li><span class="nick">lc2000:</span> ​​Speaking of splash screen, there's still plenty of room, why not inline the GPL, and a small essay. Kidding of course, but what of slaying that sacred cow&hellip;?</li>
<li><span class="nick">lc2000:</span> ​(As it stands, it prioritizes ideology, laywer-mandated stuff from before case law, credits, funding via manual ordering&hellip; and if new users don't recoil some things they may actually need/want.)</li>
<li><span class="nick">takoverflow:</span> ​​Hello Prot, Sacha and Philip!</li>
<li><span class="nick">takoverflow:</span> ​Thanks for this discussion</li>
<li><span class="nick">RandCode:</span> ​​greetings, everyone!</li>
<li><span class="nick">RandCode:</span> ​​emacs has a place for chatting in all of irc, matrix, xmpp and telegram room! (also email)</li>
<li><span class="nick">lc2000:</span> ​​Packages are great at bundling functionalities, but Doom/Spacemacs/etc also fix the multi-package integration "glue", which technically could be packages (see all prior "config modules" attempts&hellip;).</li>
<li><span class="nick">sachactube:</span> ​​<a href="https://bbb.emacsverse.org/rooms/chat">https://bbb.emacsverse.org/rooms/chat</a>&hellip;</li>
<li><span class="nick">protesilaos:</span> ​Come join us :)</li>
<li><span class="nick">lc2000:</span> ​Probably best to talk of modern de facto "standards" (vs full CUA as then-defined), e.g. if there's a "region" new users expect C-c (or C-c C-c in anger) to work, and idem C-x/etc - easy wins maybe.</li>
<li><span class="nick">brongulus:</span> I do prefer the idosyncracies of with-eval-after-load and actually explicitly binding and creating hooks, rather than relying on use-package is that it tells me explicitly the order in which things would be evaluated. In contrast to use-package where I would have to know about defer and how to properly define the order of loading of different packages.</li>
<li><span class="nick">Protesilaos:</span> @brongulus Fair point! I also like it. The thing with use-package is that you understand it better if you know what it does under the hood.</li>
<li><span class="nick">brongulus:</span> This is where the doom emacs' module approach is very nice for beginners and entices them <a href="https://github.com/doomemacs/doomemacs/blob/master/modules/README.org">https://github.com/doomemacs/doomemacs/blob/master/modules/README.org</a></li>
<li><span class="nick">brongulus:</span> People interested in a certain common set of functionality can get an opinionated starting point in emacs rather than worrying about what to install</li>
<li><span class="nick">brongulus:</span> This is how it looks <a href="https://github.com/doomemacs/doomemacs/blob/master/static/init.example.el">https://github.com/doomemacs/doomemacs/blob/master/static/init.example.el</a></li>
<li><span class="nick">brongulus:</span> Thank you for the meeting o.</li>
</ul>

</div>
</div>
</div>
<div id="outline-container-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-some-types-of-new-users-to-think-about" class="outline-3">
<h3 id="may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-some-types-of-new-users-to-think-about"><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-some-types-of-new-users-to-think-about">Some types of new users to think about</a></h3>
<div class="outline-text-3" id="text-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-some-types-of-new-users-to-think-about">
<ul class="org-ul">
<li>Non-programmer interested in using Org Mode for notes and task management</li>
<li>Researcher interested in publishing, reproducible research, literate programming</li>
<li>Programmer interested in coding with Emacs
<ul class="org-ul">
<li>Coming from VSCode</li>
<li>Coming from Vi</li>
</ul></li>
<li>Programmer still using a different IDE, just interested in Magit</li>
<li>Long-time Emacs user who hasn't explored Emacs Lisp</li>
</ul>
</div>
</div>
<div id="outline-container-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-part-of-a-learning-journey" class="outline-3">
<h3 id="may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-part-of-a-learning-journey"><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-part-of-a-learning-journey">Sketching out their learning journey</a></h3>
<div class="outline-text-3" id="text-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-part-of-a-learning-journey">
<ul class="org-ul">
<li>Install Emacs</li>
<li>Use Emacs via the menu bar and toolbar</li>
<li>Get a little overwhelmed</li>
<li>Use M-x to call commands by name</li>
<li>Learn how to set up completion</li>
<li>Use some keyboard shortcuts</li>
<li>Figure out how to learn and connect</li>
<li>Customize some options</li>
<li>&hellip;</li>
<li>Eureka!</li>
<li>Define their own keyboard shortcuts
<ul class="org-ul">
<li>Challenge: init file</li>
</ul></li>
<li>&hellip;</li>
<li>Define their own functions
<ul class="org-ul">
<li>Challenge: Emacs Lisp</li>
</ul></li>
</ul>
</div>
</div>
<div id="outline-container-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-other-notes" class="outline-3">
<h3 id="may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-other-notes"><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-other-notes">Other notes</a></h3>
<div class="outline-text-3" id="text-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-other-notes">
<p>
Learning how to modify Emacs with Emacs Lisp can help people really
appreciate its power. For example, you need Emacs Lisp to set your own
keyboard shortcuts. You can't set them through the Options menu or the
<code>M-x customize</code> interface. One challenge is that the Emacs Lisp
configuration file that is loaded at the start of every Emacs session
might be in one of several places, which means that in order for
newbies to understand how to add something like:
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">bind-key</span> <span class="org-string">"C-c r"</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">org-capture</span>)
</code></pre>
</div>


<p>
we need to either include a link to something like <a href="https://www.emacswiki.org/emacs/InitFile">EmacsWiki: Init
File</a>, or repeat the instructions and the troubleshooting steps in beginner tutorials.
</p>

<ul class="org-ul">
<li>user-init-file defaults to <code>.emacs</code> for new users if none of <code>~/.emacs</code>, <code>~/.emacs.el</code>, <code>~/.emacs.d/init.el</code>, and <code>~/.config/emacs/init.el</code> exist.</li>

<li>After you select newcomer-presets from the splash screen, this is not persisted automatically. "Options &gt; Save Options" doesn't save it either. Because people usually think of themes as cosmetic, they're not likely to find it under "Options &gt; Customize Emacs &gt; Custom Themes; newcomers-presets; Save Theme Settings." The "Options &gt; Save Options" will save the change that newcomers-presets made to the tab bar, thus creating a <code>~/.emacs</code>.</li>
<li><a href="https://doc.emacsen.de/gallery.html">https://doc.emacsen.de/gallery.html</a> - gallery of themes built into Emacs</li>
</ul>
</div>
</div>
<div id="outline-container-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-some-screenshots-of-a-fresh-emacs" class="outline-3">
<h3 id="may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-some-screenshots-of-a-fresh-emacs"><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-some-screenshots-of-a-fresh-emacs">Some screenshots of a fresh Emacs</a></h3>
<div class="outline-text-3" id="text-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-some-screenshots-of-a-fresh-emacs">

<figure id="orge56c33a">
<a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-12_08-59-17.png"><img src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-12_08-59-17.png" alt="2026-05-12_08-59-17.png"></a>

<figcaption><span class="figure-number">Figure 1: </span>The splash screen for a new Emacs</figcaption>
</figure>


<figure id="orgb8a9303">
<a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-12_09-01-50.png"><img src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-12_09-01-50.png" alt="2026-05-12_09-01-50.png"></a>

<figcaption><span class="figure-number">Figure 2: </span>File menu</figcaption>
</figure>


<figure id="org523a52a">
<a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-12_09-02-43.png"><img src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-12_09-02-43.png" alt="2026-05-12_09-02-43.png"></a>

<figcaption><span class="figure-number">Figure 3: </span>Customize menu</figcaption>
</figure>


<figure id="org227ba48">
<a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-12_09-03-37.png"><img src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-12_09-03-37.png" alt="2026-05-12_09-03-37.png"></a>

<figcaption><span class="figure-number">Figure 4: </span>Help menu</figcaption>
</figure>
</div>
</div>
<div id="outline-container-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-trying-pkal-s-emacs-configuration-generator" class="outline-3">
<h3 id="may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-trying-pkal-s-emacs-configuration-generator"><a href="https://sachachua.com/blog/feed/index.xml#may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-trying-pkal-s-emacs-configuration-generator">Trying pkal's Emacs Configuration Generator</a></h3>
<div class="outline-text-3" id="text-may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience-trying-pkal-s-emacs-configuration-generator">
<p>
<a href="https://codeberg.org/pkal/ecg/src/branch/master/ecg.lisp">Emacs Configuration Generator</a> - old source code, site is no longer live
</p>


<div class="org-src-container">
<pre class="src src-sh"><code>sbcl &#45;&#45;load ecg.lisp &#45;&#45;eval <span class="org-string">"(ecg:start)"</span>
</code></pre>
</div>



<figure id="org14847a6">
<a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-13_21-36-30.png"><img src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-13_21-36-30.png" alt="2026-05-13_21-36-30.png"></a>

<figcaption><span class="figure-number">Figure 5: </span>Web interface</figcaption>
</figure>


<figure id="org8cd4f6e">
<a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-13_21-37-11.png"><img src="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/2026-05-13_21-37-11.png" alt="2026-05-13_21-37-11.png"></a>

<figcaption><span class="figure-number">Figure 6: </span>Theme preview, other options</figcaption>
</figure>

<p>
Sample generated configuration:
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code><span class="org-comment-delimiter">;;; </span><span class="org-comment">Personal configuration -*- lexical-binding: t -*-</span>

<span class="org-comment-delimiter">;; </span><span class="org-comment">Save the contents of this file under ~/.emacs.d/init.el</span>
<span class="org-comment-delimiter">;; </span><span class="org-comment">Do not forget to use Emacs' built-in help system:</span>
<span class="org-comment-delimiter">;; </span><span class="org-comment">Use C-h C-h to get an overview of all help commands.  All you</span>
<span class="org-comment-delimiter">;; </span><span class="org-comment">need to know about Emacs (what commands exist, what functions do,</span>
<span class="org-comment-delimiter">;; </span><span class="org-comment">what variables specify), the help system can provide.</span>

<span class="org-comment-delimiter">;; </span><span class="org-comment">Load a custom theme</span>
(load-theme <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">modus-operandi</span> t)

<span class="org-comment-delimiter">;; </span><span class="org-comment">Use whatever the default monospace font is</span>
(<span class="org-keyword">setq</span> font-use-system-font t)

<span class="org-comment-delimiter">;; </span><span class="org-comment">Miscellaneous options</span>
(<span class="org-keyword">setq-default</span> major-mode
              (<span class="org-keyword">lambda</span> () <span class="org-comment-delimiter">; </span><span class="org-comment">guess major mode from file name</span>
                (<span class="org-keyword">unless</span> buffer-file-name
                  (<span class="org-keyword">let</span> ((buffer-file-name (buffer-name)))
                    (set-auto-mode)))))
(<span class="org-keyword">setq</span> confirm-kill-emacs <span class="org-highlight-quoted-quote">#'</span><span class="org-highlight-quoted-symbol">yes-or-no-p</span>)
(<span class="org-keyword">setq</span> window-resize-pixelwise t)
(<span class="org-keyword">setq</span> frame-resize-pixelwise t)
(save-place-mode t)
(savehist-mode t)
(recentf-mode t)
(<span class="org-keyword">defalias</span> <span class="org-highlight-quoted-quote">'</span><span class="org-function-name">yes-or-no</span> <span class="org-highlight-quoted-quote">#'</span><span class="org-highlight-quoted-symbol">y-or-n-p</span>)

<span class="org-comment-delimiter">;; </span><span class="org-comment">Store automatic customisation options elsewhere</span>
(<span class="org-keyword">setq</span> custom-file (locate-user-emacs-file <span class="org-string">"custom.el"</span>))
(<span class="org-keyword">when</span> (file-exists-p custom-file)
  (load custom-file))
</code></pre>
</div>

</div>
</div>
<div><a href="https://sachachua.com/blog/2026/05/may-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience/index.org">View Org source for this post</a></div>
<p>You can <a href="https://social.sachachua.com/@sacha/statuses/01KRVXD8X86JQA5078S5HED6QM" target="_blank" rel="noopener noreferrer">comment on Mastodon</a> or <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F05%2Fmay-14-sacha-prot-and-philip-kaludercic-talk-emacs-newcomer-experience%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>YE12: Categorizing Emacs News, epwgraph, languages</title>
		<link>https://sachachua.com/blog/2026/04/ye12-categorizing-emacs-news-epwgraph-languages/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Mon, 06 Apr 2026 14:36:57 GMT</pubDate>
    <category>emacs</category>
<category>stream</category>
<category>yay-emacs</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/04/ye12-categorizing-emacs-news-epwgraph-languages/</guid>
		<description><![CDATA[<p>
<video controls="1" src="https://archive.org/download/2026-04-06-ye-12-emacs-news-epwgraph-languages/2026-04-06-ye12-emacs-news-epwgraph-languages.mp4" type="video/mp4"></video>
</p>

<p>
<a href="https://archive.org/details/2026-04-06-ye-12-emacs-news-epwgraph-languages">View in the Internet Archive</a>, <a href="https://youtube.com/live/zMcyTAOG0i8">watch or comment on YouTube</a>, or <a href="mailto:sacha@sachachua.com">email me</a>.
</p>

<p>
Chapters:
</p>

<ul class="org-ul">
<li><span class="media-time" data-start="2481.000">00:41:21</span> epwgraph</li>
<li><span class="media-time" data-start="3296.000">00:54:56</span> learning languages</li>
</ul>

<p>
Thanks for your patience with the audio issues! At some point, I need to work out the contention between all the different processes that I want to be listening to the audio from my mic. =)
</p>

<p>
In this livestream, I categorize <a href="https://sachachua.com/blog/2026/04/2026-04-06-emacs-news/">Emacs News for 2026-04-06</a>, show <a href="https://github.com/sachac/epwgraph">epwgraph</a> for managing Pipewire connections from Emacs, and share some of my <a href="https://codeberg.org/sachac/learn-lang/">language learning workflows</a>.
</p>
<div><a href="https://sachachua.com/blog/2026/04/ye12-categorizing-emacs-news-epwgraph-languages/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F04%2Fye12-categorizing-emacs-news-epwgraph-languages%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>YE11: Fix find-function for Emacs Lisp from org-babel or scratch</title>
		<link>https://sachachua.com/blog/2026/04/ye11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Sun, 05 Apr 2026 21:03:48 GMT</pubDate>
    <category>org</category>
<category>emacs</category>
<category>elisp</category>
<category>stream</category>
<category>yay-emacs</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/04/ye11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch/</guid>
		<description><![CDATA[<p>
<video controls="1" src="https://archive.org/download/yay-emacs-11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch/ye11-find-function.mp4" poster="https://sachachua.com/blog/2026/04/ye11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch/2026-04-05-19-25-03.png" type="video/mp4"><track kind="subtitles" label="Captions" src="https://sachachua.com/blog/2026/04/ye11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch/Yay%20Emacs%2011:%20Fix%20find-function%20for%20Emacs%20Lisp%20from%20org-babel%20or%20scratch.vtt" srclang="en" default=""><span>Video not supported. Thumbnail:<br><img src="https://sachachua.com/blog/2026/04/ye11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch/2026-04-05-19-25-03.png" alt="Thumbnail"></span></video>
</p>

<p>
<a href="https://archive.org/details/yay-emacs-11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch">Watch on Internet Archive</a>, <a href="https://youtube.com/live/PKkV1Tbev_Y">watch/comment on YouTube</a>, <a href="https://sachachua.com/blog/2026/04/ye11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch/Yay%20Emacs%2011:%20Fix%20find-function%20for%20Emacs%20Lisp%20from%20org-babel%20or%20scratch.vtt">download captions</a>, or <a href="mailto:sacha@sachachua.com">email me</a>
</p>


<p>
Where can you define an Emacs Lisp function so
that you can use <code>find-function</code> to jump to it
again later?
</p>

<ul class="org-ul">
<li><b>A: In an indirect buffer</b> from Org Mode source
block with your favorite eval function like
<code>eval-defun</code> <label class="hint"><input type="checkbox"> <span class="hint-desc">(hint)</span><span class="hint-text">nope</span></label>

<ul class="org-ul">
<li><p>
<code>C-c '</code> (<code>org-edit-special</code>) inside the block; execute the defun with <code>C-M-x</code> (<code>eval-defun</code>), <code>C-x C-e</code> (<code>eval-last-sexp</code>), or <code>eval-buffer</code>.
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>    (<span class="org-keyword">defun</span> <span class="org-function-name">my-test-1</span> () (message <span class="org-string">"Hello"</span>))
</code></pre>
</div>
</li>
</ul></li>

<li><p>
<b>B: In an Org Mode file</b> by executing the block
with C-c C-c <label class="hint"><input type="checkbox"> <span class="hint-desc">(hint)</span><span class="hint-text">nope</span></label>
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>  (<span class="org-keyword">defun</span> <span class="org-function-name">my-test-2</span> () (message <span class="org-string">"Hello"</span>))
</code></pre>
</div>
</li>

<li><p>
<b>C: In a .el file</b> <label class="hint"><input type="checkbox"> <span class="hint-desc">(hint)</span><span class="hint-text">yup</span></label>
</p>

<p>
<a href="https://sachachua.com/blog/2026/04/ye11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch/test-search-function.el">file:///tmp/test-search-function.el</a> : execute the defun with <code>C-M-x</code> (<code>eval-defun</code>), <code>C-x C-e</code> (<code>eval-last-sexp</code>), or <code>eval-buffer</code>
</p></li>

<li><p>
<b>D: In a scratch buffer,</b> other temporary buffer,
or really any buffer thanks to eval-last-sexp
<label class="hint"><input type="checkbox"> <span class="hint-desc">(hint)</span><span class="hint-text">nope</span></label>
</p>

<p>
<code>(defun my-test-4 () (message "Hello"))</code>
</p></li>
</ul>

<p>
Only option C works - it's gotta be in an .el file for
<code>find-function</code> to find it. But I love jumping to
function definitions using <code>find-function</code> or
<code>lispy-goto-symbol</code> (which is bound to <code>M-.</code> if
you use <a target="_blank" href="https://melpa.org/#/lispy">lispy</a> and set up <code>lispy-mode</code>) so
that I can look at or change how something works.
It can be a little frustrating when I try to jump
to a definition and it says, "Don't know where
blahblahblah is defined." I just defined it five
minutes ago! It's there in one of my other
buffers, don't make me look for it myself.
Probably this will get fixed in Emacs core
someday, but no worries, we can work around it
today with a little bit of advice.
</p>

<p>
I did some digging around in the source code.
Turns out that <code>symbol-file</code> can't find the
function definition in the <code>load-history</code> variable
if you're not in a .el file, so
<code>find-function-search-for-symbol</code> gets called with
<code>nil</code> for the library, which causes the error.
(<a href="https://github.com/emacs-mirror/emacs/blob/master/lisp/subr.el">emacs:subr.el</a>)
</p>

<p>
I wrote some advice that searches in any open
<code>emacs-lisp-mode</code> buffers or in a list of other
files, like my Emacs configuration.
This is how I activate it:
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">setq</span> sacha-elisp-find-function-search-extra <span class="org-highlight-quoted-quote">'</span>(<span class="org-string">"~/sync/emacs/Sacha.org"</span>))
(advice-add <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">find-function-search-for-symbol</span> <span class="org-builtin">:around</span> <span class="org-highlight-quoted-quote">#'</span><span class="org-highlight-quoted-symbol">sacha-elisp-find-function-search-for-symbol</span>)
</code></pre>
</div>


<p>
Now I should be able to jump to all those
functions wherever they're defined.
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(my-test-1)
(my-test-2)
(my-test-3)
(my-test-4)
</code></pre>
</div>


<p>
Note that by default, <code>M-.</code> in <code>emacs-lisp-mode</code> uses <code>xref-find-definitions</code>, which seems to really want files. I haven't figured out a good workaround for that yet, but <a target="_blank" href="https://melpa.org/#/lispy">lispy-mode</a> makes <code>M-.</code> work and gives me a bunch of other great shortcuts, so I'd recommend checking that out.
</p>

<p>
Here's the source code for the find function thing:
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">defvar</span> <span class="org-variable-name">sacha-elisp-find-function-search-extra</span>
  nil
  <span class="org-doc">"List of filenames to search for functions."</span>)

<span class="org-comment-delimiter">;;;</span><span class="org-comment">###</span><span class="org-comment"><span class="org-warning">autoload</span></span>
(<span class="org-keyword">defun</span> <span class="org-function-name">sacha-elisp-find-function-search-for-symbol</span> (fn symbol type library <span class="org-type">&amp;rest</span> _)
  <span class="org-doc">"Find SYMBOL with TYPE in Emacs Lisp buffers or `</span><span class="org-doc"><span class="org-constant">sacha-find-function-search-extra</span></span><span class="org-doc">'.</span>
<span class="org-doc">Prioritize buffers that do not have associated files, such as Org Src</span>
<span class="org-doc">buffers or *scratch*. Note that the fallback search uses \"^([</span><span class="org-doc"><span class="org-negation-char">^</span></span><span class="org-doc"> )]+\" so that</span>
<span class="org-doc">it isn't confused by preceding forms.</span>

<span class="org-doc">If LIBRARY is specified, fall back to FN.</span>

<span class="org-doc">Activate this with:</span>

<span class="org-doc">(advice-add 'find-function-search-for-symbol</span>
<span class="org-doc"> :around #'sacha-org-babel-find-function-search-for-symbol-in-dotemacs)"</span>
  (<span class="org-keyword">if</span> (null library)
      <span class="org-comment-delimiter">;; </span><span class="org-comment">Could not find library; search my-dotemacs-file just in case</span>
      (<span class="org-keyword">progn</span>
        (<span class="org-keyword">while</span> (<span class="org-keyword">and</span> (symbolp symbol) (get symbol <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">definition-name</span>))
          (<span class="org-keyword">setq</span> symbol (get symbol <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">definition-name</span>)))
        (<span class="org-keyword">catch</span> <span class="org-highlight-quoted-quote">'</span><span class="org-constant">found</span>
          (mapc
           (<span class="org-keyword">lambda</span> (buffer-or-file)
             (<span class="org-keyword">with-current-buffer</span> (<span class="org-keyword">if</span> (bufferp buffer-or-file)
                                      buffer-or-file
                                    (find-file-noselect buffer-or-file))
               (<span class="org-keyword">let*</span> ((regexp-symbol
                       (<span class="org-keyword">or</span> (<span class="org-keyword">and</span> (symbolp symbol)
                                (alist-get type (get symbol <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">find-function-type-alist</span>)))
                           (alist-get type find-function-regexp-alist)))
                      (form-matcher-factory
                       (<span class="org-keyword">and</span> (functionp (cdr-safe regexp-symbol))
                            (cdr regexp-symbol)))
                      (regexp-symbol (<span class="org-keyword">if</span> form-matcher-factory
                                         (car regexp-symbol)
                                       regexp-symbol))

                      (case-fold-search)
                      (regexp (<span class="org-keyword">if</span> (functionp regexp-symbol) regexp-symbol
                                (format (symbol-value regexp-symbol)
                                        <span class="org-comment-delimiter">;; </span><span class="org-comment">Entry for ` (backquote) macro in loaddefs.el,</span>
                                        <span class="org-comment-delimiter">;; </span><span class="org-comment">(defalias (quote \`)..., has a \ but</span>
                                        <span class="org-comment-delimiter">;; </span><span class="org-comment">(symbol-name symbol) doesn't.  Add an</span>
                                        <span class="org-comment-delimiter">;; </span><span class="org-comment">optional \ to catch this.</span>
                                        (concat <span class="org-string">"\\\\?"</span>
                                                (regexp-quote (symbol-name symbol)))))))
                 (<span class="org-keyword">save-restriction</span>
                   (widen)
                   (<span class="org-keyword">with-syntax-table</span> emacs-lisp-mode-syntax-table
                     (goto-char (point-min))
                     (<span class="org-keyword">if</span> (<span class="org-keyword">if</span> (functionp regexp)
                             (funcall regexp symbol)
                           (<span class="org-keyword">or</span> (re-search-forward regexp nil t)
                               <span class="org-comment-delimiter">;; </span><span class="org-comment">`</span><span class="org-comment"><span class="org-constant">regexp</span></span><span class="org-comment">' matches definitions using known forms like</span>
                               <span class="org-comment-delimiter">;; </span><span class="org-comment">`</span><span class="org-comment"><span class="org-constant">defun</span></span><span class="org-comment">', or `</span><span class="org-comment"><span class="org-constant">defvar</span></span><span class="org-comment">'.  But some functions/variables</span>
                               <span class="org-comment-delimiter">;; </span><span class="org-comment">are defined using special macros (or functions), so</span>
                               <span class="org-comment-delimiter">;; </span><span class="org-comment">if `</span><span class="org-comment"><span class="org-constant">regexp</span></span><span class="org-comment">' can't find the definition, we look for</span>
                               <span class="org-comment-delimiter">;; </span><span class="org-comment">something of the form "(SOMETHING &lt;symbol&gt; ...)".</span>
                               <span class="org-comment-delimiter">;; </span><span class="org-comment">This fails to distinguish function definitions from</span>
                               <span class="org-comment-delimiter">;; </span><span class="org-comment">variable declarations (or even uses thereof), but is</span>
                               <span class="org-comment-delimiter">;; </span><span class="org-comment">a good pragmatic fallback.</span>
                               (re-search-forward
                                (concat <span class="org-string">"^([</span><span class="org-string"><span class="org-negation-char">^</span></span><span class="org-string"> )]+"</span> find-function-space-re <span class="org-string">"['(]?"</span>
                                        (regexp-quote (symbol-name symbol))
                                        <span class="org-string">"\\_&gt;"</span>)
                                nil t)))
                         (<span class="org-keyword">progn</span>
                           (beginning-of-line)
                           (<span class="org-keyword">throw</span> <span class="org-highlight-quoted-quote">'</span><span class="org-constant">found</span>
                                   (cons (current-buffer) (point))))
                       (<span class="org-keyword">when-let*</span> ((find-expanded
                                    (<span class="org-keyword">when</span> (trusted-content-p)
                                      (find-function&#45;&#45;search-by-expanding-macros
                                       (current-buffer) symbol type
                                       form-matcher-factory))))
                         (<span class="org-keyword">throw</span> <span class="org-highlight-quoted-quote">'</span><span class="org-constant">found</span>
                                 (cons (current-buffer)
                                       find-expanded)))))))))
           (delq nil
                 (append
                  (sort
                   (match-buffers <span class="org-highlight-quoted-quote">'</span>(derived-mode . emacs-lisp-mode))
                   <span class="org-builtin">:key</span> (<span class="org-keyword">lambda</span> (o) (<span class="org-keyword">or</span> (buffer-file-name o) <span class="org-string">""</span>)))
                  sacha-elisp-find-function-search-extra)))))
    (funcall fn symbol type library)))
</code></pre>
</div>


<p>
I even figured out how to <span title="(ignore (ert &quot;sacha-elisp&#45;&#45;find-function-search-for-symbol&#45;&#45;.*&quot;))">write tests for it</span>:
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">ert-deftest</span> <span class="org-function-name">sacha-elisp&#45;&#45;find-function-search-for-symbol&#45;&#45;in-buffer</span> ()
  (<span class="org-keyword">let</span> ((sym (make-temp-name <span class="org-string">"&#45;&#45;test-fn"</span>))
        buffer)
    (<span class="org-keyword">unwind-protect</span>
        (<span class="org-keyword">with-temp-buffer</span>
          (emacs-lisp-mode)
          (insert (format <span class="org-string">";; Comment\n(defun %s () (message \"Hello\"))"</span> sym))
          (eval-last-sexp nil)
          (<span class="org-keyword">setq</span> buffer (current-buffer))
          (<span class="org-keyword">with-temp-buffer</span>
            (<span class="org-keyword">let</span> ((pos (sacha-elisp-find-function-search-for-symbol nil (intern sym) nil nil)))
              (<span class="org-keyword">should</span> (equal (car pos) buffer))
              (<span class="org-keyword">should</span> (equal (cdr pos) 12)))))
      (fmakunbound (intern sym)))))

(<span class="org-keyword">ert-deftest</span> <span class="org-function-name">sacha-elisp&#45;&#45;find-function-search-for-symbol&#45;&#45;in-file</span> ()
  (<span class="org-keyword">let*</span> ((sym (make-temp-name <span class="org-string">"&#45;&#45;test-fn"</span>))
         (temp-file (make-temp-file
                     <span class="org-string">"test-"</span> nil <span class="org-string">".org"</span>
                     (format
                      <span class="org-string">"#+begin_src emacs-lisp\n;; Comment\n(defun %s () (message \"Hello\"))\n#+end_src"</span>
                      sym)))
         (sacha-elisp-find-function-search-extra (list temp-file))
         buffer)
    (<span class="org-keyword">unwind-protect</span>
        (<span class="org-keyword">with-temp-buffer</span>
          (<span class="org-keyword">let</span> ((pos (sacha-elisp-find-function-search-for-symbol nil (intern sym) nil nil)))
            (<span class="org-keyword">should</span> (equal (buffer-file-name (car pos)) temp-file))
            (<span class="org-keyword">should</span> (equal (cdr pos) 35))))
      (delete-file temp-file))))
</code></pre>
</div>


<div class="note">This is part of my <a href="https://sachachua.com/dotemacs#org-mode-org-babel-fix-find-function-when-i-ve-evaluated-something-from-org-babel">Emacs configuration.</a></div><div><a href="https://sachachua.com/blog/2026/04/ye11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch/index.org">View Org source for this post</a></div>
<p>You can <a href="https://social.sachachua.com/@sacha/statuses/01KNFTFSC3D0K7XH1JW1XTF6QG" target="_blank" rel="noopener noreferrer">comment on Mastodon</a> or <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F04%2Fye11-fix-find-function-for-emacs-lisp-from-org-babel-or-scratch%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>Emacs Carnival February 2026: Completion</title>
		<link>https://sachachua.com/blog/2026/01/emacs-carnival-february-2026-completion/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Fri, 30 Jan 2026 16:41:18 GMT</pubDate>
    <category>stream</category>
<category>emacs</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/01/emacs-carnival-february-2026-completion/</guid>
		<description><![CDATA[<div class="update" id="org715405a">
<ul class="org-ul">
<li><span class="timestamp-wrapper"><time class="timestamp" datetime="2026-03-01">[2026-03-01 Sun]</time></span>: Added <a href="https://jneidel.com/dev/hugo-links/">jneidel's</a> link back, and added <a href="https://johnrakestraw.com/post/emacs-carnival-completion-in-beancount-plain-text-accounting/">John's</a> link</li>
<li><span class="timestamp-wrapper"><time class="timestamp" datetime="2026-02-28">[2026-02-28 Sat]</time></span>: Added posts by <a href="https://www.matem.unam.mx/~omar/apropos-emacs.html#exploring-data-with-completion">oantolin</a> and <a href="https://commonplace.doubleloop.net/emacs-carnival-completion">Neil</a>. Also added a ton of <a href="https://sachachua.com/blog/2026/01/emacs-carnival-february-2026-completion/#emacs-carnival-february-2026-completion-links-and-ideas">links</a> from previous Emacs News posts. Added <a href="https://www.gonsie.com/blorg/org-completion-feb26-carnival.html">Elsa's post</a></li>
<li><span class="timestamp-wrapper"><time class="timestamp" datetime="2026-02-27">[2026-02-27 Fri]</time></span>: Added <a href="https://christiantietze.de/posts/2026/02/complete-feedback-loop-in-emacs/">Christian's post</a></li>
<li><span class="timestamp-wrapper"><time class="timestamp" datetime="2026-02-26">[2026-02-26 Thu]</time></span>: Added my post, <a href="https://macadie.info/2026/02/26/emacs-carnival-completion/">Eric's post</a>, and <a href="https://codeberg.org/eludom/home.public.notes/src/branch/master/home/public/notes/ai/20260226T090319&#45;&#45;chat-emacs-completions__public_tech.org">George's post</a></li>
<li><span class="timestamp-wrapper"><time class="timestamp" datetime="2026-02-19">[2026-02-19 Thu]</time></span>: Added post by jneidel</li>
<li><span class="timestamp-wrapper"><time class="timestamp" datetime="2026-02-16">[2026-02-16 Mon]</time></span>: <a href="https://howardism.org/Technical/Emacs/alt-completing-read.html">Added Howard's post</a></li>
</ul>

</div>

<div class="sticky-toc" id="org9a7f09a">
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="https://sachachua.com/blog/feed/index.xml#emacs-carnival-february-2026-completion-people-s-posts">People's posts!</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#emacs-carnival-february-2026-completion-first-what-s-the-emacs-carnival">First, what's the Emacs Carnival?</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#emacs-carnival-february-2026-completion-what-do-we-mean-by-completion-in-emacs">What do we mean by completion in Emacs?</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#emacs-carnival-february-2026-completion-links-and-ideas">Links and ideas</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#emacs-carnival-february-2026-completion-things-i-want-to-learn-about">Things I want to learn about</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#emacs-carnival-february-2026-completion-how-to-submit-your-entry-entries">How to submit your entry/entries</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#emacs-carnival-february-2026-completion-a-reflection-on-hosting-emacs-carnival-this-month">A reflection on hosting Emacs Carnival this month</a></li>
</ul>
</div>

</div>

<p>
For the Emacs Carnival theme for February, let's learn more about completion together.
There are all sorts of cheesy puns one can make about completion and Emacs and Valentine's Day, like "You complete me," but beyond the jokes, it's actually a really good topic to help us work with Emacs more efficiently.
</p>
<div id="outline-container-emacs-carnival-february-2026-completion-people-s-posts" class="outline-3">
<h3 id="emacs-carnival-february-2026-completion-people-s-posts">People's posts!</h3>
<div class="outline-text-3" id="text-emacs-carnival-february-2026-completion-people-s-posts">
<ul class="org-ul">
<li><a href="https://arjenwiersma.nl/completion-in-emacs-hledger">Completion (in Emacs hledger) — Arjen Wiersma</a></li>
<li><a href="https://mike.hostetlerhome.com/emacs-carnival-completion">Emacs Carnival: Completion — Where Are The Wise Men? - Mike Hostetler</a></li>
<li><a href="https://dolzhenko.me/blog/2026/02/file-name-completion-in-emacs/">File name completion in Emacs - Dmitry Dolzhenko</a></li>
<li><a href="https://cleberg.net/blog/emacs-carnival-2026-02-completion.html">Emacs Carnival: "Completion" - Christian Cleberg</a></li>
<li><a href="https://howardism.org/Technical/Emacs/alt-completing-read.html">An Alternate Completing Read - Howard Abrams</a></li>
<li><a href="https://jneidel.com/guide/emacs-completion/">Guide to Modern Emacs Completion: vertico, corfu &amp; friends - jneidel</a></li>
<li><a href="http://sachachua.com/blog/2026/02/sorting-completion-candidates-such-as-sorting-org-headings-by-level/">Sorting completion candidates, such as sorting Org headings by level - Sacha Chua</a></li>
<li><a href="https://macadie.info/2026/02/26/emacs-carnival-completion/">Emacs Carnival: Completion – Eric MacAdie</a></li>
<li><a href="https://codeberg.org/eludom/home.public.notes/src/branch/master/home/public/notes/ai/20260226T090319&#45;&#45;chat-emacs-completions__public_tech.org">CHAT emacs completions - George Jones</a></li>
<li><a href="https://sachachua.com/blog/2026/02/emacs-completion-and-handling-accented-characters-with-orderless/">Emacs completion and handling accented characters with orderless - Sacha Chua</a></li>
<li><a href="https://sachachua.com/blog/2026/02/using-speech-recognition-for-on-the-fly-translations-in-emacs-and-faking-in-buffer-completion-for-the-results/">Using speech recognition for on-the-fly translations in Emacs and faking in-buffer completion for the results - Sacha Chua</a></li>
<li><a href="https://www.matem.unam.mx/~omar/apropos-emacs.html#exploring-data-with-completion">Exploring large amounts of data with completion - Omar Antolin</a></li>
<li><a href="https://commonplace.doubleloop.net/emacs-carnival-completion">Emacs Carnival: Completion - Neil</a></li>
<li><a href="https://www.gonsie.com/blorg/org-completion-feb26-carnival.html">Emacs Carnival: Org Mode Completions - Elsa Gonsiorowski</a></li>
<li><a href="https://jneidel.com/dev/hugo-links/">Completion of hugo links in Emacs - jneidel</a></li>
<li><a href="https://johnrakestraw.com/post/emacs-carnival-completion-in-beancount-plain-text-accounting/">Emacs Carnival: Completion in Beancount Plain Text Accounting - John Rakestraw</a></li>
</ul>

<p>
Also, this one about completing the loop:
</p>

<ul class="org-ul">
<li><a href="https://christiantietze.de/posts/2026/02/complete-feedback-loop-in-emacs/">Emacs Complete: Feedback Loops in Emacs, Feedback Loops in Computing • Christian Tietze</a></li>
</ul>
</div>
</div>
<div id="outline-container-emacs-carnival-february-2026-completion-first-what-s-the-emacs-carnival" class="outline-3">
<h3 id="emacs-carnival-february-2026-completion-first-what-s-the-emacs-carnival">First, what's the Emacs Carnival?</h3>
<div class="outline-text-3" id="text-emacs-carnival-february-2026-completion-first-what-s-the-emacs-carnival">
<p>
From Christian Tietze:
</p>

<blockquote>
<p>
A blog carnival is a fun way to tie together a community with shared writing prompts, and marvel at all the creative interpretations of the topic of the month.
</p>
</blockquote>

<p>
You can get a sense of previous <a href="https://www.emacswiki.org/emacs/Carnival">Emacs Carnivals</a> by checking out the previous ones:
</p>

<table>


<colgroup>
<col class="org-left">

<col class="org-left">

<col class="org-left">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Month</th>
<th scope="col" class="org-left">Host</th>
<th scope="col" class="org-left">Topic</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">June 2025</td>
<td class="org-left"><a href="https://www.emacswiki.org/emacs/ctietze">ctietze</a></td>
<td class="org-left"><a href="https://christiantietze.de/posts/2025/06/emacs-carnival-2025-06-take-two/">"Take Two"</a></td>
</tr>

<tr>
<td class="org-left">July</td>
<td class="org-left"><a href="https://www.emacswiki.org/emacs/gnewman">gnewman</a></td>
<td class="org-left"><a href="https://gregnewman.io/blog/emacs-carnival-2025-07-writing-experience/">"Writing Experience"</a></td>
</tr>

<tr>
<td class="org-left">August</td>
<td class="org-left"><a href="https://www.emacswiki.org/emacs/takeonrules">takeonrules</a></td>
<td class="org-left"><a href="https://takeonrules.com/2025/08/01/emacs-carnival-2025-08-your-elevator-pitch-for-emacs/">"Your Elevator Pitch for Emacs"</a></td>
</tr>

<tr>
<td class="org-left">September</td>
<td class="org-left"><a href="https://www.emacswiki.org/emacs/rodiongoritskov">rodiongoritskov</a></td>
<td class="org-left"><a href="https://goritskov.com/posts/obscure_packages.html">"Obscure packages"</a></td>
</tr>

<tr>
<td class="org-left">October</td>
<td class="org-left"><a href="https://www.emacswiki.org/emacs/AndyDrop">AndyDrop</a></td>
<td class="org-left"><a href="https://plaindrops.de/blog/2025/emacscarnival/">"Maintenance, server or home or garden"</a></td>
</tr>

<tr>
<td class="org-left">November</td>
<td class="org-left"><a href="https://www.emacswiki.org/emacs/donaldh">donaldh</a></td>
<td class="org-left"><a href="https://donaldh.wtf/2025/10/emacs-carnival-2025-11-an-ode-to-org-babel/">"An ode to org-babel"</a></td>
</tr>

<tr>
<td class="org-left">December</td>
<td class="org-left"><a href="https://www.emacswiki.org/emacs/GeorgeJones">GeorgeJones</a></td>
<td class="org-left"><a href="https://curious.port111.com/2025/11/01/emacs-carnival-december-the-people.html/">"The People of Emacs"</a></td>
</tr>

<tr>
<td class="org-left">January 2026</td>
<td class="org-left"><a href="https://www.emacswiki.org/emacs/ctietze">ctietze</a></td>
<td class="org-left"><a href="https://christiantietze.de/posts/2026/01/emacs-carnival-2026-01-this-year-i-will/">"This year, I'll&hellip;"</a></td>
</tr>
</tbody>
</table>

<p>
You don't have to be an expert in order to post. In fact, this is a great way for all of us (beginners and otherwise) to focus on a topic together. Let's treat it like a kind of book club where we can share our notes as we learn.
</p>
</div>
</div>
<div id="outline-container-emacs-carnival-february-2026-completion-what-do-we-mean-by-completion-in-emacs" class="outline-3">
<h3 id="emacs-carnival-february-2026-completion-what-do-we-mean-by-completion-in-emacs">What do we mean by completion in Emacs?</h3>
<div class="outline-text-3" id="text-emacs-carnival-february-2026-completion-what-do-we-mean-by-completion-in-emacs">
<p>
<a href="https://www.emacswiki.org/emacs/CategoryCompletion">Completion</a> can make it faster to enter text and to reduce errors. You can use it to find Emacs commands even if you don't know their full names or keyboard shortcuts. You can use it to expand abbreviations or even fix the typos you usually make. You can use it when you code and when you write. I've heard some people define common abbreviations across different programming languages so they don't have to remember the differences between syntaxes, and minibuffer-completion-based interfaces like consult-ripgrep let you flip through search results  astoundingly quickly.
</p>

<p>
Let's start by talking about two types of completion:
</p>

<ul class="org-ul">
<li><p>
<b>minibuffer completion,</b> which happens in the small window at the bottom of the screen whenever you use M-x, find a file, etc. This is where you can type a little and then find matching options so that you don't have to remember the full names of commands or files. For lots of tips, check out <a href="https://www.masteringemacs.org/article/understanding-minibuffer-completion">Understanding Minibuffer Completion - Mastering Emacs</a>.
</p>

<p>
For example, here's my minibuffer for <code>M-x</code> using <a href="https://github.com/minad/vertico">vertico</a> for the display and <a href="https://github.com/minad/marginalia">marginalia</a> for annotations on the side:
</p>


<figure id="orgcee0390">
<a href="https://sachachua.com/blog/2026/01/emacs-carnival-february-2026-completion/2026-01-30_12-44-23.png"><img src="https://sachachua.com/blog/2026/01/emacs-carnival-february-2026-completion/2026-01-30_12-44-23.png" alt="2026-01-30_12-44-23.png"></a>

<figcaption><span class="figure-number">Figure 1: </span>Screenshot of minibuffer completion</figcaption>
</figure></li>

<li><p>
<b>in-buffer completion,</b> like when you expand an abbreviation, insert a snippet, or fill in the rest of a variable name.
</p>


<figure id="org1007813">
<a href="https://sachachua.com/blog/2026/01/emacs-carnival-february-2026-completion/2026-01-30_14-17-45.png"><img src="https://sachachua.com/blog/2026/01/emacs-carnival-february-2026-completion/2026-01-30_14-17-45.png" alt="2026-01-30_14-17-45.png"></a>

<figcaption><span class="figure-number">Figure 2: </span>Screenshot of in-buffer completion</figcaption>
</figure></li>
</ul>
</div>
</div>
<div id="outline-container-emacs-carnival-february-2026-completion-links-and-ideas" class="outline-3">
<h3 id="emacs-carnival-february-2026-completion-links-and-ideas">Links and ideas</h3>
<div class="outline-text-3" id="text-emacs-carnival-february-2026-completion-links-and-ideas">
<p>
Here are some ideas for things to explore. Pick an idea or come up with your own and write a post sharing what you're figuring out! (Update 2026-02-28: All right, let me try squeezing in hundreds of links from the past few years of Emacs News. 9:29 PM I think it's going to take me more time and patience to go through these links. Anyway, enjoy this rough categorization for starters!)
</p>

<ul class="org-ul">
<li>Overviews
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=fnE0lXoe7Y0">Emacs Completion Explained</a> (1:30:49, 2022)</li>
<li><a href="https://www.youtube.com/watch?v=ze1J7MG0sFg">Is the Default Emacs Completion UI Good? - System Crafters Live!</a> (01:53:35, 2025, <a href="https://systemcrafters.net/live-streams/july-18-2025/">show notes</a>)</li>
<li><a href="https://www.youtube.com/watch?v=-MhSXU6Tx28">The Latest in Emacs Completions - System Crafters Live!</a> (02:00:25, 2023)</li>
<li><a href="https://utcc.utoronto.ca/~cks/space/blog/programming/EmacsUnderstandingCompletion">My understanding of various sorts of completion in GNU Emacs</a> (2023)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1jgmw36/emacs_completion_changed_my_life/">Emacs completion changed my life</a> (<a href="https://irreal.org/blog/?p=12866">Irreal</a>)</li>
<li><a href="https://readingworldmagazine.com/emacs/2021-12-25-how-to-get-files-from-your-computer-with-emacs-1/">yuri tricys: How to Get Files From Your Computer With Emacs</a> (2021) - ido, ivy, smex</li>
</ul></li>
<li><b>Minibuffer completion</b>
<ul class="org-ul">
<li>General minibuffer UI resources and discussions
<ul class="org-ul">
<li><a href="https://www.masteringemacs.org/article/understanding-minibuffer-completion">Understanding Minibuffer Completion - Mastering Emacs</a></li>
<li><a href="https://www.youtube.com/watch?v=w9hHMDyF9V4">Emacs Minibuffer Completions</a> (23:08, 2022)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/n40lk8/poll_whats_your_ideal_minibuffer_completion_ui/">[POLL] What's your ideal minibuffer completion UI?</a></li>
<li><a href="https://manueluberti.eu/posts/2023-02-25-switch-to-minibuffer/">Manuel Uberti: Jump to minibuffer from completions</a> - binding switch-to-minibuffer</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1hln9sl/you_can_press_spc_in_the_mx_minibuffer_instead_of/">You can press SPC in the M-x minibuffer instead of "-".</a></li>
</ul></li>
<li><p>
Have you explored the built-in completion improvements in recent Emacs versions? <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Icomplete.html">Fido-mode</a>, <a href="http://xahlee.info/emacs/emacs/emacs_fido_mode.html">icomplete-vertical-mode</a>, and the <code>*Completions*</code> buffer have all gotten much better recently.
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Resources</strong></summary>
<ul class="org-ul">
<li><a href="https://thanosapollo.org/posts/emacs-built-in-completions-video/">Thanos Apollo: Emacs 30 Built-in Completion UI &amp; Styles [Video]​</a> (2024, <a href="https://www.reddit.com/r/planetemacs/comments/1hcx1l0/thanos_apollo_emacs_30_builtin_completion_ui/">Reddit</a>)</li>
<li><a href="https://manueluberti.eu/posts/2021-08-06-fido/">Manuel Uberti: Trust me, I complete</a> - fido-vertical-mode</li>
<li><a href="https://robbmann.io/posts/emacs-29-completions/">The *​Completions* Buffer Gets a Big Upgrade in Emacs 29</a> (<a href="https://www.reddit.com/r/emacs/comments/104xot6/the_completions_buffer_gets_a_big_upgrade_in/">Reddit</a>, <a href="https://irreal.org/blog/?p=11064">Irreal</a>,  <a href="https://manueluberti.eu/posts/2023-01-12-completions/">Manuel Uberti</a>)</li>
<li><a href="https://www.scss.tcd.ie/~sulimanm/posts/default-emacs-completion.html">(Me) Default emacs completions are good, I swear!</a> (<a href="https://www.reddit.com/r/emacs/comments/xz6oq8/me_default_emacs_completions_are_good_i_swear/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=Lul2XrHhTUg">emacs 28, icomplete, fido, replaces ido, and smex</a> (54:30, 2022)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/iaqlpk/fidomode_in_emacs_27/">fido-mode in Emacs 27</a></li>
<li><a href="https://www.rahuljuliato.com/posts/in-buffer-icomplete-2">Enhancing icomplete-vertical-mode in Emacs: A Follow-Up</a> (<a href="https://www.reddit.com/r/emacs/comments/1i8loza/enhancing_icompleteverticalmode_in_emacs_a/">Reddit</a>)</li>
</ul></details></li>
</ul></li>
</ul>



<ul class="org-ul">
<li><p>
Do you have nicer completion set up, like <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Icomplete.html">icomplete-vertical-mode</a>, <a href="http://xahlee.info/emacs/emacs/emacs_fido_mode.html">fido-mode or fido-vertical-mode</a>, <a href="https://www.gnu.org/software/emacs/manual/html_mono/ido.html">ido-mode or ido-vertical-mode</a>, <a href="https://github.com/emacsmirror/ivy">ivy</a>, <a href="https://github.com/minad/vertico">vertico</a>, or <a href="https://protesilaos.com/codelog/2021-10-22-emacs-mct-demo/">mct</a>? This makes things like <code>M-x</code> (<code>execute-extended-command</code>) and <code>M-y</code> (<code>yank-pop</code>) soo much nicer!
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Lots of Vertico links</strong></summary>
<ul class="org-ul">
<li><a href="https://midirus.com/blog/from-ivy-to-vertico">From Ivy To Vert&amp;co – Tristan's Zettelkasten</a></li>
<li><a href="https://manueluberti.eu/posts/2021-04-12-vertico/">Manuel Uberti: Would Alfred Hitchcock use Emacs?</a> - about vertico, vertical interactive completion</li>
<li><a href="https://utcc.utoronto.ca/~cks/space/blog/programming/EmacsVerticoSettingsNotes">My GNU Emacs settings for the vertico package (as of mid 2025)</a> (<a href="https://www.reddit.com/r/emacs/comments/1kxibr1/my_gnu_emacs_settings_for_the_vertico_package_as/">Reddit</a>)</li>
<li><a href="https://protesilaos.com/codelog/2024-02-17-emacs-modern-minibuffer-packages/">Protesilaos Stavrou: Emacs: modern minibuffer packages (Vertico, Consult, etc.)</a> (44:01 <a href="https://www.youtube.com/watch?v=d3aaxOqwHhI">YouTube</a>, <a href="https://www.reddit.com/r/emacs/comments/1ata3o3/emacs_modern_minibuffer_packages_vertico_consult/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=4911q_SnGDU">Emacs from Source Part 2: vertico, orderless, and marginalia</a> (19:23, 2022)</li>
<li><a href="https://www.youtube.com/watch?v=QBvGa0Yg1NI">GNU/Emacs - Vertico Embark Consult Marginalia Orderless for completion &amp; some extra functionalities</a> (10:44, 2021)</li>
<li><a href="https://www.youtube.com/watch?v=UtqE-lR2HCA">System Crafters Live! - Replacing Ivy and Counsel with Vertico and Consult</a> (01:59:18)</li>
<li><a href="https://www.youtube.com/watch?v=J0OaRy85MOo">Streamline Your Emacs Completions with Vertico</a> (18:54, 2021, <a href="https://reddit.com/r/emacs/comments/neh3d7/streamline_your_emacs_completions_with_vertico/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=0OuF6PLkzsQ">Modern Emacs Part 1: Consult, Marginalia, Vertico, Orderless and Embark - VOD</a> (01:20:50)</li>
<li><a href="https://www.youtube.com/watch?v=MB4oe8QELM0">emacs 대화형 완성(interactive completion) 패키지 vertico가 한글 증분 검색을 지원하게 수정</a> (01:09, 2023)</li>
<li><a href="https://gist.github.com/anticomputer/ea71ecab639326bf540418f31c600e09">ivy compliant vertico config · GitHub</a></li>
<li><a href="http://emacs.dyerdwelling.family/emacs/20241004102654-emacs&#45;&#45;simple-directory-creation-using-vertico-exit-with-input/">James Dyer: Simple Directory and File Creation Using Vertico Completion Exit With Input</a> - M-RET exists with the minibuffer input</li>
<li><a href="https://erick.navarro.io/blog/switching-from-helm-to-vertico-and-friends/">Switching from helm to vertico and friends</a> (<a href="https://www.reddit.com/r/emacs/comments/1686ujn/switching_from_helm_to_vertico_and_friends/">Reddit</a>)</li>
<li><a href="https://mastodon.bsd.cafe/@sqrtminusone/113177489101406632">vertico impressions</a> Mastodon thread</li>
<li><a href="https://github.com/ventruvian/vertico-timer">vertico-timer, my opinionated approach to vertico-indexed and candidate selection</a> (<a href="https://www.reddit.com/r/emacs/comments/1ozd9e0/sharing_a_verticoextension_verticotimer_my/">Reddit</a>)</li>
<li><a href="https://github.com/jdtsmith/vertico-truncate">vertico-truncate: Judicious truncation for long vertico lines</a> (2023)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/117zdnu/what_are_the_benefits_of_vertico_over_helm_or_ivy/">What are the benefits of Vertico over Helm or Ivy?</a> Reddit discussion</li>
<li><a href="https://codeberg.org/jao/elibs/src/branch/main/custom/jao-custom-completion.el">custom/jao-custom-completion.el</a></li>
<li><a href="https://github.com/steve-downey/completion.tap">completion.tap/after-init.el</a> - vertico, consult, cape, etc. starter config</li>
<li><a href="https://kristofferbalintona.me/posts/202202211546/">Vertico, Marginalia, All-the-icons-completion, and Orderless</a> (2022, updated 2025)</li>
<li><a href="https://www.youtube.com/watch?amp;t=511s&amp;v=hPwDbx&#45;&#45;Waw">Vertico Extensions for Emacs</a> (12:43, 2022, <a href="https://www.reddit.com/r/emacs/comments/ryqfz1/vertico_extensions_demo/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=gal3YxBkusY">Emacs packages ednc, vertico, consult, embark, marginalia, orderless and fd-dired</a> (41:14)</li>
<li><a href="https://gist.github.com/rougier/126e358464e12aa28fac5b4f3dd5eb9c">vertico + marginalia + mini-frame + lot of hacks&hellip;</a> (<a href="https://www.reddit.com/r/emacs/comments/tnih4d/vertico_marginalia_miniframe_lot_of_hacks/">Reddit</a>) NANO prototype</li>
</ul></details></li>
</ul>



<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Ido</strong></summary>
<ul class="org-ul">
<li><a href="https://www.masteringemacs.org/article/introduction-to-ido-mode">Introduction to Ido Mode</a> (<a href="https://www.reddit.com/r/emacs/comments/1167jwk/introduction_to_ido_mode/">Reddit</a>)</li>
<li><a href="https://github.com/DarwinAwardWinner/ido-yes-or-no">ido-yes-or-no: Use ido to answer yes or no questions.</a></li>
<li><a href="https://github.com/sstraust/ido-numbered-mode">GitHub - sstraust/ido-numbered-mode: Add numbered mode to ido in emacs!</a> (<a href="https://www.reddit.com/r/emacs/comments/xf6b0i/idonumberedmode_i_made_my_first_emacs_package_it/">Reddit</a>)
<ul class="org-ul">
<li><a href="https://github.com/johndoeuserr02/ido-numbered-mode/tree/johndoeuserr02-patch-1">Patch ido-numbered-mode to allow 0 key</a> (<a href="https://www.reddit.com/r/emacs/comments/1q09erd/in_relation_with_ido_mode/">Reddit</a>)</li>
</ul></li>
<li><a href="https://github.com/larkery/ido-grid.el">ido-grid.el: reimplementation of ido-grid-mode to be simpler/faster</a></li>
<li><a href="http://emacsredux.com/blog/2021/10/28/submitting-the-current-input-in-ido/">Emacs Redux: Submitting the Current Input in ido</a></li>
</ul>


</details>
<ul class="org-ul">
<li>Do you know about <code>S-M-x</code> (<code>execute-extended-command-for-buffer</code> - available with Emacs 28.1 or higher), which suggests commands relevant to the current mode?
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1ismjvx/the_mx_menu_is_probably_the_least_talked_about/">The M-x menu is probably the least talked about feature of Emacs.</a></li>
</ul></li>
<li>Have you gotten the hang of using <code>M-p</code> to go back through your history? (Did you know you can interactively search through that history with <code>C-s</code> and <code>C-r</code>?)</li>
<li>Do you know about using <code>M-n</code> to go into the <a href="https://engineering.collbox.co/post/working-faster-in-emacs-by-reading-the-future/">future history</a>?</li>
<li>Have you tried saving your minibuffer history with <a href="https://github.com/emacs-mirror/emacs/blob/master/lisp/savehist.el">savehist</a>?</li>
<li>Do you want to experiment with <a href="https://irreal.org/blog/?p=314">recursive minibuffers</a> so that you can do something else in the middle of a completion?</li>
<li>Have you tweaked the way you navigate to take advantage of completion?</li>
<li><p>
Have you experimented with other ways of matching candidates via <code>completion-styles</code>, like the way <a href="https://github.com/oantolin/orderless">orderless</a> lets you type parts of the completion name in any order?
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Resources</strong></summary>
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=QNdOBXVdd1Q">Exploring Emacs Completion Styles - System Crafters Live!</a> (02:03:03, 2024, <a href="https://systemcrafters.net/live-streams/november-15-2024/">show notes</a>)</li>
<li><a href="https://emacs.dyerdwelling.family/emacs/20250604085817-emacs&#45;&#45;building-your-own-orderless-style-completion-in-emacs-lisp/">James Dyer: Building Your Own Orderless Style Completion in Emacs Lisp</a></li>
<li><a href="https://emacs.dyerdwelling.family/emacs/20250905100614-emacs&#45;&#45;customizing-emacs-completion-from-fidos-fuzzy-matching-to-literal-substring-search/">James Dyer: Customizing Emacs Completion: From Fido's Fuzzy Matching to Literal Substring</a> (2025, <a href="https://irreal.org/blog/?p=13252">Irreal</a>)</li>
<li><a href="https://github.com/jojojames/fussy">fussy: completion-style/fuzzy matching/scoring system for vertico/ivy/helm/etc</a> (<a href="https://www.reddit.com/r/emacs/comments/v4rq3p/fussy_a_completionstylefuzzy_matchingscoring/">Reddit</a>)</li>
<li><a href="https://github.com/lewang/hotfuzz-with-orderless">completion experiment - hotfuzz-with-orderless</a> (2025, <a href="https://www.reddit.com/r/emacs/comments/1l8kas3/completion_experiment_hotfuzzwithorderless/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/18dh631/emacs_advent_calendar_7_ordeless_embark_10_and/">Emacs Advent Calendar 7: orderless, embark 1.0 and some bric-a-brac</a> (2023)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/xt8pj7/magic_orderless/">Magic orderless</a> - tweaking the OR operator (2022)</li>
<li><a href="https://magnus.therning.org/2024-05-04-orderless-completion-in-lsp-mode.html">Magnus: Orderless completion in lsp-mode</a> (2024)</li>
<li><a href="https://www.youtube.com/watch?v=WqN27ltSwag">Activate superword mode in the Emacs Minibuffer #coding #programming</a> (01:07, 2025) treat symbols (ex: <code>example_symbol</code>) as words</li>
</ul></details></li>
</ul>



<ul class="org-ul">
<li><p>
Have you checked out the convenient search and navigation commands in more complex completion frameworks like <a href="https://github.com/minad/consult">consult</a>, <a href="https://elpa.gnu.org/packages/counsel.html">counsel</a>, or <a href="https://github.com/emacs-helm/helm">helm</a>?
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Consult</strong></summary>
<ul class="org-ul">
<li><a href="https://protesilaos.com/codelog/2021-01-06-emacs-default-completion/">Emacs: completion framework (Embark, Consult, Orderless, etc.)</a> (2021, <a href="https://reddit.com/r/emacs/comments/krptmz/emacs_completion_framework_embark_consult/">Reddit</a>, <a href="https://www.youtube.com/watch?v=43Dg5zYPHTU">YouTube</a> 46:58)</li>
<li><a href="https://macowners.club/posts/from-ivy-to-vertico/">From Ivy &amp; Counsel to Vertico &amp; Consult</a> (2021, <a href="https://reddit.com/r/emacs/comments/ol2luk/from_ivy_counsel_to_vertico_consult/">Reddit</a>)</li>
<li><a href="https://cestlaz.zamansky.net/cestlaz-old-hugo.github.io/post/using-emacs-80-vertico/">Using Emacs Episode 80 Vertico, Marginalia, Consult, and Embark</a> (<a href="https://www.youtube.com/watch?v=5ffb2at2d7w">YouTube</a> 25:10, <a href="https://www.reddit.com/r/emacs/comments/qfrxgb/using_emacs_episode_80_vertico_marginalia_consult/">Reddit</a>, <a href="https://irreal.org/blog/?p=10074">Irreal</a>, 2021)</li>
<li><a href="https://www.reddit.com/r/emacs/s/hNF4Y5Jrap">Comparison of vertico, ivy, consult, counsel, marginalia, ivy-rich, embark, ivy-occur</a></li>
<li><a href="https://www.youtube.com/watch?v=HzlLxWTD6QY">21天学会Emacs 2022 Edition（第四天）</a> - vertico, orderless, marginalia, embark, consult</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1qef1wl/consult_breaking_change/">Consult breaking change</a> (2026) options can be specified at the start</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1oy6ddj/new_releases_of_consult_vertico_corfu_and_more/">New releases of Consult, Vertico, Corfu and more</a> (2025)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/14bx3m9/concealing_star_buffers_with_consult/">Concealing Star Buffers with Consult</a> (2023)</li>
<li><a href="https://www.youtube.com/watch?v=fLBNpNu65ik">Emacs Consult Git Is A Way To See All The Files Of A Git Repo In Minibuffer</a> (07:41)</li>
<li><a href="https://emacsredux.com/blog/2021/11/25/redo-complex-command-with-consult/">Emacs Redux: Redo Complex Command with Consult</a> (2021)</li>
<li><a href="https://takeonrules.com/2023/03/14/spending-a-bit-of-time-reviewing-consult-emacs-package/">Jeremy Friesen: Spending a Bit of Time Reviewing Consult Emacs Package</a> (2023)</li>
<li><a href="http://amitp.blogspot.com/2024/05/emacs-consult-buffer-filenames.html">Amit Patel: Emacs consult-buffer filenames</a> (2024)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1iagdzb/i_wrote_my_first_emacs_function/">consult-dir&ndash;zoxide-dirs</a> (2025)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/10p84fk/consultinfo/">consult-info</a> (2023) choose one or more info manuals to search</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1p9nowr/update_on_consult_and_jinx/">Update on Consult and Jinx</a> (2025) - Jinx is a spell-checker</li>
<li><a href="https://www.reddit.com/r/emacs/comments/14aglvm/highlight_multiple_lines_in_consultline/">Highlight multiple lines in consult-line</a> (2023)</li>
<li><a href="http://www.emacs.dyerdwelling.family/emacs/20240127113907-emacs&#45;&#45;disabling-consult-preview-selectively/">James Dyer: Opening Frequently Used Files More Efficiently using consult</a> (2024)</li>
<li><a href="https://emacs.dyerdwelling.family/emacs/20230225134207-emacs&#45;&#45;trying-out-consult-ripgrep-to-replace-deadgrep/">James Dyer: Replacing deadgrep with consult-ripgrep</a> (2023)</li>
<li><a href="https://v.redd.it/fq5vj5rcz45a1">Make vertico-posframe move to the side so consult previews work nicely</a> (<a href="https://www.reddit.com/r/emacs/comments/zi3qb9/make_verticoposframe_move_to_the_side_so_consult/">Reddit</a>, 2023)</li>
<li><a href="https://manueluberti.eu/posts/2022-09-01-consult-xref/">Manuel Uberti: Ugrep and consult-xref</a> (2022)</li>
<li><a href="https://manueluberti.eu/posts/2023-09-16-consult-ugrep/">Using Ugrep with Consult</a> (2023)</li>
<li><a href="https://magnus.therning.org/2023-03-30-more-on-tree-sitter-and-consult.html">More on tree-sitter and consult</a> (<a href="https://www.reddit.com/r/emacs/comments/126umaf/more_on_treesitter_and_consult/">Reddit</a>, 2023)</li>
<li><a href="https://sachachua.com/blog/2025/07/finding-my-blog-posts-with-consult-omni/">Sacha Chua: Finding my blog posts with consult-omni</a> (2025)</li>
<li><a href="https://taonaw.com/2025/05/15/two-eamcs-tweaks-i-forgot.html">TAONAW - Emacs and Org Mode: consult-recent-file, consult-org-agenda</a> (2025)</li>
<li><a href="https://takeonrules.com/2024/06/08/adding-a-consult-function-for-visualizing-xref/">Jeremy Friesen: Adding a Consult Function for Visualizing Xref</a> (2024)</li>
<li><a href="https://takeonrules.com/2024/02/28/configuring-consult-imenu-narrowing-for-ruby/">Jeremy Friesen: Configuring Consult Imenu Narrowing for Ruby</a> (2024)</li>
<li><a href="https://gitlab.com/OlMon/consult-projectile">[ANN] consult-projectile - Consult integration for projectile</a> (<a href="https://reddit.com/r/emacs/comments/m9zgwi/ann_consultprojectile_consult_integration_for/">Reddit</a>, 2021)</li>
<li><a href="https://codeberg.org/ravi/consult-dash">Consult interface to dash-docs</a></li>
<li><a href="https://github.com/youngker/consult-codesearch.el">consult-codesearch.el: Consult interface for codesearch</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/sszyq3/consultproject_consult_extension_for_projectel/">Consult-project - consult extension for project.el</a> (2022)</li>
<li><a href="https://github.com/nohzafk/consult-snapfile">consult-snapfile: instant file search for Consult (Rust server, &lt;1ms cached queries)</a> (<a href="https://www.reddit.com/r/emacs/comments/1pweleu/consultsnapfile_instant_file_search_for_consult/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/rvd2yi/dtache_consult/">Dtache Consult</a></li>
<li><a href="https://github.com/armindarvish/consult-omni">consult-omni: A powerful omni-search and launcher in Emacs (like Spotlight or Alfred but in Emacs)</a> (<a href="https://www.reddit.com/r/emacs/comments/1e6qhpf/announcing_consultomni_a_powerful_omnisearch_and/">Reddit</a>)</li>
<li><a href="https://github.com/chmouel/consult-vc-modified-files">chmouel/consult-vc-modified-files: List git modified files in a project with vc</a> (<a href="https://www.reddit.com/r/emacs/comments/17bbh8g/consultvcmodifiedfiles_list_git_modified_files_in/">Reddit</a>) (<a href="https://fosstodon.org/@chmouel/114913425410668000">new version</a> adds consult-vc-log-select-files)</li>
<li><a href="https://github.com/karthink/consult-dir">consult-dir: switch directories in Emacs at any time</a> (<a href="https://www.reddit.com/r/emacs/comments/p4wk1u/consultdir_switch_directories_in_emacs_at_any_time/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1pdct4q/consultjq_live_queries_against_json_vai_jq_and/">consult-jq: Live queries against JSON via jq and consult</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/t4i0tn/consultprojectextra_previously_consultproject_is/">consult-project-extra (previously consult-project) is now on MELPA!</a></li>
<li><a href="https://github.com/karthink/consult-reftex">consult-reftex</a></li>
<li><a href="https://github.com/jdtsmith/consult-ripfd">consult-ripfd: live finding + searching with an fd + rg consult mashup</a> (<a href="https://www.reddit.com/r/emacs/comments/1q61xq1/consultripfd_live_finding_searching_with_an_fd_rg/">Reddit</a>)</li>
<li><a href="https://github.com/guibor/consult-spotlight">consult-spotlight: consult with macOS Spotlight</a> (<a href="https://www.reddit.com/r/emacs/comments/1pqggx3/consultspotlight_consult_with_macos_spotlight/">Reddit</a>)</li>
<li><a href="https://jao.io/blog/consulting-spotify-in-a-better-way.html">consulting spotify in a better way</a></li>
<li><a href="https://www.youtube.com/watch?si=5N_5YeKIjHJH2cjT&amp;v=7pDfyqBZwvo&amp;feature=youtu.be">Emacs consult-web package: Get web search results as well as omni searches inside emacs!</a> (1:40:55, 2025)</li>
<li><a href="https://jao.io/blog/consult-recoll-with-live-preview.html">jao: consult recoll with live preview</a></li>
<li><a href="https://jao.io/blog/inline-snippets-and-grouping-in-consult-recoll.html">jao: inline snippets and grouping in consult-recoll</a></li>
<li><a href="https://takeonrules.com/2025/04/11/extending-consult-notes-package-to-add-draft-blog-post-candidates/">Jeremy Friesen: Extending consult-notes Package to Add Draft Blog Post Candidates</a></li>
<li><a href="https://blog.hoetzel.info/post/consult-gnome-search/">Jürgen Hötzel: Gnome Search Provider: Emacs Integration</a> (<a href="https://www.reddit.com/r/emacs/comments/1d3uwyn/emacs_integration_for_gnome_search_provider/">Reddit</a>)</li>
<li><a href="https://github.com/liuyinz/consult-todo.git">liuyinz/consult-todo</a> - search, filter, and jump hl-todo keywords (<a href="https://www.reddit.com/r/emacs/comments/162v446/new_package_consulttodo/">Reddit</a>)</li>
<li><a href="https://github.com/mclear-tools/consult-notes">mclear-tools/consult-notes: Use consult to search notes</a> (<a href="https://www.reddit.com/r/emacs/comments/v7h6jk/new_package_consultnotes/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/pcoyjs/new_package_consultbibtex/">New package consult-bibtex</a></li>
<li><a href="https://codeberg.org/rahguzar/consult-hoogle/src/branch/hoogle-buffer">rahguzar/consult-hoogle: Hoogle for emacs</a></li>
<li><a href="https://sachachua.com/blog/2025/10/consult-org-db-v3-approximate-search-of-my-sketches-using-text-and-a-multi-source-consult-command-for-approximately-searching-sketches-and-blog-posts/">Sacha Chua: consult + org-db-v3: Approximate search of my sketches using text, and a multi-source consult command for approximately searching sketches and blog posts</a></li>
<li><a href="https://git.sr.ht/~woolsweater/uncongregate.el">uncongregate.el: Custom handling of query string in consult grep</a></li>
<li><a href="https://codeberg.org/mekeor/emacs-consult-erc">consult-erc &ndash; ERC-related buffer candidate sources for consult-buffer</a> (<a href="https://www.reddit.com/r/emacs/comments/19aigl6/wip_consulterc_ercrelated_buffer_candidate/">Reddit</a>)</li>
</ul></details></li>
</ul>



<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Helm</strong></summary>
<ul class="org-ul">
<li><a href="https://rnchzn.github.io/helm/doc/helm-manual.html">Helm documentation</a></li>
<li><a href="https://occasionallycogent.com/intermediate_emacs_helm/index.html">James Cash: Intermediate Emacs: Customizing Helm</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/ar7992/helm_news_for_geiser_slime_comint_mx_shell_and/">Helm news for Geiser, SLIME, Comint, M-x shell, and more!</a></li>
<li><a href="https://github.com/emacs-helm/helm/releases/tag/v4.0">Helm 4.0 released (and no release notes)</a> (<a href="https://www.reddit.com/r/emacs/comments/1f07voc/helm_40_released_and_no_release_notes/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=NgOaveOtVd8">Emoji Insertion in Emacs With Helm</a> (04:37, 2024)</li>
<li><a href="https://github.com/youngker/helm-codesearch.el">helm-codesearch.el:helm interface for codesearch</a></li>
<li><a href="https://github.com/burnthekernel/helm-browser">burnthekernel/helm-browser: helm-browser is an Emacs package that can be used to quickly find and switch between multiple browser windows and tabs.</a></li>
<li><a href="http://ag91.github.io/blog/2022/09/13/a-way-to-fix-helm-handling-of-symlink-tmp-dir-in-mac-os">Andrea: A way to fix Helm handling of symlink (/tmp dir) in Mac OS</a></li>
<li><a href="https://github.com/BenediktBroich/helm-twitch">helm-twitch</a></li>
<li><a href="https://github.com/dfeich/helm-deft">helm-deft: A helm based emacs module to help search in a predetermined list of directories. Inspired by the deft module.</a></li>
<li><a href="https://occasionallycogent.com/emacs_new_completions_helper/index.html">James Cash: Emacs Completes Me</a> - open in split, sort shells by distance, jumping around</li>
</ul>


</details>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Ivy/counsel</strong></summary>
<ul class="org-ul">
<li><a href="https://martinfowler.com/articles/2024-emacs-completion.html">Improving my Emacs experience with completion</a> (<a href="https://news.ycombinator.com/item?id=39187370">HN</a>, <a href="https://irreal.org/blog/?p=11960">Irreal</a>) - Ivy</li>
<li><a href="https://www.youtube.com/watch?v=is4sCzDTlJY">Emacs Counsel M X Is A Bloody Good Way To Find Commands 2025_02_23_16:29:00</a> (07:00, 2025)</li>
<li><a href="https://www.youtube.com/watch?v=XfFso24XeFQ&amp;list=PL0sMmOaE_gs3E0OjExoI7vlCAVygj6S4I&amp;index=3">scimax - ivy for completion with actions</a> (35:50, 2021, <a href="https://irreal.org/blog/?p=10087">Irreal</a>)</li>
<li><a href="https://github.com/gexplorer/counsel-popup">counsel-popup: The power of searching with counsel using transient popups Magit style.</a></li>
<li><a href="http://mbork.pl/2021-05-24_Ivy_and_ignoring_the_order_of_tokens">Marcin Borkowski: Ivy and ignoring the order of tokens</a></li>
<li><a href="https://fediverse.tv/w/2r5b2JCkazgiW2NnNJP9k7">Emacs : Completado y busqueda ( con-Ivy+Swiper )</a></li>
</ul>


</details>
<ul class="org-ul">
<li>Have you experimented with other <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Options.html">sort orders</a> like the built-in historical option or more complex sorts with <a href="https://github.com/radian-software/prescient.el">prescient.el</a>?
<ul class="org-ul">
<li><a href="https://youtu.be/T9kygXveEz0">Give Emacs Psychic Completion Powers with prescient.el</a> (<a href="https://reddit.com/r/emacs/comments/kitzsc/give_emacs_psychic_completion_powers_with/">Reddit</a>)</li>
<li><a href="https://github.com/axelf4/emacs-completion-bench#readme">emacs-completion-bench: Benchmark of various fuzzy Emacs completion styles</a></li>
</ul></li>
<li><p>
Do you want to see additional information when you're choosing completions? Try out <a href="https://github.com/minad/marginalia">marginalia</a> and other customizations.
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Resources</strong></summary>
<ul class="org-ul">
<li><a href="https://manueluberti.eu/posts/2023-04-16-vertico-current/">Manuel Uberti: Tweaking Vertico candidates</a></li>
<li><a href="https://namilus.github.io/posts/completions-overlay-intro.html">completions-overlay.el Overlays for completion candidates</a> (<a href="https://www.reddit.com/r/emacs/comments/1mtpb2m/completionsoverlayel_overlays_for_completion/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=M1DqNxMp8ws">Emacs Commands Explanation Via Marginalia Annotation 2024_08_12_04:10:20</a> (07:23, 2025)</li>
<li><a href="https://lifeofpenguin.blogspot.com/2024/07/annotate-completion-candidates-gnu-emacs.html">Anand Tamariya: Annotate completion candidates (GNU Emacs)</a> (<a href="https://www.reddit.com/r/emacs/comments/1e2y513/annotate_completion_candidates_gnu_emacs/">Reddit</a>)</li>
<li><a href="https://sachachua.com/blog/2021/02/marginalia-and-hiding-the-value-of-password-ish-variables/">Sacha Chua: Marginalia and hiding the value of password-ish variables</a></li>
<li><a href="https://emacs.dyerdwelling.family/emacs/20250130074049-emacs&#45;&#45;copy-icomplete-candidate-to-clipboard/">James Dyer: Copying completion candidate to the clipboard</a> (<a href="https://irreal.org/blog/?p=12759">Irreal</a>)</li>
<li><a href="https://alpo.gitlab.io/jots/posts/2024/07/jump-to-emacs-completions-buffer/">Alex Popescu: Key Binding and Function to Jump to Emacs Completions Buffer</a> (<a href="https://irreal.org/blog/?p=12356">Irreal</a>)</li>
<li><a href="https://github.com/MintSoup/all-the-icons-completion">GitHub - MintSoup/all-the-icons-completion: Add icons to completion candidates in Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/y6d265/a_better_alltheiconscompletion_support_for_more/">Reddit</a>)</li>
<li><a href="https://kisaragi-hiu.com/emacs-completion-metadata.html">While dissecting embark and marginalia, I learnt that functions passed to completing-read also returns a category</a></li>
</ul></details></li>
</ul>



<ul class="org-ul">
<li><p>
Have you checked out <a href="https://github.com/oantolin/embark">embark</a> for doing other things with your completion like inserting a file name instead of opening it, or changing the command that you wanted to do, or acting on multiple items?
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Resources</strong></summary>
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/mg6kx2/embark_key_features_and_tweaks/">Embark &ndash; Key features and tweaks</a></li>
<li><a href="https://manueluberti.eu/posts/2020-12-25-embark/">Embarking in a new affair with completions</a> (<a href="https://reddit.com/r/emacs/comments/kk89rs/embarking_in_a_new_affair_with_completions/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=uoP9ZYdNCHg">Emacs: Embark and my extras</a> (33:21, 2021, <a href="https://reddit.com/r/emacs/comments/ktuizj/emacs_embark_and_my_extras/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=qk2Is_sC8Lk">System Crafters Live! - The Many Uses of Embark</a> (01:56:43, 2021)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/osx5t9/recent_embark_developments_detailed_action/">Recent Embark Developments: Detailed Action Indicator, Highlighting and Cycling the Target at Point</a></li>
<li><a href="https://manueluberti.eu/posts/2023-10-01-embark-ugrep/">Using Ugrep with Embark</a></li>
<li><a href="https://karthinks.com/software/elmo-embark-live-mode-for-emacs/">Karthik Chikmagalur: ELMO - Embark Live Mode for Emacs</a></li>
<li><a href="https://mastodon.social/@ctietze/112161263055070814">Embark/Vertico tip: switch to multiform/grid display - @ctietze@mastodon.social</a></li>
</ul></details></li>
</ul>



<ul class="org-ul">
<li>If you use Org Mode, do you want to <a href="https://www.gnu.org/software/emacs/manual/html_node/org/Adding-Hyperlink-Types.html">make your own custom Org link type with completion</a>?
(I really like being able to quickly link to <a href="https://sachachua.com/dotemacs#linking-to-blog-posts">blog posts</a>, <a href="https://sachachua.com/dotemacs#links-to-my-config">parts of my config</a>, or <a href="https://sachachua.com/blog/2024/01/using-an-emacs-lisp-macro-to-define-quick-custom-org-mode-links-to-project-files/">project files</a> with completion)</li>
<li><p>
Do you want to define your own completion commands, maybe even with previews, dynamic collections or asynchronous data?
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Resources</strong></summary>
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1e0w6r0/confused_implementing_programmed_completion_a/">Confused implementing programmed completion? A snippet to get you started</a></li>
<li><a href="https://xenodium.com/bending-emacs-episode-8-completing-read">Alvaro Ramirez: Bending Emacs - Episode 8: completing-read</a> (<a href="https://www.youtube.com/watch?v=J_WxzZXuTLI">YouTube</a> 17:05 2025, <a href="https://www.reddit.com/r/emacs/comments/1pktlz0/bending_emacs_episode_8/">Reddit</a>, <a href="https://irreal.org/blog/?p=13467">Irreal</a>)</li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2021-04/msg01097.html">[emacs-devel] RFC: Setting `minibuffer-completion-table` buffer-locally</a></li>
<li><a href="https://github.com/ichernyshovvv/completing-read-strings">completing-read-strings.el - Read multiple strings in the minibuffer, with completion</a> (<a href="https://www.reddit.com/r/emacs/comments/1d2od0t/completingreadstringsel_read_multiple_strings_in/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=bB7rywlahSc">Semantic completing read in #Emacs</a> (17:24, 2023)</li>
<li><a href="https://emacs.dyerdwelling.family/emacs/20240804075952-emacs&#45;&#45;finding-files-using-completing-read/">James Dyer: Efficient File Searching in Emacs: Leveraging completing-read with Customizable Methods</a></li>
<li><a href="https://tsdh.org/posts/2023-03-21-a-read-buffer-function-also-suggesting-recent-files.html">Tassilo Horn: A read-buffer-function also suggesting recent files</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/k2at05/rfc_immediate_completion_feature_checking_before/">{RFC} Immediate completion feature (checking before publishing package)</a></li>
</ul></details></li>
</ul>




<ul class="org-ul">
<li><b>In-buffer completion</b>
<ul class="org-ul">
<li>Overviews:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/us51if/please_tell_me_about_the_different_approaches_to/">Please tell me about the different approaches to text expansion you can find in emacs.</a> (<a href="https://irreal.org/blog/?p=10540">Irreal</a>)</li>
<li><a href="https://youtu.be/Vx0bSKF4y78">The Many Forms of Code Completion In Emacs</a> (16:56, <a href="https://www.reddit.com/r/emacs/comments/y4rnqa/the_many_forms_of_code_completion_in_emacs/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=uBRxUnMYIjs">Emacs Snippets and Templates</a> (37:50, 2022)</li>
</ul></li>
<li><p>
Have you set up your own <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Abbrevs.html">abbreviations</a> to fix common typos or expand text quickly?
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Resources</strong></summary>
<ul class="org-ul">
<li><a href="https://www.johndcook.com/blog/2023/01/30/good-autocomplete/">John D. Cook: Good autocomplete</a> (<a href="https://www.reddit.com/r/emacs/comments/10plt9x/good_autocomplete/">Reddit</a>)</li>
<li><a href="https://github.com/xFA25E/abbrev-hook">abbrev-hook: Define hooks for abbrevs in Emacs</a></li>
<li><a href="https://www.emacs.dyerdwelling.family/emacs/20221123131342-emacs&#45;&#45;expanding-text-using-abbrev/">Expanding Text using abbrev and skeletons</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/13bdcg0/lam_manage_buffer_local_abbrevs_at_the_speed_of/">lam: Manage buffer local abbrevs at the speed of light</a> (<a href="https://irreal.org/blog/?p=11342">Irreal</a>)</li>
<li><a href="https://mbork.pl/2022-12-05_A_simple_function_to_create_abbreviations">Marcin Borkowski: A simple function to create abbreviations</a></li>
<li><a href="https://www.rahuljuliato.com/posts/abbrev-mode">Crafting Your Own Snippets with Emacs Built-In Abbrev Mode</a> (<a href="https://www.reddit.com/r/emacs/comments/1ox5mbi/crafting_your_own_snippets_with_emacs_builtin/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=G5jmVz2FWpg">Emacs For Writers Unit 10: Text Expansion with Abbrev Mode</a> (07:38, 2025)</li>
<li><a href="https://www.youtube.com/watch?v=-u_dl4WmDbY">Emacs Abbrevs</a> (01:04, 2022)</li>
<li><a href="https://chainsawriot.com/postmannheim/2022/12/09/aoe9.html">Chung-hong Chan: Advent of emacs #9: How I type formulaic things in emacs</a></li>
<li><a href="https://fediverse.tv/w/aPdQAs2vRcBVsFpK9MMERV">Agilidad escribiendo en Emacs : abreviación -i</a></li>
</ul></details></li>
</ul></li>
</ul>



<ul class="org-ul">
<li>Have you tried using <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Dynamic-Abbrevs.html">dabbrev-expand</a> to expand words based on what you have in the current buffer or in other buffers?
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/oojacm/fancydabbrev_complete_as_you_type_recent/">fancy-dabbrev: complete as you type, recent improvements</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1i3ej9u/simple_prototype_insert_and_evaluate_elisp_inline/">Simple prototype: inline autosuggesting for eshell, comint and in-buffer (using dabbrev)</a></li>
</ul></li>
<li>Do you want to try <a href="https://www.gnu.org/software/emacs/manual/html_node/autotype/Hippie-Expand.html">hippie-expand</a> to try different functions for expansion?
<ul class="org-ul">
<li><a href="http://www.masteringemacs.org/article/text-expansion-hippie-expand">Mickey Petersen: Text Expansion with Hippie Expand</a> (<a href="https://www.reddit.com/r/emacs/comments/urmnjj/text_expansion_with_hippie_expand/">Reddit</a>, <a href="https://irreal.org/blog/?p=10538">Irreal</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1it5yyi/simple_functions_for_making_hippieexpand_more/">Simple Functions for Making Hippie-Expand More Intuitive to Use</a></li>
</ul></li>
<li><p>
Have you defined your own snippets for prose or code? (<a href="https://github.com/joaotavora/yasnippet">Yasnippet</a> is popular.)
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Lots of Yasnippet links</strong></summary>
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=0qEHgiaSnsw">Yasnippet: A Useful Templating System in Emacs</a> (09:20, 2025)</li>
<li><a href="https://www.youtube.com/watch?v=UWJRgmAIZcg">Emacs YASnippet</a> (13:04, 2022)</li>
<li><a href="https://www.youtube.com/watch?v=OIdtVXCC7Wc">Emacs: Yasnippet</a> (33:40, 2021)</li>
<li><a href="https://blog.fixermark.com/posts/2024/emacs-recipes-with-yasnippet/">Emacs Recipes With Yasnippet | Mark's Project Blog</a> (<a href="https://mastodon.fixermark.com/@mark/112107194852116882">@mark@mastodon.fixermark.com</a>)</li>
<li><a href="http://xenodium.com/emacs-generate-a-swift-initializer">Alvaro Ramirez: Emacs: Context-aware yasnippets</a> (<a href="https://www.reddit.com/r/emacs/comments/zkb7aq/contextaware_yasnippets_via_treesitter/">Reddit</a>, <a href="https://news.ycombinator.com/item?id=34033087">HN</a>)</li>
<li><a href="https://emacstil.com/til/2022/02/19/use-yasnippet-for-personal-planning/">Emacs TIL: Use yasnippet for personal planning</a></li>
<li><a href="https://www.youtube.com/watch?v=5cGsiRtBK9I&amp;feature=youtu.be">LaTeX snippets with Yasnippet &amp; Auto Activating Snippets</a> (11:21, 2023)</li>
<li><a href="https://mjdiloreto.github.io/posts/yasnippet-helpful-buffer/">Making the yasnippet <b>new-snippet</b> buffer more helpful, and comparing it to Jetbrains live templates</a> (<a href="https://www.reddit.com/r/emacs/comments/ynrrnk/making_the_yasnippet_newsnippet_buffer_more/">Reddit</a>)</li>
<li><a href="https://one-octet.dev/posts/emacs-yasnippet.html">One-Octet: Emacs: Yasnippet</a> (in French)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/ynbbu7/store_autoyasnippets_in_registers_and_expand_on/">Store auto-yasnippets in registers and expand on insert</a></li>
<li><a href="https://www.youtube.com/watch?v=xmBovJvQ3KU">Supercharge your Emacs / Spacemacs / Doom with Yasnippets!</a> (12:06, 2020, <a href="https://irreal.org/blog/?p=11131">Irreal</a>)</li>
<li><a href="https://plantarum.ca/2025/01/10/slurm-yasnippet/">Taming Slurm with Yasnippet - plantarum.ca</a> (<a href="https://ottawa.place/@plantarum/113822012804715528">@plantarum@ottawa.place</a>)</li>
<li><a href="https://notxor.nueva-actitud.org/2022/02/13/trasteando-con-yasnippets.html">Trasteando con yasnippets</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/q9c9mn/using_treesitter_to_create_better_snippets/">Using tree-sitter to create better snippets</a></li>
<li><a href="https://xvw.lol/pages/emacs-yasnippet.html">xvw - Expansion d'abréviations avec YASnippet</a></li>
<li><a href="https://fosstodon.org/@chmouel/115213554128442284">yasnippet to choose code block type and yank clipboard text into markdown block</a></li>
<li><a href="https://fosstodon.org/@oxalorg/115833162189468199">company, capf, yasnippet, and lsp</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/rphl36/dynamic_c_snippet_i_wrote/">Dynamic C++ Snippet I Wrote</a></li>
<li><a href="https://randyridenour.net/posts/2025-09-21-obscure-emacs-package-yankpad.html">Randy Ridenour: An Obscure Emacs Package: Yankpad</a> (<a href="https://irreal.org/blog/?p=13294">Irreal</a>)</li>
<li><a href="https://eeame-97718b.frama.io/jours/jour14/">Jour 14 : modèles · Emacs expliqué à mes enfants</a></li>
<li><a href="https://github.com/ymarco/auto-activating-snippets">auto-activating-snippets: Snippets for Emacs that expand as you type</a></li>
<li><a href="https://github.com/naiquevin/axy">axy - Ad hoc expansion of yasnippet from anywhere in emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1c66ad9/axy_ad_hoc_expansion_of_yasnippet_from_anywhere/">Reddit</a>)</li>
<li><a href="https://github.com/elken/cape-yasnippet">cape-yasnippet: Yasnippet Completion at Point Extension</a></li>
<li><a href="https://github.com/justinbarclay/yasnippet-capf">yasnippet-capf: A basic completion at point function for yasnippets</a></li>
<li><a href="https://github.com/fbrosda/yasnippet-treesitter-shim">yasnippet-treesitter-shim</a></li>
<li><a href="https://ag91.github.io/blog/2022/08/21/caching-yankpad-snippets-for-a-quicker-note-capturing/">Caching Yankpad snippets for a quicker note capturing</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/17s8ztu/converting_code_snippets_from_ultisnips_format_to/">Converting code snippets from Ultisnips format to YASnippet format</a> (<a href="https://irreal.org/blog/?p=11764">Irreal</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/13ikzjl/fyi_awkyasnippets_on_melpa/">FYI: awk-yasnippets on MELPA</a></li>
<li><a href="https://github.com/yilkalargaw/emacs-native-snippets">emacs-native-snippets: a collection for snippets that use emacs's built in templating utilities</a> (<a href="https://www.reddit.com/r/emacs/comments/wdbk34/emacss_native_templating_and_snippet_fuctionality/">Reddit</a>)</li>
<li><a href="https://www.jamescherti.com/emacs-ultisnips-mode-edit-snippets-files/">James Cherti: ultisnips-mode.el (*.snippets files)</a> (<a href="https://github.com/jamescherti/ultisnips-mode.el">Github</a>, <a href="https://www.reddit.com/r/emacs/comments/1qqc44z/ultisnipsmodeel_an_emacs_major_mode_for_editing/">Reddit</a>) - mode for editing Vim-compatible snippets</li>
<li><a href="https://github.com/rubenphilipp/aby">rubenphilipp/aby: Aby is a snippet orchestrator for Emacs.</a> (<a href="https://www.reddit.com/r/emacs/comments/14o92or/aby_snippet_orchestrator/">Reddit</a>)</li>
<li><a href="https://github.com/doomemacs/snippets">snippets: The Doom Emacs snippets library</a></li>
<li><a href="https://github.com/MiniApollo/snippy">Snippy.el: VSCode/LSP snippet support for Emacs with Yasnippet.</a> (<a href="https://www.reddit.com/r/emacs/comments/1qrhstj/snippyel_vscodelsp_snippet_support_for_emacs_with/">Reddit</a>)</li>
<li><a href="https://github.com/jamescherti/ultyas">ultyas: Convert Ultisnips (Vim) snippets to YASnippet (Emacs) format</a></li>
<li><a href="https://takeonrules.com/2023/05/17/unfurling-of-issue-reference-abbreviations-in-github-and-other-git-forge-issues/">Jeremy Friesen: Unfurling of Issue Reference Abbreviations in Github and other Git Forge Issues</a></li>
</ul></details></li>
</ul>



<ul class="org-ul">
<li>Did you know you can <a href="https://joaotavora.github.io/yasnippet/snippet-development.html#orgcde188c">embed Emacs Lisp in your Yasnippet templates</a>?</li>
</ul>
<ul class="org-ul">
<li><p>
Have you tried other template systems like <a href="https://github.com/minad/tempel">Tempel</a>, , or <a href="https://www.gnu.org/software/emacs/manual/html_node/autotype/Tempo.html">Tempo</a> for structured text insertion?
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Resources</strong></summary>
<ul class="org-ul">
<li><a href="https://yhetil.org/emacs-devel/s4sfr9e6ol4.fsf@gmail.com/">Comparison of different templating packages</a></li>
<li><a href="https://taingram.org/blog/intro-to-emacs-tempo.html">Introduction to Emacs Tempo Code Templates</a> (<a href="https://mastodon.social/@tiang/114323627572903877">@tiang@mastodon.social</a>)</li>
<li><a href="https://www.n16f.net/blog/templating-in-emacs-with-tempo/">Nicolas Martyanoff: Templating in Emacs with Tempo</a> (<a href="https://irreal.org/blog/?p=11146">Irreal</a>)</li>
<li><a href="https://github.com/minad/tempel">tempel: TempEl - Simple templates for Emacs</a> (<a href="https://www.reddit.com/r/planetemacs/comments/s2ubul/tempel_tempel_simple_templates_for_emacs/">Reddit</a>)</li>
<li><a href="https://github.com/Crandel/tempel-collection">GitHub - Crandel/tempel-collection: Collection tempel templates</a> (<a href="https://www.reddit.com/r/emacs/comments/zd1l2v/new_package_tempelcollection/">Reddit</a>)</li>
<li><a href="https://github.com/fejfighter/eglot-tempel">eglot-tempel: bridge for tempel templates with eglot</a></li>
<li><a href="https://github.com/xFA25E/skempo">xFA25E/skempo: Enhance Emacs skeleton, tempo and abbrev.</a></li>
</ul></details></li>
</ul>



<ul class="org-ul">
<li>Have you tried <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Icomplete.html">icomplete-in-buffer</a>, <a href="https://github.com/minad/corfu">corfu</a>, <a href="https://github.com/company-mode/company-mode">company</a>, or some other in-buffer completion framework?
<ul class="org-ul">
<li><p>
If you use Yasnippet and you've just added completion at point, have you added your snippets to the completions with something like <a href="https://github.com/elken/yasnippet-capf">yasnippet-capf</a>?
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Company</strong></summary>
<ul class="org-ul">
<li><a href="https://github.com/company-mode/company-mode/blob/master/NEWS.md#2023-10-04-0100">Company 0.10.0 is out</a> (<a href="https://www.reddit.com/r/emacs/comments/16zpk4h/company_0100_is_out/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1flris4/company_100_released/">Company 1.0.0 released</a></li>
<li><a href="https://www.youtube.com/watch?v=hVA7KXDSUws">Emacs Auto-Completion with Company Mode</a> (01:01, 2025)</li>
<li><a href="https://www.youtube.com/watch?v=d5MyOy70lwg&amp;feature=youtu.be">Emacs Company Mode Is Bloody Good 2023_05_10_03:44:57</a> (9:44, 2023)</li>
<li><a href="https://youtu.be/96jn5A73-oQ">Inside Emacs #4 (part 1) ♦ Company-mode ♦♦♦ showcase ✔ source code ✔ faces</a> (<a href="https://reddit.com/r/emacs/comments/if11do/inside_emacs_4_part_1_companymode_showcase_source/">Reddit</a>)</li>
<li><a href="https://tychoish.com/post/better-company/">tycho garen: Better Company</a></li>
<li><a href="https://readingworldmagazine.com/emacs/2021-09-01-emacs-company-continued-first-thing-to-do-when-developing-with-emacs/">yuri tricys: Emacs Company-Mode Continued : The First Thing To Do When Developing With Emacs</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/rqewjw/companymode_now_has_a_manual/">company-mode now has a manual</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/pgr8ja/companymode_new_discussions_section_with/">company-mode: new Discussions section with hand-picked Q&amp;A, and better Contributing docs</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/jnllxh/package_companyipa/">{package} company-ipa</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/hl140v/companymanually_manually_build_your_company/">company-manually : manually build your company candidates</a></li>
<li><a href="https://github.com/tumashu/company-posframe">company-frame: A company extension, which let company use child frame as its candidate menu.</a> (<a href="https://reddit.com/r/planetemacs/comments/bc9yp3/companyframe_a_company_extension_which_let/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/l5mj0r/companywordfreqel_a_new_company_backend_for_human/">company-wordfreq.el – a new company backend for human language words according to their frequency</a></li>
<li><a href="https://manueluberti.eu/posts/2019-01-17-company-on-demand/">Make your company behave - manu.el</a></li>
</ul></details></li>
</ul></li>
</ul>



<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Corfu</strong></summary>
<ul class="org-ul">
<li><a href="https://i.redd.it/9g4h1bfzast61.png">[ELPA] Corfu (Completion Overlay Region FUnction)</a> (<a href="https://reddit.com/r/emacs/comments/msx6s1/elpa_corfu_completion_overlay_region_function/">Reddit</a>)</li>
<li><a href="https://kristofferbalintona.me/posts/202504050923/">Complement corfu, vertico, and completion-preview with prescient.el sorting</a> (<a href="https://www.reddit.com/r/emacs/comments/1js6xvw/complement_corfu_vertico_and_completionpreview/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1izt989/corfu_completionpreviewmode/">corfu + completion-preview-mode</a></li>
<li><a href="https://midirus.com/emacs/tutorial#corfu">Corfu section of an Emacs tutorial</a></li>
<li><a href="https://github.com/minad/corfu/pull/178">corfu-doc merged into corfu main</a></li>
<li><a href="https://takeonrules.com/2022/01/17/switching-from-company-to-corfu-for-emacs-completion/">Jeremy Friesen: Switching from Company to Corfu for Emacs Completion</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/t38kkh/sample_corfu_kindicon_and_corfudoc_configuration/">Sample Corfu, Kind-icon, and Corfu-doc configuration</a></li>
</ul>


</details>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Other packages</strong></summary>
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/td0nth/sample_usage_of_cape_completion_at_point/">Sample usage of Cape — Completion At Point Extensions</a></li>
<li><a href="https://kristofferbalintona.me/posts/202203130102/">Tutorial on Cape: How to add completion functions to completion-at-point-functions and how to use cape's built-in completion utilities</a></li>
<li><a href="https://eshelyaron.com/posts/2023-11-17-completion-preview-in-emacs.html">Completion Preview in Emacs</a></li>
<li><a href="https://repo.or.cz/emacs-capf-autosuggest.git">emacs-capf-autosuggest: History autosuggestions for comint and eshell</a></li>
<li><a href="https://www.youtube.com/watch?v=_VQ_nwTT7J0">Emacs Mono Complete Package #emacs #coding #programming</a> (01:05, 2025)</li>
<li><a href="https://elpa.gnu.org/packages/aggressive-completion.html">aggressive-completion: Minor mode which automatically completes for you after a short delay</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2021-04/msg00088.html">[GNU ELPA] New package proposal: aggressive-completion.el</a></li>
</ul>


</details>
<ul class="org-ul">
<li>Do you want context-sensitive completions for your shell commands in Emacs? Try <a href="https://www.masteringemacs.org/article/pcomplete-context-sensitive-completion-emacs">pcomplete</a> - you can even define your own.</li>
<li><p>
If you code, do you have <a href="https://github.com/emacs-lsp/lsp-mode">LSP</a>, <a href="https://github.com/joaotavora/eglot">Eglot</a>, or something similar set up to offer you completions in your programming languages?
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Resources</strong></summary>
<ul class="org-ul">
<li>Ooh, looks like you can <a href="https://github.com/MiniApollo/snippy">translate VS Code / LSP snippets to Yasnippet</a> so you can take advantage of other people's <a href="https://github.com/rafamadriz/friendly-snippets">snippet collections</a>.</li>
<li><a href="https://www.reddit.com/r/emacs/comments/o7aktl/autocomplete_vs_companymode_in_2021/">auto-complete vs company-mode in 2021</a></li>
<li><a href="https://oylenshpeegul.gitlab.io/blog/posts/20250507_2/">Tim Heaney: Magic completions in rust-analyzer</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1cpd72l/companyctags_v011_is_published/">company-ctags v0.1.1 is published</a></li>
<li><a href="https://github.com/osv/ac-html-csswatcher">ac-html-csswatcher: HTML Class and ID completion for emacs by using ac-html.el and csswatcher projects</a> (<a href="https://reddit.com/r/planetemacs/comments/lr488n/achtmlcsswatcher_html_class_and_id_completion_for/">Reddit</a>)</li>
<li><a href="https://github.com/racer-rust/emacs-racer">emacs-racer: Rust Auto-Complete-er</a></li>
<li><a href="https://github.com/atilaneves/ac-dcd">ac-dcd: Auto completion for Emacs using DCD: the D completion daemon</a></li>
<li><a href="https://github.com/abingham/emacs-ycmd">emacs-ycmd: client for ycmd, the code completion system</a></li>
</ul></details></li>
</ul>



<ul class="org-ul">
<li>Other links:
<ul class="org-ul">
<li><a href="https://takeonrules.com/2023/05/07/completion-at-point-function-capf-for-org-mode-links/">Jeremy Friesen: Completion at Point Function (CAPF) for Org-Mode Links</a> (<a href="https://irreal.org/blog/?p=11340">Irreal</a>)</li>
<li><a href="https://rahuljuliato.com/posts/in-buffer-icomplete">Rahul Juliato: Enhancing icomplete-vertical-mode in Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1hhy6n9/enhancing_icompleteverticalmode_in_emacs/">Reddit</a>)</li>
<li><a href="https://manueluberti.eu/posts/2023-06-17-consult-completion/">Manuel Uberti: Tweaking Consult completion</a></li>
</ul></li>
</ul>

<ul class="org-ul">
<li><p>
Meta: What else can you bring into Emacs so that you can take advantage of all the completions that you've set up, like note-taking or e-mail? (Ex: <a href="https://codeberg.org/martianh/mastodon.el">mastodon.el</a> + <a href="https://github.com/emacsmirror/org-contacts">org-contacts</a> + a little code to insert a <a href="https://sachachua.com/dotemacs#mastodon-org-contacts-complete">Mastodon handle with completion</a> = I can think of people by name instead of by handle!)
</p>
<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Resources</strong></summary>
<ul class="org-ul">
<li><a href="https://karthinks.com/software/a-better-yank-pop-binding/">A better yank-pop binding</a> (<a href="https://reddit.com/r/emacs/comments/ndqvbm/a_better_yankpop_binding/">Reddit</a>)</li>
<li><a href="https://github.com/oantolin/completing-history">completing-history: Insert history items with completion</a></li>
<li><a href="https://beathagenlocher.com/stream/#00109">Typing emojis with :shortcodes: in Emacs</a></li>
<li><a href="https://www.youtube.com/watch?v=ZqWylt2lYtc">Interactive Cheatsheets in Emacs - icheat.el</a> (10:50, 2025, <a href="https://github.com/LeonardoE95/icheat">GitHub</a>)</li>
<li><a href="https://zeniesqis.statichost.eu/code/2025-10-24-emacs-grid-select/">Emacs Grid Select | Zenie's Qis</a> (<a href="https://piaille.fr/@Zenie/115498139080413433">@Zenie@piaille.fr</a>)</li>
<li><a href="https://spwhitton.name/blog/entry/sway-completing-read/">sway-completing-read</a></li>
<li><a href="https://sachachua.com/blog/2021/04/emacs-hydra-allow-completion-when-i-can-t-remember-the-command-name/">Sacha Chua: Emacs Hydra: Allow completion when I can't remember the command name</a></li>
<li><a href="https://github.com/alphapapa/ement.el">alphapapa/ement.el: Matrix client for Emacs (WIP)</a> (<a href="https://reddit.com/r/emacs/comments/ot1j42/alphapapaementel_matrix_client_for_emacs_wip/">Reddit</a>)</li>
<li><a href="https://codeberg.org/pulu/tidal-completion.el">pulu/tidal-completion.el: TidalCycles completion for Emacs - Codeberg.org</a> (<a href="https://anticapitalist.party/@ahihi/114772595905306760">@ahihi@anticapitalist.party</a>)</li>
<li><a href="https://github.com/bluzky/slash-commands">A small package to add slash-command to Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1l9hsb6/a_small_package_to_add_slashcommand_to_emacs/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1jb4vrx/bible_verse_of_the_day_as_emacs_dashboard_footer/">Bible Verse of The Day in Emacs &mdash; Now also on MELPA</a> (<a href="https://www.reddit.com/r/emacs/comments/1jz8c9u/bible_verse_of_the_day_in_emacs_now_also_on_melpa/">Reddit</a>) - update: insert verse, passage, or chapter at point</li>
<li><a href="https://michal.sapka.pl/2025/my-god-its-full-of-tags/">My god! It's full of tags!</a> - completion using sqlite data</li>
<li><a href="https://www.reddit.com/r/emacs/comments/7aaz7z/tip_a_simple_way_to_get_tab_completion_of/">Tip: A simple way to get tab completion of filenames in <b>scratch</b> (and probably other buffers)</a></li>
</ul></details></li>
</ul>



</div>
</div>
<div id="outline-container-emacs-carnival-february-2026-completion-things-i-want-to-learn-about" class="outline-3">
<h3 id="emacs-carnival-february-2026-completion-things-i-want-to-learn-about">Things I want to learn about</h3>
<div class="outline-text-3" id="text-emacs-carnival-february-2026-completion-things-i-want-to-learn-about">
<p>
For example, this month, I want to&hellip;
</p>

<ul class="org-ul">
<li>Minibuffer:
<ul class="org-ul">
<li>Figure out some kind of approximate speech-based minibuffer completion for commands</li>
<li>Create a custom Org Mode link type for emacswiki and other things I refer to frequently</li>
<li>Write about the completion functions I'm using to help me learn French</li>
</ul></li>
<li>In-buffer completion:
<ul class="org-ul">
<li class="on"><span class="task-done">&#x2611;</span> Notice where I keep typing the same kinds of things and define more snippets for them</li>
<li class="on"><span class="task-done">&#x2611;</span> Borrow ideas from other people's snippets: <a href="https://github.com/AndreaCrotti/yasnippet-snippets?tab=readme-ov-file">yasnippet-snippets</a> (css, elisp, js, python); <a href="https://github.com/rafamadriz/friendly-snippets">friendly-snippets (VS Code)</a></li>
<li class="on"><span class="task-done">&#x2611;</span> <a href="https://github.com/sachac/snippets">Share my snippets in a repository</a></li>
<li>Figure out some kind of speech interface for expanding snippets</li>
<li>Sort out completion in programming buffers so that I can finally take advantage of LSP</li>
<li class="on"><span class="task-done">&#x2611;</span> <a href="https://sachachua.com/blog/2026/02/emacs-completion-and-handling-accented-characters-with-orderless/">Complete French words in-buffer ignoring accented characters</a></li>
</ul></li>
<li class="on"><span class="task-done">&#x2611;</span> Organize tons of completion-related links from <a href="https://sachachua.com/blog/category/emacs-news">Emacs News</a> onto <a href="https://www.emacswiki.org/emacs/CategoryCompletion">EmacsWiki: Category Completion</a> and other pages - 2026-02-28: I put them into this post for now</li>
<li>Revisit the completion-related code in my <a href="https://sachachua.com/dotemacs">config</a> to dust off things that I can update, remember to use, or document with <a href="https://github.com/emacsmirror/gif-screencast">gif-screencast</a></li>
</ul>

<p>
I'll publish my notes on my blog and I'll add them to this post as well. I'd love to check out your notes too!
</p>
</div>
</div>
<div id="outline-container-emacs-carnival-february-2026-completion-how-to-submit-your-entry-entries" class="outline-3">
<h3 id="emacs-carnival-february-2026-completion-how-to-submit-your-entry-entries">How to submit your entry/entries</h3>
<div class="outline-text-3" id="text-emacs-carnival-february-2026-completion-how-to-submit-your-entry-entries">
<p>
(Update 2026-03-01: All done now! Feel free to write about the topic if it inspires you, though; I'd love to include a link to your notes in <a href="https://sachachua.com/blog/category/emacs-news">Emacs News</a>.)
</p>

<p>
Please <a href="mailto:sacha@sachachua.com">e-mail me at sacha@sachachua.com</a> or <a href="https://social.sachachua.com/@sacha">DM me via Mastodon</a> with a link to your post(s) by February 28 so that I can add them to this post. I'm happy to link to multiple posts. For example, here are some things you might like to write about:
</p>

<ul class="org-ul">
<li>what you're thinking of figuring out (in case other people have suggestions)</li>
<li>your notes along the way</li>
<li>your current setup</li>
<li>things you're particularly proud of</li>
</ul>

<p>
Looking forward to hearing from you!
</p>
</div>
</div>
<div id="outline-container-emacs-carnival-february-2026-completion-a-reflection-on-hosting-emacs-carnival-this-month" class="outline-3">
<h3 id="emacs-carnival-february-2026-completion-a-reflection-on-hosting-emacs-carnival-this-month">A reflection on hosting Emacs Carnival this month</h3>
<div class="outline-text-3" id="text-emacs-carnival-february-2026-completion-a-reflection-on-hosting-emacs-carnival-this-month">
<p>
This was actually my first time hosting a blog carnival. Mapping out learning is one of my favourite things to do, and I enjoyed putting together a whole list of ideas and resources that might nudge people at every level. It was a great excuse to get around to improving parts of my workflow, not that I need an excuse to tinker with Emacs. Having the target date of Feb 28 encouraged me to get my notes together and actually post them, though. I also loved reading other people's posts, and I'm looking forward to integrating so many suggestions and ideas into my workflow. I think that treating the blog carnival as an opportunity to organize something like a study group or book club worked out well. I'd be glad to host in the future.
</p>

<p>
The Emacs Carnival theme for March is already up: <a href="https://sdf.org/~pkal/blog/emacs/mistakes.html">Mistakes and Misconceptions</a>, hosted by Philip Kaludercic. If you'd like to try hosting, you can edit the <a href="https://www.emacswiki.org/emacs/Carnival">Emacs Carnival wiki page</a> to add your name directly.
</p>

<p>
Thanks to everyone for reading and participating!
</p>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/01/emacs-carnival-february-2026-completion/index.org">View Org source for this post</a></div>
<p>You can <a href="https://social.sachachua.com/@sacha/statuses/01KG85HNK0WCA4KM88J00KE6TG" target="_blank" rel="noopener noreferrer">comment on Mastodon</a> or <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F01%2Femacs-carnival-february-2026-completion%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item>
	</channel>
</rss>