<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="/assets/rss.xsl" type="text/xsl"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">
<channel>
	<title>Sacha Chua</title>
	<atom:link href="https://sachachua.com/blog/feed/index.xml" rel="self" type="application/rss+xml"/>
	<atom:link href="https://sachachua.com" rel="alternate" type="text/html"/>
	<link>https://sachachua.com/blog/feed/index.xml</link>
	<description>Emacs, sketches, and life</description>
  
	<lastBuildDate>Sun, 17 May 2026 22:02:50 GMT</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>11ty</generator>
  <item>
		<title>May 29: Emacs Chat with Omar Antolin Camarena</title>
		<link>https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/</link>
		
		<pubDate>Sun, 17 May 2026 22:02:50 GMT</pubDate>
    <category>emacs</category>
<category>emacs-chat-podcast</category>
<category>emacs-chat</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/</guid>
		<description><![CDATA[<p>
On May 29, I'll chat with Omar Antolin Camarena about Emacs and Life.
</p>

<p>
</p><div class="yt-video"><iframe width="456" height="315" title="YouTube video player" src="https://www.youtube-nocookie.com/embed/M7-dJb2GTN4?enablejsapi=1" frameborder="0" allowfullscreen=""></iframe><a href="https://youtube.com/live/M7-dJb2GTN4">Watch on YouTube</a></div>
<p></p>

<p>
<span class="timestamp-wrapper"><time class="timestamp" datetime="2026-05-29T10:30:00-0400">&lt;2026-05-29 Fri 10:30&gt;&ndash;&lt;2026-05-29 Fri 11:30&gt;</time></span> (America/Toronto) = Fri May 29 1030H EDT / 0930H CDT / 0830H MDT / 0730H PDT / 1430H UTC / 1630H CEST / 1730H EEST / 2000H IST / 2230H +08 / 2330H JST
</p>

<p>
Related links:
</p>

<ul class="org-ul">
<li><a href="https://www.matem.unam.mx/~omar/">Omar Antolín Camarena</a>: a researcher at Instituto de Matemáticas, UNAM in Mexico City</li>
<li><a href="https://www.matem.unam.mx/~omar/apropos-emacs.html">M-x apropos Emacs</a></li>
<li><a href="https://github.com/oantolin/emacs-config">oantolin/emacs-config: My personal Emacs configuration · GitHub</a></li>
<li><a href="https://github.com/oantolin">oantolin (Omar Antolín Camarena) · GitHub</a></li>
<li><a href="https://mathstodon.xyz/@oantolin">Omar Antolín (@oantolin@mathstodon.xyz) - Mathstodon</a></li>
<li><a href="https://www.reddit.com/user/oantolin/">u/oantolin on Reddit</a></li>
</ul>

<p>
This session will be recorded, and I'll update this blog post with notes:
<a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/">https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/</a>
</p>

<p>
Find more Emacs Chats or join the fun: <a href="https://sachachua.com/emacs-chat">https://sachachua.com/emacs-chat</a>
</p>
<div><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/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%2F05%2Fmay-29-emacs-chat-with-omar-antolin-camarena%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>
		<dc:creator>Sacha Chua</dc:creator><enclosure length="1665" type="application/octet-stream" url="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/index.org"/></item><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>
		
		<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[<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.
</p>

<p>
<video 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"></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="org59a9a3d">
<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="media-time" data-start="6.000">0:06</span> Opening</li>
<li><span class="media-time" data-start="181.000">3:01</span> newcomers-presets user option theme; would be nice to explain what the changes are</li>
<li><span class="media-time" data-start="303.000">5:03</span> finding a balance between "it's fine the way it is" and "just use Doom Emacs"</li>
<li><span class="media-time" data-start="399.000">6:39</span> people value stability, but also conventions have shifted.</li>
<li><span class="media-time" data-start="413.000">6:53</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="media-time" data-start="563.000">9:23</span> How do people develop Emacs intuition? Immersion</li>
<li><span class="media-time" data-start="598.000">9:58</span> example: dabbrev, there's no undo? Ah, it's just the regular undo.</li>
<li><span class="media-time" data-start="663.000">11:03</span> newcomers presets: smooth over the intuition-disrupting things that are not actually necessary/beneficial; ex: enable whichkey</li>
<li><span class="media-time" data-start="875.000">14:35</span> newcomers-presets choice is not saved at the moment</li>
<li><span class="media-time" data-start="1029.000">17:09</span> newcomers without much computing experience might even find it easier (no C-c expectations, C-v etc)</li>
<li><span class="media-time" data-start="1112.000">18:32</span> Focus group?</li>
<li><span class="media-time" data-start="1338.000">22:18</span> Emacs survey before</li>
<li><span class="media-time" data-start="1370.000">22:50</span> people's backgrounds influence their responses</li>
<li><span class="media-time" data-start="1429.000">23:49</span> Hypothetical: Reset themes, to reset things back to the defaults of a specific Emacs version</li>
<li><span class="media-time" data-start="1462.000">24:22</span> package-autosuggest-mode suggests based on file extension</li>
<li><span class="media-time" data-start="1678.000">27:58</span> Emacs 32: bundled versions of Emacs (Big Emacs - distributions that include more packages)</li>
<li><span class="media-time" data-start="1798.000">29:58</span> Selection versus multiple completion</li>
<li><span class="media-time" data-start="2081.000">34:41</span> Manuals</li>
<li><span class="media-time" data-start="2111.000">35:11</span> More examples?</li>
<li><span class="media-time" data-start="2184.000">36:24</span> find-user-init-file?</li>
<li><span class="media-time" data-start="2320.000">38:40</span> Getting over the reverence for Emacs's history</li>
<li><span class="media-time" data-start="2413.000">40:13</span> Changes are more likely to happen when someone puts in the work to make a patch</li>
<li><span class="media-time" data-start="2646.000">44:06</span> Preserving Git history of packages absorbed into the core</li>
<li><span class="media-time" data-start="2762.000">46:02</span> Dealing with multiple types of Emacs</li>
<li><span class="media-time" data-start="2891.000">48:11</span> Fat Emacs is just about bundling more packages from ELPA, not changing the configuration for them</li>
<li><span class="media-time" data-start="3084.000">51:24</span> Customize</li>
<li><span class="media-time" data-start="3284.000">54:44</span> CUA - Common User Access</li>
<li><span class="media-time" data-start="3304.000">55:04</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="media-time" data-start="3313.000">55:13</span> Emacs configuration generator</li>

<li><span class="media-time" data-start="3356.000">55:56</span> INI-style configuration</li>
<li><span class="media-time" data-start="3625.000">1:00:25</span> Quick summary</li>
<li><span class="media-time" data-start="3749.000">1:02:29</span> Continuing with INI</li>
<li><span class="media-time" data-start="3885.000">1:04:45</span> Motivation</li>
<li><span class="media-time" data-start="4014.000">1:06:54</span> Politics and philosophy</li>
<li><span class="media-time" data-start="4166.000">1:09:26</span> Experimenting with things outside core</li>
<li><span class="media-time" data-start="4245.000">1:10:45</span> Extending the core</li>
<li><span class="media-time" data-start="4315.000">1:11:55</span> Guide to contributing to ELPA</li>

<li><span class="media-time" data-start="4393.000">1:13:13</span> Making the newcomer experience better</li>
<li><span class="media-time" data-start="4473.000">1:14:33</span> "user option themes" versus "appearance themes"</li>
<li><span class="media-time" data-start="4614.000">1:16:54</span> configuration generator in Emacs? maybe more wizards?</li>
<li><span class="media-time" data-start="4624.000">1:17:04</span> Starter kits</li>
<li><span class="media-time" data-start="4662.000">1:17:42</span> Configuration generator in Emacs Lisp?</li>
<li><span class="media-time" data-start="4722.000">1:18:42</span> extending the archive format</li>
<li><span class="media-time" data-start="4858.000">1:20:58</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><div>
                  <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.000000" data-stop="6.239000"><strong class="speaker-name">Sacha:</strong> I'm going to start recording.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="6.240000" data-stop="7.879000">I'm going to do the thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="7.880000" data-stop="9.079000">I'll let you know.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="9.080000" data-stop="9.719000">Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="9.720000" data-stop="10.639000">Let's do this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="10.640000" data-stop="11.159000">Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="11.160000" data-stop="12.759000"><strong class="speaker-name">Prot:</strong> Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="12.760000" data-stop="13.839000"><strong class="speaker-name">Sacha:</strong> Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="13.840000" data-stop="14.239000">Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="14.240000" data-stop="16.319000">Hang on a second.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="16.320000" data-stop="18.119000">Starting, going live.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="18.120000" data-stop="18.879000">Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="18.880000" data-stop="20.279000">So, hello, everyone.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="20.280000" data-stop="22.079000">This is Yay Emacs 29.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="22.080000" data-stop="24.084000">And today I am here with Prot and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="24.085000" data-stop="25.239000">Philip Kaludercic.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="25.240000" data-stop="28.234000">We're having this conversation about Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="28.235000" 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="99.679000">about the Emacs newcomer experience.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="99.680000" data-stop="102.442000"><strong class="speaker-name">Philip:</strong> At this point, regret not having</span> <span class="audio-time caption" data-speaker="Philip" data-start="102.443000" 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.954000">Just like you said, you sketched out a few</span> <span class="audio-time caption" data-speaker="Philip" data-start="127.955000" 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="152.922000">says, well, I'm coming at it from, I heard it's</span> <span class="audio-time caption" data-speaker="Philip" data-start="152.923000" 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 like understand free software</span> <span class="audio-time caption" data-speaker="Philip" data-start="159.708000" data-stop="162.617000">in a different sense where you can actually do</span> <span class="audio-time caption" data-speaker="Philip" data-start="162.618000" data-stop="165.442000">find function and open the definition of the</span> <span class="audio-time caption" data-speaker="Philip" data-start="165.443000" data-stop="166.919000">function you just use.</span> <span class="audio-time caption" data-speaker="Philip" data-start="166.920000" data-stop="171.085000">And 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 level 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="213.399000">I just think that I might have a few things.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="213.400000" 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="232.359000">Go ahead.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="232.360000" 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="242.999000">These are my views which are informed by the</span> <span class="audio-time caption" data-speaker="Philip" data-start="243.000000" data-stop="247.562000">discussions that we had in emacs-devel that I</span> <span class="audio-time caption" data-speaker="Philip" data-start="247.563000" 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 like...</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="355.891000">which enable all the options from which we would</span> <span class="audio-time caption" data-speaker="Philip" data-start="355.892000" data-stop="358.272000">not find which existing users would not find</span> <span class="audio-time caption" data-speaker="Philip" data-start="358.273000" data-stop="360.667000">interesting which are always the bulk of the</span> <span class="audio-time caption" data-speaker="Philip" data-start="360.668000" data-stop="363.354000">users most people are already existing users they</span> <span class="audio-time caption" data-speaker="Philip" data-start="363.355000" data-stop="365.962000">don't come in and one of the things are 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="424.150000">For example, I think one issue I remember was</span> <span class="audio-time caption" data-speaker="Philip" data-start="424.151000" 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="460.929000">you can do with a terminal for purely</span> <span class="audio-time caption" data-speaker="Philip" data-start="460.930000" data-stop="462.359000">historical reasons.</span> <span class="audio-time caption" data-speaker="Philip" data-start="462.360000" 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="498.839000">as newcomers,</span> <span class="audio-time caption" data-speaker="Philip" data-start="498.840000" data-stop="500.519000">Talking about Emacs.</span> <span class="audio-time caption" data-speaker="Philip" data-start="500.520000" data-stop="501.759000">Obviously, no.</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 purposes 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 I search, 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="554.079000">Go ahead.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="554.080000" data-stop="557.064000"><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="557.065000" data-stop="558.039000">challenge here.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="558.040000" 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="564.559000">Emacs intuitions?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="564.560000" 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 whichkey</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.479000">modern editor.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="675.480000" data-stop="678.199000"><strong class="speaker-name">Philip:</strong> Specifically the intuition.</span> <span class="audio-time caption" data-speaker="Philip" data-start="678.200000" data-stop="679.599000">Go ahead.</span> <span class="audio-time caption" data-speaker="Philip" data-start="679.600000" 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="688.943000">wouldn't want to be an intuition disrupt... like you</span> <span class="audio-time caption" data-speaker="Philip" data-start="688.944000" data-stop="692.078000">could probably... Like Cua mode or something that</span> <span class="audio-time caption" data-speaker="Philip" data-start="692.079000" data-stop="695.159000">would be something where people if they would</span> <span class="audio-time caption" data-speaker="Philip" data-start="695.160000" data-stop="698.394000">start using... If you would enable Cua-mode</span> <span class="audio-time caption" data-speaker="Philip" data-start="698.395000" 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.769000">I know which-key is an exception in that case,</span> <span class="audio-time caption" data-speaker="Philip" data-start="715.770000" data-stop="718.595000">because which-key pausing actually is an action</span> <span class="audio-time caption" data-speaker="Philip" data-start="718.596000" 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> <span class="audio-time caption" data-speaker="Sacha" data-start="742.965000" data-stop="745.839000">So you can open the preset theme, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="745.840000" data-stop="746.639000">Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="746.640000" data-stop="748.199000">Hang on a second.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="748.200000" 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 wanted 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="764.599000">explains the curve.</span> <span class="audio-time caption" data-speaker="Philip" data-start="764.600000" data-stop="765.999000">It's not a library.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="766.000000" data-stop="768.805000"><strong class="speaker-name">Prot:</strong> That's exactly the joke with the... Yeah,</span> <span class="audio-time caption" data-speaker="Prot" data-start="768.806000" data-stop="771.439000">that's part of the problem with those themes.</span> <span class="audio-time caption" data-speaker="Prot" data-start="771.440000" data-stop="772.319000">That's the problem.</span> <span class="audio-time caption" data-speaker="Prot" data-start="772.320000" data-stop="773.719000">Wait, really?</span> <span class="audio-time caption" data-speaker="Prot" data-start="773.720000" data-stop="776.439000">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="781.359000">a user it doesn't really make a difference.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="781.360000" data-stop="783.776000"><strong class="speaker-name">Philip:</strong> You have the same problem with all</span> <span class="audio-time caption" data-speaker="Philip" data-start="783.777000" data-stop="785.919000">these things, if I remember correctly.</span> <span class="audio-time caption" data-speaker="Philip" data-start="785.920000" data-stop="787.679000">Yeah, yeah, exactly.</span> <span class="audio-time caption" data-speaker="Philip" data-start="787.680000" data-stop="790.519000">Yeah, and you see up there the commentary section?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="790.520000" data-stop="791.359000"><strong class="speaker-name">Sacha:</strong> Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="791.360000" data-stop="794.048000"><strong class="speaker-name">Philip:</strong> If you scroll up a bit, it's above</span> <span class="audio-time caption" data-speaker="Philip" data-start="794.049000" data-stop="794.599000">line 37.</span> <span class="audio-time caption" data-speaker="Philip" data-start="794.600000" data-stop="798.945000">The theme configures which we can reasonably</span> <span class="audio-time caption" data-speaker="Philip" data-start="798.946000" 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="821.461000">You just tick it and then the user options</span> <span class="audio-time caption" data-speaker="Philip" data-start="821.462000" data-stop="826.199000">enablement theme should be activated by default.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="826.200000" data-stop="828.479000"><strong class="speaker-name">Sacha:</strong> That's sort of the idea.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="828.480000" data-stop="831.359000">So it is available on the splash screen.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="831.360000" data-stop="832.519000">So if I say display splash.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="832.520000" data-stop="835.199000">Oh my goodness, how do I get to the splash screen?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="835.200000" data-stop="837.239000"><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="837.240000" data-stop="838.239000">I forgot.</span> <span class="audio-time caption" data-speaker="Prot" data-start="838.240000" data-stop="839.399000">There are two things.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="839.400000" data-stop="842.664000"><strong class="speaker-name">Sacha:</strong> There's a splash screen and there's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="842.665000" data-stop="844.519000">the... Hang on a second.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="844.520000" data-stop="848.159000">I'm just going to start a new Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="848.160000" data-stop="851.948000"><strong class="speaker-name">Prot:</strong> Yeah, I haven't done that in, like, I</span> <span class="audio-time caption" data-speaker="Prot" data-start="851.949000" data-stop="852.959000">don't know.</span> <span class="audio-time caption" data-speaker="Prot" data-start="852.960000" data-stop="854.719000">That's the about Emacs screen.</span> <span class="audio-time caption" data-speaker="Prot" data-start="854.720000" data-stop="856.439000">But you have a display splash screen.</span> <span class="audio-time caption" data-speaker="Prot" data-start="856.440000" data-stop="857.639000">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">Emacs about Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="861.640000" data-stop="864.279000"><strong class="speaker-name">Sacha:</strong> Then I have a better idea.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="864.280000" data-stop="866.039000">I'm going to start this new Emacs person.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="866.040000" data-stop="867.039000">Okay, here we go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="867.040000" data-stop="867.439000">New Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="867.440000" data-stop="868.159000">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="868.160000" 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.237000">And it turns on a bunch of things including the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="872.238000" data-stop="872.719000">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="908.615000">But it's not going to occur to them because it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="908.616000" data-stop="911.426000">would never occur to them to say customize Emacs,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="911.427000" data-stop="913.990000">custom themes, and then I can pick newcomers</span> <span class="audio-time caption" data-speaker="Sacha" data-start="913.991000" data-stop="915.039000">themes from here.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="915.040000" data-stop="919.984000"><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="919.985000" data-stop="922.719000">to mention at some point.</span> <span class="audio-time caption" data-speaker="Philip" data-start="922.720000" data-stop="924.912000">Emacs level whether we want to make this because</span> <span class="audio-time caption" data-speaker="Philip" data-start="924.913000" 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="936.478000">you persist the option then you have the</span> <span class="audio-time caption" data-speaker="Philip" data-start="936.479000" 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.744000">want which key and they don't know how to disable</span> <span class="audio-time caption" data-speaker="Philip" data-start="947.745000" data-stop="948.479000">it so this is</span> <span class="audio-time caption" data-speaker="Philip" data-start="948.480000" 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="952.719000">either direction.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="952.720000" 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> <span class="audio-time caption" data-speaker="Prot" data-start="959.600000" data-stop="962.359000">Yeah, that's the checkbox idea in that case.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="962.360000" data-stop="968.439000"><strong class="speaker-name">Philip:</strong> That would be the tricky part.</span> <span class="audio-time caption" data-speaker="Philip" data-start="968.440000" data-stop="970.143000">And especially finding the place on the splash</span> <span class="audio-time caption" data-speaker="Philip" data-start="970.144000" data-stop="971.959000">screen so that this actually works for everyone.</span> <span class="audio-time caption" data-speaker="Philip" 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="Philip" data-start="975.259000" data-stop="978.451000">initially, if I remember correctly, we had this</span> <span class="audio-time caption" data-speaker="Philip" 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="Philip" data-start="981.696000" data-stop="982.799000">the copyrights.</span> <span class="audio-time caption" data-speaker="Philip" data-start="982.800000" 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="Philip" data-start="984.320000" data-stop="987.392000"><strong class="speaker-name">Philip:</strong> If you click on newcomers preset, for example,</span> <span class="audio-time caption" data-speaker="Philip" data-start="987.393000" data-stop="990.399000">then you are redirected to the manual entry.</span> <span class="audio-time caption" data-speaker="Philip" data-start="990.400000" data-stop="994.636000">And I think we had some, yeah, there's this, the</span> <span class="audio-time caption" data-speaker="Philip" data-start="994.637000" data-stop="995.519000">top line.</span> <span class="audio-time caption" data-speaker="Philip" 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="Philip" data-start="998.142000" data-stop="1000.519000">splash screen, that was on the bottom.</span> <span class="audio-time caption" data-speaker="Philip" 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="Philip" 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="Philip" data-start="1006.213000" data-stop="1008.159000">wouldn't see this line.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1008.160000" 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 to</span> <span class="audio-time caption" data-speaker="Philip" data-start="1017.778000" data-stop="1020.347000">space the 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="1125.933000">newbies would think of this?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1125.934000" 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="1277.800000">Or would you prefer this versus this?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1277.800000" data-stop="1278.680000"><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="1278.680000" data-stop="1281.600000">the people, but then I think, I mean, the big</span> <span class="audio-time caption" data-speaker="Philip" data-start="1281.600000" 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="1297.000000">identification, because then we have to store</span> <span class="audio-time caption" data-speaker="Philip" data-start="1297.000000" data-stop="1298.240000">email addresses.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1298.240000" data-stop="1299.000000"><strong class="speaker-name">Sacha:</strong> Okay, all right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1299.000000" data-stop="1299.440000">That's fine.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1299.440000" data-stop="1300.880000"><strong class="speaker-name">Philip:</strong> That's fair.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1300.880000" data-stop="1304.240000">So, sounds like an excuse.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1304.240000" data-stop="1306.360000">Partially it is, but something like,</span> <span class="audio-time caption" data-speaker="Philip" data-start="1306.360000" data-stop="1308.400000">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="1399.039000">to how reliable the results are.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1399.040000" 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="1411.759000">those results, of course not.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1411.760000" 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="1633.960000"><strong class="speaker-name">Philip:</strong> Yeah.</span> <span class="audio-time caption" data-speaker="Philip" data-start="1633.960000" data-stop="1636.400000">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.167000">things considered.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="1938.168000" 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.200000"><strong class="speaker-name">Prot:</strong> MCT, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1944.200000" 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="2004.520000">I just realized that...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2004.520000" 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.880000">so you can configure that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2035.880000" 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="2070.400000">names as much."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2070.400000" data-stop="2072.400000">You can recognize them from the list.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2072.400000" data-stop="2073.520000">You can narrow it down.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2073.520000" data-stop="2074.360000"><strong class="speaker-name">Philip:</strong> The behavior is supposed to actually be</span> <span class="audio-time caption" data-speaker="Philip" data-start="2074.360000" data-stop="2078.880000">similar to Bash.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2078.880000" data-stop="2079.720000">Yeah.</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.000000"><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.000000" 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="2086.920000">them to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2086.920000" data-stop="2093.160000">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="2121.100000"><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="2121.080000" 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">relating packages...</span> <span class="audio-time caption" data-speaker="Philip" data-start="2144.354000" data-stop="2146.957000">Where is the FAQ?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2146.997000" data-stop="2166.459000"><strong class="speaker-name">Sacha:</strong> It's a separate manual. We do not have it from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2166.700000" data-stop="2169.883000">here, not from the splash screen, but it is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2169.923000" data-stop="2171.425000">available from the Help menu.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2173.193000" data-stop="2181.849000"><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="2181.000000">36:21</span> <strong>find-user-init-file?</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2181.869000" 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="2235.593000"><strong class="speaker-name">Sacha:</strong> Okay.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2236.173000" 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">Yeah, but even having a button.</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="2332.633000">can do.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2332.653000" data-stop="2333.374000"><strong class="speaker-name">Philip:</strong> Yeah, but then in that case,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2333.557000" 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.014000">Goodwill, good faith, attention to how people</span> <span class="audio-time caption" data-speaker="Philip" data-start="2508.034000" data-stop="2512.501000">should behave on mailing lists, how they should</span> <span class="audio-time caption" data-speaker="Philip" data-start="2513.202000" data-stop="2514.564000">treat each other.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2547.800000" 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="2557.688000">That's why I also wanted to participate in this,</span> <span class="audio-time caption" data-speaker="Philip" data-start="2557.689000" data-stop="2561.832000">so that people see, oh, the people maintaining</span> <span class="audio-time caption" data-speaker="Philip" data-start="2561.833000" data-stop="2566.031000">Emacs aren't wizards locked up in a tower, but</span> <span class="audio-time caption" data-speaker="Philip" data-start="2566.032000" data-stop="2568.679000">just, I hope, normal people.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2568.680000" data-stop="2572.919000">Yeah, that's a very good point.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2572.920000" data-stop="2577.217000"><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="2577.218000" data-stop="2581.534000">your example of leading with a patch, I think, is</span> <span class="audio-time caption" data-speaker="Prot" data-start="2581.535000" data-stop="2585.786000">also key here for someone who can write a patch,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2585.787000" data-stop="2589.714000">of course, because it cuts out a lot of that</span> <span class="audio-time caption" data-speaker="Prot" data-start="2589.715000" 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="2601.999000">And that can also... Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2602.000000" 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> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2665.741000" 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="2699.158000"><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="2702.803000" 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="2730.639000">to use it to help people get started.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2730.640000" 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="2824.559000">And you have runtime issues when people are slow.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2824.560000" 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="2896.359000"><strong class="speaker-name">Sacha:</strong> I see.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2896.360000" data-stop="2899.697000"><strong class="speaker-name">Philip:</strong> So it would be more of an issue for</span> <span class="audio-time caption" data-speaker="Philip" data-start="2899.698000" data-stop="2900.959000">package authors.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2900.960000" data-stop="2903.439000">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="2910.949000">really inconvenient or impossible to install</span> <span class="audio-time caption" data-speaker="Philip" data-start="2910.950000" data-stop="2913.904000">additional packages and just having more</span> <span class="audio-time caption" data-speaker="Philip" data-start="2913.905000" data-stop="2917.481000">functionality out of the box which ELPA provides</span> <span class="audio-time caption" data-speaker="Philip" data-start="2917.482000" 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.039000">ELPA itself.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2928.040000" 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="2938.279000">ELPA does not.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2938.280000" 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.199000">starting to move somewhere in that direction.</span> <span class="audio-time caption" data-speaker="Philip" data-start="2948.200000" 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="2953.639000">made that we're going to give up on</span> <span class="audio-time caption" data-speaker="Philip" data-start="2953.640000" 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="2960.318000">made for the legal status of GNU ELPA, if we</span> <span class="audio-time caption" data-speaker="Philip" data-start="2960.319000" 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="2974.559000">will be had in the future.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2974.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="2988.639000">All that stuff will be pre-installed.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2988.640000" data-stop="2990.718000">The automated English will be- No, the package</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2990.719000" data-stop="2992.119000">archives- Oh, sorry, go ahead.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="2992.120000" 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">new alpha 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="3011.312000">It would be registered in the auto mode</span> <span class="audio-time caption" data-speaker="Philip" data-start="3011.313000" data-stop="3011.999000">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="3020.919000">open, which is not in the core.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3020.920000" data-stop="3025.159000"><strong class="speaker-name">Prot:</strong> I think you might want to talk earlier.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3025.160000" data-stop="3026.799000">I think that would qualify.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3026.800000" data-stop="3029.941000">I think you mentioned org-tex 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="3040.839000">already applies, but org-tex extends it.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3040.840000" data-stop="3045.799000">That's why I was looking for another example.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3045.800000" data-stop="3050.359000">Okay, that's the idea, but it wouldn't only be</span> <span class="audio-time caption" data-speaker="Philip" data-start="3050.360000" data-stop="3052.639000">major modes, I assume.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3052.640000" data-stop="3055.956000">There's going to be some discussion as to what</span> <span class="audio-time caption" data-speaker="Philip" data-start="3055.957000" data-stop="3057.759000">packages we want to add.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3057.760000" 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="3096.559000">on Customize.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3096.560000" 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 customized</span> <span class="audio-time caption" data-speaker="Philip" data-start="3119.779000" data-stop="3120.839000">UI, right?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3120.840000" 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="3126.119000">functionality, like, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3126.120000" data-stop="3130.335000"><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="3130.336000" data-stop="3134.568000">we can check the checkbox or we can select from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3134.569000" data-stop="3139.003000">the drop-down list or whatever but browsing it is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3139.004000" data-stop="3143.285000">as you mentioned overwhelming the general sense</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3143.286000" data-stop="3147.516000">of Emacs being overwhelming and when you start</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3147.517000" data-stop="3150.980000">wanting to do something slightly more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3150.981000" 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, you know, 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="3182.320000">file and not fall apart when you miss a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3182.321000" data-stop="3185.399000">parenthesis and all things like that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3185.400000" data-stop="3188.759000">Do we want to guide people that way?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3188.760000" 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.199000">intuition of how the Customize UI works.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3233.200000" 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="3247.944000">So that's, it would use interactive narrowing and</span> <span class="audio-time caption" data-speaker="Philip" data-start="3247.945000" 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 customized, the</span> <span class="audio-time caption" data-speaker="Philip" data-start="3254.715000" data-stop="3258.426000">Customize UI, the easy customization interface I</span> <span class="audio-time caption" data-speaker="Philip" data-start="3258.427000" data-stop="3262.086000">think is a technical term to use is based around</span> <span class="audio-time caption" data-speaker="Philip" data-start="3262.087000" data-stop="3265.630000">this widget library interface and sort of make</span> <span class="audio-time caption" data-speaker="Philip" data-start="3265.631000" data-stop="3269.559000">replicating a TUI menu but not... And then you have to...</span> <span class="audio-time caption" data-speaker="Philip" data-start="3269.560000" data-stop="3272.072000">And yeah, of course, the intuition... Like, if you</span> <span class="audio-time caption" data-speaker="Philip" data-start="3272.073000" 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="3373.279000">prototype for a INI-like configuration syntax.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3373.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="3385.919000">but now it doesn't ring a bell.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3385.920000" 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="3480.799000">They put themselves in the situation.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3480.800000" 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="3562.959000">Which is a very idiosyncratic take perhaps, but...</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3562.960000" 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="3602.839000">usually provides.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3602.840000" 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="3650.699000"><strong class="speaker-name">Prot:</strong> Yeah, of course, of course.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3650.700000" data-stop="3652.079000">That's fun.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3652.840000" data-stop="3654.679000">So, what's happened?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3654.680000" 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="3698.079000">Ah, nice.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3698.080000" 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="3718.999000">Where am I even?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3719.000000" 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> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3732.120000" data-stop="3733.599000"><strong class="speaker-name">Prot:</strong> But thank you all so much.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3733.600000" data-stop="3736.599000">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, 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="3879.599000">It doesn't have to be that way.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3879.600000" 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.559000">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.560000" 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="3951.399000">Let's see.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3951.400000" 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> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3955.000000" data-stop="3957.541000"><strong class="speaker-name">Philip:</strong> I had the chat open, but I didn't have</span> <span class="audio-time caption" data-speaker="Philip" data-start="3957.542000" data-stop="3958.759000">the time to read them.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3958.760000" data-stop="3960.159000">Sorry?</span> <span class="audio-time caption" data-speaker="Philip" data-start="3960.160000" data-stop="3962.719000">I'm not sure how to parse these.</span> <span class="audio-time caption" data-speaker="Philip" data-start="3962.720000" data-stop="3964.639000">Is this from top to bottom?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3964.640000" data-stop="3968.676000"><strong class="speaker-name">Prot:</strong> I guess from top to bottom is how they</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="3972.919000">The top is the earliest.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3972.920000" 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="3991.999000"><strong class="speaker-name">Prot:</strong> Oh, hello there!</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="3992.000000" 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="3998.559000">Maybe you have a better UI.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3998.560000" 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.559000"><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.560000" 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="4052.639000">minefield though.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4052.640000" data-stop="4055.279000"><strong class="speaker-name">Sacha:</strong> Just leave that alone.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4055.280000" data-stop="4058.679000">200 comments on emacs-devel.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4058.680000" data-stop="4062.799000">One of those really long threads.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4062.800000" 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="4092.479000">You have to be careful and be patient.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4092.480000" 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="4115.839000">with it.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4115.840000" 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="4138.959000">people on emacs-devel, so you don't know if some</span> <span class="audio-time caption" data-speaker="Philip" data-start="4138.960000" data-stop="4142.647000">John Doe responding to your message, if he's</span> <span class="audio-time caption" data-speaker="Philip" data-start="4142.648000" data-stop="4146.615000">actually responsible for this and makes ae</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="4190.679000">without as much data.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4190.680000" 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="4205.799000">discussion, from my experience.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4205.800000" 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="4216.679000">very quickly.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4216.680000" 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="4222.279000">it can be core.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4222.280000" data-stop="4223.719000"><strong class="speaker-name">Philip:</strong> Excuse me?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4223.720000" 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="4340.839000">That's going to be a link to the page.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4340.840000" data-stop="4343.799000"><strong class="speaker-name">Sacha:</strong> Yeah, this is pretty recent.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4343.800000" 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="4442.079000">Maybe.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4442.080000" data-stop="4445.399000"><strong class="speaker-name">Prot:</strong> Maybe.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4445.400000" data-stop="4448.182000">Yeah like in theory you can imagine of 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="4460.239000">that in the future.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4460.240000" 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.079000">them from.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4488.080000" data-stop="4489.359000"><strong class="speaker-name">Sacha:</strong> From themes.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4489.360000" data-stop="4491.239000"><strong class="speaker-name">Philip:</strong> From color themes, yeah.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4491.240000" data-stop="4493.279000">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 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> <span class="audio-time caption" data-speaker="Philip" data-start="4498.040000" data-stop="4500.199000">29, I think.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4500.200000" data-stop="4502.039000">29.</span> <span class="audio-time caption" data-speaker="Philip" data-start="4502.040000" data-stop="4502.599000">Yeah, yeah, yeah.</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="4521.359000">Were there any other questions?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4521.360000" data-stop="4524.199000"><strong class="speaker-name">Prot:</strong> I don't think so.</span> <span class="audio-time caption" data-speaker="Prot" data-start="4524.200000" data-stop="4527.399000">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="4540.079000">if for whatever reason it cannot be find-library.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4540.080000" 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="4563.279000">some point or convince someone.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4563.280000" 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.279000"><strong class="speaker-name">Sacha:</strong> Yeah, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4572.280000" data-stop="4574.719000"><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="4574.720000" 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">I think the preset, if my memory serves</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="4589.759000">load-path.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4589.760000" 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="4769.559000">Now I lost my thread of those.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4769.560000" 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="4775.840000" 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="4815.279000">configurator wizard.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4815.280000" 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="4881.479000">into the back end.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4881.480000" 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="4932.647000">that we had...</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="4932.880000" 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="4962.128000">that, right?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="4964.437000" 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="5036.159000">who's tuned in.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="5036.160000" data-stop="5038.999000"><strong class="speaker-name">Philip:</strong> You're welcome.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="5039.000000" data-stop="5039.839000"><strong class="speaker-name">Prot:</strong> Thank you.</span> <span class="audio-time caption" data-speaker="Prot" data-start="5039.840000" data-stop="5040.879000">Thank you.</span> <span class="audio-time caption" data-speaker="Prot" data-start="5040.880000" data-stop="5041.759000">Thank you.</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="5041.760000" data-stop="5043.359000"><strong class="speaker-name">Philip:</strong> Take care.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="5043.360000" data-stop="5044.839000"><strong class="speaker-name">Prot:</strong> Take care.</span> <span class="audio-time caption" data-speaker="Prot" data-start="5044.840000" data-stop="5046.599000">Bye-bye.</span> <span class="audio-time caption" data-speaker="Prot" data-start="5046.600000" data-stop="5048.439000">Goodbye, goodbye.</span> <span class="audio-time caption" data-speaker="Prot" data-start="5048.440000" data-stop="5050.519000">Where do we close from here?</span> <p></p><span class="audio-time caption" data-speaker="Philip" data-start="5050.520000" 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></div></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">
<ul class="org-ul">
<li>protesilaos: ​​Hello folks!</li>
<li>MichaelVash7886: ​hi</li>
<li>protesilaos: ​We still have a few more minutes. Looking forward to it!</li>
<li>MichaelVash7886: ​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>MichaelVash7886: ​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>MichaelVash7886: ​also looking at moving away from evil to using something like Meow and vanilla emacs binds</li>
<li>lc2000: ​​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>lc2000: ​(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>takoverflow: ​​Hello Prot, Sacha and Philip!</li>
<li>takoverflow: ​Thanks for this discussion</li>
<li>RandCode: ​​greetings, everyone!</li>
<li>RandCode: ​​emacs has a place for chatting in all of irc, matrix, xmpp and telegram room! (also email)</li>
<li>lc2000: ​​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>sachactube: ​​<a href="https://bbb.emacsverse.org/rooms/chat">https://bbb.emacsverse.org/rooms/chat</a>&hellip;</li>
<li>protesilaos: ​Come join us :)</li>
<li>lc2000: ​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>brongulus: 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>Protesilaos: @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>brongulus: 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>brongulus: 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>brongulus: 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>brongulus: Thank you for the meeting o.</li>
</ul>
</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="org692f12e">
<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="orgc5fa732">
<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="orgd824002">
<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="orgcc02bd4">
<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="org723f966">
<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="orgf97a1c3">
<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>
		<dc:creator>Sacha Chua</dc:creator><enclosure length="134548" type="application/octet-stream" url="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"/></item><item>
		<title>Trying out Kanata for one-shot modifiers and home row mods on Linux</title>
		<link>https://sachachua.com/blog/2026/05/trying-out-kanata-for-one-shot-modifiers-and-home-row-mods-on-linux/</link>
		
		<pubDate>Wed, 13 May 2026 14:32:18 GMT</pubDate>
    <category>linux</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/05/trying-out-kanata-for-one-shot-modifiers-and-home-row-mods-on-linux/</guid>
		<description><![CDATA[<p>
Prot is a fan of <a href="https://protesilaos.com/codelog/2026-05-04-emacs-keyboard-ergonomics/">one-shot modifiers</a>. I started experimenting with them using <a href="https://github.com/rvaiya/keyd">keyd</a>, but now I've moved to using <a href="https://github.com/jtroo/kanata">kanata</a> based on his recommendation. I also want to experiment with home row mods so that I can hold down:
</p>
<ul class="org-ul">
<li><code>f</code> or <code>j</code> for shift</li>
<li><code>d</code> or <code>k</code> for control</li>
<li><code>s</code> or <code>l</code> for alt</li>
<li>or <code>a</code> or <code>;</code> for super.</li>
</ul>

<p>
(Based on QWERTY home row, although Xmodmap translates it to Dvorak, where my home row keys are aoeu and htns.)
</p>

<p>
Here's my config:
</p>


<div class="org-src-container">
<pre class="src src-lisp"><code>  (defcfg
    process-unmapped-keys yes
  )
  (defsrc
  grv  1    2    3    4    5    6    7    8    9    0    -    =    bspc
  tab  q    w    e    r    t    y    u    i    o    p    [    ]    \
  caps a    s    d    f    g    h    j    k    l    <span class="org-comment">;    '    ret</span>
  lsft z    x    c    v    b    n    m    ,    .    /    rsft
  lctl lmet lalt           spc            ralt rmet rctl
  )

  <span class="org-comment-delimiter">;; </span><span class="org-comment">define values for tap time and hold time</span>
  (<span class="org-keyword">defvar</span>
    tap-time 100
    hold-time 200
  )

  <span class="org-comment-delimiter">;; </span><span class="org-comment">alias definitions</span>
  (defalias
    a (tap-hold $tap-time $hold-time a lmeta)
    s (tap-hold $tap-time $hold-time s lalt)
    d (tap-hold $tap-time $hold-time d lctrl)
    f (tap-hold $tap-time $hold-time f lshift)
    j (tap-hold $tap-time $hold-time j rshift)
    k (tap-hold $tap-time $hold-time k rctrl)
    l (tap-hold $tap-time $hold-time l ralt)
    <span class="org-comment">; (tap-hold $tap-time $hold-time ; rmeta)</span>
    osshift (one-shot 60000 lshift)
    osctrl (one-shot 60000 lctrl)
    osalt (one-shot 60000 lalt)
    osralt (one-shot 60000 ralt)
    osmeta (one-shot 60000 lmet)
  )

  (deflayer base
  grv  1    2    3    4    5    6    7    8    9    0    -    =    bspc
  tab  q    w    e    r    t    y    u    i    o    p    [    ]    \
  @osctrl @a    @s    @d    @f    g    h    @j    @k    @l    @<span class="org-comment">;    '    ret</span>
  @osshift z    x    c    v    b    n    m    ,    .    /    @osshift
  @osctrl @osmeta @osalt           spc            @osralt _ @osctrl
  )

</code></pre>
</div>


<p>
I followed the <a href="https://github.com/jtroo/kanata/discussions/130">systemd instructions</a>, so things should be loaded when I restart. To reload my config, I use <code>C-c C-v C-t</code> (<code>org-babel-tangle</code>) and then call <code>systemctl &#45;&#45;user restart kanata.service"</code>. Or actually, I have an Org Mode link of the form
</p>


<div class="org-src-container">
<pre class="src src-example"><code>[[elisp:(progn (org-babel-tangle) (shell-command "systemctl &#45;&#45;user restart kanata.service"))][Update config]]
</code></pre>
</div>


<p>
so I can just activate the link and have my new definitions loaded.
</p>

<p>
Resources:
</p>

<ul class="org-ul">
<li><a href="https://github.com/jtroo/kanata/wiki/Configuration-guide">Configuration guide · jtroo/kanata Wiki · GitHub</a></li>
<li><a href="https://callistaenterprise.se/blogg/teknik/2025/01/10/homerow-mods/">Year of the homerow mods | Callista</a></li>
</ul>
<div><a href="https://sachachua.com/blog/2026/05/trying-out-kanata-for-one-shot-modifiers-and-home-row-mods-on-linux/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%2F05%2Ftrying-out-kanata-for-one-shot-modifiers-and-home-row-mods-on-linux%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>
		<dc:creator>Sacha Chua</dc:creator><enclosure length="3480" type="application/octet-stream" url="https://sachachua.com/blog/2026/05/trying-out-kanata-for-one-shot-modifiers-and-home-row-mods-on-linux/index.org"/></item><item>
		<title>Du 4 mai au 10 mai</title>
		<link>https://sachachua.com/blog/2026/05/du-4-mai-au-10-mai/</link>
		
		<pubDate>Wed, 13 May 2026 13:28:35 GMT</pubDate>
    <category>french</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/05/du-4-mai-au-10-mai/</guid>
		<description><![CDATA[<div id="outline-container-orge317c9f" class="outline-3">
<h3 id="orge317c9f"><a href="https://sachachua.com/blog/feed/index.xml#orge317c9f">lundi 4</a></h3>
<div class="outline-text-3" id="text-orge317c9f">
<p>
J'ai discuté des finances avec ma sœur qui habite aux Pays-Bas. Elle ne peut pas virer l'argent des Philippines aux Pays-Bas, donc je dois l'aider.
</p>

<p>
J'ai emmené ma fille à son cours de gymnastique. Ça lui a plu.
</p>
</div>
</div>
<div id="outline-container-org7ba5b22" class="outline-3">
<h3 id="org7ba5b22"><a href="https://sachachua.com/blog/feed/index.xml#org7ba5b22">mardi 5</a></h3>
<div class="outline-text-3" id="text-org7ba5b22">
<p>
Ma fille était très fière d'avoir réussi à faire deux présentations alors que quelques camarades de classe n'étaient pas prêts à passer.
</p>

<p>
Nous avons commencé à travailler sur un maillot-robe pour ma fille. Il n'y avait pas de patron de couture pour son dessin, donc j'ai fait un prototype à partir des chutes de tissu de sa longue robe de bain d'il y a quelques années.
</p>

<p>
À mon grand soulagement, le virement bancaire a réussi. Il paraît que Wise peut m'aider à virer l'argent des Philippines au Canada.
</p>
</div>
</div>
<div id="outline-container-org5ea4f73" class="outline-3">
<h3 id="org5ea4f73"><a href="https://sachachua.com/blog/feed/index.xml#org5ea4f73">mercredi 6</a></h3>
<div class="outline-text-3" id="text-org5ea4f73">
<p>
Mon mari, ma fille, et moi sommes allés chez la cardiologue, qui était très loin : à presque deux heures de métro et de bus pour le trajet aller. Ma fille s'ennuyait beaucoup, mais elle voulait traiter ses palpitations, donc elle a fait l'effort.
Après cela, nous avons acheté des récompenses au supermarché à proximité. Elle a choisi une petite bouteille de yaourt à boire.
</p>

<p>
J'ai emmené ma fille et son amie au parc pour jouer. Il y avait un garçon qui les embêtait et qui était trop jeune pour qu'on puisse le raisonner, alors j'ai dû utiliser ma Voix de Maman pour qu'il arrête.
</p>
</div>
</div>
<div id="outline-container-orgb44e46e" class="outline-3">
<h3 id="orgb44e46e"><a href="https://sachachua.com/blog/feed/index.xml#orgb44e46e">jeudi 7</a></h3>
<div class="outline-text-3" id="text-orgb44e46e">
<p>
J'ai été ravie de discuter d'Emacs avec Shae Erisson, qui a une expérience intéressante avec les claviers et la programmation sur Emacs.
</p>

<p>
J'ai travaillé sur la revue des captures d'écran de ma conversation avec John Wiegley et Karthik Chikmagalur. J'ai écrit des fonctions pour identifier les rectangles grâce à l'outil Tesseract OCR. J'ai aussi utilisé les expressions régulières pour masquer des coordonnées GPS et d'autres secrets.
</p>

<p>
Je suis allée chez une nouvelle hygiéniste pour un nettoyage. J'étais ravie que la réceptionniste et l'hygiéniste aient porté des masques N95 et que la salle de traitement ait une porte fermée.
</p>

<p>
J'ai discuté des finances de ma mère avec la responsable du studio. J'ai dû m'en occuper parce que ma mère n'est pas capable de gérer ses finances elle-même.
</p>
</div>
</div>
<div id="outline-container-org5f42384" class="outline-3">
<h3 id="org5f42384"><a href="https://sachachua.com/blog/feed/index.xml#org5f42384">vendredi 8</a></h3>
<div class="outline-text-3" id="text-org5f42384">
<p>
Je viens de commencer à regarder Astérix et Obélix sur Netflix. J'aimais bien les bandes dessinées quand j'étais petite.
</p>


<p>
Après l'école, j'ai emmené ma fille au Stockyards pour acheter de l'élastique chez Fabric Fabric pour son maillot-robe. Nous avons aussi cherché des chaussures chez The Shoe Company, Children's Place, Old Navy et Walmart, mais elle n'a rien trouvé qui lui ait plu.
</p>

<p>
Ensuite, nous avons travaillé sur son maillot-robe.
</p>

<p>
Pendant que nous regardions Pokémon, j'ai remarqué que même Jessie a montré une belle évolution. Ma fille m'a demandé si je faisais pareil. Je n'ai pas compris, donc je lui ai demandé ce qu'elle voulait dire. Elle est partie grincheuse. Je ne sais pas, mais je ne peux pas lire dans ses pensées.
</p>

<p>
Sur Stardew, j'ai planté le reste des fraises et j'ai engagé le service Ridgeside Odd Jobs pour arroser toutes les plantes dehors. J'ai attendu l'amélioration de ma poêle pour terminer le dernier paquet parce que nous jouions avec les mods Stardew Valley Expanded (qui demande une friandise) et Love of Cooking (qui demande l'amélioration pour augmenter la limite du nombre d'aliments).
</p>
</div>
</div>
<div id="outline-container-org34c13a9" class="outline-3">
<h3 id="org34c13a9"><a href="https://sachachua.com/blog/feed/index.xml#org34c13a9">samedi 9</a></h3>
<div class="outline-text-3" id="text-org34c13a9">
<p>
Mon mari, ma fille et moi sommes allés au centre-ville pour le Science Rendezvous, un festival scientifique. Ma fille s'est beaucoup amusée. Elle a aimé peindre avec des plantes en utilisant des peintures dérivées du curcuma, des betteraves, des épinards, et du chou rouge. Elle s'est aussi intéressée aux bulles qui contiennent du dioxyde de carbone provenant de la neige carbonique.
</p>

<p>
Sur le chemin du retour, ma fille et moi sommes passées à la pâtisserie chinoise pour des petits pains.
</p>
</div>
</div>
<div id="outline-container-orgc5e0378" class="outline-3">
<h3 id="orgc5e0378"><a href="https://sachachua.com/blog/feed/index.xml#orgc5e0378">dimanche 10</a></h3>
<div class="outline-text-3" id="text-orgc5e0378">
<p>
Ma fille m'a réveillée et elle m'a donné une carte de fête des Mères. Elle a aussi préparé une omelette de 6 œufs pour que l'on se régale.
</p>

<p>
Mon mari a amélioré mon bureau. Il a coupé une autre étagère et il l'a attachée à mon bureau comme plateau. C'était très pratique. Maintenant je peux placer plus de choses sur mon bureau.
</p>

<p>
Sur Stardew Valley, ma fille et moi nous sommes amusées à explorer la Caverne du Crâne. Elle a oublié d'apporter de la nourriture, donc je lui ai donné plusieurs fromages.
</p>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/05/du-4-mai-au-10-mai/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%2F05%2Fdu-4-mai-au-10-mai%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>
		<dc:creator>Sacha Chua</dc:creator><enclosure length="32221" type="application/octet-stream" url="https://sachachua.com/blog/2026/05/du-4-mai-au-10-mai/index.org"/></item><item>
		<title>2026-05-11 Emacs news</title>
		<link>https://sachachua.com/blog/2026/05/2026-05-11-emacs-news/</link>
		
		<pubDate>Mon, 11 May 2026 13:00:59 GMT</pubDate>
    <category>emacs</category>
<category>emacs-news</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/05/2026-05-11-emacs-news/</guid>
		<description><![CDATA[<p>
People are getting Emacs 31 ready for release. Looking forward to
that! See <a href="https://github.com/emacs-mirror/emacs/blob/master/etc/NEWS.31">emacs/etc/NEWS.31</a> for details.
</p>

<p>
Lots of posts for the Emacs Carnival theme of <a href="https://www.emacswiki.org/emacs/CarnivalMay2026">"May I recommend&hellip;"</a>, yay!
</p>

<ul class="org-ul">
<li>Emacs 31:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1t6gkdz/the_emacs31_branch_has_been_created/">The emacs-31 branch has been created!</a> (<a href="https://irreal.org/blog/?p=13795">Irreal</a>)</li>
<li><a href="https://build.opensuse.org/package/show/home:Thaodan:emacs:emacs31/emacs-31">openSUSE package for emacs-31</a> (<a href="https://mastodon.social/@thaodan/116545552801001819">@thaodan</a>)</li>
</ul></li>
<li>Upcoming events (<a href="https://emacslife.com/calendar/emacs-calendar.ics">iCal file</a>, <a href="https://emacslife.com/calendar/">Org</a>):
<ul class="org-ul">
<li>London Emacs (in person): Emacs London meetup <a href="https://www.meetup.com/london-emacs-hacking/events/314540885/">https://www.meetup.com/london-emacs-hacking/events/314540885/</a> Tue May 12 1800 Europe/London</li>
<li>Emacs Berlin: In-Person-Only Emacs-Berlin Stammtisch <a href="https://emacs-berlin.org/">https://emacs-berlin.org/</a> Tue May 12 1900 Europe/Berlin</li>
<li>OrgMeetup (virtual) <a href="https://orgmode.org/worg/orgmeetup.html">https://orgmode.org/worg/orgmeetup.html</a> Wed May 13 0900 America/Vancouver - 1100 America/Chicago - 1200 America/Toronto - 1600 Etc/GMT - 1800 Europe/Berlin - 2130 Asia/Kolkata &ndash; Thu May 14 0000 Asia/Singapore</li>
<li>M-x Research: TBA <a href="https://m-x-research.github.io/">https://m-x-research.github.io/</a> Wed May 20 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1500 Etc/GMT - 1700 Europe/Berlin - 2030 Asia/Kolkata - 2300 Asia/Singapore</li>
<li>Emacs APAC: Emacs APAC meetup (virtual) <a href="https://emacs-apac.gitlab.io/announcements/">https://emacs-apac.gitlab.io/announcements/</a> Sat May 23 0130 America/Vancouver - 0330 America/Chicago - 0430 America/Toronto - 0830 Etc/GMT - 1030 Europe/Berlin - 1400 Asia/Kolkata - 1630 Asia/Singapore</li>
</ul></li>
<li>Emacs configuration:
<ul class="org-ul">
<li><a href="https://mbork.pl/2026-05-09_describe-personal-keybindings">Marcin Borkowski: describe-personal-keybindings</a> (<a href="https://irreal.org/blog/?p=13799">Irreal</a>)</li>
<li><a href="https://www.chiply.dev/post-my-dotfiles">My Dotfiles: macOS Bootstrap and an Emacs Distribution</a> (<a href="https://www.reddit.com/r/emacs/comments/1t6l4b9/my_dotfiles_macos_bootstrap_and_an_emacs/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1t8yb7h/backpack_emacs_hits_version_05/">Backpack Emacs hits version 0.5</a></li>
</ul></li>
<li>Emacs Lisp:
<ul class="org-ul">
<li><a href="https://kelar.org/~bandali/gnu/emacs/ffs-code-review-prot.html">Amin Bandali: FFS code review with Protesilaos</a> (<a href="https://protesilaos.com/codelog/2026-05-08-emacs-coaching-amin-bandali/">Prot</a>)</li>
<li><a href="https://vannilla.org/write/1533394929/article.html">The Emacs's Gamegrid library #1</a>, <a href="https://vannilla.org/write/1533740728/article.html">#2</a>, <a href="https://vannilla.org/write/1533913392/article.html">#3</a>, <a href="https://vannilla.org/write/1535488871/article.html">#4</a></li>
</ul></li>
<li>Appearance:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1t4evbd/recent_commits_to_emacsmaster_introduce_margin/">Recent Commits to emacs:master: Introduce 'margin' face for window margin background</a></li>
<li><a href="https://github.com/mang-jin/emacs-theme-nvim-dark">Emacs theme that looks like v0.10+ Neovim's default dark theme</a> (<a href="https://www.reddit.com/r/emacs/comments/1t8yy6u/emacs_theme_that_looks_like_v010_neovims_default/">Reddit</a>)</li>
</ul></li>
<li>Navigation:
<ul class="org-ul">
<li><a href="https://vannilla.org/write/1680013839/article.html">TAGS, Etags and system headers</a></li>
<li><a href="https://vannilla.org/write/1609258895/article.html">Emacs: writing a project.el backend</a></li>
<li><a href="https://www.youtube.com/watch?v=ptehgb80zH8">Emacs Buffer Comparison Made Easy With Ebuffers 2026 05 10 02:31:35</a> (05:31)</li>
<li><a href="https://www.youtube.com/watch?v=-6B62JpdWgs">LIVE: bribing myself to work on async Rust TCP connections</a> (02:35:52, Emacs navigation chapter at <a href="https://www.youtube.com/watch?v=-6B62JpdWgs&amp;t=7215s">2:00:15</a>)</li>
</ul></li>
<li>TRAMP:
<ul class="org-ul">
<li><a href="https://utcc.utoronto.ca/~cks/space/blog/programming/EmacsTrampNotes">Notes on using GNU Emacs' Tramp system in an unusual shell environment</a> (<a href="https://lobste.rs/s/vwjrsl/notes_on_using_gnu_emacs_tramp_system">lobste.rs</a>)</li>
</ul></li>
<li>Dired:
<ul class="org-ul">
<li><a href="https://emacs.dyerdwelling.family/emacs/20260416103000-emacs&#45;&#45;a-zoomed-in-vc-dir-for-the-current-directory/">James Dyer: A Zoomed in vc dir for the Current Directory in dired</a></li>
</ul></li>
<li>Writing:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1t5kaku/markdowntsmode_got_a_major_overhaul_and_is_now/">markdown-ts-mode got a major overhaul and is now part of Emacs 31</a></li>
<li><a href="https://blog.davep.org/2026/05/08/blogmore-el-v4-5-0.html">Dave Pearson: blogmore.el v4.5.0</a> - add blogmore-set-as-cover
<ul class="org-ul">
<li><a href="https://blog.davep.org/2026/05/07/blogmore-el-v4-4-0.html">v4.4.0</a> - blogmore-become-like</li>
</ul></li>
<li><a href="https://codeberg.org/liberty/just-write/src/branch/main/jw.el">jw.el: Just Write, a microjournaling tool (uses external binary)</a> (<a href="https://mathstodon.xyz/@liberty/116517775716575306">@liberty@mathstodon.xyz</a>)</li>
</ul></li>
<li>Denote:
<ul class="org-ul">
<li><a href="https://www.alcarney.me/blog/2026/organising-series-with-denote-sequence/">Organising Series with denote-sequence — Alex Carney</a> (<a href="https://mastodon.social/@alcarney/116552920982223453">@alcarney</a>)</li>
</ul></li>
<li>Org Mode:
<ul class="org-ul">
<li><a href="https://list.orgmode.org/87zf267i1c.fsf@gmail.com">Org Mode requests: [FR] ox-md: Export custom-id search strings (::#) as anchors</a></li>
<li><a href="https://jonathanchu.is/posts/introducing-grove/">grove.el - an Obsidian-like note-taking mode for Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1t4xmcb/groveel_an_obsidianlike_notetaking_mode_for_emacs/">r/emacs</a>, <a href="https://www.reddit.com/r/orgmode/comments/1t4xmsk/groveel_an_obsidianlike_notetaking_mode_for_emacs/">r/orgmode</a>, <a href="https://irreal.org/blog/?p=13792">Irreal</a>, <a href="https://news.ycombinator.com/item?id=48016809">HN</a>, <a href="https://news.ycombinator.com/item?id=48013448">HN</a>)</li>
<li><a href="https://www.youtube.com/watch?v=94jFimnlvNM">mon workflow emacs</a> (18:31)</li>
<li><a href="https://www.youtube.com/watch?v=IygqcQhLhOo">Spacemacs | Org-mode Table Spreadsheet Formula | Productivité</a> (05:19)</li>
<li>Import, export, and integration:
<ul class="org-ul">
<li><a href="https://gitlab.com/jdm204/ox-html-file-embedding">Tiny package for org links which base64 embed files into HTML export for sharing</a> (<a href="https://www.reddit.com/r/orgmode/comments/1t93h3e/tiny_package_for_org_links_which_base64_embed/">Reddit</a>)</li>
<li><a href="https://list.orgmode.org/87bjeqvqc6.fsf@christianmoe.com/">Note about needing to escape things in Org macros</a> (<a href="https://mathstodon.xyz/@pabryan/116537127097802685">@pabryan@mathstodon.xyz</a>)</li>
<li><a href="https://fediverse.tv/w/xhaKt3dwzHuLxeq7FDGZcH">LuaLaTex y fontspec (Orgmode) - FediverseTV</a> (<a href="https://fediverse.tv/w/xhaKt3dwzHuLxeq7FDGZcH">@emacs_org@fediverse.tv</a>)</li>
<li><a href="https://gitlab.com/yugaego/emacs-config/-/blob/main/configs/init-org.el?ref_type=heads#L109">Config for using multiple org-publish projects</a> (<a href="https://fosstodon.org/@yugaego/116549279791127644">@yugaego@fosstodon.org</a>)</li>
<li><a href="https://jan-iversen.de/2026/05/06/blogumzug.html">Blog-Umzug? | Jan Iversen</a> (<a href="https://nerdculture.de/@razorback/116529000129741089">@razorback@nerdculture.de</a>)</li>
<li><a href="https://git.sr.ht/~zelda/sync.el">sync.el - sync Org files with git automatically</a> (<a href="https://www.reddit.com/r/orgmode/comments/1t84mr5/syncel_actually_exists_this_time_no_crypto/">Reddit</a>)</li>
<li><a href="http://en.andros.dev/blog/ba142044/twtxt-vs-org-social-the-evolution-of-an-idea/">Andros Fenollosa: twtxt vs Org Social: the evolution of an idea</a></li>
<li><a href="https://fediverse.tv/w/k2PBKSZ6prEwK2DccNQjvV">Descubriendo la red Org-social - FediverseTV</a> (<a href="https://fediverse.tv/w/k2PBKSZ6prEwK2DccNQjvV">@emacs_org@fediverse.tv</a>)</li>
</ul></li>
<li>Org development:
<ul class="org-ul">
<li><a href="https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/etc/ORG-NEWS?id=004e0828b7758b70ceb0ff47cdd872940c49dcdb">ox-latex.el: New variable org-latex-descriptive-environment</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/etc/ORG-NEWS?id=732610714eea47a133ca0bfc163d30a871b25e7b">ob-tangle: Make tangling from archived trees optional</a></li>
</ul></li>
</ul></li>
<li>Completion:
<ul class="org-ul">
<li><a href="https://www.chiply.dev/post-vompeccc-showcase">Emacs Completion Showcase with VOMPECCC (video)</a> (<a href="https://www.youtube.com/watch?v=wyzUXScErjE">YouTube</a> 01:08:43, <a href="https://www.reddit.com/r/emacs/comments/1t57j68/emacs_completion_showcase_with_vompeccc_video/">Reddit</a>, <a href="https://news.ycombinator.com/item?id=48037156">HN</a>, <a href="https://lobste.rs/s/ixlzlj/emacs_completion_showcase_with_vompeccc">lobste.rs</a>)</li>
<li><a href="https://github.com/kn66/vertico-buffer-frame">Follow-up: vertico-buffer-frame, a child-frame experiment for vertico-buffer</a> (<a href="https://www.reddit.com/r/emacs/comments/1t4fu7w/followup_verticobufferframe_a_childframe/">Reddit</a>)</li>
<li><a href="https://github.com/jojojames/fzf-async">fzf-async</a> (<a href="https://www.reddit.com/r/emacs/comments/1t6rs2h/fzfasync/">Reddit</a>)</li>
<li><a href="https://github.com/zenitsu7772000/yuta.el">Yuta.el: native fuzzy finder, Lsp Completion, and command palette for Emacs (uses external CLI tools)</a> (<a href="https://www.reddit.com/r/emacs/comments/1t4jq5h/yutael_is_a_fast_native_fuzzy_finder_lsp/">Reddit</a>)</li>
</ul></li>
<li>Coding:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=NTHRxu7LFjI">My Doom Emacs setup for Rust development in less than two minutes</a> (01:36)</li>
<li><a href="https://thanosapollo.org/projects/emacs-forgejo/">emacs-forgejo | Thanos Apollo</a> (<a href="https://sigmoid.social/@csantosb/116546018189748980">@csantosb@sigmoid.social</a>)</li>
<li><a href="https://github.com/cobacdavid/hprpl">hprpl-mode</a> for the HP-48G</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1t9ib4b/finally_gotodefinition_w_eglot_on_jvm_languages/">Finally go-to-definition w/ Eglot on JVM languages (Kotlin and Java)! do you know how to improve it?</a></li>
<li><a href="https://github.com/PlugwiseBV/LuaProbe.el">Using our new Lua debbuger: LuaProbe, we made an Emacs package for it</a> (<a href="https://www.reddit.com/r/emacs/comments/1t3bycu/using_our_new_lua_debbuger_luaprobe_we_made_an/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=wSKdspfOdSU">Configurando o Windows para Programar Jogos em C | Indie Game Dev</a> (48:38)</li>
<li><a href="https://eshelyaron.com/sweep.html#High_002dlevel-Architecture">Sweep: SWI-Prolog Embedded in Emacs</a> (<a href="https://mastodon.social/@PuercoPop/116522365591905026">@PuercoPop</a>)</li>
<li><a href="https://jao.io/blog/geiser-moved-to-codeberg.html">jao: geiser moved to codeberg</a> - Scheme interfaces</li>
</ul></li>
<li>Math:
<ul class="org-ul">
<li><a href="https://vannilla.org/write/1738103064/article.html">The Simple Emacs Spreadsheet</a></li>
</ul></li>
<li>Shells:
<ul class="org-ul">
<li><a href="https://www.jamescherti.com/emacs-toggle-a-shell-window-shell-pop/">Toggle an Emacs terminal with a single keystroke using shell-pop (Recently Refactored)</a> (<a href="https://www.reddit.com/r/emacs/comments/1t7fp1v/toggle_an_emacs_terminal_with_a_single_keystroke/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1t821vz/just_a_quick_eat_survey/">Just a quick "Eat" survey</a></li>
<li><a href="https://sr.ht/~hajovonta/termit/">termit: Terminal emulator for Emacs</a> (<a href="https://mastodon.online/@hajovonta/116529852107644722">@hajovonta@mastodon.online</a>)</li>
</ul></li>
<li>Web:
<ul class="org-ul">
<li><a href="https://einar.codeberg.page/speed_improvement_hack_for_dired_with_eww.html">Einar Mostad: Speed improvement hack for dired with EWW</a> - browse-url-handlers</li>
</ul></li>
<li>Mail, news, and chat:
<ul class="org-ul">
<li><a href="https://mastodon.world/@minad/116534494908640147">What improvements would you like to see in elfeed? (@minad@mastodon.world)</a></li>
<li><a href="https://github.com/emacs-elfeed/elfeed/commit/072a609bb7e67c9b300ab22859a9423f7d7734d3">Add elfeed-tree-mode · emacs-elfeed/elfeed@072a609 · GitHub</a> (<a href="https://mastodon.world/@minad/116544681551499931">@minad@mastodon.world</a>)</li>
</ul></li>
<li>Multimedia:
<ul class="org-ul">
<li><a href="https://codeberg.org/contrapunctus/sxiv.el">contrapunctus/sxiv.el: Launch (n)sxiv ((Neo) Simple X Image Viewer)</a> (<a href="https://fe.disroot.org/objects/2b02fc3e-a422-4795-97a8-0d8cfc0e915a">@contrapunctus@fe.disroot.org</a>)</li>
</ul></li>
<li>AI:
<ul class="org-ul">
<li><a href="https://www.reddit.com/gallery/1t8vgxr">I made elisp-quality-ai: AI-friendly quality reports for Emacs Lisp projects</a></li>
<li><a href="https://github.com/deno1011/emacs-mac-setup/blob/main/README.md">Emacs with Org-Mode and Claude for Apple MacBook</a> (<a href="https://news.ycombinator.com/item?id=48065731">HN</a>)</li>
<li><a href="https://github.com/gicrisf/ox-skills">ox-skills: manage AI agent skills in Org-mode</a> (<a href="https://www.reddit.com/r/emacs/comments/1t86yst/oxskills_manage_ai_agent_skills_in_orgmode/">Reddit</a>)</li>
<li><a href="https://infosec.town/notes/alwbcffuqxf2ekpw">display-buffer-alist config for claude-code (@cyberwolf@infosec.town)</a></li>
</ul></li>
<li>Community:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1t438si/fortnightly_tips_tricks_and_questions_20260505/">Fortnightly Tips, Tricks, and Questions — 2026-05-05 / week 18</a></li>
<li><a href="https://sachachua.com/blog/2026/05/emacs-carnival-may-2026-may-i-recommend/">Sacha Chua: Emacs Carnival May 2026: "May I recommend&hellip;"</a>
<ul class="org-ul">
<li><a href="https://www.finaprosadigital.com/2026-05-02-may-emacs-carnival.html">May Emacs Carnival</a>: Carlos Pajuelo</li>
<li><a href="https://idlip.in/posts/may-i-recommend/">May I Recommend EWM | Dilip's Log</a></li>
<li><a href="https://sachachua.com/blog/2026/05/from-david-dimagid-what-we-talk-about-when-we-talk-about-recommending-emacs-packages/">Sacha Chua: From David Dimagid: What we talk about when we talk about recommending Emacs packages</a></li>
<li><a href="https://vannilla.org/write/1778277936/article.html">May I recommend… escaping the minibuffer</a> (<a href="https://mibl.vannilla.org/@vanni/statuses/01KR4TJ3RG34K6W9A43ES5FH4Q">@vanni@mibl.vannilla.org</a>)</li>
<li><a href="https://giampaolo.guiducci.it/posts/2026-05-09-may-i-recommend-vibemacsing/">May I recommend… vibemacsing? | Giampaolo Guiducci</a> (<a href="https://fosstodon.org/@gosub/116548774985172047">@gosub@fosstodon.org</a>)</li>
<li><a href="https://mstempl.netlify.app/post/may-i-recommend/">May I recommend… to only add items to your init files you understand and document?</a> Martin Stemplinger</li>
<li><a href="https://curtismchale.ca/2026/05/05/emacs-carnival-may-i-recommend">Curtis McHale: Emacs Carnival: May I recommend&hellip;</a></li>
</ul></li>
<li><a href="https://kelar.org/~bandali/gnu/emacs/emacs-chat-202605.html">Amin Bandali: Emacs Chat with Sacha Chua</a> (<a href="https://www.youtube.com/watch?v=ZiTQt8q1Ybc">YouTube</a> 01:12:31, <a href="https://irreal.org/blog/?p=13797">Irreal</a>, <a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/">Sacha</a>)</li>
<li><a href="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/">Sacha Chua: Emacs Chat 22: Shae Erisson</a> (<a href="https://www.youtube.com/watch?v=Ovya0O2otbU">YouTube</a>, 01:02:36)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1t43rrt/i_just_dont_get_it/">I just dont get it&hellip;</a> - long discussion about Emacs Lisp and customization</li>
<li><a href="https://www.youtube.com/watch?v=iuwn8GpRj7w">Emacs ATX Meetup. May 2026. GNU Hyperbole.</a> (01:44:31)</li>
<li><a href="https://fosstodon.org/@chiply/116518555422356975">Thread about what makes Emacs easy for you (@chiply@fosstodon.org)</a></li>
<li><a href="https://toobnix.org/w/mu2Wm3Y7F6dBbqBivkXL1x">Kent Pitman, Ramin Honary, Screwlisp #climate #emacs autocomplete #lisp #unix_surrealism #logic #lispyGopherClimate - toobnix</a> (<a href="https://gamerplus.org/@screwlisp/116524570149752933">@screwlisp@gamerplus.org</a>)</li>
<li><a href="https://curtismchale.ca/2026/05/05/the-gravitational-pull-of-familiar-tools">Curtis McHale: The gravitational pull of familiar tools</a></li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="https://codeberg.org/veer66/ya-sort-lines">veer66/ya-sort-lines: Yet-another sort lines - Codeberg.org</a> (<a href="https://mstdn.io/@veer66/116539186622279157">@veer66@mstdn.io</a>)</li>
<li><a href="https://codeberg.org/jamesendreshowell/ramb">jamesendreshowell/ramb: Emacs package Really Actually Make Backups - Codeberg.org</a> (<a href="https://fediscience.org/@jameshowell/116522614001195322">@jameshowell@fediscience.org</a>)</li>
<li><a href="https://protesilaos.com/codelog/2026-05-02-emacs-buffer-to-pdf-new-package/">Protesilaos: Emacs: save any buffer as PDF (my new buffer-to-pdf package)</a></li>
<li><a href="http://corwin.bru.st/2026-05-08-last-rev.pl/">Corwin Brust: last-rev.pl</a> - find the most recent commit to each Emacs branch (or other Savannah projects)</li>
<li><a href="https://www.jamescherti.com/compiling-emacs/">James Cherti: A Technical Guide for Compiling Emacs and its Packages for Maximum Performance on UNIX or GNU/Linux systems</a></li>
<li><a href="https://protesilaos.com/codelog/2026-05-04-emacs-keyboard-ergonomics/">Protesilaos: Re: Emacs and keyboard ergonomics</a> (<a href="https://irreal.org/blog/?p=13788">Irreal</a>)</li>
</ul></li>
<li>Emacs development:
<ul class="org-ul">
<li>emacs-devel: <a href="https://yhetil.org/emacs-devel/CAM=F=bBAT3mTHqqut2fvYN=SJ=NNqBisePTWGjO-XpzRAO7=9w@mail.gmail.com/">Re: Tail recursion - Lynn Winebarger</a> - emacs-31 probably not going to have igc</li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=66729f3e5080f8853393e5f88ce6f062b45164b7">New variable 'completion-frontend-properties' (bug#80990)</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=0d287aa2761af39f64d5d0d7f4e6b74430ec8b74">Bump master Emacs version to 32.0.50</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=d24b10ca75f49217f8585ce9c0fb53209693f882">Introduce 'margin' face for window margin background</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=ed1fe2ca9590a97aee62f74630f7f1f9d795bcb2">nadvice.el: Make it easier to find how to change an interactive-form</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=a952324e9be37869158e8a9cc4f676fa6113a343">keyboard.c: Allow SIGINT to `quit` in batch mode, instead of exit</a></li>
</ul></li>
<li>New packages:
<ul class="org-ul">
<li><a target="_blank" href="https://melpa.org/#/apple-container-tramp">apple-container-tramp</a>: TRAMP integration for apple container (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/claude-code-context">claude-code-context</a>: Share buffer context with Claude Code (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/folgezett">folgezett</a>: Folgezettel IDs for org-roam (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/gnus-browse-url-in-article">gnus-browse-url-in-article</a>: Smarter browse-url for Gnus articles (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/har-viewer">har-viewer</a>: Major mode for viewing HTTP Archive (HAR) files (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/indigo">indigo</a>: Emacs interface to the Indigo cheminformatics library (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/nucleo-completion">nucleo-completion</a>: Nucleo-backed completion style (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/shannon-max">shannon-max</a>: Analyze your keybindings with information theory (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/verdict-dart">verdict-dart</a>: Dart runner for verdict (MELPA)</li>
</ul></li>
</ul>

<p>
Links from <a href="https://www.reddit.com/r/emacs">reddit.com/r/emacs</a>, <a href="https://www.reddit.com/r/orgmode">r/orgmode</a>, <a href="https://www.reddit.com/r/spacemacs">r/spacemacs</a>, <a href="https://mastodon.social/tags/emacs">Mastodon #emacs</a>, <a href="https://bsky.app/hashtag/emacs">Bluesky #emacs</a>, <a href="https://hn.algolia.com/?query=emacs&amp;sort=byDate&amp;prefix&amp;page=0&amp;dateRange=all&amp;type=story">Hacker News</a>, <a href="https://lobste.rs/search?q=emacs&amp;what=stories&amp;order=newest">lobste.rs</a>, <a href="https://programming.dev/c/emacs?dataType=Post&amp;page=1&amp;sort=New">programming.dev</a>, <a href="https://lemmy.world/c/emacs">lemmy.world</a>, <a href="https://lemmy.ml/c/emacs?dataType=Post&amp;page=1&amp;sort=New">lemmy.ml</a>, <a href="https://planet.emacslife.com">planet.emacslife.com</a>, <a href="https://www.youtube.com/playlist?list=PL4th0AZixyREOtvxDpdxC9oMuX7Ar7Sdt">YouTube</a>, <a href="http://git.savannah.gnu.org/cgit/emacs.git/log/etc/NEWS">the Emacs NEWS file</a>, <a href="https://emacslife.com/calendar/">Emacs Calendar</a>, and <a href="https://lists.gnu.org/archive/html/emacs-devel/2026-05">emacs-devel</a>. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at <a href="mailto:sacha@sachachua.com">sacha@sachachua.com</a>. Thank you!
</p>
<div><a href="https://sachachua.com/blog/2026/05/2026-05-11-emacs-news/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%2F05%2F2026-05-11-emacs-news%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>
		<dc:creator>Sacha Chua</dc:creator><enclosure length="240910" type="application/octet-stream" url="https://emacslife.com/calendar/emacs-calendar.ics"/></item><item>
		<title>Emacs Chat 22: Shae Erisson</title>
		<link>https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/</link>
		
		<pubDate>Thu, 07 May 2026 18:55:38 GMT</pubDate>
    <category>emacs</category>
<category>emacs-chat-podcast</category>
<category>emacs-chat</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/</guid><enclosure length="60081151" type="audio/mpeg" url="https://archive.org/download/ec22-shae-erisson/ec22-shae-erisson.mp3"/>
		<description><![CDATA[<div class="update" id="orge514ee4">
<p>
<span class="timestamp-wrapper"><time class="timestamp" datetime="2026-05-08">[2026-05-08 Fri]</time></span>: Transcript, yay!
</p>

</div>

<p>
I chatted with Shae Erisson about Emacs, keyboards, Org Mode, and life.
<video controls="1" src="https://archive.org/download/ec22-shae-erisson/ec22-shae-erisson.mp4" type="video/mp4"><track kind="subtitles" label="Captions" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson.vtt" srclang="en" default=""></video>
</p>

<p>
<a href="https://archive.org/details/ec22-shae-erisson">View it via the Internet Archive</a>, <a href="https://youtube.com/live/Ovya0O2otbU">watch/comment on YouTube</a>, <a href="https://sachachua.com/blog/feed/index.xml#ID-ec22-transcript">read the transcript online</a>, <a href="https://archive.org/download/ec22-shae-erisson/ec22-shae-erisson.mp4">download the video</a> / <a href="https://archive.org/download/ec22-shae-erisson/ec22-shae-erisson.mp3">MP3</a> / <a href="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson.vtt">transcript</a>, or <a href="mailto:sacha@sachachua.com">e-mail me</a> your thoughts!
</p>

<ul class="org-ul">
<li>Shae Erisson: Haskell, Python, Swedish, knitting, mountain unicycling, contact juggling</li>
<li><a href="http://www.scannedinavian.com">Shae Erisson's blog - 1. DO SOMETHING 2. BRAG ABOUT IT</a></li>
<li><a href="https://recurse.social/@shapr">Shae Erisson (@shapr@recurse.social) - recurse.social</a></li>
<li><a href="https://www.scannedinavian.com/programmers-want-flow-when-programming-light-turns-red.html">Shae Erisson's blog - Programmers want flow. when programming, light turns RED</a></li>
<li><a href="https://github.com/shapr/markovkeyboard">shapr/markovkeyboard: keyboard layout that changes by markov frequency · GitHub</a></li>
</ul>
<div id="outline-container-emacs-chat-22-shae-erisson-chapters" class="outline-3">
<h3 id="emacs-chat-22-shae-erisson-chapters">Chapters</h3>
<div class="outline-text-3" id="text-emacs-chat-22-shae-erisson-chapters">
<p>
</p><ul class="org-ul">
<li><span class="media-time" data-start="7.000">0:07</span> Intro</li>
<li><span class="media-time" data-start="61.000">1:01</span> 1999, IRC, community building in Haskell</li>
<li><span class="media-time" data-start="122.000">2:02</span> Emacs as a light-weight build-your-own-editor toolkit</li>
<li><span class="media-time" data-start="175.000">2:55</span> LSP, treesitter, Magit, jujutsu, C++, Python, Haskell, rust</li>
<li><span class="media-time" data-start="218.000">3:38</span> how does a new person experience Emacs? Emacs is always fun.</li>
<li><span class="media-time" data-start="247.000">4:07</span> Markov keyboard project, moving to Finland, right-handed Dvorak, split keyboard; Jeff Raskin; I am not a koala</li>
<li><span class="media-time" data-start="405.000">6:45</span> Purpose-specific function keys</li>
<li><span class="media-time" data-start="454.000">7:34</span> Trackballs, scroll</li>

<li><span class="media-time" data-start="497.000">8:17</span> 1" trackpad rings</li>
<li><span class="media-time" data-start="538.000">8:58</span> Pair programming: ttyshare, shwim</li>
<li><span class="media-time" data-start="800.000">13:20</span> Recurse Center, "What is that keyboard? What is that editor?!", Emacs bankruptcy and starter kits</li>
<li><span class="media-time" data-start="969.000">16:09</span> hippie-expand</li>
<li><span class="media-time" data-start="1038.000">17:18</span> yasnippet</li>
<li><span class="media-time" data-start="1141.000">19:01</span> Function keys</li>
<li><span class="media-time" data-start="1205.000">20:05</span> Org Mode</li>

<li><span class="media-time" data-start="1277.000">21:17</span> Show Org agenda when idle</li>

<li><span class="media-time" data-start="1323.000">22:03</span> Programmers want flow. When programming, light turns red</li>

<li><span class="media-time" data-start="1467.000">24:27</span> ef-themes and modus-themes, season</li>
<li><span class="media-time" data-start="1558.000">25:58</span> htmlize (does this still work on Wayland?)</li>
<li><span class="media-time" data-start="1600.000">26:40</span> lsp-ui-imenu, jumping through rust code</li>

<li><span class="media-time" data-start="1710.000">28:30</span> laptop with 126GB of RAM</li>
<li><span class="media-time" data-start="1788.000">29:48</span> LSP coolness, Haskell, treesitter</li>
<li><span class="media-time" data-start="1922.000">32:02</span> Combobulate</li>
<li><span class="media-time" data-start="1972.000">32:52</span> What else are you using your 126 gigabytes of RAM for?</li>
<li><span class="media-time" data-start="2007.000">33:27</span> TalonVoice</li>
<li><span class="media-time" data-start="2086.000">34:46</span> NixOS, following Steve Purcell about 5 years behind</li>
<li><span class="media-time" data-start="2106.000">35:06</span> envrc</li>
<li><span class="media-time" data-start="2154.000">35:54</span> time-tracking</li>
<li><span class="media-time" data-start="2225.000">37:05</span> taxes with Org Mode, remote lookup</li>

<li><span class="media-time" data-start="2462.000">41:02</span> finding notes with C-s</li>
<li><span class="media-time" data-start="2558.000">42:38</span> Org Mode, managing inbox</li>
<li><span class="media-time" data-start="2790.000">46:30</span> Timestamps</li>
<li><span class="media-time" data-start="2954.000">49:14</span> Org timers</li>

<li><span class="media-time" data-start="3236.000">53:56</span> Org Mode snippets</li>
<li><span class="media-time" data-start="3436.000">57:16</span> Compilation finish function: handle success</li>
</ul>

<p></p>
</div>
</div>
<div id="outline-container-org56d9065" class="outline-3">
<h3 id="org56d9065">Transcript</h3>
<div class="outline-text-3" id="text-org56d9065">
<details class="code-details"><a name="ID-ec22-transcript"></a><div>
                  <summary>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>Intro</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="0.000000" data-stop="7.759000"><strong class="speaker-name">Sacha:</strong> Okay, so I'm going to actually remember to hit go live.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="7.760000" data-stop="17.479000">I've got a 10 second delay, so if we need to panic, we can panic.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="17.480000" data-stop="20.199000">Okay, so let's see.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="20.200000" data-stop="22.159000">I think we are live.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="22.160000" data-stop="24.199000">Hi, everyone.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="24.200000" data-stop="28.359000">This is Emacs Chat number 22 after a long hiatus.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="28.360000" data-stop="33.679000">And today, I'm here with Shae Erisson, who is also like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="33.680000" data-stop="35.359000">an Emacs friend from a long time back.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="35.360000" data-stop="36.439000">So this is it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="36.440000" data-stop="40.999000">As you were just saying, this is the first time we're actually</span> <span class="audio-time caption" data-speaker="Sacha" data-start="41.000000" data-stop="42.919000">talking live.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="42.920000" data-stop="46.479000">And I'm looking forward to hearing about your configuration, how you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="46.480000" data-stop="47.919000">use Emacs, Shae.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="47.920000" data-stop="50.999000">But before we dive into that, can you give us a little bit of context?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="51.000000" data-stop="54.108000">Who you are, what sorts of things you do,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="54.109000" data-stop="57.199000">and how you use Emacs for that?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="57.000000">0:57</span> <strong>1999, IRC, community building in Haskell</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="57.200000" data-stop="61.159000"><strong class="speaker-name">Shae:</strong> I would say that...</span> <span class="audio-time caption" data-speaker="Shae" data-start="61.160000" data-stop="69.679000">I guess I started using Emacs in 1999 when I moved to Finland.</span> <span class="audio-time caption" data-speaker="Shae" data-start="69.680000" data-stop="74.399000">And I remember about the same time I was on IRC and I was really</span> <span class="audio-time caption" data-speaker="Shae" data-start="74.400000" data-stop="74.879000">frustrated.</span> <span class="audio-time caption" data-speaker="Shae" data-start="74.880000" data-stop="77.159000">I remember I got on the Perl IRC channel and I was like, hey, I want</span> <span class="audio-time caption" data-speaker="Shae" data-start="77.160000" data-stop="79.039000">an editor that has syntax highlighting.</span> <span class="audio-time caption" data-speaker="Shae" data-start="79.040000" data-stop="81.359000">I want to see colors to these words when I'm typing them.</span> <span class="audio-time caption" data-speaker="Shae" data-start="81.360000" data-stop="83.879000">And they were like, noob, and they kick-banned me.</span> <span class="audio-time caption" data-speaker="Shae" data-start="83.880000" data-stop="88.279000">And I was like, well, maybe I don't want to learn Perl, which I never</span> <span class="audio-time caption" data-speaker="Shae" data-start="88.280000" data-stop="88.399000">did.</span> <span class="audio-time caption" data-speaker="Shae" data-start="88.400000" data-stop="91.519000">And I guess that was an early introduction into I wanted to be part</span> <span class="audio-time caption" data-speaker="Shae" data-start="91.520000" data-stop="96.239000">of communities where people were sharing positive things and building</span> <span class="audio-time caption" data-speaker="Shae" data-start="96.240000" data-stop="97.679000">up each other.</span> <span class="audio-time caption" data-speaker="Shae" data-start="97.680000" data-stop="101.119000">Actually, I ended up starting the Haskell IRC channel a couple of</span> <span class="audio-time caption" data-speaker="Shae" data-start="101.120000" data-stop="104.239000">years later, and that became a very big thing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="104.240000" data-stop="107.919000">I would say that I'm mostly known for my work in community building</span> <span class="audio-time caption" data-speaker="Shae" data-start="107.920000" data-stop="111.519000">in the Haskell programming language community, because I did that</span> <span class="audio-time caption" data-speaker="Shae" data-start="111.520000" data-stop="116.399000">for, I don't know, 15 or 20 years.</span> <span class="audio-time caption" data-speaker="Shae" data-start="116.400000" data-stop="118.959000">But I really like Emacs.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="118.000000">1:58</span> <strong>Emacs as a light-weight build-your-own-editor toolkit</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="118.960000" data-stop="122.959000"><strong class="speaker-name">Shae:</strong> So like last week at the same time I had the standing chat with a</span> <span class="audio-time caption" data-speaker="Shae" data-start="122.960000" data-stop="127.199000">friend of mine who is also a programmer and he said oh so you're</span> <span class="audio-time caption" data-speaker="Shae" data-start="127.200000" data-stop="129.079000">going to do this thing in a week do you want to give me like a</span> <span class="audio-time caption" data-speaker="Shae" data-start="129.080000" data-stop="132.959000">preview of the talk and I was like yeah I guess so and some of the</span> <span class="audio-time caption" data-speaker="Shae" data-start="132.960000" data-stop="135.479000">things that were really interesting was he was like I've never really</span> <span class="audio-time caption" data-speaker="Shae" data-start="135.480000" data-stop="139.319000">tried Emacs I don't know much about it I kind of have this impression</span> <span class="audio-time caption" data-speaker="Shae" data-start="139.320000" data-stop="145.439000">that it is a very lightweight build your own editor toolkit and I</span> <span class="audio-time caption" data-speaker="Shae" data-start="145.440000" data-stop="151.239000">I was kind of taken aback because, you know, I guess I still have</span> <span class="audio-time caption" data-speaker="Shae" data-start="151.240000" data-stop="153.359000">this long ago and far away.</span> <span class="audio-time caption" data-speaker="Shae" data-start="153.360000" data-stop="156.159000">I don't know if you remember 8 Megs and Constantly Swapping is what</span> <span class="audio-time caption" data-speaker="Shae" data-start="156.160000" data-stop="159.439000">people used to call Emacs and things like that.</span> <span class="audio-time caption" data-speaker="Shae" data-start="159.440000" data-stop="163.399000">And I was, it was just kind of, I realized I'm still in my little</span> <span class="audio-time caption" data-speaker="Shae" data-start="163.400000" data-stop="164.039000">echo chamber.</span> <span class="audio-time caption" data-speaker="Shae" data-start="164.040000" data-stop="166.919000">And this is why I like to talk to other people all the time is</span> <span class="audio-time caption" data-speaker="Shae" data-start="166.920000" data-stop="171.479000">because I want to have some exposure to what other people are doing.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="171.000000">2:51</span> <strong>LSP, treesitter, Magit, jujutsu, C++, Python, Haskell, rust</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="171.480000" data-stop="175.679000"><strong class="speaker-name">Shae:</strong> I guess things about Emacs that really changed stuff for me is</span> <span class="audio-time caption" data-speaker="Shae" data-start="175.680000" data-stop="180.919000">language server protocol, TreeSitter.</span> <span class="audio-time caption" data-speaker="Shae" data-start="180.920000" data-stop="183.999000">Those, I think, are two very powerful tools that are much more</span> <span class="audio-time caption" data-speaker="Shae" data-start="184.000000" data-stop="187.799000">generic than, I mean, Magit, of course, is like magic.</span> <span class="audio-time caption" data-speaker="Shae" data-start="187.800000" data-stop="191.119000">Although I've mostly switched to jujitsu lately instead for the last</span> <span class="audio-time caption" data-speaker="Shae" data-start="191.120000" data-stop="192.319000">year.</span> <span class="audio-time caption" data-speaker="Shae" data-start="192.320000" data-stop="197.799000">Let's see, I had, I guess, let's see, I did C++, I did Python, I did</span> <span class="audio-time caption" data-speaker="Shae" data-start="197.800000" data-stop="201.319000">a whole lot of Python.</span> <span class="audio-time caption" data-speaker="Shae" data-start="201.320000" data-stop="205.719000">And then I had Haskell jobs for five or six years.</span> <span class="audio-time caption" data-speaker="Shae" data-start="205.720000" data-stop="208.959000">And then I switched to Rust about a year and a half ago.</span> <span class="audio-time caption" data-speaker="Shae" data-start="208.960000" data-stop="211.079000">I now have a Rust job.</span> <span class="audio-time caption" data-speaker="Shae" data-start="211.080000" data-stop="214.759000">And one of the things that Prot had asked, I think, or you had asked,</span> <span class="audio-time caption" data-speaker="Shae" data-start="214.760000" data-stop="215.779000">and I forget exactly how this went.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="215.000000">3:35</span> <strong>how does a new person experience Emacs? Emacs is always fun.</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="215.780000" data-stop="218.319000"><strong class="speaker-name">Shae:</strong> It was great fun watching your livestream.</span> <span class="audio-time caption" data-speaker="Shae" data-start="218.320000" data-stop="220.319000">And it was, how does a new person</span> <span class="audio-time caption" data-speaker="Shae" data-start="220.320000" data-stop="224.839000">kind of get comfortable with using Emacs for a particular purpose.</span> <span class="audio-time caption" data-speaker="Shae" data-start="224.840000" data-stop="229.559000">And I look for things, in fact, like how do I use Emacs for Rust,</span> <span class="audio-time caption" data-speaker="Shae" data-start="229.560000" data-stop="230.199000">Rust development?</span> <span class="audio-time caption" data-speaker="Shae" data-start="230.200000" data-stop="233.999000">And I found a couple of good guides on, and I was able to follow most</span> <span class="audio-time caption" data-speaker="Shae" data-start="234.000000" data-stop="236.679000">of them, although my Yesnitit stuff is broken and I don't exactly</span> <span class="audio-time caption" data-speaker="Shae" data-start="236.680000" data-stop="238.439000">know why tab doesn't work, right?</span> <span class="audio-time caption" data-speaker="Shae" data-start="238.440000" data-stop="242.679000">But, you know, like there's always, Emacs is always fun, right?</span> <span class="audio-time caption" data-speaker="Shae" data-start="242.680000" data-stop="243.799000">There's so many cool things you could do with it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="243.000000">4:03</span> <strong>Markov keyboard project, moving to Finland, right-handed Dvorak, split keyboard; Jeff Raskin; I am not a koala</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="243.800000" data-stop="247.199000"><strong class="speaker-name">Shae:</strong> I noticed, I actually hadn't seen your preview page and I noticed</span> <span class="audio-time caption" data-speaker="Shae" data-start="247.200000" data-stop="251.619000">that you found my Markov keyboard.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="251.620000" data-stop="254.679000"><strong class="speaker-name">Sacha:</strong> When you say Emacs is fun, I'm reminded of all of your fun,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="254.680000" data-stop="258.439000">crazy keyboard experiments.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="258.440000" data-stop="260.639000">It's like, what?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="260.640000" data-stop="265.499000">I have a feeling you like to tinker with things.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="265.500000" data-stop="271.599000"><strong class="speaker-name">Shae:</strong> Yeah, so I think actually the influences as to how I got to</span> <span class="audio-time caption" data-speaker="Shae" data-start="271.600000" data-stop="275.099000">where I am are pretty interesting.</span> <span class="audio-time caption" data-speaker="Shae" data-start="275.100000" data-stop="280.479000">So the person that I ended up moving to Finland to for dating her, we</span> <span class="audio-time caption" data-speaker="Shae" data-start="280.480000" data-stop="285.839000">started a company, we did projects, and I was the programmer. We had</span> <span class="audio-time caption" data-speaker="Shae" data-start="285.840000" data-stop="289.359000">this pretty big project. I guess it was like 350,000 euros.</span> <span class="audio-time caption" data-speaker="Shae" data-start="289.360000" data-stop="292.000000">And I mean, that was going to be over four years</span> <span class="audio-time caption" data-speaker="Shae" data-start="292.001000" data-stop="293.033000">and we had to kind of complete the whole thing,</span> <span class="audio-time caption" data-speaker="Shae" data-start="293.034000" data-stop="297.239000">and I was the programmer and we'd had the lowest bid...</span> <span class="audio-time caption" data-speaker="Shae" data-start="297.240000" data-stop="300.879000">I had an IBM model M, you know, the super clicky with like all the...</span> <span class="audio-time caption" data-speaker="Shae" data-start="300.880000" data-stop="305.319000">And about three years into it, my arm started really hurting a lot.</span> <span class="audio-time caption" data-speaker="Shae" data-start="305.320000" data-stop="307.719000">But I was the only programmer.</span> <span class="audio-time caption" data-speaker="Shae" data-start="307.720000" data-stop="308.959000">And nobody else knew all the code.</span> <span class="audio-time caption" data-speaker="Shae" data-start="308.960000" data-stop="310.519000">And we had to ship it, because that's how we got paid.</span> <span class="audio-time caption" data-speaker="Shae" data-start="310.520000" data-stop="312.399000">And so I ended up pushing through.</span> <span class="audio-time caption" data-speaker="Shae" data-start="312.400000" data-stop="316.119000">And at the end of it, my arm just didn't work anymore.</span> <span class="audio-time caption" data-speaker="Shae" data-start="316.120000" data-stop="321.479000">So for about a year and three months, what I did was I actually</span> <span class="audio-time caption" data-speaker="Shae" data-start="321.480000" data-stop="323.159000">taught myself to type right hand.</span> <span class="audio-time caption" data-speaker="Shae" data-start="323.160000" data-stop="325.367000">...Dvorak, because I was already using two-hand Dvorak,</span> <span class="audio-time caption" data-speaker="Shae" data-start="325.368000" data-stop="327.933000">and so I kept programming, but I just...</span> <span class="audio-time caption" data-speaker="Shae" data-start="327.934000" data-stop="330.500000">One of the things was... like, I like programming,</span> <span class="audio-time caption" data-speaker="Shae" data-start="330.501000" data-stop="332.900000">I like using computers, I don't want to wear out my arms again,</span> <span class="audio-time caption" data-speaker="Shae" data-start="332.901000" data-stop="333.933000">I don't want to blow them out,</span> <span class="audio-time caption" data-speaker="Shae" data-start="333.934000" data-stop="337.000000">so I ended up switching to split keyboards,</span> <span class="audio-time caption" data-speaker="Shae" data-start="337.001000" data-stop="338.533000">and I will show you.</span> <span class="audio-time caption" data-speaker="Shae" data-start="338.534000" data-stop="342.033000">This is very much the kind of thing that I like to use,</span> <span class="audio-time caption" data-speaker="Shae" data-start="342.034000" data-stop="344.467000">and that is like this.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/mpv-shot0060.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/mpv-shot0060.jpg" alt="image from video 00:05:44.800" data-time="00:05:44.800"></a><span class="audio-time caption" data-speaker="Shae" data-start="344.780000" data-stop="347.133000"><strong class="speaker-name">Shae:</strong> This is an Ergodox Infinity,</span> <span class="audio-time caption" data-speaker="Shae" data-start="347.134000" data-stop="349.367000">but there's a lot of other keyboard flavors like this.</span> <span class="audio-time caption" data-speaker="Shae" data-start="349.368000" data-stop="352.867000">And one of the things that I particularly like about this...</span> <span class="audio-time caption" data-speaker="Shae" data-start="352.868000" data-stop="354.900000">So around the same time I met Jeff Raskin,</span> <span class="audio-time caption" data-speaker="Shae" data-start="354.901000" data-stop="375.239000">who wrote the Inhumane Interface.</span> <span class="audio-time caption" data-speaker="Shae" data-start="375.240000" data-stop="380.679000">And so for this particular thing, this is like Control and Alt and</span> <span class="audio-time caption" data-speaker="Shae" data-start="363.500000" data-stop="363.500000">Hyper and Super and Shift.</span> <span class="audio-time caption" data-speaker="Shae" data-start="363.501000" data-stop="369.433000">And this means that under one thumb, I have a lot more modifier keys</span> <span class="audio-time caption" data-speaker="Shae" data-start="369.434000" data-stop="371.933000">than you get off of a standard.</span> <span class="audio-time caption" data-speaker="Shae" data-start="371.934000" data-stop="372.700000">And it also means...</span> <span class="audio-time caption" data-speaker="Shae" data-start="372.701000" data-stop="374.733000">A lot of my problems started with Emacs pinky,</span> <span class="audio-time caption" data-speaker="Shae" data-start="374.734000" data-stop="378.519000">the dreaded, the infamous...</span> <span class="audio-time caption" data-speaker="Shae" data-start="378.520000" data-stop="382.567000">I think that one of my... I made a keyboard layout</span> <span class="audio-time caption" data-speaker="Shae" data-start="382.568000" data-stop="384.867000">called "I am not koala." You may not know this,</span> <span class="audio-time caption" data-speaker="Shae" data-start="384.868000" data-stop="387.033000">but koalas have two thumbs. They have one on each side.</span> <span class="audio-time caption" data-speaker="Shae" data-start="387.034000" data-stop="389.600000">And that's cool, but I don't have two thumbs,</span> <span class="audio-time caption" data-speaker="Shae" data-start="389.601000" data-stop="392.367000">and I realized that when I was trying to grab something,</span> <span class="audio-time caption" data-speaker="Shae" data-start="392.368000" data-stop="394.067000">I didn't put my pinky on it. That would be silly, right?</span> <span class="audio-time caption" data-speaker="Shae" data-start="394.068000" data-stop="395.719000">I want to put my thumb around it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="395.720000" data-stop="396.993000">And so I decided I would move</span> <span class="audio-time caption" data-speaker="Shae" data-start="396.994000" data-stop="400.299000">all of my chording keys under my thumbs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="400.300000" data-stop="403.367000">And that's kind of how I...</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="403.000000">6:43</span> <strong>Purpose-specific function keys</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="403.368000" data-stop="405.159000"><strong class="speaker-name">Shae:</strong> And another thing I did was when I was</span> <span class="audio-time caption" data-speaker="Shae" data-start="405.160000" data-stop="407.479000">really only able to use one hand,</span> <span class="audio-time caption" data-speaker="Shae" data-start="407.480000" data-stop="411.719000">was I made my function keys mostly purpose-specific.</span> <span class="audio-time caption" data-speaker="Shae" data-start="411.720000" data-stop="414.519000">And that was from Jeff Raskin's writings in The Humane Interface.</span> <span class="audio-time caption" data-speaker="Shae" data-start="414.520000" data-stop="421.559000">So I guess I'm a programmer who really likes writing code, doesn't</span> <span class="audio-time caption" data-speaker="Shae" data-start="421.560000" data-stop="426.199000">want to wear out my arms, and likes to do fun keyboard things, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="426.200000" data-stop="428.340000"><strong class="speaker-name">Sacha:</strong> Definitely. You're in it for the long term.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="428.341000" data-stop="434.367000">You don't want to use up all of your arm capacity now</span> <span class="audio-time caption" data-speaker="Sacha" data-start="434.368000" data-stop="436.719000">and not be able to keep programming in the future.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="436.720000" data-stop="439.079000">And now there's hardware to make that easier.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="439.080000" data-stop="440.039000">So I'm glad.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="440.040000" data-stop="444.559000">Split keyboards with extra thumb keys seem to be very popular in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="444.560000" data-stop="445.599000">the Emacs community.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="445.600000" data-stop="450.919000">I'm now tempted to find space in my desk in order to make that happen.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="450.000000">7:30</span> <strong>Trackballs, scroll
</strong></div><p></p><a href="https://sachachua.com/blog/feed/ec22-shae-erisson-00-07-37-067.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/feed/ec22-shae-erisson-00-07-37-067.jpg" alt="image from video 00:07:37.067" data-time="00:07:37.067"></a><span class="audio-time caption" data-speaker="Shae" data-start="450.920000" data-stop="454.039000"><strong class="speaker-name">Shae:</strong> Another thing I ended up switching to was I started using</span> <span class="audio-time caption" data-speaker="Shae" data-start="454.040000" data-stop="455.239000">trackballs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="455.240000" data-stop="455.799000">Oh yeah, yeah.</span> <span class="audio-time caption" data-speaker="Shae" data-start="455.800000" data-stop="461.479000">I tend to go completely overboard when trying out new things, so I</span> <span class="audio-time caption" data-speaker="Shae" data-start="461.480000" data-stop="466.439000">bought 20 different models of trackballs and ended up settling on</span> <span class="audio-time caption" data-speaker="Shae" data-start="466.440000" data-stop="467.599000">this one.</span> <span class="audio-time caption" data-speaker="Shae" data-start="467.600000" data-stop="475.799000">The nice thing about this one is that this is how you scroll, and it</span> <span class="audio-time caption" data-speaker="Shae" data-start="475.800000" data-stop="475.379000">has four buttons.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="475.380000" data-stop="479.767000"><strong class="speaker-name">Sacha:</strong> That is really cool. I like using ThinkPads,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="479.768000" data-stop="481.679000">so I've been just living off the tiny little</span> <span class="audio-time caption" data-speaker="Sacha" data-start="481.680000" data-stop="483.319000">mouse in the middle of the keyboard.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="483.320000" data-stop="486.959000">But back in the day, I also used a trackball.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="486.960000" data-stop="490.199000">If I can get to the point where I want to take my hands off the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="490.200000" data-stop="492.479000">keyboard again in order to do mouse things, that would probably be</span> <span class="audio-time caption" data-speaker="Sacha" data-start="492.480000" data-stop="494.159000">the direction I would go.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="494.000000">8:14</span> <strong>1" trackpad rings</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="494.160000" data-stop="497.119000"><strong class="speaker-name">Shae:</strong> I had an experiment in that area, which is where I purchased</span> <span class="audio-time caption" data-speaker="Shae" data-start="497.120000" data-stop="500.239000">a one-inch touchpad, and I strapped it to my finger.</span> <span class="audio-time caption" data-speaker="Shae" data-start="500.240000" data-stop="504.759000">And it was a PS2, and it had a USB converter plugged into it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="504.760000" data-stop="508.719000">And the idea was I could keep typing, and then I could move the mouse</span> <span class="audio-time caption" data-speaker="Shae" data-start="508.720000" data-stop="511.839000">around without taking my hands off the keyboard.</span> <span class="audio-time caption" data-speaker="Shae" data-start="511.840000" data-stop="514.719000">And now they actually have touchpad rings.</span> <span class="audio-time caption" data-speaker="Shae" data-start="514.720000" data-stop="518.039000">They came out six months or a year ago.</span> <span class="audio-time caption" data-speaker="Shae" data-start="518.040000" data-stop="519.839000">It's relatively recent.</span> <span class="audio-time caption" data-speaker="Shae" data-start="519.840000" data-stop="522.019000">But the idea is no change in context.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="522.020000" data-stop="523.933000"><strong class="speaker-name">Sacha:</strong> I've only seen the scroll rings,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="523.934000" data-stop="526.199000">but now there's a touchpad version.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="526.200000" data-stop="527.479000">That is interesting.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="527.480000" data-stop="530.639000"><strong class="speaker-name">Shae:</strong> Yeah, I think that's pretty cool stuff.</span> <span class="audio-time caption" data-speaker="Shae" data-start="530.640000" data-stop="534.139000">Hardware is actually improving things.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="534.000000">8:54</span> <strong>Pair programming: ttyshare, shwim</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="534.140000" data-stop="538.559000"><strong class="speaker-name">Shae:</strong> Oh, another thing, one of the things you talked about with Prot was</span> <span class="audio-time caption" data-speaker="Shae" data-start="538.560000" data-stop="540.559000">how do you learn other people's stuff?</span> <span class="audio-time caption" data-speaker="Shae" data-start="540.560000" data-stop="545.119000">And one of the things that I use for pairing, so I have one coworker,</span> <span class="audio-time caption" data-speaker="Shae" data-start="545.120000" data-stop="546.799000">and it's a strange, interesting job.</span> <span class="audio-time caption" data-speaker="Shae" data-start="546.800000" data-stop="549.919000">I like it a lot.</span> <span class="audio-time caption" data-speaker="Shae" data-start="549.920000" data-stop="555.679000">And I met this coworker at a previous job, and one of the things,</span> <span class="audio-time caption" data-speaker="Shae" data-start="555.680000" data-stop="558.479000">let's see if I can find it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="558.480000" data-stop="560.406000">So we used to, at the previous job,</span> <span class="audio-time caption" data-speaker="Shae" data-start="560.407000" data-stop="562.439000">we used this thing called ttyshare.</span> <span class="audio-time caption" data-speaker="Shae" data-start="562.440000" data-stop="563.079000">Have you heard of it?</span> <span class="audio-time caption" data-speaker="Shae" data-start="563.080000" data-stop="565.959000">ttyshare.</span> <span class="audio-time caption" data-speaker="Shae" data-start="565.960000" data-stop="566.879000">It's great.</span> <span class="audio-time caption" data-speaker="Shae" data-start="566.880000" data-stop="569.599000">You can run it in a terminal and then you can effectively share your</span> <span class="audio-time caption" data-speaker="Shae" data-start="569.600000" data-stop="571.399000">terminal with someone else.</span> <span class="audio-time caption" data-speaker="Shae" data-start="571.400000" data-stop="574.879000">And so you have multiplayer terminals and that's neat.</span> <span class="audio-time caption" data-speaker="Shae" data-start="574.880000" data-stop="577.639000">It was kind of a pain to set up.</span> <span class="audio-time caption" data-speaker="Shae" data-start="577.640000" data-stop="579.116000">You had to make sure that you weren't NATed,</span> <span class="audio-time caption" data-speaker="Shae" data-start="579.117000" data-stop="580.675000">you know, like you had to have effectively...</span> <span class="audio-time caption" data-speaker="Shae" data-start="580.676000" data-stop="581.759000">someone had to have a public IP.</span> <span class="audio-time caption" data-speaker="Shae" data-start="581.760000" data-stop="582.839000">You had to do a couple of other things.</span> <span class="audio-time caption" data-speaker="Shae" data-start="582.840000" data-stop="587.639000">And as part of my job, I'm now, I guess, part maintainer for Magic</span> <span class="audio-time caption" data-speaker="Shae" data-start="587.640000" data-stop="588.839000">Wormhole, the software.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/mpv-shot0059.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/mpv-shot0059.jpg" alt="image from video 00:09:58.467" data-time="00:09:58.467"></a><span class="audio-time caption" data-speaker="Shae" data-start="588.840000" data-stop="596.159000"><strong class="speaker-name">Shae:</strong> And so one of the things that my coworker wrote was this nifty thing</span> <span class="audio-time caption" data-speaker="Shae" data-start="596.160000" data-stop="598.439000">called ShWiM.</span> <span class="audio-time caption" data-speaker="Shae" data-start="598.440000" data-stop="599.719000">And it's basically "shell with me."</span> <span class="audio-time caption" data-speaker="Shae" data-start="599.720000" data-stop="604.199000">And it's a wrapper around TTY share so that with one single command,</span> <span class="audio-time caption" data-speaker="Shae" data-start="604.200000" data-stop="606.239000">you can share a terminal.</span> <span class="audio-time caption" data-speaker="Shae" data-start="606.240000" data-stop="609.559000">And the way that we use this is...</span> <span class="audio-time caption" data-speaker="Shae" data-start="609.560000" data-stop="617.359000">We both run Emacs as a server, and then we use emacsclient in the</span> <span class="audio-time caption" data-speaker="Shae" data-start="617.360000" data-stop="618.639000">terminal to connect.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/mpv-shot0058.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/mpv-shot0058.jpg" alt="image from video 00:10:41.967" data-time="00:10:41.967"></a><span class="audio-time caption" data-speaker="Shae" data-start="618.640000" data-stop="621.919000"><strong class="speaker-name">Shae:</strong> I don't know if you've ever done this, but I can have a terminal</span> <span class="audio-time caption" data-speaker="Shae" data-start="621.920000" data-stop="628.119000">right next to this, and if I run emacsclient in a window, then I'm</span> <span class="audio-time caption" data-speaker="Shae" data-start="628.120000" data-stop="629.399000">sharing the same thing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="629.400000" data-stop="634.800000">This is a graphical chat with Sacha,</span> <span class="audio-time caption" data-speaker="Shae" data-start="634.801000" data-stop="642.699000">in the terminal or in the UI, and both of them are updated.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="642.680000" data-stop="644.200000"><strong class="speaker-name">Sacha:</strong> That's fantastic.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="644.200000" data-stop="647.360000">I remember people were using tmate for something similar before</span> <span class="audio-time caption" data-speaker="Sacha" data-start="647.360000" data-stop="648.920000">where you could share that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="648.920000" data-stop="653.320000">But yeah, it's just making it seamless, making it frictionless.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="653.320000" data-stop="656.800000">And on the other side, I have also just been</span> <span class="audio-time caption" data-speaker="Sacha" data-start="656.800000" data-stop="659.600000">using wormhole to send large files</span> <span class="audio-time caption" data-speaker="Sacha" data-start="659.600000" data-stop="664.240000">back and forth between Karthik and John Wiegley because we have this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="664.240000" data-stop="667.360000">other Emacs chat thing where we're going to post it eventually,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="667.360000" data-stop="668.760000">once I finish figuring out how to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="668.760000" data-stop="671.440000">redact all the personal information and Org files.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="671.440000" data-stop="674.600000">But yeah, it's great for being able to send things without having to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="674.600000" data-stop="677.120000">worry about, oh, you know, what's my public IP?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="677.120000" data-stop="680.960000">Can I tunnel all the different things to get past whatever firewalls</span> <span class="audio-time caption" data-speaker="Sacha" data-start="680.960000" data-stop="681.800000">there are?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="681.800000" data-stop="686.200000">So if this also works for terminal things plus Emacs client, that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="686.200000" data-stop="691.640000">sounds really, really exciting.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="691.640000" data-stop="692.000000"><strong class="speaker-name">Shae:</strong> We've tried some other experiments.</span> <span class="audio-time caption" data-speaker="Shae" data-start="692.040000" data-stop="696.919000">One of the things we tried to do was, and the only downside is like,</span> <span class="audio-time caption" data-speaker="Shae" data-start="696.920000" data-stop="699.839000">what if my terminal has a different size, then you have to kind of</span> <span class="audio-time caption" data-speaker="Shae" data-start="699.840000" data-stop="701.559000">shrink and match.</span> <span class="audio-time caption" data-speaker="Shae" data-start="701.560000" data-stop="705.599000">And so we tried to honestly directly bridge to Emacs clients.</span> <span class="audio-time caption" data-speaker="Shae" data-start="705.600000" data-stop="709.039000">And because I don't know if you're aware that there's effectively a</span> <span class="audio-time caption" data-speaker="Shae" data-start="709.040000" data-stop="712.479000">local socket for the Emacs client that you can have multiple things</span> <span class="audio-time caption" data-speaker="Shae" data-start="712.480000" data-stop="713.039000">connect to.</span> <span class="audio-time caption" data-speaker="Shae" data-start="713.040000" data-stop="716.799000">But it turns out there's some sort of like system so I couldn't like</span> <span class="audio-time caption" data-speaker="Shae" data-start="716.800000" data-stop="721.119000">reach across the network and directly use my co-workers Emacs session</span> <span class="audio-time caption" data-speaker="Shae" data-start="721.120000" data-stop="722.279000">and he couldn't use mine.</span> <span class="audio-time caption" data-speaker="Shae" data-start="722.280000" data-stop="725.559000">Weird things happened when we tried to do this cross host.</span> <span class="audio-time caption" data-speaker="Shae" data-start="725.560000" data-stop="729.499000">As far as I can tell the Emacs client only works in the same host.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="729.500000" data-stop="730.679000"><strong class="speaker-name">Sacha:</strong> That's interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="730.680000" data-stop="735.199000">Lately, I've also been experimenting with CRDT, which has that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="735.200000" data-stop="736.439000">Emacs-less plant as well.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="736.440000" data-stop="737.719000">So that's been nice.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="737.720000" data-stop="742.559000">But yeah, of course, a lot of people will be kind of stuck with the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="742.560000" data-stop="749.979000">first challenge of finding someone that they can pair in Emacs with.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="749.980000" data-stop="751.039000"><strong class="speaker-name">Shae:</strong> I understand.</span> <span class="audio-time caption" data-speaker="Shae" data-start="751.040000" data-stop="755.359000">And I think I'm honestly very happy that my one single coworker at</span> <span class="audio-time caption" data-speaker="Shae" data-start="755.360000" data-stop="757.679000">this job is also a big Emacs user.</span> <span class="audio-time caption" data-speaker="Shae" data-start="757.680000" data-stop="761.359000">And so we exchanged cool ideas and worked on stuff.</span> <span class="audio-time caption" data-speaker="Shae" data-start="761.360000" data-stop="764.579000">And I'm very happy about that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="764.580000" data-stop="768.399000"><strong class="speaker-name">Sacha:</strong> Were they already an Emacs person before they joined?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="768.400000" data-stop="773.539000">Or did you pick the coworker because they were an Emacs person?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="773.540000" data-stop="774.333000"><strong class="speaker-name">Shae:</strong> They picked me.</span> <span class="audio-time caption" data-speaker="Shae" data-start="774.334000" data-stop="778.199000">They were pretty much the person who started this thing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="778.200000" data-stop="782.199000">And they picked me because they'd worked with me at the previous job.</span> <span class="audio-time caption" data-speaker="Shae" data-start="782.200000" data-stop="784.639000">Although I did have an experience like that.</span> <span class="audio-time caption" data-speaker="Shae" data-start="784.640000" data-stop="789.199000">I had this massive Emacs config file, like 20,000 lines, and half of</span> <span class="audio-time caption" data-speaker="Shae" data-start="789.200000" data-stop="793.039000">it was comments because it had accrued over 20 years.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="793.000000">13:13</span> <strong>Recurse Center, "What is that keyboard? What is that editor?!", Emacs bankruptcy and starter kits</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="793.040000" data-stop="800.479000"><strong class="speaker-name">Shae:</strong> And in 2019, when I first went to the Recurse Center, well, my first</span> <span class="audio-time caption" data-speaker="Shae" data-start="800.480000" data-stop="802.879000">batch, I just was extremely extroverted and social.</span> <span class="audio-time caption" data-speaker="Shae" data-start="802.880000" data-stop="805.639000">But my second immediate following batch, which is not the common</span> <span class="audio-time caption" data-speaker="Shae" data-start="805.640000" data-stop="808.399000">pattern, I was like, okay, my goal is to write a bunch of Haskell,</span> <span class="audio-time caption" data-speaker="Shae" data-start="808.400000" data-stop="809.959000">get some Haskell jobs,</span> <span class="audio-time caption" data-speaker="Shae" data-start="809.960000" data-stop="813.159000">And so I went to the quiet room on the quiet floor.</span> <span class="audio-time caption" data-speaker="Shae" data-start="813.160000" data-stop="816.639000">But then someone else came in, Marianne, my favorite programming</span> <span class="audio-time caption" data-speaker="Shae" data-start="816.640000" data-stop="817.159000">friend.</span> <span class="audio-time caption" data-speaker="Shae" data-start="817.160000" data-stop="819.559000">And she was like, what is that keyboard you're using?</span> <span class="audio-time caption" data-speaker="Shae" data-start="819.560000" data-stop="822.199000">And I was like, ah, this is an Ergodox thing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="822.200000" data-stop="824.159000">And then she's like, what is this editor you're using?</span> <span class="audio-time caption" data-speaker="Shae" data-start="824.160000" data-stop="825.879000">And I was like, oh, that's Emacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="825.880000" data-stop="828.919000">And I was kind of a grumpy, like, I'm trying to get stuff done.</span> <span class="audio-time caption" data-speaker="Shae" data-start="828.920000" data-stop="830.159000">But she was persistent.</span> <span class="audio-time caption" data-speaker="Shae" data-start="830.160000" data-stop="832.879000">She was like, show me this thing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="832.880000" data-stop="834.919000">And so I was like, I'll show you Emacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="834.920000" data-stop="836.439000">And she was like, this is great.</span> <span class="audio-time caption" data-speaker="Shae" data-start="836.440000" data-stop="837.799000">And I was like.</span> <span class="audio-time caption" data-speaker="Shae" data-start="837.800000" data-stop="838.399000">This thing?</span> <span class="audio-time caption" data-speaker="Shae" data-start="838.400000" data-stop="840.959000">OK, cool.</span> <span class="audio-time caption" data-speaker="Shae" data-start="840.960000" data-stop="844.159000">And I was like, I don't think you want my config.</span> <span class="audio-time caption" data-speaker="Shae" data-start="844.160000" data-stop="845.919000">You'll probably want a starter kit.</span> <span class="audio-time caption" data-speaker="Shae" data-start="845.920000" data-stop="848.239000">And she was like, well, what are starter kits?</span> <span class="audio-time caption" data-speaker="Shae" data-start="848.240000" data-stop="850.159000">And I was like, well, I've heard about Spacemacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="850.160000" data-stop="851.119000">I've heard about Doom.</span> <span class="audio-time caption" data-speaker="Shae" data-start="851.120000" data-stop="852.679000">And I would try one of those.</span> <span class="audio-time caption" data-speaker="Shae" data-start="852.680000" data-stop="854.119000">So she tried Spacemacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="854.120000" data-stop="857.159000">And I guess this next part happened over several months.</span> <span class="audio-time caption" data-speaker="Shae" data-start="857.160000" data-stop="858.199000">She tried Spacemacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="858.200000" data-stop="860.199000">And then she was like, I like it, but it's slow.</span> <span class="audio-time caption" data-speaker="Shae" data-start="860.200000" data-stop="861.399000">So I'm switching to Doom Emacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="861.400000" data-stop="862.279000">And I would pair with her.</span> <span class="audio-time caption" data-speaker="Shae" data-start="862.280000" data-stop="866.479000">And I was like, wow, look at all these cool things that the starter</span> <span class="audio-time caption" data-speaker="Shae" data-start="866.480000" data-stop="867.519000">kits can do.</span> <span class="audio-time caption" data-speaker="Shae" data-start="867.520000" data-stop="873.119000">I ended up flushing my entire 20-year-old config and kind of starting</span> <span class="audio-time caption" data-speaker="Shae" data-start="873.120000" data-stop="876.519000">over and stealing a lot of great ideas from the starter kits.</span> <span class="audio-time caption" data-speaker="Shae" data-start="876.520000" data-stop="883.839000">And Marianne is very ambitious, independent, hardworking, very</span> <span class="audio-time caption" data-speaker="Shae" data-start="883.840000" data-stop="884.279000">focused.</span> <span class="audio-time caption" data-speaker="Shae" data-start="884.280000" data-stop="885.239000">I'm not very focused.</span> <span class="audio-time caption" data-speaker="Shae" data-start="885.240000" data-stop="889.039000">But I've learned a lot of things from her and watching her kind of...</span> <span class="audio-time caption" data-speaker="Shae" data-start="889.040000" data-stop="894.159000">I haven't done C in Emacs in a long time so it's great fun to watch</span> <span class="audio-time caption" data-speaker="Shae" data-start="894.160000" data-stop="898.079000">her learn these new things and then I learned stuff too and yeah it's</span> <span class="audio-time caption" data-speaker="Shae" data-start="898.080000" data-stop="902.319000">good to have collaborative people to work with.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="902.320000" data-stop="905.039000"><strong class="speaker-name">Sacha:</strong> So it sounds like if people would like to encourage more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="905.040000" data-stop="908.199000">people to talk to them about Emacs, feel free to use your strange</span> <span class="audio-time caption" data-speaker="Sacha" data-start="908.200000" data-stop="911.079000">keyboards out in public.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="911.080000" data-stop="911.839000"><strong class="speaker-name">Shae:</strong> I like that.</span> <span class="audio-time caption" data-speaker="Shae" data-start="911.840000" data-stop="914.039000">That's good.</span> <span class="audio-time caption" data-speaker="Shae" data-start="914.040000" data-stop="915.719000">That is good.</span> <span class="audio-time caption" data-speaker="Shae" data-start="915.720000" data-stop="918.759000">Yeah I think that's reasonable.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="918.760000" data-stop="921.719000"><strong class="speaker-name">Sacha:</strong> Yeah, and I've just recently started digging into the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="921.720000" data-stop="924.519000">starter kits too, because I realized I don't know much about them.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="924.520000" data-stop="927.999000">It is really interesting going through them and discovering all these</span> <span class="audio-time caption" data-speaker="Sacha" data-start="928.000000" data-stop="932.679000">Emacs 31 options that you can enable to simplify your config or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="932.680000" data-stop="934.759000">improve your workflow and all that stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="934.760000" data-stop="937.639000">So there's a lot of good stuff in starter kits, even for people who</span> <span class="audio-time caption" data-speaker="Sacha" data-start="937.640000" data-stop="939.939000">are not newcomers.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="939.940000" data-stop="940.879000"><strong class="speaker-name">Shae:</strong> I agree.</span> <span class="audio-time caption" data-speaker="Shae" data-start="940.880000" data-stop="946.319000">And I think there's nothing wrong with just learning a bunch of new</span> <span class="audio-time caption" data-speaker="Shae" data-start="946.320000" data-stop="949.639000">things, trying them out, and also throwing them away if you don't</span> <span class="audio-time caption" data-speaker="Shae" data-start="949.640000" data-stop="950.199000">like them.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="950.200000" data-stop="954.679000"><strong class="speaker-name">Sacha:</strong> Now that you've declared Emacs bankruptcy and rebuilt your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="954.680000" data-stop="958.999000">Emacs on top of other people's starter kits, what has made it into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="959.000000" data-stop="959.999000">your config?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="960.000000" data-stop="963.519000">What have you kept from those 20 years of tinkering with Emacs that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="963.520000" data-stop="965.999000">you really wanted to stick around?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="966.000000">16:06</span> <strong>hippie-expand</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="966.000000" data-stop="969.359000"><strong class="speaker-name">Shae:</strong> I think the only thing that has absolutely stuck around is my</span> <span class="audio-time caption" data-speaker="Shae" data-start="969.360000" data-stop="972.519000">use of hippie-expand, which is, I believe, a very old...</span> <span class="audio-time caption" data-speaker="Shae" data-start="972.520000" data-stop="976.159000">an ancient tool from a different time.</span> <span class="audio-time caption" data-speaker="Shae" data-start="976.160000" data-stop="980.519000">Most of the other stuff is kind of gone.</span> <span class="audio-time caption" data-speaker="Shae" data-start="980.520000" data-stop="981.759000">Gone to the wayside.</span> <span class="audio-time caption" data-speaker="Shae" data-start="981.760000" data-stop="985.519000">But I really like, I honestly really like hippie-expand.</span> <span class="audio-time caption" data-speaker="Shae" data-start="985.520000" data-stop="989.159000">And I know that like, I have rarely heard of other people who use</span> <span class="audio-time caption" data-speaker="Shae" data-start="989.160000" data-stop="990.159000">hippie-expand.</span> <span class="audio-time caption" data-speaker="Shae" data-start="990.160000" data-stop="991.039000">But you use it?</span> <span class="audio-time caption" data-speaker="Shae" data-start="991.040000" data-stop="995.679000">I think you just muted yourself.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="995.680000" data-stop="997.959000"><strong class="speaker-name">Sacha:</strong> I also vote for hippie-expand.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="997.960000" data-stop="1002.519000">It's a nice way to try different functions and just say, I just want</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1002.520000" data-stop="1006.659000">all these different possible completions to go in there.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1006.660000" data-stop="1007.239000"><strong class="speaker-name">Shae:</strong> Yeah.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1007.240000" data-stop="1013.439000">The thing for me that really sold me on hippie-expand is that most of</span> <span class="audio-time caption" data-speaker="Shae" data-start="1013.440000" data-stop="1014.919000">the time when I am...</span> <span class="audio-time caption" data-speaker="Shae" data-start="1014.920000" data-stop="1018.159000">When I'm doing something, I want to say, like, I can already see that</span> <span class="audio-time caption" data-speaker="Shae" data-start="1018.160000" data-stop="1019.759000">word, just pick that one.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1019.760000" data-stop="1022.919000">And so I'll type the first characters and hit, like, meta forward</span> <span class="audio-time caption" data-speaker="Shae" data-start="1022.920000" data-stop="1024.919000">slash, and ta-da, it's usually there.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1024.920000" data-stop="1027.879000">But then sometimes I do really want, like, some Elisp or some other</span> <span class="audio-time caption" data-speaker="Shae" data-start="1027.880000" data-stop="1028.279000">stuff.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1028.280000" data-stop="1034.319000">And so I actually spent a lot of time tuning this the first time.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1034.000000">17:14</span> <strong>yasnippet</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="1034.320000" data-stop="1038.999000"><strong class="speaker-name">Shae:</strong> I actually only changed it for the first time recently because I was</span> <span class="audio-time caption" data-speaker="Shae" data-start="1039.000000" data-stop="1044.599000">reading a how to write Rust well inside Emacs and they said oh well</span> <span class="audio-time caption" data-speaker="Shae" data-start="1044.600000" data-stop="1049.719000">you want to use yasnippet and so I you know the funny thing is that</span> <span class="audio-time caption" data-speaker="Shae" data-start="1049.720000" data-stop="1053.759000">yasnippet I believe is the thing that got me into Emacs like in 1999</span> <span class="audio-time caption" data-speaker="Shae" data-start="1053.760000" data-stop="1059.079000">I met this Finnish person Erno Kuusela in Oulu, Finland.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1059.080000" data-stop="1060.199000">Really cool guy.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1060.200000" data-stop="1062.959000">I was like, wow, how do you do this?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1062.960000" data-stop="1067.839000">As soon as you open a file, it's got a substructure and a skeleton.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1067.840000" data-stop="1069.849000">And when you type part of a function or something,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1069.850000" data-stop="1071.467000">it just populates it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1071.468000" data-stop="1073.759000">And he was like, I'm using this snippet command in Emacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1073.760000" data-stop="1075.559000">That's why I was like, what's Emacs?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1075.560000" data-stop="1077.879000">It was very exciting.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1077.880000" data-stop="1081.199000">And at the time, I was using Vim.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1081.200000" data-stop="1088.539000">And Vim was not as, I don't want to say, automatable.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1088.540000" data-stop="1092.959000"><strong class="speaker-name">Sacha:</strong> Yeah, now with Neovim and Lua, people are writing more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1092.960000" data-stop="1094.039000">extensions for it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1094.040000" data-stop="1099.619000">But before, you had to know a lot of magic in order to customize Vim.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1099.620000" data-stop="1100.639000"><strong class="speaker-name">Shae:</strong> Right, right.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1100.640000" data-stop="1101.279000">I agree.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1101.280000" data-stop="1103.839000">Let's see, what else do I do?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1103.840000" data-stop="1108.559000">I run my own email server, and I, of course, read my email in Emacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1108.560000" data-stop="1110.159000">In GNU, no less.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1110.160000" data-stop="1119.119000">Which is, I know, an NNTP reader, but it's still also a great...</span> <span class="audio-time caption" data-speaker="Shae" data-start="1119.120000" data-stop="1123.199000">I used to use twiddle compile and I think that stopped working like</span> <span class="audio-time caption" data-speaker="Shae" data-start="1123.200000" data-stop="1130.999000">six years ago, so I need to get rid of this comment, but there's</span> <span class="audio-time caption" data-speaker="Shae" data-start="1131.000000" data-stop="1132.839000">still a lot of kind of cruft from earlier times.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1132.000000">18:52</span> <strong>Function keys</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="1132.840000" data-stop="1141.199000"><strong class="speaker-name">Shae:</strong> Remember how I said that I use function keys to have like purpose</span> <span class="audio-time caption" data-speaker="Shae" data-start="1141.200000" data-stop="1143.039000">specific stuff?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1143.040000" data-stop="1150.879000">This was especially true because, I mean, I had my left arm strapped</span> <span class="audio-time caption" data-speaker="Shae" data-start="1150.880000" data-stop="1158.559000">to my chest for like a year and three months before I even started</span> <span class="audio-time caption" data-speaker="Shae" data-start="1158.560000" data-stop="1164.959000">regaining any flexibility, and that meant that...</span> <span class="audio-time caption" data-speaker="Shae" data-start="1164.960000" data-stop="1171.279000">I'm amazed that you could just map them directly to single commands</span> <span class="audio-time caption" data-speaker="Shae" data-start="1171.280000" data-stop="1174.999000">instead of giving in to the temptation to make them prefixes for</span> <span class="audio-time caption" data-speaker="Shae" data-start="1175.000000" data-stop="1176.319000">longer keystrokes.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1176.320000" data-stop="1181.079000">I didn't really have the choice because I had only one arm that</span> <span class="audio-time caption" data-speaker="Shae" data-start="1181.080000" data-stop="1185.200000">worked. It was just a lot harder to do any chording at the time.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1185.201000" data-stop="1188.267000">I still have a lot of these.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1188.268000" data-stop="1192.133000">F3 I use a lot, which is like, oh, what am I working on right now?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1192.134000" data-stop="1195.300000">That is org-clock-goto.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1195.301000" data-stop="1198.133000">A lot of times, I want to have a terminal</span> <span class="audio-time caption" data-speaker="Shae" data-start="1198.134000" data-stop="1202.140000">that's in Emacs, so that's vterm,</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1202.000000">20:02</span> <strong>Org Mode
</strong></div><p></p><a href="https://sachachua.com/blog/feed/ec22-shae-erisson-00-20-17-133.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/feed/ec22-shae-erisson-00-20-17-133.jpg" alt="image from video 00:20:17.133" data-time="00:20:17.133"></a><span class="audio-time caption" data-speaker="Shae" data-start="1202.141000" data-stop="1205.159000"><strong class="speaker-name">Shae:</strong> And I actually really do use the calendar all the time. This is like</span> <span class="audio-time caption" data-speaker="Shae" data-start="1205.160000" data-stop="1211.119000">just switch to whatever it is. Of course, my email is here. You know</span> <span class="audio-time caption" data-speaker="Shae" data-start="1211.120000" data-stop="1217.119000">what, let's see... So this... I don't know, have you seen this</span> <span class="audio-time caption" data-speaker="Shae" data-start="1217.120000" data-stop="1223.939000">before? Have you seen this thing called STARTED in an Org mode file?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1223.940000" data-stop="1227.339000"><strong class="speaker-name">Sacha:</strong> I use a STARTED state, yes.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1227.340000" data-stop="1232.579000"><strong class="speaker-name">Shae:</strong> Well, I got it from you!</span> <span class="audio-time caption" data-speaker="Shae" data-start="1232.580000" data-stop="1235.067000">So if I look at like, my Org Mode configuration,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1235.068000" data-stop="1238.333000">a lot of this STARTED stuff I have from you,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1238.334000" data-stop="1239.467000">I don't know when,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1239.468000" data-stop="1241.839000">but you were the person who introduced me to it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1241.840000" data-stop="1246.367000"><strong class="speaker-name">Sacha:</strong> It's the reminder that I did start working on this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1246.368000" data-stop="1249.933000">I tend to get distracted by intermediate tasks, so it's nice to be</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1249.934000" data-stop="1253.067000">able to say, try to finish these ones first before you move on to the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1253.068000" data-stop="1254.700000">next thing, maybe?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1254.680000" data-stop="1257.967000"><strong class="speaker-name">Shae:</strong> I agree. I have the same thing, yeah.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1257.968000" data-stop="1261.233000">And I keep meaning, because this is...</span> <span class="audio-time caption" data-speaker="Shae" data-start="1261.234000" data-stop="1264.300000">I know that you can put Org Mode configuration into the first</span> <span class="audio-time caption" data-speaker="Shae" data-start="1264.301000" data-stop="1267.267000">TODO item. I would really like to move it into the elisp</span> <span class="audio-time caption" data-speaker="Shae" data-start="1267.268000" data-stop="1269.133000">and I just haven't gotten around to it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1269.134000" data-stop="1270.600000">And it's been 10 years. I mean,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1270.601000" data-stop="1274.499000">maybe I should just do it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1274.000000">21:14</span> <strong>Show Org agenda when idle
</strong></div><p></p><a href="https://sachachua.com/blog/feed/ec22-shae-erisson-00-21-23-933.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/feed/ec22-shae-erisson-00-21-23-933.jpg" alt="image from video 00:21:23.933" data-time="00:21:23.933"></a><span class="audio-time caption" data-speaker="Shae" data-start="1274.500000" data-stop="1277.800000"><strong class="speaker-name">Shae:</strong> One of the things I did that I found fun...</span> <span class="audio-time caption" data-speaker="Shae" data-start="1277.801000" data-stop="1280.767000">I really have written almost zero Elisp,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1280.760000" data-stop="1286.280000">but I did actually puzzle my way through this a year ago.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1286.280000" data-stop="1291.320000">Since so much of my life is in Org Mode, I learned how to make timers.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1291.320000" data-stop="1295.320000">This is very close to what you get directly out of how to do timers</span> <span class="audio-time caption" data-speaker="Shae" data-start="1295.320000" data-stop="1296.560000">in Emacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1296.560000" data-stop="1303.400000">After some amount of time, I want my Org agenda to pop up because I</span> <span class="audio-time caption" data-speaker="Shae" data-start="1303.400000" data-stop="1305.600000">want to say like, oh, what is the stuff I'm supposed to be doing?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1305.600000" data-stop="1306.720000">And what am I forgetting?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1306.720000" data-stop="1307.800000">What has been scheduled?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1307.800000" data-stop="1308.760000">And what is on my to-do list?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1308.760000" data-stop="1310.120000">And I also like to look at</span> <span class="audio-time caption" data-speaker="Shae" data-start="1310.120000" data-stop="1312.680000">what is the stuff I've been working on lately?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1312.680000" data-stop="1318.040000">And I really like that a lot.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1318.000000">21:58</span> <strong>Programmers want flow. When programming, light turns red
</strong></div><p></p><a href="https://sachachua.com/blog/feed/ec22-shae-erisson-00-22-16-067.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/feed/ec22-shae-erisson-00-22-16-067.jpg" alt="image from video 00:22:16.067" data-time="00:22:16.067"></a><span class="audio-time caption" data-speaker="Shae" data-start="1318.120000" data-stop="1323.760000"><strong class="speaker-name">Shae:</strong> Another thing that I realized is that I had a blog post</span> <span class="audio-time caption" data-speaker="Shae" data-start="1323.760000" data-stop="1325.960000">that was wildly popular.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1325.960000" data-stop="1327.120000">Where did I put it?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1327.120000" data-stop="1328.720000">And it was all about Emacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1328.720000" data-stop="1332.720000">I don't know if you saw the... Here we go.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1332.720000" data-stop="1335.200000">It was... Ah, here it is.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1335.200000" data-stop="1338.567000">So here it is in... This is very much an Emacs...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1338.568000" data-stop="1340.400000"><strong class="speaker-name">Sacha:</strong> Oh, yeah, I remember that one.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1340.920000" data-stop="1341.960000">I put it in Emacs News.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1341.960000" data-stop="1343.520000">I thought it was great.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1343.520000" data-stop="1344.800000"><strong class="speaker-name">Shae:</strong> All right, cool.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1344.800000" data-stop="1348.221000"><strong class="speaker-name">Sacha:</strong> I would like the kiddo to sometimes be able to acknowledge this,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1348.222000" data-stop="1349.840000">but this is not happening.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1349.840000" data-stop="1351.979000">Still, yes.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1351.980000" data-stop="1352.840000"><strong class="speaker-name">Shae:</strong> Right, right.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1352.868000" data-stop="1355.839000">Yeah, and so this was really fun because, like...</span> <span class="audio-time caption" data-speaker="Shae" data-start="1355.840000" data-stop="1361.639000">I had a friend who was in development and there was like millions of</span> <span class="audio-time caption" data-speaker="Shae" data-start="1361.640000" data-stop="1364.719000">dollars spent on how do you detect whether a programmer is in flow</span> <span class="audio-time caption" data-speaker="Shae" data-start="1364.720000" data-stop="1369.159000">and it came down to if they're typing they're probably in flow so and</span> <span class="audio-time caption" data-speaker="Shae" data-start="1369.160000" data-stop="1373.679000">that was it because they tried to look at EGs and doing all kinds of</span> <span class="audio-time caption" data-speaker="Shae" data-start="1373.680000" data-stop="1377.599000">other stuff but it was like if they're typing don't interrupt them.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1377.600000" data-stop="1379.900000">And I don't know, because I do so much in Emacs, I'm not sure how</span> <span class="audio-time caption" data-speaker="Shae" data-start="1379.901000" data-stop="1381.433000">accurate this was. But basically,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1381.434000" data-stop="1383.000000">that's where I learned to do timers the first time.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1383.001000" data-stop="1385.133000">Or maybe... I don't remember which one I did first.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1385.134000" data-stop="1390.767000">And the idea then was as soon as basically my average typing into</span> <span class="audio-time caption" data-speaker="Shae" data-start="1390.768000" data-stop="1392.900000">Emacs has gone up a certain amount,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1392.901000" data-stop="1394.833000">then it will actually switch to busy.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1394.834000" data-stop="1401.179000">And it works just fine. It was a lot of fun to write.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1401.180000" data-stop="1405.679000"><strong class="speaker-name">Sacha:</strong> So yeah, interesting use of getting the activity.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1405.680000" data-stop="1408.519000">I've seen other fun implementations of this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1408.520000" data-stop="1412.279000">I think there's a c-c-c-combo package that makes some fun</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1412.280000" data-stop="1415.479000">animation appear if you're typing really quickly.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1415.480000" data-stop="1417.279000"><strong class="speaker-name">Shae:</strong> Oh, oh, yeah.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1417.280000" data-stop="1421.239000">I'm guessing because I think Atom, the Atom editor had that for a</span> <span class="audio-time caption" data-speaker="Shae" data-start="1421.240000" data-stop="1421.759000">while.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1421.760000" data-stop="1424.859000">I guess that's where it came from.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1424.860000" data-stop="1428.133000"><strong class="speaker-name">Sacha:</strong> So yeah, because you can instrument Emacs and play around</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1428.134000" data-stop="1430.767000">with it, you can certainly do all sorts of things based on that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1430.768000" data-stop="1433.040000">information.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1433.040000" data-stop="1435.720000">Okay, so you've got it, you've got it set up so that when you come</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1435.720000" data-stop="1438.040000">back to your computer, it'll show you the stuff that you've been</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1438.040000" data-stop="1438.560000">working on.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1438.560000" data-stop="1441.700000">And when you're working on the things, you can tell it to tell the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1441.701000" data-stop="1443.167000">rest of the world not to bug you.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1443.168000" data-stop="1444.279000">Gotcha.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1444.280000" data-stop="1446.779000"><strong class="speaker-name">Shae:</strong> That's right.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1446.780000" data-stop="1449.400000">[Sacha: What other fun stuff do you have in there?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1465.000000">24:25</span> <strong>ef-themes and modus-themes, season</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="1465.840000" data-stop="1467.000000"><strong class="speaker-name">Shae:</strong> I discovered that I love the EF themes.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1467.000000" data-stop="1468.960000">I love the Modus themes.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1468.960000" data-stop="1470.400000">They make me very happy.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1470.400000" data-stop="1472.100000">They're just unreasonably pleasant.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1472.101000" data-stop="1476.167000">As someone who has tried every single Emacs theme ever, they're just</span> <span class="audio-time caption" data-speaker="Shae" data-start="1476.168000" data-stop="1477.033000">my favorite themes.</span> <p></p><a href="https://sachachua.com/blog/feed/ec22-shae-erisson-00-24-41-000.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/feed/ec22-shae-erisson-00-24-41-000.jpg" alt="image from video 00:24:41.000" data-time="00:24:41.000"></a><span class="audio-time caption" data-speaker="Shae" data-start="1477.034000" data-stop="1481.000000"><strong class="speaker-name">Shae:</strong> And so, at the moment, it's</span> <span class="audio-time caption" data-speaker="Shae" data-start="1481.001000" data-stop="1489.999000">summer... Where did my summer go? How can this be? There we go.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1490.000000" data-stop="1493.600000">How come I'm in spring? Wait, isn't spring over?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1493.601000" data-stop="1494.767000">Hasn't summer just started?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1494.768000" data-stop="1498.033000">You know what I was thinking would be fun would be take the time of</span> <span class="audio-time caption" data-speaker="Shae" data-start="1498.034000" data-stop="1502.480000">day, and you know that the EF themes has spring, summer, autumn,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1502.480000" data-stop="1506.267000">and winter, and I'm not sure if there are dark versions of each of</span> <span class="audio-time caption" data-speaker="Shae" data-start="1506.268000" data-stop="1509.360000">those, but I thought, like I know that Modus themes will do this like</span> <span class="audio-time caption" data-speaker="Shae" data-start="1509.360000" data-stop="1513.333000">check for the local time of when it turns dark, and then it</span> <span class="audio-time caption" data-speaker="Shae" data-start="1513.334000" data-stop="1516.067000">will go from the light theme to the dark theme as soon as the sun</span> <span class="audio-time caption" data-speaker="Shae" data-start="1516.068000" data-stop="1518.100000">hits, and I was like, well, what if I do that for seasons, you know,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1518.101000" data-stop="1519.867000">wouldn't that be cool?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1519.868000" data-stop="1529.399000"><strong class="speaker-name">Sacha:</strong> There's this subtle sense of change as you go through the year.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1529.400000" data-stop="1531.033000">But of course you also have this thing there</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1531.034000" data-stop="1533.099000">where you just randomize it.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1533.100000" data-stop="1534.100000"><strong class="speaker-name">Shae:</strong> Well, I like that.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1534.101000" data-stop="1537.467000">Sometimes it's like I'm just kind of like, ah, I'm bored.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1537.468000" data-stop="1538.640000">I'm just bored of what I'm looking at.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1538.640000" data-stop="1541.880000">And so I will just change my thing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1541.880000" data-stop="1544.200000">And it's just time for something.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1544.200000" data-stop="1544.720000">I don't know.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1544.720000" data-stop="1545.600000">It seems to work.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1545.600000" data-stop="1548.640000">It's like it gives me a little brain break from what I was staring at.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1548.640000" data-stop="1554.200000">And I did not know I was going to reset the effects scale, but that's</span> <span class="audio-time caption" data-speaker="Shae" data-start="1554.200000" data-stop="1554.800000">fine.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1554.800000" data-stop="1555.480000">Interesting.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1555.480000" data-stop="1556.960000">What else do I have in here?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1556.000000">25:56</span> <strong>htmlize (does this still work on Wayland?)</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="1556.960000" data-stop="1558.840000"><strong class="speaker-name">Shae:</strong> Oh, Emacs HTMLize.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1558.840000" data-stop="1560.080000">I'm a little sad.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1560.080000" data-stop="1561.520000">I switched to Wayland.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1561.520000" data-stop="1565.520000">And if I remember correctly, HTMLize only works with, or maybe</span> <span class="audio-time caption" data-speaker="Shae" data-start="1565.520000" data-stop="1569.400000">HTMLize still works, and it's the SVG one that doesn't work.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1569.400000" data-stop="1574.560000">Emacs SVG is a thing that if you're running with an X11 backend, you</span> <span class="audio-time caption" data-speaker="Shae" data-start="1574.560000" data-stop="1578.280000">can turn your current screen directly into an SVG, which is really</span> <span class="audio-time caption" data-speaker="Shae" data-start="1578.280000" data-stop="1578.720000">cute.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1578.720000" data-stop="1579.640000">It does not work in Wayland.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1579.640000" data-stop="1581.920000">I think HTMLize does still work.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1581.920000" data-stop="1584.680000">What other things do I have in here?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1584.680000" data-stop="1585.880000">I don't know.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1585.880000" data-stop="1589.160000">I guess a lot of it lately has been trying to make Rust things work</span> <span class="audio-time caption" data-speaker="Shae" data-start="1589.160000" data-stop="1590.280000">smoothly.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1590.280000" data-stop="1596.400000">I've been trying to do some... I wonder does... Oh, cool.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1596.400000" data-stop="1597.633000">That was not what I expected.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1597.000000">26:37</span> <strong>lsp-ui-imenu, jumping through rust code
</strong></div><p></p><a href="https://sachachua.com/blog/feed/ec22-shae-erisson-00-26-41-100.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/feed/ec22-shae-erisson-00-26-41-100.jpg" alt="image from video 00:26:41.100" data-time="00:26:41.100"></a><span class="audio-time caption" data-speaker="Shae" data-start="1597.634000" data-stop="1600.300000"><strong class="speaker-name">Shae:</strong> I just started doing this thing with imenu.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1600.301000" data-stop="1603.133000">imenu integrates nicely with LSP.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1603.134000" data-stop="1606.833000"><strong class="speaker-name">Sacha:</strong> That is a very pretty sidebar thing, and I need to learn how</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1606.834000" data-stop="1611.359000">to do that.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1611.360000" data-stop="1615.639000"><strong class="speaker-name">Shae:</strong> So because I have all these extra modifiers, my s-i is</span> <span class="audio-time caption" data-speaker="Shae" data-start="1615.640000" data-stop="1617.039000">lsp-ui-imenu.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1617.040000" data-stop="1622.119000">And the reason that what I mostly use that for is when I have like a</span> <span class="audio-time caption" data-speaker="Shae" data-start="1622.120000" data-stop="1625.859000">bunch of Rust code and I want to quickly jump through the structure</span> <span class="audio-time caption" data-speaker="Shae" data-start="1625.860000" data-stop="1630.579000">of it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1630.580000" data-stop="1633.719000">Basically that integrates with LSP, finds all the definitions, and I</span> <span class="audio-time caption" data-speaker="Shae" data-start="1633.720000" data-stop="1635.079000">can quickly jump through it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1635.080000" data-stop="1638.879000">I used to use lsp-treemacs for that, but lsp-treemacs puts things in</span> <span class="audio-time caption" data-speaker="Shae" data-start="1638.880000" data-stop="1645.079000">its own order, not quite the same order I want, although treemacs is</span> <span class="audio-time caption" data-speaker="Shae" data-start="1645.080000" data-stop="1647.679000">quite nice.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1647.680000" data-stop="1651.319000">I think that the thing to do is that you and I at some time maybe the</span> <span class="audio-time caption" data-speaker="Shae" data-start="1651.320000" data-stop="1653.759000">next time if we do this again we should set up with a Shwim</span> <span class="audio-time caption" data-speaker="Shae" data-start="1653.760000" data-stop="1657.279000">connection and you and I can both share our Emacs and then you can</span> <span class="audio-time caption" data-speaker="Shae" data-start="1657.280000" data-stop="1660.039000">show me cool things that you do and I can show you cool things that I</span> <span class="audio-time caption" data-speaker="Shae" data-start="1660.040000" data-stop="1662.359000">do and then we can start filing over some of the things.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1662.360000" data-stop="1663.899000">How about that?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1663.900000" data-stop="1664.919000"><strong class="speaker-name">Sacha:</strong> That sounds fantastic.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1664.920000" data-stop="1668.439000">I know we'd wanted to experiment with pair programming a long time</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1668.440000" data-stop="1672.959000">ago so that sounds like a seamless way to do it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1672.960000" data-stop="1675.839000">And therefore I will go and figure out how to install shim and get it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1675.840000" data-stop="1676.399000">working.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1676.400000" data-stop="1678.679000">I will probably need your help to actually test it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1678.680000" data-stop="1680.839000">I don't know, I think I can rustle up.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1680.840000" data-stop="1682.359000">Maybe it'll work off my phone.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1682.360000" data-stop="1685.679000">You haven't tried that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1685.680000" data-stop="1691.679000">But lspui, okay, so I've just been using straight up imenu, like on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1691.680000" data-stop="1696.159000">Neanderthal, but lsp-ui has this fancy grouping of things and colors</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1696.160000" data-stop="1700.159000">and stuff, so I definitely want to check that out.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1700.160000" data-stop="1701.439000"><strong class="speaker-name">Shae:</strong> I'm a fan, yeah.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1701.440000" data-stop="1703.599000">I don't know.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1703.600000" data-stop="1705.479000">Do I have anything else exciting that goes with this in here?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1705.000000">28:25</span> <strong>laptop with 126GB of RAM</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="1705.480000" data-stop="1710.719000"><strong class="speaker-name">Shae:</strong> I will say that at the moment, the system I'm working on, I like</span> <span class="audio-time caption" data-speaker="Shae" data-start="1710.720000" data-stop="1715.839000">buying unreasonably powerful laptops.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1715.840000" data-stop="1726.599000">And so, like, this system has 128 gigs of RAM and 24 cores.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1726.600000" data-stop="1730.479000">My previous laptop has 192 gigs of RAM.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1730.480000" data-stop="1737.279000">Long story short, I end up in a lot of cases where I want to use more</span> <span class="audio-time caption" data-speaker="Shae" data-start="1737.280000" data-stop="1738.279000">memory.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1738.280000" data-stop="1739.559000">I've got all these cores.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1739.560000" data-stop="1741.319000">Can you do something with them?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1741.320000" data-stop="1748.319000">Perhaps you've already seen things like LSP doctor, which will say,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1748.320000" data-stop="1750.079000">have you tried this thing?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1750.080000" data-stop="1751.119000">Have you done this other thing?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1751.120000" data-stop="1754.679000">LSP has really changed</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1754.680000" data-stop="1755.999000"><strong class="speaker-name">Sacha:</strong> I have not.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1756.000000" data-stop="1758.719000">Sorry, would you like to show me this LSP doctor thing?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1758.720000" data-stop="1760.859000">Because I have not ever seen it.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1760.860000" data-stop="1761.319000"><strong class="speaker-name">Shae:</strong> Yeah.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1761.320000" data-stop="1765.559000">Do you use language servers much for your development?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1765.560000" data-stop="1769.079000"><strong class="speaker-name">Sacha:</strong> I am only just getting used to having a relatively modern</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1769.080000" data-stop="1773.119000">2018 instead of 2010 laptop.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1773.120000" data-stop="1776.279000">And so I have the red squigglies and various things, but I don't know</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1776.280000" data-stop="1778.519000">what to do with them yet.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1778.520000" data-stop="1782.639000"><strong class="speaker-name">Shae:</strong> Well, I mean, I'm doing a lot of this.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1782.640000" data-stop="1786.039000">So I have...</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1786.000000">29:46</span> <strong>LSP coolness, Haskell, treesitter</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="1786.040000" data-stop="1788.479000"><strong class="speaker-name">Shae:</strong> Originally for me it was like I spent a lot of time with the Haskell</span> <span class="audio-time caption" data-speaker="Shae" data-start="1788.480000" data-stop="1791.319000">language server because I was doing so much Haskell and it was a</span> <span class="audio-time caption" data-speaker="Shae" data-start="1791.320000" data-stop="1792.359000">super powerful thing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1792.360000" data-stop="1796.039000">In fact, somebody decided to hammer in half of a proof assistant into</span> <span class="audio-time caption" data-speaker="Shae" data-start="1796.040000" data-stop="1798.199000">the Haskell language server and that was magic.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1798.200000" data-stop="1800.999000">You could do incredible stuff with that because you could just grab</span> <span class="audio-time caption" data-speaker="Shae" data-start="1801.000000" data-stop="1803.399000">all of your local variables and transform the whole shape of your</span> <span class="audio-time caption" data-speaker="Shae" data-start="1803.400000" data-stop="1806.119000">function and you could just write little snippets and just have it</span> <span class="audio-time caption" data-speaker="Shae" data-start="1806.120000" data-stop="1806.519000">work.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1806.520000" data-stop="1808.519000">And that was amazing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1808.520000" data-stop="1812.039000">It wasn't quite... One of the goals that I believe is...</span> <span class="audio-time caption" data-speaker="Shae" data-start="1812.040000" data-stop="1817.159000">For future development of all programming editors, I believe that</span> <span class="audio-time caption" data-speaker="Shae" data-start="1817.160000" data-stop="1821.479000">something like Emacs macros, but instead for abstract syntax trees, I</span> <span class="audio-time caption" data-speaker="Shae" data-start="1821.480000" data-stop="1824.439000">believe this is an essential ingredient that we do not yet have.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1824.440000" data-stop="1827.719000">And I think that TreeSitter is the first step towards there.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1827.720000" data-stop="1829.159000">We now have one of the hats, right?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1829.160000" data-stop="1833.239000">Which is where we can take... TreeSitter is, you know, if you've used</span> <span class="audio-time caption" data-speaker="Shae" data-start="1833.240000" data-stop="1835.799000">it...</span> <span class="audio-time caption" data-speaker="Shae" data-start="1835.800000" data-stop="1839.839000">It is like you write some effectively C code to produce a really fast</span> <span class="audio-time caption" data-speaker="Shae" data-start="1839.840000" data-stop="1840.279000">parser.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1840.280000" data-stop="1843.359000">Or is it like JavaScript that then compiles to C code?</span> <span class="audio-time caption" data-speaker="Shae" data-start="1843.360000" data-stop="1844.959000">I forget exactly how it works.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1844.960000" data-stop="1848.119000">But the nice thing about TreeSitter is, I don't know if you remember,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1848.120000" data-stop="1851.159000">I'm sure you do remember, that if you were writing Python code and</span> <span class="audio-time caption" data-speaker="Shae" data-start="1851.160000" data-stop="1853.639000">you used a triple-quoted string, you had to then add a comment with</span> <span class="audio-time caption" data-speaker="Shae" data-start="1853.640000" data-stop="1857.279000">another quote because regular expressions is how Emacs was doing all</span> <span class="audio-time caption" data-speaker="Shae" data-start="1857.280000" data-stop="1858.859000">the syntax highlighting.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1858.860000" data-stop="1860.399000">And honestly, that was kind of crap.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1860.400000" data-stop="1865.239000">And then there were projects like the Semantic Bovinator that made a</span> <span class="audio-time caption" data-speaker="Shae" data-start="1865.240000" data-stop="1871.519000">full parsing suite in Elisp, which to me is half brilliant and half</span> <span class="audio-time caption" data-speaker="Shae" data-start="1871.520000" data-stop="1872.599000">insane.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1872.600000" data-stop="1876.799000">And then there was TreeSitter, which kind of took over the world</span> <span class="audio-time caption" data-speaker="Shae" data-start="1876.800000" data-stop="1880.239000">because it was... I think that the language server and TreeSitter are</span> <span class="audio-time caption" data-speaker="Shae" data-start="1880.240000" data-stop="1884.959000">the first two of these editor generic pieces, and I suspect there</span> <span class="audio-time caption" data-speaker="Shae" data-start="1884.960000" data-stop="1885.519000">will be more.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1885.520000" data-stop="1889.159000">I think that something where you can modify the abstract syntax tree</span> <span class="audio-time caption" data-speaker="Shae" data-start="1889.160000" data-stop="1890.559000">and then put back to the source</span> <span class="audio-time caption" data-speaker="Shae" data-start="1890.560000" data-stop="1892.759000">is one of those potential paths forward.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1892.760000" data-stop="1894.539000">I hope so.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1894.540000" data-stop="1896.239000"><strong class="speaker-name">Sacha:</strong> Yeah, that would be great if you could just do the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1896.240000" data-stop="1899.039000">manipulations and then roundtrip it back into source code.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1899.040000" data-stop="1903.199000">Just regenerate the changed part of your code.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1903.200000" data-stop="1904.359000">That sounds fantastic.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1904.360000" data-stop="1908.599000">So it sounds like you were able to do some kind of manipulation with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1908.600000" data-stop="1911.199000">the Haskell use case that you were describing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1911.200000" data-stop="1914.739000">Any chance you can show us like the awesomeness?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1914.740000" data-stop="1915.279000"><strong class="speaker-name">Shae:</strong> Sadly,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1915.280000" data-stop="1918.919000">that sadly does not work anymore.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1918.000000">31:58</span> <strong>Combobulate</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="1918.920000" data-stop="1922.279000"><strong class="speaker-name">Shae:</strong> But you know, if you're looking for something in that area, have you</span> <span class="audio-time caption" data-speaker="Shae" data-start="1922.280000" data-stop="1926.179000">heard of a Emacs library called Combobulate?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1926.180000" data-stop="1927.159000"><strong class="speaker-name">Sacha:</strong> I have heard of it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1927.160000" data-stop="1928.819000">I haven't dug into it.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1928.820000" data-stop="1934.719000"><strong class="speaker-name">Shae:</strong> So it uses TreeSitter for source code manipulation by, and</span> <span class="audio-time caption" data-speaker="Shae" data-start="1934.720000" data-stop="1937.479000">it's a lot closer to the way that like, you know, in Org Mode, you</span> <span class="audio-time caption" data-speaker="Shae" data-start="1937.480000" data-stop="1941.519000">can like hold meta and arrow to kind of move things around.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1941.520000" data-stop="1946.719000">It uses TreeSitter to let you both move around in the context as well</span> <span class="audio-time caption" data-speaker="Shae" data-start="1946.720000" data-stop="1949.119000">as actually alter the shape.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1949.120000" data-stop="1954.119000">And to me, this is the first step towards this tool that I want,</span> <span class="audio-time caption" data-speaker="Shae" data-start="1954.120000" data-stop="1957.999000">which is where I can write a keyboard macro and have it edit an</span> <span class="audio-time caption" data-speaker="Shae" data-start="1958.000000" data-stop="1961.959000">abstract syntax tree and then spit the results back into the buffer.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1961.960000" data-stop="1965.299000">Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1965.300000" data-stop="1966.199000"><strong class="speaker-name">Sacha:</strong> All right.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1966.000000">32:46</span> <strong>What else are you using your 126 gigabytes of RAM for?</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1966.200000" data-stop="1972.259000"><strong class="speaker-name">Sacha:</strong> What else are you using your 126 gigabytes of RAM for?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="1972.260000" data-stop="1974.499000"><strong class="speaker-name">Shae:</strong> Let's see.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1974.500000" data-stop="1977.239000">Honestly, I'm going to tell you that Rust Analyzer can take a lot of</span> <span class="audio-time caption" data-speaker="Shae" data-start="1977.240000" data-stop="1977.839000">memory.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1977.840000" data-stop="1980.479000">And a Rust compilation can take a lot of cores.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1980.480000" data-stop="1986.479000">And I'm okay with that because I actually, I do like, and I will say</span> <span class="audio-time caption" data-speaker="Shae" data-start="1986.480000" data-stop="1988.719000">that this laptop is actually from this year.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1988.720000" data-stop="1992.079000">So it's a brand new, like, top of the line.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1992.080000" data-stop="1996.399000">But then like, how would I, because I've got like, which I think is a</span> <span class="audio-time caption" data-speaker="Shae" data-start="1996.400000" data-stop="1998.199000">bunch of matrix multiplication hardware.</span> <span class="audio-time caption" data-speaker="Shae" data-start="1998.200000" data-stop="2000.159000">How do I use that from Emacs?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2000.160000" data-stop="2005.520000">I don't know. I'm sure I can find something, you know.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2005.000000">33:25</span> <strong>TalonVoice</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2005.521000" data-stop="2007.859000"><strong class="speaker-name">Sacha:</strong> Maybe voice computing?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2007.860000" data-stop="2012.333000"><strong class="speaker-name">Shae:</strong> Oh, that's an idea. Yeah, one of my friends, she's using Talon.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2012.334000" data-stop="2012.334000">Have you heard of Talon?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2010.280000" data-stop="2014.499000"><strong class="speaker-name">Sacha:</strong> Yeah, I've heard of Talon.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2014.500000" data-stop="2017.399000">There are a couple of videos about people using Talon to code by</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2017.400000" data-stop="2022.159000">voice, usually involving memorizing kind of a different alphabet for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2022.160000" data-stop="2025.199000">very quickly accessing different shortcuts.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2025.200000" data-stop="2027.799000">But it sounds really cool, and you sound like you've got the hardware</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2027.800000" data-stop="2029.159000">to do something amazing with it.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2029.160000" data-stop="2030.799000"><strong class="speaker-name">Shae:</strong> That's true.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2030.800000" data-stop="2034.399000">Well, you know, Talon actually lets you do something very similar to</span> <span class="audio-time caption" data-speaker="Shae" data-start="2034.400000" data-stop="2037.999000">Combobulate, where you can navigate the AST of your source code.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2038.000000" data-stop="2040.479000">You can kind of move around very quickly.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2040.480000" data-stop="2043.919000">I don't know, like, are we like at the end of our?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2043.920000" data-stop="2046.519000">No, no, we're halfway through, right?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2046.520000" data-stop="2047.599000"><strong class="speaker-name">Sacha:</strong> We're halfway through.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2047.600000" data-stop="2051.279000">I have about 28 minutes before the kiddo runs out and starts</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2051.280000" data-stop="2053.599000">demanding lunch.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2053.600000" data-stop="2057.119000"><strong class="speaker-name">Shae:</strong> Okay, well, I feel like I've been driving the structure of</span> <span class="audio-time caption" data-speaker="Shae" data-start="2057.120000" data-stop="2059.119000">our just kind of like dumping random things.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2059.120000" data-stop="2062.079000">Did you have any questions or anything you wanted to cover?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2062.080000" data-stop="2063.919000"><strong class="speaker-name">Sacha:</strong> This is all amazing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2063.920000" data-stop="2066.239000">I come in with no preconceived notions.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2066.240000" data-stop="2069.279000">I'm just like, okay, shapr does cool things with Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2069.280000" data-stop="2071.239000">Let's hear about it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2071.240000" data-stop="2072.719000">Let's go, let's go.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2072.720000" data-stop="2074.939000"><strong class="speaker-name">Shae:</strong> That works for me.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2074.940000" data-stop="2077.199000">Yeah.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2077.200000" data-stop="2079.879000">I mean, a lot of it's been focused on Rust development lately.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2083.500000" data-stop="2085.019000">Rust and Jujutsu.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2085.000000">34:45</span> <strong>NixOS, following Steve Purcell about 5 years behind</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="2085.020000" data-stop="2086.119000"><strong class="speaker-name">Shae:</strong> I've been doing a lot of Nix.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2086.120000" data-stop="2087.199000">I'm running NixOS.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2087.200000" data-stop="2093.279000">I don't know if you're familiar, but that's been great fun.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2093.280000" data-stop="2097.079000">It's funny, I feel like I've been following Steve Purcell around from</span> <span class="audio-time caption" data-speaker="Shae" data-start="2097.080000" data-stop="2098.879000">a technical perspective.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2098.880000" data-stop="2103.439000">I'm always about five years behind Steve.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2103.000000">35:03</span> <strong>envrc</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="2103.440000" data-stop="2106.639000"><strong class="speaker-name">Shae:</strong> I was like, oh, you know, NixOS is kind of a pain with Emacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2106.640000" data-stop="2111.039000">And just like this, what was it, NixOS?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2111.040000" data-stop="2111.679000">I forget.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2111.680000" data-stop="2115.679000">Anyway, Steve was like, oh, well, have you tried my library, envrc?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2115.680000" data-stop="2116.719000">And I was like, what's that?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2116.720000" data-stop="2119.079000">And he was like, well, now each buffer can have its own envrc.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2119.080000" data-stop="2121.119000">And I was like, it's perfect.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2121.120000" data-stop="2122.199000">That's exactly what I need.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2122.200000" data-stop="2126.559000">Because previously, every time I switched buffers, it would then go</span> <span class="audio-time caption" data-speaker="Shae" data-start="2126.560000" data-stop="2127.639000">load all of the local</span> <span class="audio-time caption" data-speaker="Shae" data-start="2127.640000" data-stop="2129.879000">everything in Nix.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2129.880000" data-stop="2133.399000">And sometimes that could take a long time, especially if I'm doing</span> <span class="audio-time caption" data-speaker="Shae" data-start="2133.400000" data-stop="2137.519000">Haskell, that could take 10 seconds, and I really don't want that</span> <span class="audio-time caption" data-speaker="Shae" data-start="2137.520000" data-stop="2138.039000">sort of lag.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2138.040000" data-stop="2142.679000">And so Steve Purcell's brilliant library, envrc, says, you know what?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2142.680000" data-stop="2146.279000">Every single buffer can just keep such a thing, and then you can only</span> <span class="audio-time caption" data-speaker="Shae" data-start="2146.280000" data-stop="2146.959000">relit it when you need to.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2146.960000" data-stop="2149.259000">And that's pretty awesome.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2149.260000" data-stop="2152.619000"><strong class="speaker-name">Sacha:</strong> That sounds cool, and I should check that out too.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2152.000000">35:52</span> <strong>time-tracking</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2152.620000" data-stop="2154.279000"><strong class="speaker-name">Sacha:</strong> @JacksonScholberg has a question.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2154.280000" data-stop="2157.399000">He says, "I was curious about what you were tracking your time working</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2157.400000" data-stop="2158.839000">on, how you track it."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2158.840000" data-stop="2160.999000">Is it just Org Clock?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2161.000000" data-stop="2165.839000">So this is how you keep track of the things you're working on and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2165.840000" data-stop="2171.119000">what got interrupted by the new thing that you just added to the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2171.120000" data-stop="2172.639000">stack and so forth?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2172.640000" data-stop="2172.759000"><strong class="speaker-name">Shae:</strong> Right.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2172.760000" data-stop="2174.399000">In fact, I have this thing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2174.400000" data-stop="2175.639000">Honestly, when I sit down on my computer,</span> <span class="audio-time caption" data-speaker="Shae" data-start="2175.640000" data-stop="2177.079000">Just clock in.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2177.080000" data-stop="2182.359000">You'll notice in the bottom right here, we have chat with Sacha,</span> <span class="audio-time caption" data-speaker="Shae" data-start="2182.360000" data-stop="2183.039000">right?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2183.040000" data-stop="2184.999000">And so like, I just kind of clock in stuff.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2185.000000" data-stop="2191.279000">And like, I'm not always, I really kind of need to reorganize my Org</span> <span class="audio-time caption" data-speaker="Shae" data-start="2191.280000" data-stop="2194.559000">mode files because I've been naming them per host because I</span> <span class="audio-time caption" data-speaker="Shae" data-start="2194.560000" data-stop="2197.719000">previously had like a work Org mode and I had a home Org mode.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2197.720000" data-stop="2202.559000">now that my home hardware is also my work hardware I guess and so</span> <span class="audio-time caption" data-speaker="Shae" data-start="2202.560000" data-stop="2206.319000">like I still have my previous laptops things where I'm keeping my</span> <span class="audio-time caption" data-speaker="Shae" data-start="2206.320000" data-stop="2210.439000">events I really need to reorganize things but I mean yeah I schedule</span> <span class="audio-time caption" data-speaker="Shae" data-start="2210.440000" data-stop="2221.059000">things I oh you know I've got a weird thing to show you</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2221.000000">37:01</span> <strong>taxes with Org Mode, remote lookup
</strong></div><p></p><a href="https://sachachua.com/blog/feed/ec22-shae-erisson-00-37-09-900.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/feed/ec22-shae-erisson-00-37-09-900.jpg" alt="image from video 00:37:09.900" data-time="00:37:09.900"></a><span class="audio-time caption" data-speaker="Shae" data-start="2221.060000" data-stop="2225.232000"><strong class="speaker-name">Shae:</strong> I decided that it would be great fun to do my taxes.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2225.233000" data-stop="2227.839000"><strong class="speaker-name">Sacha:</strong> You are showing me your taxes, do I need to like black out</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2227.840000" data-stop="2229.899000">this whole thing?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2229.900000" data-stop="2233.279000"><strong class="speaker-name">Shae:</strong> Well, this is actually just an example from the docs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2233.280000" data-stop="2238.799000">So I could actually share my taxes on it because I mostly don't care.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2238.800000" data-stop="2243.959000">But I think in fact you can figure out exactly how much money I'm</span> <span class="audio-time caption" data-speaker="Shae" data-start="2243.960000" data-stop="2246.559000">making by looking at the open whatever.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2246.560000" data-stop="2251.799000">So the thing about this is that I decided to file all of my tax forms</span> <span class="audio-time caption" data-speaker="Shae" data-start="2251.800000" data-stop="2256.559000">directly into Org Mode spreadsheets and then do remote lookups.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2256.560000" data-stop="2260.279000">So basically each spreadsheet was one particular form.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2260.280000" data-stop="2263.439000">And then once I'd gotten to the bottom, like I need this result, like</span> <span class="audio-time caption" data-speaker="Shae" data-start="2263.440000" data-stop="2265.519000">what's my estimated income?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2265.520000" data-stop="2270.199000">And then I would use the lookup, kind of this cross spreadsheet</span> <span class="audio-time caption" data-speaker="Shae" data-start="2270.200000" data-stop="2270.879000">lookup.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2270.880000" data-stop="2272.839000">And that's how I did my taxes for last year.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2272.840000" data-stop="2279.959000">And then my de facto mother-in-law, she's an accountant, and she</span> <span class="audio-time caption" data-speaker="Shae" data-start="2279.960000" data-stop="2282.439000">didn't exactly do this thing, but it was pretty close.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2282.440000" data-stop="2285.279000">She was like, you've got all your taxes in the spreadsheet.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2285.280000" data-stop="2286.439000">I was like, yeah.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2286.440000" data-stop="2288.639000">And then she looked at it and she was like, what is that?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2288.640000" data-stop="2290.239000">And I was like, anyway.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2290.240000" data-stop="2295.879000">So I got to kind of file everything back out into TurboTax, but that</span> <span class="audio-time caption" data-speaker="Shae" data-start="2295.880000" data-stop="2296.919000">was a fun thing to build.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2296.920000" data-stop="2301.079000"><strong class="speaker-name">Sacha:</strong> Yeah, I have something like that too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2301.080000" data-stop="2305.959000">So for example, whenever I do my tax paperwork, I just have to have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2305.960000" data-stop="2308.239000">like, you know, the step by step checklist.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2308.240000" data-stop="2310.199000">Okay, this is where I need to go to get this number.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2310.200000" data-stop="2312.079000">This is where I can put it in.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2312.080000" data-stop="2315.279000">And then eventually it spits out a table that says, okay, put this in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2315.280000" data-stop="2319.839000">box 11, put this in box 13, so that I don't have to do the steps by</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2319.840000" data-stop="2321.079000">hand.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2321.080000" data-stop="2325.719000">Because even before the, you know, for me, I use like simple stacks</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2325.720000" data-stop="2327.659000">or whatever, it's web based.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2327.660000" data-stop="2330.239000">But before you get to the point where you can put the numbers in the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2330.240000" data-stop="2334.119000">form, you gotta go to this website, calculate this thing, and Org</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2334.120000" data-stop="2338.079000">just makes all of that so much easier.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2338.080000" data-stop="2338.759000"><strong class="speaker-name">Shae:</strong> I agree.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2338.760000" data-stop="2341.139000">Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2341.140000" data-stop="2345.359000"><strong class="speaker-name">Sacha:</strong> And this remote lookup thing is something I'm always looking</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2345.360000" data-stop="2349.199000">up because Org tables are so powerful, but also I need more examples</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2349.200000" data-stop="2351.959000">in my life to remember how to use them.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2351.960000" data-stop="2355.479000"><strong class="speaker-name">Shae:</strong> Well, I think it took me four hours the first time to get it</span> <span class="audio-time caption" data-speaker="Shae" data-start="2355.480000" data-stop="2356.399000">all figured out.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2356.400000" data-stop="2359.199000">But I can send you an example without showing it here.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2359.200000" data-stop="2363.719000">I can send you an example because I figured out, I think I've</span> <span class="audio-time caption" data-speaker="Shae" data-start="2363.720000" data-stop="2366.619000">hammered the remote lookup down very thoroughly.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2366.620000" data-stop="2370.919000"><strong class="speaker-name">Sacha:</strong> And once you've got it right, you can just keep filling that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2370.920000" data-stop="2372.439000">in or copy and paste it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2372.440000" data-stop="2377.979000">You have an example of the syntax and that's already all you need.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2377.980000" data-stop="2378.399000"><strong class="speaker-name">Shae:</strong> Right.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2378.400000" data-stop="2382.039000">I did run across some limitations of the</span> <span class="audio-time caption" data-speaker="Shae" data-start="2382.040000" data-stop="2386.833000">evaluation method of Org mode spreadsheets.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2386.834000" data-stop="2389.667000">But maybe I've been using them a little too hard,</span> <span class="audio-time caption" data-speaker="Shae" data-start="2389.668000" data-stop="2391.100000">if that makes any sense.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2391.101000" data-stop="2393.000000"><strong class="speaker-name">Sacha:</strong> Oh, what kind of limitation?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2393.001000" data-stop="2400.267000"><strong class="speaker-name">Shae:</strong> Honestly, I think I finally found a way to say every</span> <span class="audio-time caption" data-speaker="Shae" data-start="2400.268000" data-stop="2402.439000">single... Because it was...</span> <span class="audio-time caption" data-speaker="Shae" data-start="2402.440000" data-stop="2408.439000">So really the way that spreadsheets work is they're much more like</span> <span class="audio-time caption" data-speaker="Shae" data-start="2408.440000" data-stop="2408.959000">Dataflow.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2408.960000" data-stop="2411.999000">And that is just that you end up with, like, either you work from the</span> <span class="audio-time caption" data-speaker="Shae" data-start="2412.000000" data-stop="2415.599000">endpoint, which is like much more Haskell style evaluation, which is</span> <span class="audio-time caption" data-speaker="Shae" data-start="2415.600000" data-stop="2416.959000">where you're like, I need to start here.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2416.960000" data-stop="2418.279000">What depends on this?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2418.280000" data-stop="2421.599000">But in the case where you have a whole bunch of different Org Mode</span> <span class="audio-time caption" data-speaker="Shae" data-start="2421.600000" data-stop="2426.919000">spreadsheets, I think I ended up with this little text style hack</span> <span class="audio-time caption" data-speaker="Shae" data-start="2426.920000" data-stop="2428.159000">where I just ran it a bunch of times.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2428.160000" data-stop="2429.759000">So it's like evaluate, evaluate, evaluate.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2429.760000" data-stop="2431.439000">Because remote lookups</span> <span class="audio-time caption" data-speaker="Shae" data-start="2431.440000" data-stop="2434.719000">I ran, you know, I don't remember.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2434.720000" data-stop="2436.559000">And I think I took notes, but I don't remember.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2436.560000" data-stop="2439.439000">That's one of the great things about Org Mode is that I swear it's</span> <span class="audio-time caption" data-speaker="Shae" data-start="2439.440000" data-stop="2442.319000">my, like, half of my brain is in my Org Mode notes.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2442.320000" data-stop="2446.679000">And whenever I had, I'm like, oh, what was that thing?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2446.680000" data-stop="2449.639000">I'm like, well, fortunately, with my terrible short-term memory, I</span> <span class="audio-time caption" data-speaker="Shae" data-start="2449.640000" data-stop="2452.519000">took copious notes because otherwise I would never be able to get</span> <span class="audio-time caption" data-speaker="Shae" data-start="2452.520000" data-stop="2455.499000">back to it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2455.000000">40:55</span> <strong>finding notes with C-s</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2455.500000" data-stop="2462.599000"><strong class="speaker-name">Sacha:</strong> What is your favorite way of finding those notes?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2462.600000" data-stop="2466.279000"><strong class="speaker-name">Shae:</strong> I actually use a lot of C-s just because I kind of have</span> <span class="audio-time caption" data-speaker="Shae" data-start="2466.280000" data-stop="2470.919000">some idea of where they are in my tree structure and I'll also say I</span> <span class="audio-time caption" data-speaker="Shae" data-start="2470.920000" data-stop="2474.879000">use a lot of my Org capture templates and they're not super</span> <span class="audio-time caption" data-speaker="Shae" data-start="2474.880000" data-stop="2475.559000">complicated.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2475.560000" data-stop="2479.359000">I have like a to-do, I have a journal, I have ideas and like random</span> <span class="audio-time caption" data-speaker="Shae" data-start="2479.360000" data-stop="2483.279000">ideas will float into my head like you saw Markov keyboard right it</span> <span class="audio-time caption" data-speaker="Shae" data-start="2483.280000" data-stop="2486.119000">is like the weirdest art piece you've seen all day right and</span> <span class="audio-time caption" data-speaker="Shae" data-start="2486.120000" data-stop="2492.279000">Markup keyboard shows up on the front page of Hacker News once a year</span> <span class="audio-time caption" data-speaker="Shae" data-start="2492.280000" data-stop="2492.719000">or so.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2492.720000" data-stop="2496.159000">And people are like, programmers have gone too far.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2496.160000" data-stop="2499.999000">This cannot possibly be usable by humans or something.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2500.000000" data-stop="2502.719000">And I'm like, well, I don't know.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2502.720000" data-stop="2503.999000">I think it was art.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2504.000000" data-stop="2506.719000">And so a lot of times those things will drop into my head, something</span> <span class="audio-time caption" data-speaker="Shae" data-start="2506.720000" data-stop="2508.679000">like that, where I'm trying to do something else.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2508.680000" data-stop="2511.359000">And so I will quickly write down the idea and then just gotten it out</span> <span class="audio-time caption" data-speaker="Shae" data-start="2511.360000" data-stop="2513.999000">of my head enough that I can continue with what I was doing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2514.000000" data-stop="2516.599000">And so I have a long list of strange ideas.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2516.600000" data-stop="2520.959000">A recent one was like, you've probably had your teeth worked on once</span> <span class="audio-time caption" data-speaker="Shae" data-start="2520.960000" data-stop="2521.479000">or twice.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2521.480000" data-stop="2524.239000">And you know that the dentist always had to move the light around.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2524.240000" data-stop="2526.479000">And I'm like, but we have really good eye tracking.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2526.480000" data-stop="2530.639000">Wouldn't it make sense to figure out where the dentist or the car</span> <span class="audio-time caption" data-speaker="Shae" data-start="2530.640000" data-stop="2532.319000">mechanic is what they're looking at?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2532.320000" data-stop="2536.719000">And then have the light move around behind them to figure out how to</span> <span class="audio-time caption" data-speaker="Shae" data-start="2536.720000" data-stop="2538.999000">actually light up the place they're looking at, right?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2539.000000" data-stop="2539.519000">We've got vision tracking.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2539.520000" data-stop="2540.679000">Why don't we do this?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2540.680000" data-stop="2542.599000">But I don't really, yeah.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2542.600000" data-stop="2545.759000">I decided maybe I don't want to work on that one right now.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2545.760000" data-stop="2548.399000"><strong class="speaker-name">Sacha:</strong> It sounds like an involved project.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2548.400000" data-stop="2549.119000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2549.120000" data-stop="2550.719000">Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2550.720000" data-stop="2554.599000">Okay, so you're capturing, you're stuffing a lot of these ideas into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2554.600000" data-stop="2555.199000">an inbox.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2555.000000">42:35</span> <strong>Org Mode, managing inbox</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2555.200000" data-stop="2558.679000"><strong class="speaker-name">Sacha:</strong> A lot of people are probably in the same boat where they've got these</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2558.680000" data-stop="2560.399000">inboxes full of ideas.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2560.400000" data-stop="2564.279000">How do you deal?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2564.280000" data-stop="2565.599000"><strong class="speaker-name">Shae:</strong> I archive stuff when I'm done with it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2566.140000" data-stop="2567.520000"><strong class="speaker-name">Sacha:</strong> Oh yeah?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2567.521000" data-stop="2572.199000"><strong class="speaker-name">Shae:</strong> Yeah, so a lot of times, and I find this very valuable, is</span> <span class="audio-time caption" data-speaker="Shae" data-start="2572.200000" data-stop="2575.199000">like if I look at... Do I have it?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2575.200000" data-stop="2578.119000">Oops, that was not what I meant to do.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2578.120000" data-stop="2581.879000"><strong class="speaker-name">Sacha:</strong> Alright, so you basically just do aggressive speed commands,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2581.880000" data-stop="2584.839000">archive, archive, archive, or look at the agenda and just mark a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2584.840000" data-stop="2586.759000">whole bunch of things and say, that's it, that's gone.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2586.760000" data-stop="2590.519000">It was written down and then it can go.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2590.520000" data-stop="2593.319000"><strong class="speaker-name">Shae:</strong> Yeah, well, when I'm really done with something, when the</span> <span class="audio-time caption" data-speaker="Shae" data-start="2593.320000" data-stop="2595.759000">thing is finished, then I will just archive it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2595.760000" data-stop="2597.859000">I mean, do you use Archive much?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2597.860000" data-stop="2598.839000"><strong class="speaker-name">Sacha:</strong> I do.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2598.840000" data-stop="2602.559000">I have a function that goes through my inbox file and just archives</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2602.560000" data-stop="2603.879000">anything that was marked as done.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2603.880000" data-stop="2606.119000"><strong class="speaker-name">Shae:</strong> Oh, nice!</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2606.120000" data-stop="2608.319000"><strong class="speaker-name">Sacha:</strong> Because that way it clears it up, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2608.320000" data-stop="2613.239000">So I'll refile things where I'm like, okay, it's done, but it has</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2613.240000" data-stop="2614.359000">important information.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2614.360000" data-stop="2615.919000">I want to put it somewhere else.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2615.920000" data-stop="2619.639000">But if it's just a transitory task that I'm using to remind myself,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2619.640000" data-stop="2623.439000">tomorrow I have to do this, go find the water bottle when it's done,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2623.440000" data-stop="2626.279000">I don't need to know about it in the future.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2626.280000" data-stop="2629.999000">So it's left in my inbox because I checked it off, and then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2630.000000" data-stop="2632.119000">periodically I'll say, clean up inbox.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2632.120000" data-stop="2635.999000">Not only will it remove all of the done things, but if I leave a tag</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2636.000000" data-stop="2641.919000">In the title of the task or if the task matches certain regular</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2641.920000" data-stop="2646.799000">expressions, it will refile it to the appropriate place in my kind of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2646.800000" data-stop="2648.439000">more permanent thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2648.440000" data-stop="2651.519000">So I can say, okay, all of my Emacs related tasks will get</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2651.520000" data-stop="2656.267000">automatically refiled to my Emacs category without my having to do</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2656.268000" data-stop="2657.639000">that manually.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2657.640000" data-stop="2660.599000"><strong class="speaker-name">Shae:</strong> So you're using tagging because I kept trying to do tagging</span> <span class="audio-time caption" data-speaker="Shae" data-start="2660.600000" data-stop="2661.519000">and never quite did it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2661.520000" data-stop="2664.479000"><strong class="speaker-name">Sacha:</strong> I use tagging sometimes when I remember it, but this is also</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2664.480000" data-stop="2665.279000">why I use the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2665.280000" data-stop="2669.519000">The regular expression match against the title.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2669.520000" data-stop="2674.599000">I'm using Orgzly on Android to capture the thing on my phone.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2674.600000" data-stop="2677.599000">I might want to say this is a consulting task.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2677.600000" data-stop="2682.299000">File it in the right place so it doesn't get lost in my inbox.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2682.300000" data-stop="2683.967000"><strong class="speaker-name">Shae:</strong> Wow.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2683.968000" data-stop="2688.259000">When is your interview so I can learn from your tricks?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2688.260000" data-stop="2693.500000"><strong class="speaker-name">Sacha:</strong> This is now. Here we go! You can ask questions.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2693.501000" data-stop="2699.767000">The nice thing about conversations is that we jostle different ideas,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2699.868000" data-stop="2702.600000">and we are like, oh yeah, maybe I should write a blog post about that,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2702.601000" data-stop="2703.459000">because I take it for granted.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2703.460000" data-stop="2707.179000">So now apparently I have to write a blog post about my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2707.180000" data-stop="2709.339000">cleaning up process.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2709.340000" data-stop="2710.979000">My inbox is very long.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2710.980000" data-stop="2714.459000">The other thing, speaking of dealing with really long lists that I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2714.460000" data-stop="2718.219000">picked up from John Wiegley was I also sometimes remember to check</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2718.220000" data-stop="2719.979000">this list of random items.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2719.980000" data-stop="2726.379000">So in my agenda, there's also like this, you know, random selection</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2726.380000" data-stop="2730.939000">of things that I have not gotten around to thinking about further,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2730.940000" data-stop="2734.939000">but it's there just in case serendipity or boredom make me do</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2734.940000" data-stop="2736.799000">something.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2736.800000" data-stop="2741.299000"><strong class="speaker-name">Shae:</strong> you know that's... I've thought about having...</span> <span class="audio-time caption" data-speaker="Shae" data-start="2741.300000" data-stop="2744.819000">because you know, I've got the pop-up this little timer that pops up</span> <span class="audio-time caption" data-speaker="Shae" data-start="2744.820000" data-stop="2747.579000">my agenda, but I've thought about maybe adding a section I don't know</span> <span class="audio-time caption" data-speaker="Shae" data-start="2747.580000" data-stop="2751.019000">if I could add a section here but it would be something that says</span> <span class="audio-time caption" data-speaker="Shae" data-start="2751.020000" data-stop="2754.819000">like at the bottom here's two or three random to-do's that have been</span> <span class="audio-time caption" data-speaker="Shae" data-start="2754.820000" data-stop="2755.579000">open for a while just like</span> <span class="audio-time caption" data-speaker="Shae" data-start="2755.580000" data-stop="2757.899000">for garbage collection.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2757.900000" data-stop="2760.979000">Because I know that in Jujutsu, I've got a cool little query that</span> <span class="audio-time caption" data-speaker="Shae" data-start="2760.980000" data-stop="2764.459000">says, if you have any change sets that are more than two weeks old</span> <span class="audio-time caption" data-speaker="Shae" data-start="2764.460000" data-stop="2767.659000">and are not in a permanent branch state, maybe you should do</span> <span class="audio-time caption" data-speaker="Shae" data-start="2767.660000" data-stop="2768.539000">something about them.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2768.540000" data-stop="2769.619000">It's just called to do.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2769.620000" data-stop="2773.379000">It'd be kind of nice to have that for Org Mode as well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2773.380000" data-stop="2777.099000"><strong class="speaker-name">Sacha:</strong> Yeah, it's just, you know, and our brains do these strange</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2777.100000" data-stop="2778.539000">things with randomness, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2778.540000" data-stop="2781.359000">They're like, oh, I want to see what's new now.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2781.360000" data-stop="2782.979000"><strong class="speaker-name">Shae:</strong> Right, right, yeah.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2782.980000" data-stop="2784.379000">Oh, I have a question.</span> <span class="audio-time caption" data-speaker="Shae" data-start="2784.380000" data-stop="2788.179000">You have this thing where you had...</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2788.000000">46:28</span> <strong>Timestamps</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="2788.180000" data-stop="2790.099000"><strong class="speaker-name">Shae:</strong> I saw you taking notes with Prot,</span> <span class="audio-time caption" data-speaker="Shae" data-start="2790.100000" data-stop="2791.739000">and you had this timestamp.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2791.740000" data-stop="2792.579000"><strong class="speaker-name">Sacha:</strong> Oh, yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2792.580000" data-stop="2793.979000">I'm using it now.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2793.980000" data-stop="2794.939000">Okay, okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2794.940000" data-stop="2796.619000">So I have it bound two ways now.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2796.620000" data-stop="2799.939000">I have it as a dabbrev, so dynamic abbreviation, and I also have it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2799.940000" data-stop="2806.499000">as a yasnippet because sometimes I'm using it with either SPC or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2806.500000" data-stop="2807.979000">tab to complete it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2807.980000" data-stop="2812.339000">And I don't really want to think, I just want to get the timestamp in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2812.340000" data-stop="2813.019000">and then move on.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2813.020000" data-stop="2818.979000">And so abbrevs can run functions to evaluate it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2818.980000" data-stop="2821.939000">You can insert the timestamp that way.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2821.940000" data-stop="2825.419000">Or yesnippet, of course, can evaluate the thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2825.420000" data-stop="2826.379000">And now I have those.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2826.380000" data-stop="2829.659000">It's basically just a wall-clock time so that I can go back and plop</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2829.660000" data-stop="2834.299000">in the chapters as time offsets, which are automatically calculated</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2834.300000" data-stop="2836.299000">from the YouTube data on when the stream started.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2836.300000" data-stop="2840.019000">So I don't have to manually calculate my chapters.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2840.020000" data-stop="2843.819000">But it's super useful to have these times everywhere.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2843.820000" data-stop="2846.979000">And in this case, during a conversation, I want to be able to say,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2846.980000" data-stop="2850.139000">hey, we talked about something interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2850.140000" data-stop="2854.739000">And then be able to go back to that point in the video later on.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2854.740000" data-stop="2855.859000"><strong class="speaker-name">Shae:</strong> So you're matching?</span> <span class="audio-time caption" data-speaker="Shae" data-start="2855.860000" data-stop="2858.339000">Oh, oh, wow.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2858.340000" data-stop="2859.099000"><strong class="speaker-name">Sacha:</strong> So my shortcut for yasnippet is "ot" because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2859.100000" data-stop="2865.739000">I never type "ot" elsewhere, and it's close enough.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2865.740000" data-stop="2870.833000">I use Dvorak, so my O is on home row, and T is close by.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2870.834000" data-stop="2874.267000">Also, on the other hand... There you go.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2874.268000" data-stop="2875.867000"><strong class="speaker-name">Shae:</strong> Did I already show you that this is actually Dvorak?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2875.868000" data-stop="2877.067000"><strong class="speaker-name">Sacha:</strong> Oh, there you go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2877.068000" data-stop="2878.779000">Now I can see the keycaps.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2878.780000" data-stop="2882.499000">Yeah, earlier it was kind of blurry, but now, yes, yes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2882.500000" data-stop="2886.139000">So yes, that is my shortcut for inserting the timestamp.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2886.140000" data-stop="2891.059000">I previously added seconds as well, but then I realized that my kind</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2891.060000" data-stop="2892.459000">might be false precision.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2892.460000" data-stop="2895.699000">So I just, you know, just use a minute at the moment and then I go</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2895.700000" data-stop="2898.699000">back and adjust the timestamps a little bit later.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2898.700000" data-stop="2902.899000">But yeah, you can use abbreviations for all sorts of things,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2902.900000" data-stop="2907.140000">including times and dates and stuff.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="2907.141000" data-stop="2910.200000"><strong class="speaker-name">Shae:</strong> Have you ever tried Org timestamp?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2910.201000" data-stop="2911.659000"><strong class="speaker-name">Sacha:</strong> Yeah, Org timer.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2911.660000" data-stop="2914.619000">So Org timer gives you a relative timestamp, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2914.620000" data-stop="2915.579000">You can say Org timer.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2915.580000" data-stop="2916.019000">Oh, okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2916.020000" data-stop="2919.999000">So, sorry.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2920.000000" data-stop="2924.219000">Are you talking about the C-u C-c ! or something</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2924.220000" data-stop="2926.219000">of that sort?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2926.220000" data-stop="2930.259000">So that's actually what I initially was doing, but then it was too</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2930.260000" data-stop="2934.819000">many keystroke word modifiers to remember.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2934.820000" data-stop="2937.979000">And then I had to press RET to select the, you know, thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2937.980000" data-stop="2941.739000">So now I just have an abbreviation insert the Org mode formatted</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2941.740000" data-stop="2944.779000">timestamp for me.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2944.780000" data-stop="2949.659000">And then I have this code that searches for Org timestamp regular</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2949.660000" data-stop="2952.859000">expression and then does the calculation and conversion and stuff.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2952.000000">49:12</span> <strong>Org timers
</strong></div><p></p><a href="https://sachachua.com/blog/feed/ec22-shae-erisson-00-53-52-300.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/feed/ec22-shae-erisson-00-53-52-300.jpg" alt="image from video 00:53:52.300" data-time="00:53:52.300"></a><span class="audio-time caption" data-speaker="Sacha" data-start="2952.860000" data-stop="2954.579000"><strong class="speaker-name">Sacha:</strong> So Org timer is a separate thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2954.580000" data-stop="2959.419000">It's useful for meetings and things like that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2959.420000" data-stop="2961.619000">You would say, okay, your Org timer starts at the beginning of the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2961.620000" data-stop="2965.059000">meeting and then you can have a list and it automatically, like if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2965.060000" data-stop="2968.019000">you alt shift enter or something like that in the list, it'll</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2968.020000" data-stop="2973.539000">automatically like insert the right timer, relative timer to it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2973.540000" data-stop="2974.059000">There you go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2974.060000" data-stop="2975.819000">So there's an org-timer-start.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2975.820000" data-stop="2980.899000">But the reason I didn't go that approach was because then you A. have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2980.900000" data-stop="2984.819000">to remember to actually start the timer and B. then you have to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2984.820000" data-stop="2987.219000">synchronize your time with video time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2987.220000" data-stop="2990.939000">Which might not have started at the same time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2990.940000" data-stop="2995.619000">So now I'm just like, okay, wall clock for everything.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2995.620000" data-stop="2996.420000">And then I can do the transformation with whatever I like.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2996.421000" data-stop="3001.167000">And since I'm editing my subtitles in Emacs, I can say, hey, this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3001.168000" data-stop="3003.767000">file started at this time, according to YouTube.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3003.768000" data-stop="3008.733000">And then just, you know, map all of the wall clocks to the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3008.734000" data-stop="3012.233000">appropriate subtitle times.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3012.234000" data-stop="3015.659000"><strong class="speaker-name">Shae:</strong> Wow. That's really cool.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3015.660000" data-stop="3022.419000"><strong class="speaker-name">Sacha:</strong> Anyway, so timers, relative, absolute, and using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3022.420000" data-stop="3024.499000">abbreviations is great.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3024.500000" data-stop="3027.339000">Which I think actually is a thing that I picked up from Karl.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3027.340000" data-stop="3032.939000">Karl Voit because he also likes to use... He has an abbreviation,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3032.940000" data-stop="3037.539000">not at the Emacs level, but he has an abbreviation on his system level,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3037.540000" data-stop="3040.939000">like with his window manager, so he can use this timestamp trick</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3040.940000" data-stop="3044.967000">anywhere, including in Etherpad or wherever else where you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3044.968000" data-stop="3051.467000">want to insert the date and time. That's V-o-i-t, by the way.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3051.468000" data-stop="3057.200000">But yeah, so times are a great way to just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3057.201000" data-stop="3059.980000">leave yourself a pointer to that moment</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3059.981000" data-stop="3062.419000">so you can go back to it later.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3062.420000" data-stop="3067.779000"><strong class="speaker-name">Shae:</strong> Now I'm curious, how well does that integrate with this sort</span> <span class="audio-time caption" data-speaker="Shae" data-start="3067.780000" data-stop="3068.379000">of thing?</span> <span class="audio-time caption" data-speaker="Shae" data-start="3068.380000" data-stop="3072.539000">Because I really like looking back at my history agenda.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3072.540000" data-stop="3077.767000"><strong class="speaker-name">Sacha:</strong> If you have it insert an inactive timestamp, I think it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3077.768000" data-stop="3083.119000">should still show up there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3083.120000" data-stop="3087.380000">I think it will be a little like those.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3087.381000" data-stop="3089.967000"><strong class="speaker-name">Shae:</strong> Yeah, it looks like the...</span> <span class="audio-time caption" data-speaker="Shae" data-start="3089.968000" data-stop="3092.100000">Well, it looks like these two are showing up.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3092.101000" data-stop="3093.433000"><strong class="speaker-name">Sacha:</strong> Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3093.434000" data-stop="3099.600000">Yeah, so that's a basic thing that I would have inserted by my either</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3099.601000" data-stop="3104.267000">abbrev or... So it's not even dabbrev.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3104.268000" data-stop="3106.759000">It's just regular abbrev in Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3106.760000" data-stop="3108.259000"><strong class="speaker-name">Shae:</strong> What's the difference?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3108.260000" data-stop="3112.939000"><strong class="speaker-name">Sacha:</strong> dabbrev is like hippie...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3112.940000" data-stop="3116.259000">Okay, let me just double check here.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3116.260000" data-stop="3122.579000">I feel like dabbrev is sort of hippie expand-ish.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3122.580000" data-stop="3127.800000">It looks in your buffer or possibly other buffers.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3127.801000" data-stop="3133.900000">And I think hippie-expand and dabbrev, they kind of work together.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3133.901000" data-stop="3137.633000">It's an option to have them work together.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3137.634000" data-stop="3142.619000">Okay, so hippie-expand is...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3142.620000" data-stop="3141.099000">Oh, so I see.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3141.100000" data-stop="3145.767000">Hippie-expand is the more advanced version of dabbrev.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3145.768000" data-stop="3150.160000">dabbrev was Dynamic Expand, and Hippie Expand says, yes, that, but</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3150.161000" data-stop="3152.367000">try a whole bunch of other things first.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3152.368000" data-stop="3156.100000">But my timestamp thing is actually just done by a regular abbrev,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3156.101000" data-stop="3165.500000">and I will find the thing in my config for "ot".</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3165.501000" data-stop="3174.219000">Oh, yeah. I will put it in my chat.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3174.220000" data-stop="3177.733000"><strong class="speaker-name">Shae:</strong> My spelling, most people say my emails are spelled really well,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3177.734000" data-stop="3182.167000">but it's only because I have ispell set up.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3182.168000" data-stop="3187.767000"><strong class="speaker-name">Sacha:</strong> Yeah, ispell is great. I am learning French and therefore...</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3187.768000" data-stop="3191.099000"><strong class="speaker-name">Shae:</strong> Oh, c'est très bien.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3191.100000" data-stop="3191.779000">Je parle un peu de français aussi.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3191.780000" data-stop="3192.459000"><strong class="speaker-name">Sacha:</strong> Oh, oui.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3192.460000" data-stop="3195.667000">I'm keeping a journal in French on my blog</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3195.668000" data-stop="3200.933000">and I have the Tatoeba Project with all the example sentences</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3200.934000" data-stop="3204.000000">and I have a consult interface to look up stuff in them</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3204.001000" data-stop="3207.000000">so I can just borrow other people's words</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3207.001000" data-stop="3209.619000">and try to make it sound more natural.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3209.620000" data-stop="3211.333000">Plus of course the usual</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3211.334000" data-stop="3212.899000">searching for words in dictionaries and stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3212.900000" data-stop="3216.659000">Anyway, in the chat, I put in my global abbrev table definition for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3216.660000" data-stop="3218.259000">insert format time string.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3218.260000" data-stop="3221.260000">In case you want to steal that, it's right there.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3221.301000" data-stop="3225.140000"><strong class="speaker-name">Shae:</strong> I will definitely save that into my notes here.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3233.000000">53:53</span> <strong>Org Mode snippets</strong></div><p></p><span class="audio-time caption" data-speaker="Shae" data-start="3233.640000" data-stop="3236.779000"><strong class="speaker-name">Shae:</strong> Another thing I use a lot is I use</span> <span class="audio-time caption" data-speaker="Shae" data-start="3236.780000" data-stop="3240.779000">Org Mode snippets.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3240.780000" data-stop="3246.859000">I will tell you that the first time, I guess if I look back at...</span> <span class="audio-time caption" data-speaker="Shae" data-start="3246.860000" data-stop="3254.219000">This is another thing that I have done a lot of in the past, which is</span> <span class="audio-time caption" data-speaker="Shae" data-start="3254.220000" data-stop="3254.579000">where...</span> <span class="audio-time caption" data-speaker="Shae" data-start="3254.580000" data-stop="3258.433000">I love the fact that Org Mode snippets are just executable.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3258.434000" data-stop="3260.667000">I can just run them.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3260.668000" data-stop="3264.733000">I guess two jobs, three jobs ago, there was a case where, because I</span> <span class="audio-time caption" data-speaker="Shae" data-start="3264.734000" data-stop="3267.367000">would keep the results around and look at them, there was a case</span> <span class="audio-time caption" data-speaker="Shae" data-start="3267.368000" data-stop="3271.100000">where, I guess a couple of months before, something got shipped to a</span> <span class="audio-time caption" data-speaker="Shae" data-start="3271.101000" data-stop="3275.133000">customer, and I noticed our database schema had changed and I</span> <span class="audio-time caption" data-speaker="Shae" data-start="3275.134000" data-stop="3280.100000">prevented a tremendous amount of upset and emergency by being like</span> <span class="audio-time caption" data-speaker="Shae" data-start="3280.080000" data-stop="3283.240000">this doesn't look great. I got one from two weeks ago, and it does</span> <span class="audio-time caption" data-speaker="Shae" data-start="3283.240000" data-stop="3287.120000">not match. Something's wrong here. Everybody's like, I don't think</span> <span class="audio-time caption" data-speaker="Shae" data-start="3287.120000" data-stop="3288.720000">so, Shae. And I'm, like, no no no, we do have a problem, we've got to</span> <span class="audio-time caption" data-speaker="Shae" data-start="3288.720000" data-stop="3293.720000">fix this. And they were, like, oh crap! And then I was like, yeah,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3293.720000" data-stop="3296.559000">solved a problem!</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3296.560000" data-stop="3300.539000"><strong class="speaker-name">Sacha:</strong> Yeah, I basically try to do as much in a snippet instead of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3300.540000" data-stop="3304.139000">in, you know, in a scratch buffer or whatever, just because having</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3304.140000" data-stop="3308.059000">that record, the fact that I did it, and also any notes that I had</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3308.060000" data-stop="3313.739000">leading up to it and the output of it, it's just so helpful.</span> <p></p><a href="https://sachachua.com/blog/feed/ec22-shae-erisson-00-55-39-300.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/feed/ec22-shae-erisson-00-55-39-300.jpg" alt="image from video 00:55:39.300" data-time="00:55:39.300"></a><span class="audio-time caption" data-speaker="Shae" data-start="3313.740000" data-stop="3317.059000"><strong class="speaker-name">Shae:</strong> Oh, I've got a cool thing that I'm doing for work.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3317.060000" data-stop="3324.539000">And that is that our readme file is not only a word file, but we also</span> <span class="audio-time caption" data-speaker="Shae" data-start="3324.540000" data-stop="3329.899000">have the demonstration of our actual thing is done by using like</span> <span class="audio-time caption" data-speaker="Shae" data-start="3329.900000" data-stop="3333.939000">dependent snippets.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3333.940000" data-stop="3337.539000">And so that means that like if you want that, perhaps this is</span> <span class="audio-time caption" data-speaker="Shae" data-start="3337.540000" data-stop="3342.339000">something everyone already knows, I don't know, but we basically are</span> <span class="audio-time caption" data-speaker="Shae" data-start="3342.340000" data-stop="3346.819000">using the results of earlier commands in later places.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3346.820000" data-stop="3350.259000">And the other nice thing about that is that then when we want to</span> <span class="audio-time caption" data-speaker="Shae" data-start="3350.260000" data-stop="3352.659000">check, we have to effectively dock tests, right?</span> <span class="audio-time caption" data-speaker="Shae" data-start="3352.660000" data-stop="3355.339000">When we want to check and see if our software works the way it does</span> <span class="audio-time caption" data-speaker="Shae" data-start="3355.340000" data-stop="3359.419000">in the readme, we evaluate the final Org Mode snippet, which then</span> <span class="audio-time caption" data-speaker="Shae" data-start="3359.420000" data-stop="3361.134000">calls it forward, calls it forward,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3361.135000" data-stop="3363.099000">and then if something goes up or not.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3363.100000" data-stop="3366.139000">Well, I guess I need to fix something.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3366.140000" data-stop="3369.219000">And so it was pretty exciting to put Org Mode niftyness into our,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3369.220000" data-stop="3371.639000">into my Word reading file, you know?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3371.640000" data-stop="3372.833000"><strong class="speaker-name">Sacha:</strong> Nice, nice.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3372.834000" data-stop="3375.619000">And you did mention your other coworker is on board with the whole</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3375.620000" data-stop="3376.339000">Emacs thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3376.340000" data-stop="3379.459000">So that's one of the things that people are often like, I want to use</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3379.460000" data-stop="3382.459000">Org Mode and I want to use it for like the documentation or the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3382.460000" data-stop="3385.019000">testing or whatever, but they got to get everyone else on board with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3385.020000" data-stop="3385.419000">the thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3385.420000" data-stop="3390.239000">Otherwise it's Jupyter Notebooks or whatever else, right?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3390.240000" data-stop="3390.733000"><strong class="speaker-name">Shae:</strong> Right.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3390.734000" data-stop="3393.099000">Okay, so I have a joke for you that I came up with a long time ago,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3393.100000" data-stop="3396.859000">and that is, do you know the only way, there's only one way that</span> <span class="audio-time caption" data-speaker="Shae" data-start="3396.860000" data-stop="3400.139000">Sauron could have organized the invasion of Middle-earth, and do you</span> <span class="audio-time caption" data-speaker="Shae" data-start="3400.140000" data-stop="3400.939000">know what he used?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3400.940000" data-stop="3402.200000"><strong class="speaker-name">Sacha:</strong> What?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3402.201000" data-stop="3408.699000"><strong class="speaker-name">Shae:</strong> Orc Mode.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3408.700000" data-stop="3415.379000">It's a terrible joke, isn't it?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3415.380000" data-stop="3416.200000"><strong class="speaker-name">Sacha:</strong> That's okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3416.201000" data-stop="3420.199000">I'm sure someone in the comments will come up with an even worse pun.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3420.200000" data-stop="3421.133000"><strong class="speaker-name">Shae:</strong> I'm excited!</span> <span class="audio-time caption" data-speaker="Shae" data-start="3421.134000" data-stop="3424.179000">It's going to be great!</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3424.180000" data-stop="3427.139000"><strong class="speaker-name">Sacha:</strong> Never underestimate the punniness of the Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3427.140000" data-stop="3430.059000">community.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3430.060000" data-stop="3431.300000"><strong class="speaker-name">Shae:</strong> I completely agree.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3431.301000" data-stop="3434.259000">I don't know.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3434.260000" data-stop="3435.459000">Do I have anything else exciting in here?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3435.000000">57:15</span> <strong>Compilation finish function: handle success
</strong></div><p></p><a href="https://sachachua.com/blog/feed/ec22-shae-erisson-00-57-48-300.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/feed/ec22-shae-erisson-00-57-48-300.jpg" alt="image from video 00:57:48.300" data-time="00:57:48.300"></a><span class="audio-time caption" data-speaker="Shae" data-start="3435.460000" data-stop="3436.733000"><strong class="speaker-name">Shae:</strong> I actually really like this one.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3436.734000" data-stop="3443.459000">I used to run all of my tests in compile.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3443.460000" data-stop="3446.019000">F12, I have F12 bound to compile.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3446.020000" data-stop="3449.219000">And one of the things I wanted was, I wanted something where it was,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3449.220000" data-stop="3452.539000">if the compile is successful, don't show me the results, because</span> <span class="audio-time caption" data-speaker="Shae" data-start="3452.540000" data-stop="3453.299000">everything's good.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3453.300000" data-stop="3459.499000">And so since I'm doing stuff in Rust, when I run all the tests, it</span> <span class="audio-time caption" data-speaker="Shae" data-start="3459.500000" data-stop="3462.659000">leaves the buffer up, and I need to get around to actually doing</span> <span class="audio-time caption" data-speaker="Shae" data-start="3462.660000" data-stop="3465.659000">stuff like this for Rustic mode as well, where when the tests pass,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3465.660000" data-stop="3467.459000">just go away, because it's all good.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3467.460000" data-stop="3469.499000">And when the tests don't pass, show me where to...</span> <span class="audio-time caption" data-speaker="Shae" data-start="3469.500000" data-stop="3472.699000">I need to look at the problem.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3472.700000" data-stop="3478.099000">And I got this from Enberg and Emacs, I don't know, 20 years ago.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3478.100000" data-stop="3483.579000">Maybe it was less than 20 years ago, but it probably wasn't.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3483.580000" data-stop="3487.059000">So yeah, there's so much good stuff.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3487.060000" data-stop="3491.779000">Yeah, there's just so much good stuff.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3491.780000" data-stop="3494.939000">And I also like to, oh, look, here we go.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3494.940000" data-stop="3497.899000">You can see that this is long gone, by the way.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3497.900000" data-stop="3501.539000">It's not there anymore.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3501.540000" data-stop="3506.099000"><strong class="speaker-name">Sacha:</strong> I have a proper, you know, it's sachachua.com/dotemacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3506.100000" data-stop="3507.979000">A lot easier to remember.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3507.980000" data-stop="3516.699000">But yeah, and I think that's, yeah, yeah, I remember that now.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3516.700000" data-stop="3518.859000">defadvice is also obsolete.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3518.860000" data-stop="3523.366000">The new hotness is advice-add or something like that.</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3523.367000" data-stop="3531.219000"><strong class="speaker-name">Shae:</strong> Oh, really? I'm going to make another TODO item for there.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3531.220000" data-stop="3533.567000"><strong class="speaker-name">Sacha:</strong> I was digging through my notes trying to find, do you share</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3533.568000" data-stop="3536.119000">your config anywhere?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3536.120000" data-stop="3537.619000"><strong class="speaker-name">Shae:</strong> No, but you know, at this point if I share it on YouTube, I</span> <span class="audio-time caption" data-speaker="Shae" data-start="3537.620000" data-stop="3541.259000">might as well just throw it up somewhere.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3541.260000" data-stop="3541.699000">Why not?</span> <span class="audio-time caption" data-speaker="Shae" data-start="3541.700000" data-stop="3543.179000">It's not very exciting.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3543.180000" data-stop="3546.459000">Like if you look at someone like Ross Baker who has magic, like wow,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3546.460000" data-stop="3548.659000">is there some magic coming in from Ross Baker?</span> <span class="audio-time caption" data-speaker="Shae" data-start="3548.660000" data-stop="3551.179000">I'm so excited to see more stuff from him.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3551.180000" data-stop="3557.019000">There's just like, I guess I feel like compared to almost everybody</span> <span class="audio-time caption" data-speaker="Shae" data-start="3557.020000" data-stop="3558.579000">else I know, I feel like a power user.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3558.580000" data-stop="3561.099000">Because I'm like, you know, I wish I could do this thing.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3561.100000" data-stop="3563.339000">A lot of times someone I know is like, well, I did that thing and</span> <span class="audio-time caption" data-speaker="Shae" data-start="3563.340000" data-stop="3564.179000">here's a library.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3564.180000" data-stop="3566.379000">And I'm like, yeah, I'll have to do it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3566.380000" data-stop="3569.779000">And I just, I guess I feel like I'm a power user.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3569.780000" data-stop="3573.459000">And on the good side, I guess I kind of,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3573.460000" data-stop="3577.099000">I really haven't written that much Elisp ever, like I was saying in</span> <span class="audio-time caption" data-speaker="Shae" data-start="3577.100000" data-stop="3578.779000">the comments during your interview with Prot.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3578.780000" data-stop="3582.499000">And I kind of like to, it's just I guess it's never quite gotten to</span> <span class="audio-time caption" data-speaker="Shae" data-start="3582.500000" data-stop="3583.499000">the top of my stack.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3583.500000" data-stop="3587.339000">And I did decide it was time for me to send money to Parade for at</span> <span class="audio-time caption" data-speaker="Shae" data-start="3587.340000" data-stop="3591.179000">least for themes, if not for like, please teach me some Elisp so I</span> <span class="audio-time caption" data-speaker="Shae" data-start="3591.180000" data-stop="3594.299000">can actually, because you know, it's not that Elisp is hard.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3594.300000" data-stop="3599.019000">It's more like, how do I kind of, what are the things I interact with?</span> <span class="audio-time caption" data-speaker="Shae" data-start="3599.020000" data-stop="3601.379000">What are the words?</span> <span class="audio-time caption" data-speaker="Shae" data-start="3601.380000" data-stop="3605.059000">What's the vocabulary of working with Emacs?</span> <span class="audio-time caption" data-speaker="Shae" data-start="3605.060000" data-stop="3606.499000">I don't actually really know.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3606.500000" data-stop="3608.779000">As a user, sure, I can do cool stuff.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3608.780000" data-stop="3609.939000">I can do Lisp macros.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3609.940000" data-stop="3614.319000">I've done Scheme and Lisp some of the past, but not inside Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3614.320000" data-stop="3615.979000"><strong class="speaker-name">Sacha:</strong> Alright, so let me clarify.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3615.980000" data-stop="3620.139000">After more than 20 years of using Emacs, did you say you feel like a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3620.140000" data-stop="3622.799000">power user or do not feel like a power user?</span> <p></p><span class="audio-time caption" data-speaker="Shae" data-start="3622.800000" data-stop="3625.699000"><strong class="speaker-name">Shae:</strong> I definitely feel like a power user, but I don't feel like</span> <span class="audio-time caption" data-speaker="Shae" data-start="3625.700000" data-stop="3627.859000">someone who does much of anything with Elisp.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3627.860000" data-stop="3630.179000">I don't really feel like someone who has much of a clue in the</span> <span class="audio-time caption" data-speaker="Shae" data-start="3630.180000" data-stop="3630.539000">internals.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3630.540000" data-stop="3632.779000">And that's not entirely true.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3632.780000" data-stop="3634.339000">I have some of the ideas.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3634.340000" data-stop="3639.059000">But for the most part, I haven't actually needed to know that much</span> <span class="audio-time caption" data-speaker="Shae" data-start="3639.060000" data-stop="3640.339000">about the internals.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3640.340000" data-stop="3644.299000">And sure, I've dug into things like how do you efficiently work with</span> <span class="audio-time caption" data-speaker="Shae" data-start="3644.300000" data-stop="3648.499000">large buffers in your ??, like the ropes data structure and</span> <span class="audio-time caption" data-speaker="Shae" data-start="3648.500000" data-stop="3649.139000">stuff like that.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3649.140000" data-stop="3650.919000">That was more for fun.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3650.920000" data-stop="3654.099000">Although it is something that Emacs does and does extremely well.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3654.100000" data-stop="3657.099000">But I'd kind of like to...</span> <span class="audio-time caption" data-speaker="Shae" data-start="3657.100000" data-stop="3660.200000">There's a lot of things I'd kind of like to change and I don't really</span> <span class="audio-time caption" data-speaker="Shae" data-start="3660.201000" data-stop="3663.359000">have enough of the understanding of the kind of how I would write the</span> <span class="audio-time caption" data-speaker="Shae" data-start="3663.360000" data-stop="3665.067000">Elisp to do it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3665.068000" data-stop="3666.000000">Here's a good example.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3666.001000" data-stop="3669.200000">When I hit F3, it takes me to the one I'm currently clocked into.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3669.201000" data-stop="3675.833000">Unless I haven't clocked in to something since I started Emacs.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3675.834000" data-stop="3678.100000">And honestly, I would like to use something like org-ql,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3678.101000" data-stop="3680.700000">the Org query language, to go find</span> <span class="audio-time caption" data-speaker="Shae" data-start="3680.701000" data-stop="3682.400000">if I've just started Emacs,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3682.401000" data-stop="3685.833000">and Org does not know about something, you know,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3685.834000" data-stop="3687.000000">I just want you to go search for it.</span> <span class="audio-time caption" data-speaker="Shae" data-start="3687.001000" data-stop="3689.200000">I have so many cores and so much memory,</span> <span class="audio-time caption" data-speaker="Shae" data-start="3689.201000" data-stop="3690.567000">just go find it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3690.568000" data-stop="3694.400000"><strong class="speaker-name">Sacha:</strong> That sounds like an excellent reason to go learn Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3694.401000" data-stop="3692.339000">so that you can have it...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3692.340000" data-stop="3699.079000">If you're not currently clocked in, go find the most recent</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3699.080000" data-stop="3702.579000">clocked in task and go there, or maybe present you with a list of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3702.580000" data-stop="3707.039000">things and then go from there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3707.040000" data-stop="3710.659000">I would love to hear about your Emacs Lisp learning journey because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3710.660000" data-stop="3714.459000">that's one of the big things that moves people from, you know, power</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3714.460000" data-stop="3722.119000">users, yes, but users, to using Emacs as a lightweight editor toolkit</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3722.120000" data-stop="3725.500000">for something that's custom fit to exactly what their workflow is.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3725.501000" data-stop="3728.400000">And on that note, I'm going to try to wrap up gracefully before the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3728.401000" data-stop="3731.700000">kiddo, you know, just like drags me out here.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3731.701000" data-stop="3735.633000">Thank you so much for doing this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3735.634000" data-stop="3737.100000">I look forward to more conversations.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3737.101000" data-stop="3742.559000">I'm going to post the transcript and other things like that pretty</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3742.560000" data-stop="3745.619000">quickly, I think, because I have this nice workflow now that lets me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3745.620000" data-stop="3749.410000">take screenshots and everything, but there's so much here that I want</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3749.411000" data-stop="3751.733000">to unpack. But I hear the kiddo, bye!</span></div>
<p></p>

<p>
#+begin_export 11ty
</p>

<p>
               &lt;a name="end-ec22-transcript"&gt;&lt;/a&gt;&lt;/details&gt;
#+end_exportbvt
</p>
</div>
</details></div>
<div id="outline-container-emacs-chat-22-shae-erisson-chat" class="outline-3">
<h3 id="emacs-chat-22-shae-erisson-chat">Chat</h3>
<div class="outline-text-3" id="text-emacs-chat-22-shae-erisson-chat">
<ul class="org-ul">
<li>JacksonScholberg: ​​Emacs is fun</li>
<li>JacksonScholberg: ​Apple's touchpad is another option</li>
<li>JacksonScholberg: ​Trackpad</li>
<li>JacksonScholberg: ​Lol</li>
<li>JacksonScholberg: ​I was curious about what you are tracking your time working on</li>
<li>JacksonScholberg: ​How you track it.</li>
<li>JacksonScholberg: ​You clock in and out to what you are working on. I like that idea.</li>
<li>Bezaar.musicc: ​​That's great!</li>
<li>PuercoPop: ​​the buffer api (properties) is the hardest part for me</li>
<li>charliemcmackin4859: ​​I think you still have a timer going, btw</li>
</ul>

<p>
Find more Emacs Chats or join the fun: <a href="https://sachachua.com/emacs-chat">https://sachachua.com/emacs-chat</a></p>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/index.org">View Org source for this post</a></div></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F05%2Fmay-7-emacs-chat-with-shae-erisson%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>
		<dc:creator>Sacha Chua</dc:creator></item><item>
		<title>La semaine du 27 avril au 3 mai</title>
		<link>https://sachachua.com/blog/2026/05/la-semaine-du-27-avril-au-3-mai/</link>
		
		<pubDate>Wed, 06 May 2026 10:16:43 GMT</pubDate>
    <category>french</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/05/la-semaine-du-27-avril-au-3-mai/</guid>
		<description><![CDATA[<div id="outline-container-org767f9fb" class="outline-3">
<h3 id="org767f9fb">lundi 27 avril</h3>
<div class="outline-text-3" id="text-org767f9fb">
<p>
J'ai ajouté la capacité de naviguer en temps réel à mon paquet subed.el. C'était déjà très pratique pour ajouter les chapitres à la transcription de ma conversation avec John Wiegley et Karthik Chikmagalur. Elle a besoin d'une petite modification pour convertir les notes que j'avais prises pendant la conversation.
</p>

<p>
J'ai emmené ma fille à son cours de gymnastique. Il y avait un remplaçant. Je suis ravie de voir que le remplaçant a porté un masque KN-95 sans demander.
</p>

<p>
Je me suis organisé avec ma mère pour installer l'app BDO Pay sur mon téléphone.
</p>

<p>
J'ai préparé les éléments pour coudre mon chapeau comme le chapeau que j'avais cousu pour ma fille.
</p>
</div>
</div>
<div id="outline-container-org8a23b58" class="outline-3">
<h3 id="org8a23b58">mardi 28</h3>
<div class="outline-text-3" id="text-org8a23b58">
<p>
J'ai emmené ma fille à Adventure Alley pour jouer avec ses amies. C'était un peu cher, mais ma fille s'est amusée, donc ce n'est pas un problème si nous allons là-bas de temps en temps.
</p>
</div>
</div>
<div id="outline-container-org981d771" class="outline-3">
<h3 id="org981d771">mercredi 29</h3>
<div class="outline-text-3" id="text-org981d771">
<p>
L'écran de remplacement est arrivé au magasin Apple, donc je vais aller là-bas demain.
</p>

<p>
J'ai réécrit une partie de la page EmacsNewbie sur l'EmacsWiki.
</p>

<p>
Ma fille a cousu mon chapeau.
</p>

<p>
Sur Stardew Valley, nous avons acheté un cochon et un mouton. Nous avons amélioré le poulailler en un grand poulailler et nous avons ajouté une cuisine à notre maison.
</p>
</div>
</div>
<div id="outline-container-orgb4ca0e6" class="outline-3">
<h3 id="orgb4ca0e6">jeudi 30</h3>
<div class="outline-text-3" id="text-orgb4ca0e6">
<p>
J'ai été ravie en discutant avec Prot sur l'expérience de l'éditeur Emacs pour les débutants.
</p>

<p>
Mon mari, ma fille, et moi avons fait du vélo avec son amie et le père de son amie. 
</p>

<p>
Sur Stardew, ma fille a remarqué que j'ai accidentellement acheté une vache que j'appelle Chèvre au lieu de la chèvre que j'ai prévu d'acheter pour le centre communautaire. Oups! Elle s'est très amusée et elle m'a demandé, quand j'achète finalement une chèvre, si je pouvais l'appeler Vache. Les animaux seront très confus, et moi aussi. Je l'ai quand même fait.
</p>
</div>
</div>
<div id="outline-container-org6efa7f6" class="outline-3">
<h3 id="org6efa7f6">vendredi 1er mai</h3>
<div class="outline-text-3" id="text-org6efa7f6">
<p>
L'école avait un remplaçant et elle n'a pas voulu y assister, donc j'ai prévenu l'école de son absence et nous avons fait un compromis entre ses devoirs et des jeux.
</p>

<p>
Nous sommes allées au Stockyards pour acheter des tissus pour son maillot de bain. Elle a trouvé les deux couleurs qu'elle voulait, mais il ne restait qu'un yard d'une couleur. Il faudra que nous planifions soigneusement. Nous avons acheté des fils chez Michaels.
Elle a aussi acheté une boîte de mochi puffs chez Marry Me Mochi.
</p>

<p>
Elle a cousu des coutures sur mon chapeau.
</p>
</div>
</div>
<div id="outline-container-org538921b" class="outline-3">
<h3 id="org538921b">samedi 2</h3>
<div class="outline-text-3" id="text-org538921b">
<p>
Pour le petit-déjeuner, ma fille a préparé une grande omelette en utilisant six œufs. On s'est régalés.
</p>

<p>
Ma fille était grincheuse parce que j'ai attiré son attention sur son agitation et elle a senti que j'étais sur son dos.
</p>

<p>
Le magasin Apple n'a pas pu réparer l'écran de ma tablette, donc il l'a remplacé par une nouvelle tablette pour une petite somme. L'Apple Pencil était finalement lié à ma garantie AppleCare+, mais malheureusement, il était en rupture de stock partout en ville, donc il fallait que j'attende pendant environ une semaine.
</p>

<p>
Une fois rentrée, j'ai trouvé que ma fille s'était calmée. Elle et moi avons joué à Duplo, ce qui est aussi un produit LEGO, mais plus grand que la normale. Je les ai utilisés pour montrer à ma fille des concepts mathématiques comme les permutations et les combinaisons.
</p>
</div>
</div>
<div id="outline-container-orgf6853cc" class="outline-3">
<h3 id="orgf6853cc">dimanche 3</h3>
<div class="outline-text-3" id="text-orgf6853cc">
<p>
Mon mari et moi avons fait du vélo au centre-ville avec ma fille dans mon vélo cargo. Ma fille et moi avons essayé le mochi chez Kibo (c'était délicieux) avant de continuer chez MEC pour chercher une nouvelle gourde pour remplacer celle que j'ai perdue. Elle n'a rien vu qui lui plaisait. Nous avons aussi acheté un mannequin en bois pour faciliter des prototypes pour coudre et des crayons d'aquarelle pour les explorer.
</p>

<p>
Une fois rentrés, mon mari a fait cuire un pain de levain qu'il donnera au père de l'amie de notre fille, suite à leur conversation vendredi. Ma fille et moi avons travaillé sur le plan de faire son maillot de bain. Elle a voulu une robe qui a un corsage cache-cœur et une jupe à ourlet tulipe. Pour le dos, elle a voulu des bretelles croisées avec un petit dos goutte.
</p>

<p>
J'étais fatiguée, donc j'ai fait une sieste. Ma fille est venue me réveiller. J'ai remarqué que mes yeux étaient très secs, donc elle a négocié de m'apporter des gouttes pour les yeux et elle me les a administrées pour 25 cents.
</p>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/05/la-semaine-du-27-avril-au-3-mai/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%2F05%2Fla-semaine-du-27-avril-au-3-mai%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>
		<dc:creator>Sacha Chua</dc:creator><enclosure length="13339" type="application/octet-stream" url="https://sachachua.com/blog/2026/05/la-semaine-du-27-avril-au-3-mai/index.org"/></item><item>
		<title>La semaine du 13 au 19 avril</title>
		<link>https://sachachua.com/blog/2026/05/la-semaine-du-13-au-19-avril/</link>
		
		<pubDate>Tue, 05 May 2026 17:51:34 GMT</pubDate>
    <category>french</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/05/la-semaine-du-13-au-19-avril/</guid>
		<description><![CDATA[<div id="outline-container-org30163db" class="outline-3">
<h3 id="org30163db">lundi 13</h3>
<div class="outline-text-3" id="text-org30163db">
<p>
Ma fille a séché les cours toute la journée. Elle a dit qu'elle était fatiguée. Elle est restée à la maison au lieu d'aller à son cours de gymnastique.
</p>

<p>
J'ai configuré obs-websocket pour lancer et arrêter la diffusion en direct depuis Emacs.
</p>

<p>
Il faisait très beau, donc je me suis assise dehors et j'ai lu la configuration d'Emacs de tecosaur. Non seulement sa configuration était très détaillée, mais elle était aussi magnifiquement mise en page.
</p>

<p>
J'ai préparé mon bulletin d'information sur Emacs pendant que je diffusais en direct.
</p>

<p>
Le glacier était toujours fermé, donc nous avons acheté de la crème glacée au supermarché à la place.
</p>

<p>
À l'heure du coucher, ma fille a dit qu'elle aurait aimé rester une enfant. Elle a dit qu'elle aimait bien KidSpark, qui est réservé aux enfants jusqu'à 10 ans.
</p>
</div>
</div>
<div id="outline-container-org9b5ce5b" class="outline-3">
<h3 id="org9b5ce5b">mardi 14</h3>
<div class="outline-text-3" id="text-org9b5ce5b">
<p>
Ma fille a suivi son cours. Après l'école, nous avons fait du vélo au parc pour jouer avec ses amies, qui en faisaient aussi.
</p>

<p>
J'ai continué à améliorer obs-websocket pour gérer mon direct depuis Emacs. J'ai aussi réécrit mon correctif pour l'opération « sentence-at-point » sur Org Mode.
</p>

<p>
J'étais fatiguée et j'avais un peu mal à la tête.
</p>
</div>
</div>
<div id="outline-container-org065c29a" class="outline-3">
<h3 id="org065c29a">mercredi 15</h3>
<div class="outline-text-3" id="text-org065c29a">
<p>
Ma fille s'est réveillée tard, mais elle a participé à son cours toute seule.
</p>

<p>
J'ai mis à jour mon OBS pour ajouter socialstream.ninja via une source navigateur. Maintenant, je peux afficher les commentaires et je peux envoyer un message depuis Emacs sur YouTube.
</p>

<p>
J'ai travaillé un peu comme consultante. Le design du profil avait besoin d'une petite correction.
</p>

<p>
Ma fille et moi avons joué à Stardew Valley.
</p>

<p>
Mon mari avait une course près du Musée des beaux-arts de l'Ontario. Ma fille était heureuse de sécher les cours l'après-midi parce que l'école avait une remplaçante. J'ai emmené ma fille là-bas et nous avons passé du temps à essayer les activités au musée et à dessiner sur nos tablettes.
</p>

<p>
Après le dîner, nous nous sommes entraînées à peindre des yeux avec des aquarelles.
</p>
</div>
</div>
<div id="outline-container-org8876f05" class="outline-3">
<h3 id="org8876f05">jeudi 16</h3>
<div class="outline-text-3" id="text-org8876f05">
<p>
J'avais rendez-vous avec Protesilaos pour l'informer de mes progrès depuis notre conversation précédente et lui poser mes nouvelles questions. J'ai fait fonctionner mon code pour lancer ma vidéo à partir d'un horodatage et j'ai écrit une fonction pour calculer la conversion entre l'heure réelle et le temps écoulé.
</p>

<p>
Ma fille et moi avons joué à la Play-Doh, au sungka (un jeu traditionnel philippin), et aux charades.
</p>
</div>
</div>
<div id="outline-container-org102c227" class="outline-3">
<h3 id="org102c227">vendredi 17</h3>
<div class="outline-text-3" id="text-org102c227">
<p>
J'ai révisé les sous-titres de ma conversation avec Prot d'hier. J'ai ajouté deux fonctions pour gérer l'étiquette d'interlocuteur quand on divise ou fusionne des sous-titres. J'ai aussi programmé trois conversations sur Emacs et j'ai publié les événements sur YouTube et sur mon site grâce à d'autres fonctions. J'ai aussi modifié ma bibliothèque pour publier mon site afin qu'elle n'inclue pas les fichiers privés.
</p>

<p>
J'ai travaillé sur nos impôts.
</p>

<p>
Ma fille s'est réveillée toute seule ce matin, à temps pour le petit-déjeuner, notre routine matinale, et son interrogation de mathématiques à l'école. Mais elle a séché les cours l'après-midi et elle s'est assise tout l'après-midi contre sa porte. Au lieu de se détendre, elle s'est davantage braquée contre moi. Je ne sais pas quoi faire dans cette situation.
</p>
</div>
</div>
<div id="outline-container-org742c34f" class="outline-3">
<h3 id="org742c34f">samedi 18</h3>
<div class="outline-text-3" id="text-org742c34f">
<p>
Pour le petit-déjeuner, j'ai préparé des crêpes avec le reste de la crème fouettée. Il reste juste un peu de la créme, donc je n'ai pas pu fouetter dans le mélanger. J'ai fouetté à la main. J'ai aussi utilisé la crème fouettée congelée que j'avais faite il y a plusieurs mois. Je les ai mangé avec des pêches et de la mangue. C'était parfait.
</p>

<p>
Lire la configuration lettrée d'Emacs de tecosaur me rend jaloux de sa mise en page, donc j'ai passé du temps en ameliorant l'export de ma configuration. C'est très long. Le PDF est 736 pages. Seule la table de matières est 15 pages. Je veux ajouter plus de commentaires et implementer plus d'exports LaTeX pour mes types de liens.
</p>

<p>
Ma fille était grincheuse contre moi du matin, mais l'après-midi, elle a réapparu et elle a voulu passer du temps avec moi.
</p>

<p>
Nous avons joué à Minecraft pour essayer les nouveaux cubes de soufre. Nous avons généré un Warden et lui avons donné un cube qui nous donnaient un bloc de champignon. Le Warden s'amusait avec le cube.
</p>

<p>
Nous avons joué avec Play-Doh. Je l'ai étalé très finement et nous l'avons coupé à beaucoup de pièces. Elle les a tressé. Elle a voulu essayer une tresse couronne, donc j'ai tressé ses cheveux.
</p>

<p>
Pour le dîner, nous avons préparé des sushis.
</p>

<p>
Nous avons joué encore à Stardew Valley Expanded. Nous avons bien progressé dans les paquets du centre communautaire, même si j'ai oublié d'obtenir l'engrais de centre communautaire après la Fête des Œufs pour accélerer les fraises. Tant pis.
</p>

<p>
Ma fille a pratiqué son vocabulaire français en racontant l'histoire de la famille d'Eevee.
</p>
</div>
</div>
<div id="outline-container-org0cef6bd" class="outline-3">
<h3 id="org0cef6bd">dimanche 19</h3>
<div class="outline-text-3" id="text-org0cef6bd">
<p>
Ma fille s'est réveillée à 8h00 aujourd'hui. Elle trouve que c'est plus facile de se réveiller quand il n'y a pas école. Il est bon que je n'avait pas commencé une diffusion en direct.
</p>

<p>
Ma fille et moi sommes allées aux Stockyards à vélo pour acheter des tissus pour coudre un chapeau d'été. Elle avait fait du lèche-vitrine mais elle n'en avait pas trouvé un qui lui convenait, donc nous devons le faire nous-même. Elle a choisi du tissu jaune Pokémon. Elle a aussi voulu de la laine pour faire du crochet une couverture.
</p>

<p>
Nous avons mangé du Panda Express pour le déjeuner. Le repas enfant m'a suffi.
</p>

<p>
Je l'ai déposée à la maison et j'ai apporté des donations au Goodwill en faisant le grand ménage. J'ai aussi fait les courses. Une fois que je suis rentrée, ma fille m'a montré fièrement qu'elle a fait les lits comme un hôtel.
</p>

<p>
Nous avons joué à Stardew Valley Expanded après le dîner. L'été a commencé. Je pense que je dois planter plus de doubeurre pour le paquet récoltes de qualité qui demande 5 récoltes de qualité or.
</p>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/05/la-semaine-du-13-au-19-avril/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%2F05%2Fla-semaine-du-13-au-19-avril%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>
		<dc:creator>Sacha Chua</dc:creator><enclosure length="24055" type="application/octet-stream" url="https://sachachua.com/blog/2026/05/la-semaine-du-13-au-19-avril/index.org"/></item><item>
		<title>La semaine du 20 au 26 avril</title>
		<link>https://sachachua.com/blog/2026/05/la-semaine-du-20-au-26-avril/</link>
		
		<pubDate>Tue, 05 May 2026 17:32:23 GMT</pubDate>
    <category>french</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/05/la-semaine-du-20-au-26-avril/</guid>
		<description><![CDATA[<div id="outline-container-org404523c" class="outline-3">
<h3 id="org404523c">lundi 20 avril</h3>
<div class="outline-text-3" id="text-org404523c">
<p>
Ma fille s'est réveillée tôt de façon autonome, donc nous avons terminé notre routine matinale. Mais elle a été déconcertée quand son mot de passe n'a pas fonctionné pour se connecter à l'école. Je l'ai aidée et elle a assisté à ses cours. Je pensais qu'elle allait bien, mais une fois que je suis allée la voir pendant la récré, j'ai trouvé qu'elle était grincheuse. Elle a encore séché les cours.
</p>

<p>
À mon grand étonnement, après la pause déjeuner et un petit moment de jeu, elle participait à l'école.
</p>

<p>
Quelques points :
</p>

<ul class="org-ul">
<li>Comme tout le monde, elle a des jours avec et des jours sans. Quand elle a mal au corps, tout est dur.</li>
<li>Nous savons que les cours collectifs ne lui conviennent pas pour le moment. C'est une expérience pour obtenir des données.</li>
<li>Ce n'est pas la fin du monde. Peut-être que l'école est plus indulgente que je ne le pense. Je peux leur laisser dire quand il y a un vrai problème. C'est possible que ce ne soit pas un problème.</li>
<li>C'est très difficile (peut-être impossible) d'aider une personne qui ne veut pas être aidée, particulièrement car une partie de sa résistance est due à son désir d'autonomie.</li>
<li>Harceler est inutile et inefficace. Si j'essaie d'utiliser la punition, je lui rends la tâche plus difficile pour choisir elle-même une bonne façon de procéder.</li>
<li>Si elle veut quelque chose de différent, nous pouvons trouver quelque chose de différent.</li>
<li>Donc je dois gérer mes propres émotions et être solidaire. Je dois avoir confiance dans le fait qu'elle veut un bon résultat pour elle-même. Elle peut le gérer ou elle peut demander de l'aide. Si je reste zen, c'est plus facile pour elle de demander de l'aide.</li>
</ul>
</div>
</div>
<div id="outline-container-orgb7d882c" class="outline-3">
<h3 id="orgb7d882c">mardi 21</h3>
<div class="outline-text-3" id="text-orgb7d882c">
<p>
Je pense que j'ai trouvé un moyen de me protéger contre les accidents pendant une diffusion en direct. Si je diffuse avec un délai vers une autre instance d'OBS, je peux interrompre le flux une fois que je remarque quelque chose que je partage accidentellement.
</p>

<p>
J'ai aussi écrit une fonction pour formater les événements dans le format Org Mode pour exporter vers le format iCalendar.
</p>

<p>
J'ai répondu à des courriels, dont un en français. J'ai mis à jour les entrées de mon agrégateur Planet Emacslife. Je l'ai modifié pour utiliser toujours l'IPv4 et interpréter correctement les corps des articles.
</p>

<p>
Pour la soulager de son ennui, j'ai aidé ma fille à travailler sur des fiches d'exercices mathématiques pour les élèves de 6ème, qu'elle a pu accomplir avec de petites astuces. Elle était très fière parce que c'était plus intéressant que ses devoirs.
</p>

<p>
Après l'école, j'ai emmené ma fille au parc pour jouer avec toutes ses meilleures amies. Elles s'amusaient tellement que d'autres enfants ont voulu se joindre à elles, ce qui a rendu l'endroit trop bruyant pour ma fille, qui s'est déplacée au bac à sable pour jouer au calme. Une fois que les autres enfants sont partis, ma fille a retrouvé ses amies.
</p>

<p>
Ma fille a redécouvert les attrape-soleil et elle en a peint quelques-uns avec des peintures acryliques. Elle a voulu une peinture verte, mais nous n'en avions pas, donc elle a mélangé de la peinture bleue et de la peinture jaune pour en faire.
</p>

<p>
Elle a aussi discuté de son idée pour un petit mannequin pour présenter des prototypes de robes. Nous avons cherché des options en ligne, mais tous les produits étaient trop chers ou ne convenaient pas à ma fille. Nous allons peut-être acheter un petit mannequin chez Ikea.
</p>

<p>
J'étais un peu fatiguée.
</p>
</div>
</div>
<div id="outline-container-org6174504" class="outline-3">
<h3 id="org6174504">mercredi 22</h3>
<div class="outline-text-3" id="text-org6174504">
<p>
J'ai écrit quelques articles pour annoncer mes diffusions en direct.
</p>

<p>
J'ai proposé à ma fille de travailler sur des mathématiques plus complexes ensemble, mais elle n'avait pas besoin de mon aide aujourd'hui.
</p>

<p>
Après l'école, ma fille et moi avons fait du vélo au parc. Nous étions en avance pour notre rendez-vous avec ses amies, donc nous avons joué dans l'aire de jeu près de la rue qui a un grand bac à sable. J'ai apporté les jouets de sable, ce qui a permis à ma fille de simuler une pâtisserie. Après avoir joué, nous sommes allées à l'autre aire de jeu en pente. Nos amies étaient en retard, mais ce n'était pas un problème. Il y avait d'autres amies, et une fois qu'elles ont dû partir, nous avons joué aux balançoires jusqu'à ce que nos autres amies arrivent. Il faisait beau et un peu chaud. Ma fille a mangé deux sucettes glacées au yaourt, à la fraise, et au miel qu'elle a préparées hier soir, et elle les a offertes à ses amies.
</p>

<p>
Ses amies sont venues à pied. Ma fille a voulu les accompagner sur le chemin du retour, donc nous sommes toutes allées à pied. J'ai accroché son vélo au mien grâce au sac Bakkie, et j'ai poussé mon vélo pendant qu'elles marchaient.
</p>

<p>
Une de ses amies est tombée et elle a eu mal au genou. Elle a hurlé. Ma fille a offert un bandage Pokémon. Elle a encore hurlé, ce qui était trop bruyant pour ma fille qui commençait aussi à pleurer. Elles ont eu besoin de quelques moments avant qu'elles ne se calment.
</p>

<p>
J'étais étonnée que ma fille ait voulu accompagner ses amies presque jusque chez elles. Eh bien, le soleil brillait et je peux toujours emmener ma fille si elle devient trop fatiguée.
</p>

<p>
Pour le dîner, mon mari a préparé des escalopes de poulet.
</p>
</div>
</div>
<div id="outline-container-orga9f4e12" class="outline-3">
<h3 id="orga9f4e12">jeudi 23</h3>
<div class="outline-text-3" id="text-orga9f4e12">
<p>
J'ai travaillé comme consultante.
</p>

<p>
J'ai emmené ma fille au parc Dufferin Grove pour jouer là-bas. Une fois arrivée, elle a vu que ses meilleures amies sont occupées à jouer avec une fille qui est en désaccord avec ma fille, donc ma fille a décidé de jouer plutôt avec moi ou avec son père, qui nous a rejoints à vélo. Elle a joué sur la balançoire et le toboggan. Elle a aussi joué dans le sable avec d'autres enfants.
</p>

<p>
À la maison, nous avons fait des bulles géantes.
</p>
</div>
</div>
<div id="outline-container-org50bfd58" class="outline-3">
<h3 id="org50bfd58">vendredi 24</h3>
<div class="outline-text-3" id="text-org50bfd58">
<p>
J'ai eu une merveilleuse conversation avec John Wiegley et Karthik Chikmagalur sur le flux de travail de John pour gérer ses tâches sur Emacs et sur Org Mode.
</p>

<p>
Ma fille était un peu grincheuse parce que j'étais occupée avec ma conversation et son père était occupé à préparer le dîner. Une fois que j'étais disponible, elle a voulu jouer à un jeu de dominos que nous avons déjà donné il y a plus d'une année. Elle a été déçue, puis elle a décidé de faire un jeu similaire en utilisant LEGO. Elle s'est amusée.
</p>

<p>
J'ai accidentellement fait tomber mon Apple Pencil et il s'est cassé.
</p>
</div>
</div>
<div id="outline-container-orgac7c578" class="outline-3">
<h3 id="orgac7c578">samedi 25</h3>
<div class="outline-text-3" id="text-orgac7c578">
<p>
Je suis allée au magasin Apple pour essayer de remplacer mon Apple Pencil et de réparer l'écran de ma tablette sur la garantie AppleCare+. Je n'ai rien obtenu. Ils n'avaient pas les pièces en stock pour la réparation de l'écran, donc le technicien les a commandées et il va me notifier une fois qu'elles seraient arrivées. Il a trouvé que mon Apple Pencil n'est pas inclus dans la garantie AppleCare+ automatiquement même si je l'avais acheté en même temps que ma tablette. Le technicien m'a dit que j'ai besoin d'appeler l'assistance Apple pour lier mon Apple Pencil à la garantie AppleCare+, ce qui a pris 35 minutes à résoudre. Une fois que j'ai fini, le technicien est déjà passé à un autre client. C'était très occupé au magasin, et je n'ai pu reprendre mon rendez-vous. Si je voulais faire un autre rendez-vous, il m'aurait fallu attendre plus d'une heure et demie. J'étais surstimulée, donc j'ai choisi de rentrer.
</p>

<p>
Ma fille a voulu jouer à Stardew Valley avec moi. C'étaient les derniers jours avant l'automne. Elle a commencé à détruire ses arbustes de myrtilles. Quand je lui ai demandé ce qu'elle faisait, elle est partie furieuse parce qu'elle a senti que j'étais sur son dos. J'ai présenté mes excuses, et je l'ai aussi informée que les myrtilles ont une récolte de plus exactement à la fin de la saison. Elle ne le savait pas.
</p>
</div>
</div>
<div id="outline-container-orge4a6d36" class="outline-3">
<h3 id="orge4a6d36">dimanche 26</h3>
<div class="outline-text-3" id="text-orge4a6d36">
<p>
J'ai écrit une petite fonction pour sauvegarder une capture d'écran à la position actuelle dans la vidéo et l'ajouter avec un horodatage au sous-titre actuel, ce qui facilite l'inclusion des images à l'article. Karthik et moi avons discuté du traitement de la vidéo.
</p>

<p>
Il faisait très beau, donc ma fille et moi avons fait du vélo jusqu'au Corktown Commons pour la première fois. Elle s'est très amusée sur les toboggans. Nous avons aussi fait plusieurs gâteaux de sable dans le bac à sable, grâce aux quelques conteneurs que j'ai apportés.
</p>

<p>
Après le dîner, ma fille a voulu jouer à Stardew Valley avec moi. Elle m'a demandé si c'est acceptable si elle vend quelques minerais d'or. Je lui ai demandé ce qu'elle voulait faire, quel est son but&hellip; Elle est devenue grincheuse et elle s'en est allée. Je me suis rendu compte qu'elle voulait peut-être faire de l'espace dans son inventaire, ce qui peut aussi être résolu avec un coffre, ce que j'avais d'ailleurs prévu de faire. Bien, elle doit développer sa propre autorégulation. Elle est finalement revenue de sa chambre et elle m'a demandé un câlin parce que son nez lui fait mal, pauvre chérie. Nous avons fait la routine du soir avec des larmes.
</p>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/05/la-semaine-du-20-au-26-avril/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%2F05%2Fla-semaine-du-20-au-26-avril%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>
		<dc:creator>Sacha Chua</dc:creator><enclosure length="37452" type="application/octet-stream" url="https://sachachua.com/blog/2026/05/la-semaine-du-20-au-26-avril/index.org"/></item><item>
		<title>Emacs Chat 21: Amin Bandali</title>
		<link>https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/</link>
		
		<pubDate>Mon, 04 May 2026 18:28:11 GMT</pubDate>
    <category>emacs</category>
<category>emacs-chat-podcast</category>
<category>emacs-chat</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/</guid><enclosure length="69601008" type="audio/mpeg" url="https://archive.org/download/ec21-amin-bandali/ec21-amin-bandali.mp3"/>
		<description><![CDATA[<div class="sticky-toc" id="org001b227">
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="https://sachachua.com/blog/feed/index.xml#current-notes-for-next-time-emacs-chat-21-amin-bandali-rough-notes-during-our-chat">Chapters</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#current-notes-for-next-time-emacs-chat-21-amin-bandali-transcript">Transcript</a></li>
<li><a href="https://sachachua.com/blog/feed/index.xml#current-notes-for-next-time-emacs-chat-21-amin-bandali-chat">Chat</a></li>
</ul>
</div>

</div>

<div class="update" id="org6c333c2">
<ul class="org-ul">
<li><span class="timestamp-wrapper"><time class="timestamp" datetime="2026-05-08">[2026-05-08 Fri]</time></span>: Updated with Amin's changes.</li>
<li><span class="timestamp-wrapper"><time class="timestamp" datetime="2026-05-07">[2026-05-07 Thu]</time></span>: Added file enclosure so that it can load as a proper podcast.</li>
</ul>

</div>

<p>
I chatted with Amin Bandali about Emacs, configuration, EXWM, keybindings, audio, and life.
<video controls="1" src="https://archive.org/download/ec21-amin-bandali/ec21-amin-bandali.mp4" type="video/mp4"><track kind="subtitles" label="Captions" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/ec21-amin-bandali.vtt" srclang="en" default=""></video>
</p>

<p>
<a href="https://archive.org/details/ec21-amin-bandali">View it via the Internet Archive</a>, <a href="https://youtube.com/live/ZiTQt8q1Ybc">watch/comment on YouTube</a>, <a href="https://sachachua.com/blog/feed/index.xml#ID-ec21-transcript">read the transcript online</a>, <a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/ec21-amin-bandali.vtt">download the transcript</a>, or <a href="mailto:sacha@sachachua.com">e-mail me</a> your thoughts!
</p>

<p>
Links:
</p>

<ul class="org-ul">
<li><a href="https://kelar.org/~bandali/gnu/emacs/emacs-chat-202605.html">Emacs Chat with Sacha Chua - bandali</a> - Amin's blog post about this talk</li>
<li><a href="https://kelar.org/~bandali/">Amin Bandali</a>: a computing scientist, archivist, and activist for user freedom</li>
<li><a href="https://kelar.org/~bandali/gnu/emacs/dotemacs.html">bandali's GNU Emacs configuration</a></li>
<li><a href="https://git.kelar.org/~bandali/configs/tree/.emacs.d">.emacs.d - configs - My configuration for GNU Emacs and other programs</a></li>
<li><a href="https://kelar.org/~bandali/gnu/emacs/people.html">The People of Emacs - bandali</a></li>
<li><a href="https://github.com/emacs-exwm/exwm">emacs-exwm/exwm: Emacs X Window Manager · GitHub</a></li>
</ul>
<div id="outline-container-current-notes-for-next-time-emacs-chat-21-amin-bandali-rough-notes-during-our-chat" class="outline-3">
<h3 id="current-notes-for-next-time-emacs-chat-21-amin-bandali-rough-notes-during-our-chat">Chapters</h3>
<div class="outline-text-3" id="text-current-notes-for-next-time-emacs-chat-21-amin-bandali-rough-notes-during-our-chat">
<p>
</p><ul class="org-ul">
<li><span class="media-time" data-start="11.000">0:11</span> Introduction: Amin Bandali, software developer and free software activist</li>
<li><span class="media-time" data-start="66.000">1:06</span> Aspects of life: notetaking, editing, multiple</li>
<li><span class="media-time" data-start="183.000">3:03</span> Configuration: keeping things simple</li>
<li><span class="media-time" data-start="303.000">5:03</span> user-lisp-directory, site-lisp if you're using an older Emacs</li>
<li><span class="media-time" data-start="395.000">6:35</span> Organizing configuration into modules</li>
<li><span class="media-time" data-start="469.000">7:49</span> early-init</li>

<li><span class="media-time" data-start="549.000">9:09</span> ring-bell-function</li>
<li><span class="media-time" data-start="581.000">9:41</span> performance optimizations</li>

<li><span class="media-time" data-start="627.000">10:27</span> user-lisp</li>

<li><span class="media-time" data-start="676.000">11:16</span> ignoring byte compilation warnings</li>
<li><span class="media-time" data-start="718.000">11:58</span> init-file-debug = &ndash;debug-init</li>

<li><span class="media-time" data-start="776.000">12:56</span> Core</li>

<li><span class="media-time" data-start="837.000">13:57</span> no longer using bandali-configure; scoping errors, timing execution</li>

<li><span class="media-time" data-start="1026.000">17:06</span> Why not use use-package</li>
<li><span class="media-time" data-start="1119.000">18:39</span> Defining multiple keybindings</li>

<li><span class="media-time" data-start="1188.000">19:48</span> doric-oak uses emphasis instead of colours</li>

<li><span class="media-time" data-start="1252.000">20:52</span> global font scaling instead of the local ones</li>

<li><span class="media-time" data-start="1299.000">21:39</span> display-fill-column-indicator</li>
<li><span class="media-time" data-start="1377.000">22:57</span> emacsclient for EDITOR and VISUAL</li>

<li><span class="media-time" data-start="1418.000">23:38</span> fundamental-mode-hook</li>

<li><span class="media-time" data-start="1465.000">24:25</span> indicate-buffer-boundaries</li>

<li><span class="media-time" data-start="1598.000">26:38</span> enabling and disabling commands</li>

<li><span class="media-time" data-start="1662.000">27:42</span> package-review-policy</li>

<li><span class="media-time" data-start="1738.000">28:58</span> getting the Info files from the Emacs source directory</li>

<li><span class="media-time" data-start="1786.000">29:46</span> recentf, adding directories</li>

<li><span class="media-time" data-start="1901.000">31:41</span> Scrolling</li>

<li><span class="media-time" data-start="1956.000">32:36</span> auto revert</li>

<li><span class="media-time" data-start="1996.000">33:16</span> Repeat mode</li>

<li><span class="media-time" data-start="2093.000">34:53</span> EXWM</li>

<li><span class="media-time" data-start="2285.000">38:05</span> Audio setup</li>
<li><span class="media-time" data-start="2355.000">39:15</span> keymaps for launching different applications</li>
<li><span class="media-time" data-start="2395.000">39:55</span> bandali-call-interactively-insert</li>

<li><span class="media-time" data-start="2549.000">42:29</span> workspaces</li>

<li><span class="media-time" data-start="2630.000">43:50</span> ZSA Voyager split keyboard, super x as a single key</li>

<li><span class="media-time" data-start="2788.000">46:28</span> Keybindings</li>

<li><span class="media-time" data-start="2888.000">48:08</span> Media buttons</li>

<li><span class="media-time" data-start="2985.000">49:45</span> exwm-input-simulation-keys!</li>

<li><span class="media-time" data-start="3103.000">51:43</span> exwm: managing floating windows</li>

<li><span class="media-time" data-start="3193.000">53:13</span> exwm: application-specific local simulation keys</li>

<li><span class="media-time" data-start="3249.000">54:09</span> binding C-q to exwm-input-send-next-key</li>
<li><span class="media-time" data-start="3271.000">54:31</span> Renaming buffers</li>

<li><span class="media-time" data-start="3338.000">55:38</span> dunst for notifications</li>

<li><span class="media-time" data-start="3415.000">56:55</span> exwm xsettings and responding to screen configuration changes</li>

<li><span class="media-time" data-start="3543.000">59:03</span> Slowly getting back into Org mode</li>
<li><span class="media-time" data-start="3601.000">1:00:01</span> chat notes</li>

<li><span class="media-time" data-start="3654.000">1:00:54</span> Mode line</li>
<li><span class="media-time" data-start="3710.000">1:01:50</span> display-buffer-alist</li>
<li><span class="media-time" data-start="3744.000">1:02:24</span> TRAMP slowness, maybe disabling VC detection?</li>
<li><span class="media-time" data-start="3822.000">1:03:42</span> eat</li>
<li><span class="media-time" data-start="3909.000">1:05:09</span> TRAMP completion</li>
<li><span class="media-time" data-start="4015.000">1:06:55</span> ffs: form feed slides, ^L</li>

<li><span class="media-time" data-start="4176.000">1:09:36</span> Speaker notes</li>
</ul>

<p></p>
</div>
</div>
<div id="outline-container-current-notes-for-next-time-emacs-chat-21-amin-bandali-transcript" class="outline-3">
<h3 id="current-notes-for-next-time-emacs-chat-21-amin-bandali-transcript">Transcript</h3>
<div class="outline-text-3" id="text-current-notes-for-next-time-emacs-chat-21-amin-bandali-transcript">
<details class="code-details"><a name="ID-ec21-transcript"></a><div><a href="https://sachachua.com/blog/feed/index.xml#end-ec21-transcript">Skip to end</a></div>
                  <summary>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>Introduction: Amin Bandali, software developer and free software activist</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="0.000000" data-stop="11.559000"><strong class="speaker-name">Sacha:</strong> Let me do the thing. Go live.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="11.560000" data-stop="14.399000">Let's check in.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="14.400000" data-stop="16.559000">Alright, hello.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="16.560000" data-stop="20.719000">This is Emacs Chat 21 coming back after a decade of not</span> <span class="audio-time caption" data-speaker="Sacha" data-start="20.720000" data-stop="22.279000">doing it, so…</span> <span class="audio-time caption" data-speaker="Sacha" data-start="22.280000" data-stop="26.759000">And today I've got Amin Bandali who's a…</span> <span class="audio-time caption" data-speaker="Sacha" data-start="26.760000" data-stop="29.279000">Is it seven years now that we've been doing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="29.280000" data-stop="31.579000">EmacsConf together?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="31.580000" data-stop="32.267000"><strong class="speaker-name">Amin:</strong> I think so.</span> <span class="audio-time caption" data-speaker="Amin" data-start="31.760000" data-stop="33.719000">Since fall 2019.</span> <span class="audio-time caption" data-speaker="Amin" data-start="32.268000" data-stop="32.268000">Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="33.720000" data-stop="35.679000"><strong class="speaker-name">Sacha:</strong> Yeah, yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="35.680000" data-stop="38.799000">But of course you also do a whole lot of other things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="38.800000" data-stop="40.519000">I was looking through your Emacs configuration and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="40.520000" data-stop="43.119000">there's like translation and other stuff in there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="43.120000" data-stop="45.239000">So would you like to start off with a brief</span> <span class="audio-time caption" data-speaker="Sacha" data-start="45.240000" data-stop="47.559000">introduction of who you are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="47.560000" data-stop="50.259000">and how and why you use Emacs?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="50.260000" data-stop="51.799000"><strong class="speaker-name">Amin:</strong> Yeah, sure.</span> <span class="audio-time caption" data-speaker="Amin" data-start="51.800000" data-stop="53.439000">Yeah, first of all, hello, everyone.</span> <span class="audio-time caption" data-speaker="Amin" data-start="53.440000" data-stop="54.639000">Sorry if I'm looking to the side.</span> <span class="audio-time caption" data-speaker="Amin" data-start="54.640000" data-stop="55.879000">This is a new setup.</span> <span class="audio-time caption" data-speaker="Amin" data-start="55.880000" data-stop="58.879000">My laptop, which has my webcam, is there, but my main</span> <span class="audio-time caption" data-speaker="Amin" data-start="58.880000" data-stop="60.119000">display is here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="60.120000" data-stop="63.039000">So I might be looking to the side from time to time.</span> <span class="audio-time caption" data-speaker="Amin" data-start="63.040000" data-stop="65.279000">But yeah, that aside, hello.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="65.000000">1:05</span> <strong>Aspects of life: notetaking, editing, multiple</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="65.280000" data-stop="66.399000"><strong class="speaker-name">Amin:</strong> Yeah, I'm Amin Bandali.</span> <span class="audio-time caption" data-speaker="Amin" data-start="66.400000" data-stop="72.359000">I've been, I think, using Emacs since 2014 or 15, so I</span> <span class="audio-time caption" data-speaker="Amin" data-start="72.360000" data-stop="74.679000">guess more than a decade now.</span> <span class="audio-time caption" data-speaker="Amin" data-start="74.680000" data-stop="78.879000">I'm a software engineer by day, or software developer,</span> <span class="audio-time caption" data-speaker="Amin" data-start="78.880000" data-stop="82.159000">slash programmer, slash computing scientist.</span> <span class="audio-time caption" data-speaker="Amin" data-start="82.160000" data-stop="85.839000">I'm also a free software activist.</span> <span class="audio-time caption" data-speaker="Amin" data-start="85.840000" data-stop="89.279000">I volunteer on a lot of free software projects as</span> <span class="audio-time caption" data-speaker="Amin" data-start="89.280000" data-stop="90.639000">well, which Sacha mentioned.</span> <span class="audio-time caption" data-speaker="Amin" data-start="90.640000" data-stop="91.799000">I do things around GNU.</span> <span class="audio-time caption" data-speaker="Amin" data-start="91.800000" data-stop="93.319000">I volunteer with FSF.</span> <span class="audio-time caption" data-speaker="Amin" data-start="93.320000" data-stop="95.719000">I'm a Debian Developer, so I try to maintain some</span> <span class="audio-time caption" data-speaker="Amin" data-start="95.720000" data-stop="97.399000">packages in Debian.</span> <span class="audio-time caption" data-speaker="Amin" data-start="97.400000" data-stop="101.959000">I try to help run EmacsConf from time to time.</span> <span class="audio-time caption" data-speaker="Amin" data-start="101.960000" data-stop="105.239000">Hopefully this year I will be much more present.</span> <span class="audio-time caption" data-speaker="Amin" data-start="105.240000" data-stop="107.039000">But yeah, that's that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="107.040000" data-stop="110.439000">So I first got into using Emacs, I guess, as a</span> <span class="audio-time caption" data-speaker="Amin" data-start="110.440000" data-stop="113.039000">programmer tool, like as a text editor.</span> <span class="audio-time caption" data-speaker="Amin" data-start="113.040000" data-stop="116.439000">But I've since then kind of integrated it into a lot</span> <span class="audio-time caption" data-speaker="Amin" data-start="116.440000" data-stop="117.839000">of other aspects of my life.</span> <span class="audio-time caption" data-speaker="Amin" data-start="117.840000" data-stop="119.959000">And I do much more with it, as I'm sure a lot of us do.</span> <span class="audio-time caption" data-speaker="Amin" data-start="119.960000" data-stop="124.239000">Yeah, so I use it for kind of note-taking, just any</span> <span class="audio-time caption" data-speaker="Amin" data-start="124.240000" data-stop="126.279000">writing, editing purposes</span> <span class="audio-time caption" data-speaker="Amin" data-start="126.280000" data-stop="129.679000">in multiple natural and programming languages.</span> <span class="audio-time caption" data-speaker="Amin" data-start="129.680000" data-stop="134.559000">Reading and sending email for chatting via IRC.</span> <span class="audio-time caption" data-speaker="Amin" data-start="134.560000" data-stop="136.779000">All of that good stuff.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="136.780000" data-stop="138.599000"><strong class="speaker-name">Sacha:</strong> This is the sort of thing that isn't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="138.600000" data-stop="140.399000">immediately obvious from your configuration.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="140.400000" data-stop="143.239000">I know you've got your Gnus setup in there and you've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="143.240000" data-stop="146.519000">got your ERC setup in there, but sometimes when</span> <span class="audio-time caption" data-speaker="Sacha" data-start="146.520000" data-stop="148.959000">newcomers are trying to figure out, okay, there are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="148.960000" data-stop="151.199000">all these packages, but how do I use them</span> <span class="audio-time caption" data-speaker="Sacha" data-start="151.200000" data-stop="152.359000">to get stuff done?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="152.360000" data-stop="155.679000">That's one of the reasons why we want to do this Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="155.680000" data-stop="158.479000">chat, so that maybe you can show us</span> <span class="audio-time caption" data-speaker="Sacha" data-start="158.480000" data-stop="160.239000">some of the cool stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="160.240000" data-stop="162.879000">We are live, but if you accidentally show something</span> <span class="audio-time caption" data-speaker="Sacha" data-start="162.880000" data-stop="165.279000">personal, let me know and I can kill the stream within</span> <span class="audio-time caption" data-speaker="Sacha" data-start="165.280000" data-stop="168.279000">10 seconds and I think then we can be like, okay,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="168.280000" data-stop="170.799000">we'll just flush that out and then come back once</span> <span class="audio-time caption" data-speaker="Sacha" data-start="170.800000" data-stop="173.239000">we've hidden the top secret plans for taking over the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="173.240000" data-stop="175.399000">world, that sort of thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="175.400000" data-stop="177.719000">Sounds good.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="177.720000" data-stop="180.639000">Where do we want to start?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="180.000000">3:00</span> <strong>Configuration: keeping things simple</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="180.640000" data-stop="183.919000"><strong class="speaker-name">Amin:</strong> I'm happy to do it however you like.</span> <span class="audio-time caption" data-speaker="Amin" data-start="183.920000" data-stop="186.679000">I can either share my screen, pull up my configuration.</span> <span class="audio-time caption" data-speaker="Amin" data-start="186.680000" data-stop="189.479000">Yeah, okay, so let's do that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="189.480000" data-stop="190.279000"><strong class="speaker-name">Sacha:</strong> Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="190.280000" data-stop="193.479000">If you share your screen sometimes, I think what we</span> <span class="audio-time caption" data-speaker="Sacha" data-start="193.480000" data-stop="195.479000">did ages ago was we just started walking through the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="195.480000" data-stop="198.279000">configuration and then sometimes people say, oh yeah,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="198.280000" data-stop="199.159000">that's really interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="199.160000" data-stop="201.919000">Let's go and demonstrate that so that people can get a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="201.920000" data-stop="203.559000">sense of how this actually works.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="203.560000" data-stop="207.319000">And there were some things in your configuration that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="207.320000" data-stop="210.159000">I had no idea, like what is FFS?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="210.160000" data-stop="211.919000">There's like no package.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="211.920000" data-stop="214.559000">I couldn't find any information about it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="214.560000" data-stop="218.079000">But yeah, so your config, if you want to go ahead and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="218.080000" data-stop="219.639000">share your screen while I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="219.640000" data-stop="222.319000">Fill the air with hand-waving.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="222.320000" data-stop="227.719000">Amin's config tends to be more on the minimalist side.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="227.720000" data-stop="232.999000">I think you mostly rely on built-in things with a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="233.000000" data-stop="235.239000">couple of external packages.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="235.240000" data-stop="238.919000">You don't even use use-package at all.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="238.920000" data-stop="241.639000">It's all run-at-idle-time to delay the startup of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="241.640000" data-stop="245.867000">various things, and then it's all vanilla Emacs as you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="245.868000" data-stop="249.800000">can get for loading and configuring things.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="249.840000" data-stop="251.033000"><strong class="speaker-name">Amin:</strong> Yeah, pretty much, yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="251.034000" data-stop="253.433000">Yeah, so before I continue, quick note, Sacha, if you</span> <span class="audio-time caption" data-speaker="Amin" data-start="253.434000" data-stop="255.159000">can make me presenter because I don't have access to</span> <span class="audio-time caption" data-speaker="Amin" data-start="255.160000" data-stop="256.033000">share my screen.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="256.034000" data-stop="258.599000"><strong class="speaker-name">Sacha:</strong> Oh, that would be important, yes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="258.600000" data-stop="260.399000">Hang on a second.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="260.400000" data-stop="261.359000">Let me see.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="261.360000" data-stop="262.359000">Okay, here we go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="262.360000" data-stop="263.399000">Make presenter.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="263.400000" data-stop="265.559000">I might as well promote you to moderator while we're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="265.560000" data-stop="266.319000">at it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="266.320000" data-stop="267.439000">There you go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="267.440000" data-stop="271.239000">You should now have magic powers.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="271.240000" data-stop="272.399000"><strong class="speaker-name">Amin:</strong> Thanks.</span> <span class="audio-time caption" data-speaker="Amin" data-start="272.400000" data-stop="273.999000">Let's see.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="274.000000" data-stop="275.559000"><strong class="speaker-name">Sacha:</strong> It's a good thing we're practicing this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="275.560000" data-stop="280.799000">before EmacsConf so I remember how all this stuff works.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="280.800000" data-stop="283.079000"><strong class="speaker-name">Amin:</strong> Yep, for sure.</span> <span class="audio-time caption" data-speaker="Amin" data-start="283.080000" data-stop="284.079000">Okay, let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="284.080000" data-stop="285.319000">I think I got it now.</span> <span class="audio-time caption" data-speaker="Amin" data-start="285.320000" data-stop="286.899000">Can you see my screen?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="286.900000" data-stop="290.059000"><strong class="speaker-name">Sacha:</strong> Yes, I can see your screen.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="290.060000" data-stop="291.559000"><strong class="speaker-name">Amin:</strong> Okay, excellent.</span> <span class="audio-time caption" data-speaker="Amin" data-start="291.560000" data-stop="293.799000">Let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="293.800000" data-stop="298.639000">Okay.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="298.000000">4:58</span> <strong>user-lisp-directory, site-lisp if you're using an older Emacs</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="298.640000" data-stop="303.159000"><strong class="speaker-name">Amin:</strong> Yeah, so as Sacha mentioned at the moment, my config</span> <span class="audio-time caption" data-speaker="Amin" data-start="303.160000" data-stop="307.919000">is kind of very minimalist and kind of conservative by</span> <span class="audio-time caption" data-speaker="Amin" data-start="307.920000" data-stop="311.439000">design, in part because I tend to work on a lot of</span> <span class="audio-time caption" data-speaker="Amin" data-start="311.440000" data-stop="314.439000">different machines, whether it's for work or</span> <span class="audio-time caption" data-speaker="Amin" data-start="314.440000" data-stop="318.119000">volunteering or whatever, and I prefer to use Emacs</span> <span class="audio-time caption" data-speaker="Amin" data-start="318.120000" data-stop="318.879000">if I can.</span> <span class="audio-time caption" data-speaker="Amin" data-start="318.880000" data-stop="322.159000">So I want my config to be fairly self-contained so I</span> <span class="audio-time caption" data-speaker="Amin" data-start="322.160000" data-stop="325.599000">can easily either git clone or rsync it over.</span> <span class="audio-time caption" data-speaker="Amin" data-start="325.600000" data-stop="327.399000">Yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="327.400000" data-stop="332.279000">To keep it simple, I was using package.el for a while</span> <span class="audio-time caption" data-speaker="Amin" data-start="332.280000" data-stop="336.479000">for installing and managing my packages, which I don't</span> <span class="audio-time caption" data-speaker="Amin" data-start="336.480000" data-stop="338.879000">keep in my configs repository.</span> <span class="audio-time caption" data-speaker="Amin" data-start="338.880000" data-stop="343.239000">But then I decided to switch over to very manual</span> <span class="audio-time caption" data-speaker="Amin" data-start="343.240000" data-stop="346.759000">package management with the awesome new feature</span> <span class="audio-time caption" data-speaker="Amin" data-start="346.760000" data-stop="350.399000">user-lisp-directory of the next upcoming Emacs release,</span> <span class="audio-time caption" data-speaker="Amin" data-start="350.400000" data-stop="352.999000">which basically you can give it a subdirectory in your</span> <span class="audio-time caption" data-speaker="Amin" data-start="353.000000" data-stop="356.919000">~/.emacs.d or ~/.config/emacs.</span> <span class="audio-time caption" data-speaker="Amin" data-start="356.920000" data-stop="359.599000">And then it'll go through all the Emacs Lisp files</span> <span class="audio-time caption" data-speaker="Amin" data-start="359.600000" data-stop="361.519000">recursively, byte compile them, native compile them,</span> <span class="audio-time caption" data-speaker="Amin" data-start="361.520000" data-stop="363.719000">all that good stuff, and add them to the load-path.</span> <span class="audio-time caption" data-speaker="Amin" data-start="363.720000" data-stop="366.559000">And for people who are using existing or older</span> <span class="audio-time caption" data-speaker="Amin" data-start="366.560000" data-stop="371.039000">releases of Emacs, there's also site-lisp by Philip</span> <span class="audio-time caption" data-speaker="Amin" data-start="371.040000" data-stop="373.959000">Kaludercic, which is kind of the…</span> <span class="audio-time caption" data-speaker="Amin" data-start="373.960000" data-stop="377.199000">I guess first implementation of what later became</span> <span class="audio-time caption" data-speaker="Amin" data-start="377.200000" data-stop="379.079000">User Lisp and built into Emacs.</span> <span class="audio-time caption" data-speaker="Amin" data-start="379.080000" data-stop="382.559000">So you can make it conditional and fall back to</span> <span class="audio-time caption" data-speaker="Amin" data-start="382.560000" data-stop="387.159000">site-lisp if you want to be able to use User Lisp on</span> <span class="audio-time caption" data-speaker="Amin" data-start="387.160000" data-stop="389.959000">older Emacs but still have your configuration be</span> <span class="audio-time caption" data-speaker="Amin" data-start="389.960000" data-stop="390.919000">usable.</span> <span class="audio-time caption" data-speaker="Amin" data-start="390.920000" data-stop="392.439000">Yeah, anyway.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="392.000000">6:32</span> <strong>Organizing configuration into modules</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="392.440000" data-stop="395.239000"><strong class="speaker-name">Amin:</strong> So I've experimented with like a couple different ways</span> <span class="audio-time caption" data-speaker="Amin" data-start="395.240000" data-stop="397.319000">of managing my configurations like single giant init</span> <span class="audio-time caption" data-speaker="Amin" data-start="397.320000" data-stop="400.199000">file of like four or five thousand lines which I know</span> <span class="audio-time caption" data-speaker="Amin" data-start="400.200000" data-stop="403.199000">is actually not very large by comparison to I think</span> <span class="audio-time caption" data-speaker="Amin" data-start="403.200000" data-stop="407.239000">like someone like Sacha's configuration and also like</span> <span class="audio-time caption" data-speaker="Amin" data-start="407.240000" data-stop="410.319000">You know, split into multiple different files, which</span> <span class="audio-time caption" data-speaker="Amin" data-start="410.320000" data-stop="411.239000">has its own benefits.</span> <span class="audio-time caption" data-speaker="Amin" data-start="411.240000" data-stop="413.879000">And I've kind of actually converged to the approach</span> <span class="audio-time caption" data-speaker="Amin" data-start="413.880000" data-stop="415.159000">that Prot uses.</span> <span class="audio-time caption" data-speaker="Amin" data-start="415.160000" data-stop="419.359000">If you actually take a look at my configuration file,</span> <span class="audio-time caption" data-speaker="Amin" data-start="419.360000" data-stop="422.239000">you see I've drawn a lot of inspiration from Prot</span> <span class="audio-time caption" data-speaker="Amin" data-start="422.240000" data-stop="422.839000">switches.</span> <span class="audio-time caption" data-speaker="Amin" data-start="422.840000" data-stop="426.839000">Having a literate single file configuration, which</span> <span class="audio-time caption" data-speaker="Amin" data-start="426.840000" data-stop="430.319000">then all of the Emacs Lisp source blocks get tangled</span> <span class="audio-time caption" data-speaker="Amin" data-start="430.320000" data-stop="431.599000">to individual files.</span> <span class="audio-time caption" data-speaker="Amin" data-start="431.600000" data-stop="435.719000">So I can maintain a single source of truth and edit it</span> <span class="audio-time caption" data-speaker="Amin" data-start="435.720000" data-stop="438.799000">all in one place, but then also easily be able to</span> <span class="audio-time caption" data-speaker="Amin" data-start="438.800000" data-stop="441.559000">share individual pieces to people if they want.</span> <span class="audio-time caption" data-speaker="Amin" data-start="441.560000" data-stop="443.879000">So yeah, that's kind of the general approach.</span> <span class="audio-time caption" data-speaker="Amin" data-start="443.880000" data-stop="446.779000">And I can dive right in.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="446.780000" data-stop="448.759000"><strong class="speaker-name">Sacha:</strong> Yeah, that's definitely the structure that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="448.760000" data-stop="450.999000">I've also stolen from Prot.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="451.000000" data-stop="452.159000">And I like the way that you're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="452.160000" data-stop="456.759000">Your heading names are all long and descriptive, and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="456.760000" data-stop="459.159000">you've got everything broken down in detail.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="459.160000" data-stop="462.839000">So yeah, go ahead and walk us through it, please.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="462.840000" data-stop="464.679000"><strong class="speaker-name">Amin:</strong> Yeah, sure.</span> <span class="audio-time caption" data-speaker="Amin" data-start="464.680000" data-stop="465.039000">Let's see.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="465.000000">7:45</span> <strong>early-init
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0014.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0014.jpg" alt="image from video 00:08:00.067" data-time="00:08:00.067"></a><span class="audio-time caption" data-speaker="Amin" data-start="465.040000" data-stop="469.159000"><strong class="speaker-name">Amin:</strong> So that's a brief introduction, and then I have an</span> <span class="audio-time caption" data-speaker="Amin" data-start="469.160000" data-stop="471.879000">early init section for doing the early init file.</span> <span class="audio-time caption" data-speaker="Amin" data-start="471.880000" data-stop="474.319000">There's a couple of subheadings here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="474.320000" data-stop="476.559000">Actually, let me enlarge the font size a little bit to</span> <span class="audio-time caption" data-speaker="Amin" data-start="476.560000" data-stop="477.919000">make it more legible.</span> <span class="audio-time caption" data-speaker="Amin" data-start="477.920000" data-stop="479.199000">OK, great.</span> <span class="audio-time caption" data-speaker="Amin" data-start="479.200000" data-stop="483.279000">I do a couple of things here like disabling package at</span> <span class="audio-time caption" data-speaker="Amin" data-start="483.280000" data-stop="485.999000">startup because I don't use package as I mentioned.</span> <span class="audio-time caption" data-speaker="Amin" data-start="486.000000" data-stop="490.559000">I manually install and update my packages as git</span> <span class="audio-time caption" data-speaker="Amin" data-start="490.560000" data-stop="494.559000">submodules in my configurations repository.</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0015.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0015.jpg" alt="image from video 00:08:15.567" data-time="00:08:15.567"></a><span class="audio-time caption" data-speaker="Amin" data-start="494.560000" data-stop="498.039000"><strong class="speaker-name">Amin:</strong> I set load-prefer-newer to t to make sure that I</span> <span class="audio-time caption" data-speaker="Amin" data-start="498.040000" data-stop="500.199000">never load any stale code.</span> <span class="audio-time caption" data-speaker="Amin" data-start="500.200000" data-stop="503.759000">For example, I might edit some Emacs Lisp file by hand</span> <span class="audio-time caption" data-speaker="Amin" data-start="503.760000" data-stop="506.039000">and forget to byte compile or native compile it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="506.040000" data-stop="509.159000">And this tells Emacs to basically just use the version</span> <span class="audio-time caption" data-speaker="Amin" data-start="509.160000" data-stop="511.679000">of these three variants that's the most recent.</span> <span class="audio-time caption" data-speaker="Amin" data-start="511.680000" data-stop="514.639000">Yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="514.640000" data-stop="515.679000">Nothing super fancy here.</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0016.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0016.jpg" alt="image from video 00:08:35.700" data-time="00:08:35.700"></a><span class="audio-time caption" data-speaker="Amin" data-start="515.680000" data-stop="518.039000"><strong class="speaker-name">Amin:</strong> I turn off a couple of things that I find a little bit</span> <span class="audio-time caption" data-speaker="Amin" data-start="518.040000" data-stop="520.359000">distracting, like the menu bar or toolbar.</span> <span class="audio-time caption" data-speaker="Amin" data-start="520.360000" data-stop="523.359000">Although I do say here that for people who are new to</span> <span class="audio-time caption" data-speaker="Amin" data-start="523.360000" data-stop="525.479000">Emacs, they're actually super helpful.</span> <span class="audio-time caption" data-speaker="Amin" data-start="525.480000" data-stop="528.399000">Sure, it's a little bit of visual clutter, but in the</span> <span class="audio-time caption" data-speaker="Amin" data-start="528.400000" data-stop="531.599000">beginning, it's really, really helpful to help you</span> <span class="audio-time caption" data-speaker="Amin" data-start="531.600000" data-stop="534.639000">orient yourself of what mode you're in, what tools do</span> <span class="audio-time caption" data-speaker="Amin" data-start="534.640000" data-stop="537.359000">you have available in your disposal.</span> <span class="audio-time caption" data-speaker="Amin" data-start="537.360000" data-stop="539.599000">And even someone who's been using Emacs for more than</span> <span class="audio-time caption" data-speaker="Amin" data-start="539.600000" data-stop="542.119000">10 years, I also use it sometimes when I'm like…</span> <span class="audio-time caption" data-speaker="Amin" data-start="542.120000" data-stop="544.119000">just starting to use a new mode.</span> <span class="audio-time caption" data-speaker="Amin" data-start="544.120000" data-stop="546.179000">So yeah, good stuff.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="546.000000">9:06</span> <strong>ring-bell-function</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="546.180000" data-stop="549.479000"><strong class="speaker-name">Sacha:</strong> I was very amused by the comment on the…</span> <span class="audio-time caption" data-speaker="Sacha" data-start="549.480000" data-stop="551.600000">"I don't like getting jumpscared out of my chair."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="551.601000" data-stop="555.239000">You turned off the bell.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="555.240000" data-stop="557.080000"><strong class="speaker-name">Amin:</strong> Yeah, because that actually used to happen</span> <span class="audio-time caption" data-speaker="Amin" data-start="557.120000" data-stop="559.039000">when I first started using Emacs.</span> <span class="audio-time caption" data-speaker="Amin" data-start="559.040000" data-stop="561.679000">Like when I would, I don't know, I don't even remember</span> <span class="audio-time caption" data-speaker="Amin" data-start="561.680000" data-stop="563.639000">when it bells or rings, but</span> <span class="audio-time caption" data-speaker="Amin" data-start="563.640000" data-stop="568.359000">Maybe if you like quit like with C-g or like try to</span> <span class="audio-time caption" data-speaker="Amin" data-start="568.360000" data-stop="571.999000">backspace into like delete where there's no more</span> <span class="audio-time caption" data-speaker="Amin" data-start="572.000000" data-stop="574.959000">characters to delete so it rings a bell and it's very</span> <span class="audio-time caption" data-speaker="Amin" data-start="574.960000" data-stop="579.999000">like can be jarring so yeah I turn that off.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="580.000000">9:40</span> <strong>performance optimizations
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0017.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0017.jpg" alt="image from video 00:09:56.367" data-time="00:09:56.367"></a><span class="audio-time caption" data-speaker="Sacha" data-start="580.000000" data-stop="581.759000"><strong class="speaker-name">Sacha:</strong> Yeah, and then you've got a whole bunch of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="581.760000" data-stop="584.719000">things where you set some variables to nil temporarily</span> <span class="audio-time caption" data-speaker="Sacha" data-start="584.720000" data-stop="587.199000">to make it faster, so that's in your startup in garbage</span> <span class="audio-time caption" data-speaker="Sacha" data-start="587.200000" data-stop="588.839000">collection.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="588.840000" data-stop="590.159000"><strong class="speaker-name">Amin:</strong> Exactly.</span> <span class="audio-time caption" data-speaker="Amin" data-start="590.160000" data-stop="593.359000">Empirically, there is no hard and fast science</span> <span class="audio-time caption" data-speaker="Amin" data-start="593.360000" data-stop="594.639000">behind this.</span> <span class="audio-time caption" data-speaker="Amin" data-start="594.640000" data-stop="596.359000">I experimented over the years.</span> <span class="audio-time caption" data-speaker="Amin" data-start="596.360000" data-stop="600.399000">I'm pretty sure I believe the default, for example,</span> <span class="audio-time caption" data-speaker="Amin" data-start="600.400000" data-stop="602.839000">the garbage collection cons threshold is about eight</span> <span class="audio-time caption" data-speaker="Amin" data-start="602.840000" data-stop="603.839000">megabytes.</span> <span class="audio-time caption" data-speaker="Amin" data-start="603.840000" data-stop="606.559000">I tried increasing that a little bit to see how much</span> <span class="audio-time caption" data-speaker="Amin" data-start="606.560000" data-stop="610.159000">If I increase it to what point</span> <span class="audio-time caption" data-speaker="Amin" data-start="610.160000" data-stop="612.599000">will it make my startup faster?</span> <span class="audio-time caption" data-speaker="Amin" data-start="612.600000" data-stop="616.519000">And I found this 30 megabytes or mibibytes to be</span> <span class="audio-time caption" data-speaker="Amin" data-start="616.520000" data-stop="617.119000">kind of a sweet spot.</span> <span class="audio-time caption" data-speaker="Amin" data-start="617.120000" data-stop="618.719000">So I bump that up.</span> <span class="audio-time caption" data-speaker="Amin" data-start="618.720000" data-stop="621.839000">And then after Emacs has finished initializing, in the</span> <span class="audio-time caption" data-speaker="Amin" data-start="621.840000" data-stop="625.299000">after-init-hook, I just restore the defaults.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="625.000000">10:25</span> <strong>user-lisp
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0018.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0018.jpg" alt="image from video 00:10:51.900" data-time="00:10:51.900"></a><span class="audio-time caption" data-speaker="Amin" data-start="625.300000" data-stop="627.500000"><strong class="speaker-name">Amin:</strong> And then, yeah, this is the bit with</span> <span class="audio-time caption" data-speaker="Amin" data-start="627.501000" data-stop="629.599000">the user-lisp-directory that I was talking about.</span> <span class="audio-time caption" data-speaker="Amin" data-start="629.600000" data-stop="631.519000">Awesome stuff.</span> <span class="audio-time caption" data-speaker="Amin" data-start="631.520000" data-stop="634.639000">So you can basically designate a directory.</span> <span class="audio-time caption" data-speaker="Amin" data-start="634.640000" data-stop="636.461000">For example, in my configuration,</span> <span class="audio-time caption" data-speaker="Amin" data-start="636.462000" data-stop="637.799000">it's just a lisp directory.</span> <span class="audio-time caption" data-speaker="Amin" data-start="637.800000" data-stop="641.485000">And then on startup, Emacs will go through and</span> <span class="audio-time caption" data-speaker="Amin" data-start="641.486000" data-stop="644.919000">byte-compile, native-compile if necessary, and then add all</span> <span class="audio-time caption" data-speaker="Amin" data-start="644.920000" data-stop="647.159000">of that stuff to the load-path automatically.</span> <span class="audio-time caption" data-speaker="Amin" data-start="647.160000" data-stop="647.999000">So you get that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="648.000000" data-stop="651.119000">Yeah, and then this is the bit about site-lisp that I</span> <span class="audio-time caption" data-speaker="Amin" data-start="651.120000" data-stop="651.879000">was talking about.</span> <span class="audio-time caption" data-speaker="Amin" data-start="651.880000" data-stop="653.879000">So if you want to use user-lisp, but you're still</span> <span class="audio-time caption" data-speaker="Amin" data-start="653.880000" data-stop="657.999000">using older Emacs versions that you maintain, you need</span> <span class="audio-time caption" data-speaker="Amin" data-start="658.000000" data-stop="660.719000">to maintain backward compatibility in your config.</span> <span class="audio-time caption" data-speaker="Amin" data-start="660.720000" data-stop="662.359000">This is how you do it, for example.</span> <span class="audio-time caption" data-speaker="Amin" data-start="662.360000" data-stop="666.239000">So you just yeah, add it to load-path, require it and</span> <span class="audio-time caption" data-speaker="Amin" data-start="666.240000" data-stop="668.079000">then call prepare-user-lisp.</span> <span class="audio-time caption" data-speaker="Amin" data-start="668.080000" data-stop="674.219000">That's about it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="674.000000">11:14</span> <strong>ignoring byte compilation warnings</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="674.220000" data-stop="676.279000"><strong class="speaker-name">Sacha:</strong> I'm picking up that tip about using the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="676.280000" data-stop="676.999000">ignore directories.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="677.000000" data-stop="679.679000">I'm getting by with just ignoring all of the byte</span> <span class="audio-time caption" data-speaker="Sacha" data-start="679.680000" data-stop="682.519000">compilation output, but it would be nice to just say,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="682.520000" data-stop="683.799000">you know, that stuff is test.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="683.800000" data-stop="686.639000">I don't need to worry about it.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="686.640000" data-stop="689.879000"><strong class="speaker-name">Amin:</strong> Right, right. Thanks. Yeah, I was also doing</span> <span class="audio-time caption" data-speaker="Amin" data-start="689.880000" data-stop="690.519000">that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="690.520000" data-stop="693.559000">I actually have it as a comment to suppress</span> <span class="audio-time caption" data-speaker="Amin" data-start="693.560000" data-stop="696.999000">warning types, like byte compilation, but I was…</span> <span class="audio-time caption" data-speaker="Amin" data-start="697.000000" data-stop="699.159000">I plan on working on some packages,</span> <span class="audio-time caption" data-speaker="Amin" data-start="699.160000" data-stop="700.199000">whether my own or others,</span> <span class="audio-time caption" data-speaker="Amin" data-start="700.200000" data-stop="702.079000">and it would still be helpful to get those warnings,</span> <span class="audio-time caption" data-speaker="Amin" data-start="702.080000" data-stop="704.399000">so I keep them enabled. It's still a bit annoying.</span> <span class="audio-time caption" data-speaker="Amin" data-start="704.400000" data-stop="706.279000">I still get some of them when I launch emacs</span> <span class="audio-time caption" data-speaker="Amin" data-start="706.280000" data-stop="710.479000">but I don't restart or launch emacs as frequently</span> <span class="audio-time caption" data-speaker="Amin" data-start="710.480000" data-stop="715.239000">so it's pretty bearable.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="715.000000">11:55</span> <strong>init-file-debug = &#45;&#45;debug-init
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0019.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0019.jpg" alt="image from video 00:12:00.400" data-time="00:12:00.400"></a><span class="audio-time caption" data-speaker="Amin" data-start="715.240000" data-stop="718.319000"><strong class="speaker-name">Amin:</strong> Yeah, and then I have the main init file.</span> <span class="audio-time caption" data-speaker="Amin" data-start="718.320000" data-stop="720.399000">And there's not much in it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="720.400000" data-stop="725.039000">It's just the debug-on-error and debug-on-quit.</span> <span class="audio-time caption" data-speaker="Amin" data-start="725.040000" data-stop="728.879000">So the debug-on-error thing, I set it to the value of</span> <span class="audio-time caption" data-speaker="Amin" data-start="728.880000" data-stop="729.999000">init-file-debug.</span> <span class="audio-time caption" data-speaker="Amin" data-start="730.000000" data-stop="733.519000">And if you look at that, the help for this variable,</span> <span class="audio-time caption" data-speaker="Amin" data-start="733.520000" data-stop="738.919000">basically if you pass or launch Emacs with</span> <span class="audio-time caption" data-speaker="Amin" data-start="738.920000" data-stop="743.039000">&#45;&#45;debug-init, this variable will be true.</span> <span class="audio-time caption" data-speaker="Amin" data-start="743.040000" data-stop="746.279000">So yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="746.280000" data-stop="746.879000"><strong class="speaker-name">Sacha:</strong> I did not know that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="746.880000" data-stop="748.933000">Cool.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="748.934000" data-stop="750.079000"><strong class="speaker-name">Amin:</strong> Yeah, it's pretty helpful.</span> <span class="audio-time caption" data-speaker="Amin" data-start="750.080000" data-stop="752.879000">I think, if I'm not mistaken, I took this from</span> <span class="audio-time caption" data-speaker="Amin" data-start="752.880000" data-stop="755.559000">John Wiegley's dotemacs, but I can't remember for sure.</span> <span class="audio-time caption" data-speaker="Amin" data-start="755.560000" data-stop="756.239000">It's been years.</span> <span class="audio-time caption" data-speaker="Amin" data-start="756.240000" data-stop="759.359000">Yeah, it's pretty nice.</span> <span class="audio-time caption" data-speaker="Amin" data-start="759.360000" data-stop="764.319000">And then here, I just set my name and email address.</span> <span class="audio-time caption" data-speaker="Amin" data-start="764.320000" data-stop="769.679000">And very early I set a custom-file to keep all of that</span> <span class="audio-time caption" data-speaker="Amin" data-start="769.680000" data-stop="771.959000">stuff separate from my .emacs.</span> <span class="audio-time caption" data-speaker="Amin" data-start="771.960000" data-stop="773.199000">I don't want it mixing in.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="773.000000">12:53</span> <strong>Core
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0020.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0020.jpg" alt="image from video 00:13:03.467" data-time="00:13:03.467"></a><span class="audio-time caption" data-speaker="Amin" data-start="773.200000" data-stop="776.359000"><strong class="speaker-name">Amin:</strong> And then pretty much the only other thing that's in my</span> <span class="audio-time caption" data-speaker="Amin" data-start="776.360000" data-stop="779.159000">main init file is just to require and load these</span> <span class="audio-time caption" data-speaker="Amin" data-start="779.160000" data-stop="783.439000">different modules or packages of my configuration.</span> <span class="audio-time caption" data-speaker="Amin" data-start="783.440000" data-stop="786.959000">I have these as actual packages or as actual features.</span> <span class="audio-time caption" data-speaker="Amin" data-start="786.960000" data-stop="788.599000">They provide themselves.</span> <span class="audio-time caption" data-speaker="Amin" data-start="788.600000" data-stop="790.999000">And that's just something that I've found</span> <span class="audio-time caption" data-speaker="Amin" data-start="791.000000" data-stop="792.519000">straightforward enough to do.</span> <span class="audio-time caption" data-speaker="Amin" data-start="792.520000" data-stop="796.879000">I know, for example, Prot uses a dual approach.</span> <span class="audio-time caption" data-speaker="Amin" data-start="796.880000" data-stop="800.519000">He has some of his configuration that's more readily</span> <span class="audio-time caption" data-speaker="Amin" data-start="800.520000" data-stop="802.879000">usable, available as actual packages.</span> <span class="audio-time caption" data-speaker="Amin" data-start="802.880000" data-stop="806.719000">And then the other ones, it's just Emacs Lisp code.</span> <span class="audio-time caption" data-speaker="Amin" data-start="806.720000" data-stop="808.119000">It's not actual packages.</span> <span class="audio-time caption" data-speaker="Amin" data-start="808.120000" data-stop="811.599000">But for me, I just keep it simple.</span> <span class="audio-time caption" data-speaker="Amin" data-start="811.600000" data-stop="816.779000">Everything as packages and that's about that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="816.780000" data-stop="817.479000"><strong class="speaker-name">Sacha:</strong> Fantastic.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="817.480000" data-stop="822.479000">Let's dive into some of those configuration modules.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="822.480000" data-stop="824.359000"><strong class="speaker-name">Amin:</strong> Sure, let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="824.360000" data-stop="828.119000">Yeah, so this there's this like core thing which is</span> <span class="audio-time caption" data-speaker="Amin" data-start="828.120000" data-stop="831.679000">kind of included gets included in all of my other</span> <span class="audio-time caption" data-speaker="Amin" data-start="831.680000" data-stop="833.579000">files.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="833.000000">13:53</span> <strong>no longer using bandali-configure; scoping errors, timing execution
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0021.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0021.jpg" alt="image from video 00:14:27.533" data-time="00:14:27.533"></a><span class="audio-time caption" data-speaker="Amin" data-start="833.580000" data-stop="837.199000"><strong class="speaker-name">Amin:</strong> I wrote a bandali-configure macro</span> <span class="audio-time caption" data-speaker="Amin" data-start="837.200000" data-stop="840.359000">shamelessly based on prot-emacs-configure which</span> <span class="audio-time caption" data-speaker="Amin" data-start="840.360000" data-stop="845.079000">is what Prot uses and it basically is a way of kind of</span> <span class="audio-time caption" data-speaker="Amin" data-start="845.080000" data-stop="847.919000">similar to use-package for like wrapping a bunch of</span> <span class="audio-time caption" data-speaker="Amin" data-start="847.920000" data-stop="851.399000">relevant like Emacs Lisp code all together.</span> <span class="audio-time caption" data-speaker="Amin" data-start="851.400000" data-stop="857.359000">It has the benefit, if you use it, if there is an</span> <span class="audio-time caption" data-speaker="Amin" data-start="857.360000" data-stop="862.279000">error in that block or in the body basically, then it</span> <span class="audio-time caption" data-speaker="Amin" data-start="862.280000" data-stop="863.559000">won't crash everything.</span> <span class="audio-time caption" data-speaker="Amin" data-start="863.560000" data-stop="866.959000">That body will just get ignored and we display an</span> <span class="audio-time caption" data-speaker="Amin" data-start="866.960000" data-stop="867.519000">error.</span> <span class="audio-time caption" data-speaker="Amin" data-start="867.520000" data-stop="870.799000">And that's also the main reason that Prot uses it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="870.800000" data-stop="875.439000">The one thing that I added extra to mine, which I took</span> <span class="audio-time caption" data-speaker="Amin" data-start="875.440000" data-stop="880.439000">with inspiration from Eshel Yaron's esy/init-step,</span> <span class="audio-time caption" data-speaker="Amin" data-start="880.440000" data-stop="887.879000">is to wrap it up in basically time the execution</span> <span class="audio-time caption" data-speaker="Amin" data-start="887.880000" data-stop="891.119000">of each of these blocks, which can be pretty helpful</span> <span class="audio-time caption" data-speaker="Amin" data-start="891.120000" data-stop="894.919000">to help you see, okay, which part of my configuration</span> <span class="audio-time caption" data-speaker="Amin" data-start="894.920000" data-stop="896.559000">is particularly slow.</span> <span class="audio-time caption" data-speaker="Amin" data-start="896.560000" data-stop="899.519000">Usage examples.</span> <span class="audio-time caption" data-speaker="Amin" data-start="899.520000" data-stop="900.799000">I just have it here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="900.800000" data-stop="904.799000">You can either basically pass it like a symbol like</span> <span class="audio-time caption" data-speaker="Amin" data-start="904.800000" data-stop="908.319000">thing or you can also pass in a string as the first</span> <span class="audio-time caption" data-speaker="Amin" data-start="908.320000" data-stop="909.239000">argument.</span> <span class="audio-time caption" data-speaker="Amin" data-start="909.240000" data-stop="912.479000">And this is what will be displayed when you display a</span> <span class="audio-time caption" data-speaker="Amin" data-start="912.480000" data-stop="916.919000">list of the evaluation times for all of these</span> <span class="audio-time caption" data-speaker="Amin" data-start="916.920000" data-stop="918.979000">blocks in your configuration.</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0022.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0022.jpg" alt="image from video 00:15:22.133" data-time="00:15:22.133"></a><span class="audio-time caption" data-speaker="Amin" data-start="918.980000" data-stop="922.119000"><strong class="speaker-name">Amin:</strong> Yeah, and then I have a neat little function</span> <span class="audio-time caption" data-speaker="Amin" data-start="922.120000" data-stop="924.719000">here like bandali-configure-report-times</span> <span class="audio-time caption" data-speaker="Amin" data-start="924.720000" data-stop="928.200000">that will report these times,</span> <span class="audio-time caption" data-speaker="Amin" data-start="928.201000" data-stop="929.600000">whether in the order that it's</span> <span class="audio-time caption" data-speaker="Amin" data-start="929.601000" data-stop="931.367000">encountered them, or you can have it</span> <span class="audio-time caption" data-speaker="Amin" data-start="931.368000" data-stop="933.600000">sort by fastest to slowest,</span> <span class="audio-time caption" data-speaker="Amin" data-start="933.601000" data-stop="936.399000">slowest to fastest, blah blah blah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="936.400000" data-stop="937.559000"><strong class="speaker-name">Sacha:</strong> You mentioned you're no longer using this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="937.560000" data-stop="941.439000">Is it because you wanted it to be easier to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="941.440000" data-stop="943.119000">copy and paste your code?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="943.120000" data-stop="945.639000">What got you to shift back to the regular vanilla type</span> <span class="audio-time caption" data-speaker="Sacha" data-start="945.640000" data-stop="947.640000">of configuration?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="947.680000" data-stop="953.279000"><strong class="speaker-name">Amin:</strong> Right, as neat as it is, I didn't find it</span> <span class="audio-time caption" data-speaker="Amin" data-start="953.280000" data-stop="956.959000">super useful. For one thing, because I don't add or</span> <span class="audio-time caption" data-speaker="Amin" data-start="956.960000" data-stop="960.999000">remove a ton of stuff to my Emacs configuration</span> <span class="audio-time caption" data-speaker="Amin" data-start="961.000000" data-stop="964.759000">regularly, so if there is an error, it wouldn't cause</span> <span class="audio-time caption" data-speaker="Amin" data-start="964.760000" data-stop="966.799000">an issue for the rest of my configuration. I didn't</span> <span class="audio-time caption" data-speaker="Amin" data-start="966.800000" data-stop="971.199000">really find that very useful.</span> <span class="audio-time caption" data-speaker="Amin" data-start="971.200000" data-stop="974.279000">And then my other potential concern is that the way I</span> <span class="audio-time caption" data-speaker="Amin" data-start="974.280000" data-stop="978.159000">was structuring things, I would put all of the</span> <span class="audio-time caption" data-speaker="Amin" data-start="978.160000" data-stop="981.079000">configuration, let's say for Gnus, in one of these</span> <span class="audio-time caption" data-speaker="Amin" data-start="981.080000" data-stop="981.799000">blocks.</span> <span class="audio-time caption" data-speaker="Amin" data-start="981.800000" data-stop="985.759000">But I wanted to be able to break that down into, for</span> <span class="audio-time caption" data-speaker="Amin" data-start="985.760000" data-stop="988.279000">example, Org Mode sections more easily.</span> <span class="audio-time caption" data-speaker="Amin" data-start="988.280000" data-stop="992.759000">So far, I just decided to not use it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="992.760000" data-stop="995.119000">I know I could technically break those down into</span> <span class="audio-time caption" data-speaker="Amin" data-start="995.120000" data-stop="998.559000">smaller blocks, but I haven't done that yet.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="998.560000" data-stop="1001.319000"><strong class="speaker-name">Sacha:</strong> Ihor says, this configure macro looks a lot</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1001.320000" data-stop="1003.599000">like good old use-package, which you're not even using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1003.600000" data-stop="1004.919000">in the rest of your config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1004.920000" data-stop="1007.519000">And I hear you about wanting to be able to split</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1007.520000" data-stop="1010.639000">things into smaller blocks with more explanations in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1010.640000" data-stop="1011.279000">between them.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1011.280000" data-stop="1013.719000">So in my config, yeah, sure, I've got the use-package</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1013.720000" data-stop="1015.799000">there to do the ensure and all that stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1015.800000" data-stop="1019.279000">But I also have with-eval-after-load because I still</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1019.280000" data-stop="1021.719000">want, you know, the links and the screenshots in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1021.720000" data-stop="1022.759000">between.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1022.000000">17:02</span> <strong>Why not use use-package</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="1022.760000" data-stop="1026.728000"><strong class="speaker-name">Amin:</strong> Right. Yeah, exactly. use-package is awesome.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1026.729000" data-stop="1028.791000">I have used that in the past,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1028.792000" data-stop="1031.479000">especially when I was using the straight.el</span> <span class="audio-time caption" data-speaker="Amin" data-start="1031.480000" data-stop="1035.999000">package manager. It pairs nicely with it. But yeah,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1036.000000" data-stop="1037.999000">since then, I found it a little bit like too magical</span> <span class="audio-time caption" data-speaker="Amin" data-start="1038.000000" data-stop="1041.279000">for my tastes, kind of along the lines of</span> <span class="audio-time caption" data-speaker="Amin" data-start="1041.280000" data-stop="1043.159000">declaring an init file bankruptcy at some point I</span> <span class="audio-time caption" data-speaker="Amin" data-start="1043.160000" data-stop="1044.279000">really wanted to</span> <span class="audio-time caption" data-speaker="Amin" data-start="1044.280000" data-stop="1047.039000">understand every single line that I have in my Emacs</span> <span class="audio-time caption" data-speaker="Amin" data-start="1047.040000" data-stop="1047.839000">configuration.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1047.840000" data-stop="1051.359000">And at the time, I didn't know a whole lot about</span> <span class="audio-time caption" data-speaker="Amin" data-start="1051.360000" data-stop="1053.999000">macros or wasn't very well-versed with them.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1054.000000" data-stop="1056.879000">So I just ditched it in favor of simply using, as you</span> <span class="audio-time caption" data-speaker="Amin" data-start="1056.880000" data-stop="1058.479000">mentioned, with-eval-after-load.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1058.480000" data-stop="1062.359000">And then that causes all that code to be basically</span> <span class="audio-time caption" data-speaker="Amin" data-start="1062.360000" data-stop="1065.279000">delayed, not evaluated immediately, but when that</span> <span class="audio-time caption" data-speaker="Amin" data-start="1065.280000" data-stop="1066.679000">package is loaded.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1066.680000" data-stop="1070.439000">And then as to when to pull that package in, depending</span> <span class="audio-time caption" data-speaker="Amin" data-start="1070.440000" data-stop="1072.879000">on if I want it right from the get-go of my Emacs</span> <span class="audio-time caption" data-speaker="Amin" data-start="1072.880000" data-stop="1074.319000">start, then I would require it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1074.320000" data-stop="1076.959000">Otherwise, I add this, as you also mentioned earlier,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1076.960000" data-stop="1080.119000">this kind of timer thing where if Emacs is idle for, I</span> <span class="audio-time caption" data-speaker="Amin" data-start="1080.120000" data-stop="1083.559000">don't know, 0.2 seconds or 0.4 seconds, then go ahead</span> <span class="audio-time caption" data-speaker="Amin" data-start="1083.560000" data-stop="1086.279000">and require this package.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1086.280000" data-stop="1087.479000"><strong class="speaker-name">Sacha:</strong> Ihor has a tip in the chat.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1087.480000" data-stop="1091.479000">Of course, Ihor has an Org way to do this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1091.480000" data-stop="1094.919000">He uses use-package whatever config and then he has a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1094.920000" data-stop="1097.439000">noweb reference to the Babel blocks.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1097.440000" data-stop="1103.279000">Then he just says :tangle no on the source blocks so</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1103.280000" data-stop="1104.799000">that they don't actually get repeated.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1104.800000" data-stop="1107.479000">Anyway, you can look at it later when you go through.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1107.480000" data-stop="1109.039000">I'll send you the comments or whatever.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1109.040000" data-stop="1111.119000">But show us how you're actually configuring things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1111.120000" data-stop="1117.819000">since you're not using this.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1117.000000">18:37</span> <strong>Defining multiple keybindings
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0023.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0023.jpg" alt="image from video 00:18:55.133" data-time="00:18:55.133"></a><span class="audio-time caption" data-speaker="Amin" data-start="1117.820000" data-stop="1119.067000"><strong class="speaker-name">Amin:</strong> Then I just have another</span> <span class="audio-time caption" data-speaker="Amin" data-start="1119.068000" data-stop="1122.479000">quick macro thingy here, bandali-define-keys, which</span> <span class="audio-time caption" data-speaker="Amin" data-start="1122.480000" data-stop="1127.759000">wraps around Emacs's define-key. It affords me the</span> <span class="audio-time caption" data-speaker="Amin" data-start="1127.760000" data-stop="1132.799000">convenience of defining multiple key bindings, and</span> <span class="audio-time caption" data-speaker="Amin" data-start="1132.800000" data-stop="1135.119000">Prot's version of this (I think it's</span> <span class="audio-time caption" data-speaker="Amin" data-start="1135.120000" data-stop="1140.239000">prot-emacs-keybind, or something like that) he</span> <span class="audio-time caption" data-speaker="Amin" data-start="1140.240000" data-stop="1145.399000">imposes the limitation that the keys should be valid</span> <span class="audio-time caption" data-speaker="Amin" data-start="1145.400000" data-stop="1148.199000">strings that can be passed to the kbd function,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1148.200000" data-stop="1152.639000">which is very fair and valid, but I wanted to not</span> <span class="audio-time caption" data-speaker="Amin" data-start="1152.640000" data-stop="1155.559000">impose that, to keep the flexibility of using</span> <span class="audio-time caption" data-speaker="Amin" data-start="1155.560000" data-stop="1158.079000">define-key directly.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1158.080000" data-stop="1163.119000">The consequences of that, as we can see, is we can</span> <span class="audio-time caption" data-speaker="Amin" data-start="1163.120000" data-stop="1165.599000">pass in the old representation of key bindings, like</span> <span class="audio-time caption" data-speaker="Amin" data-start="1165.600000" data-stop="1169.839000">the vector or whatever syntax, which Prot's doesn't</span> <span class="audio-time caption" data-speaker="Amin" data-start="1169.840000" data-stop="1172.479000">support by choice, whereas mine does.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1172.480000" data-stop="1175.799000">Let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1175.800000" data-stop="1182.279000">For example, let's look at the bandali-theme.el, which is</span> <span class="audio-time caption" data-speaker="Amin" data-start="1182.280000" data-stop="1182.719000">all about…</span> <span class="audio-time caption" data-speaker="Amin" data-start="1182.720000" data-stop="1185.899000">The appearance, I guess, of Emacs.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1185.000000">19:45</span> <strong>doric-oak uses emphasis instead of colours
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0024.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0024.jpg" alt="image from video 00:19:45.900" data-time="00:19:45.900"></a><span class="audio-time caption" data-speaker="Amin" data-start="1185.900000" data-stop="1188.119000"><strong class="speaker-name">Amin:</strong> Yeah, so I just have a conditional block where, you</span> <span class="audio-time caption" data-speaker="Amin" data-start="1188.120000" data-stop="1190.039000">know, if you're in a graphical environment, I'll just</span> <span class="audio-time caption" data-speaker="Amin" data-start="1190.040000" data-stop="1193.399000">go ahead and load Prot's doric-themes, specifically</span> <span class="audio-time caption" data-speaker="Amin" data-start="1193.400000" data-stop="1195.719000">doric-oak, which is what we're seeing right now.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1195.720000" data-stop="1199.079000">I'm using, it's very beautiful, it's very subtle, and</span> <span class="audio-time caption" data-speaker="Amin" data-start="1199.080000" data-stop="1202.159000">it uses emphasis, bolding and stuff to draw</span> <span class="audio-time caption" data-speaker="Amin" data-start="1202.160000" data-stop="1205.239000">your eye to something instead of using a million</span> <span class="audio-time caption" data-speaker="Amin" data-start="1205.240000" data-stop="1207.439000">different colours, which I find pretty nice.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1207.440000" data-stop="1214.039000">Yeah, and then for example here I set up some fonts.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1214.040000" data-stop="1217.319000">I use this Sahel font for Persian and Arabic</span> <span class="audio-time caption" data-speaker="Amin" data-start="1217.320000" data-stop="1217.759000">text.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1217.760000" data-stop="1223.359000">I set a colour emoji font here and this is like we get</span> <span class="audio-time caption" data-speaker="Amin" data-start="1223.360000" data-stop="1225.479000">a kind of preview of what I do.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1225.480000" data-stop="1228.279000">It's like with-eval-after-load 'faces and then blah</span> <span class="audio-time caption" data-speaker="Amin" data-start="1228.280000" data-stop="1230.139000">blah blah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1230.140000" data-stop="1231.536000"><strong class="speaker-name">Sacha:</strong> Ihor would like to point out that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1231.537000" data-stop="1233.841000">with-eval-after-load is also a macro</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1233.842000" data-stop="1235.399000">that calls another macro.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1235.400000" data-stop="1239.519000">So I'm just going to mention it because it's there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1239.520000" data-stop="1241.679000">These are your fonts.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1241.680000" data-stop="1243.879000">This is your theme.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1243.880000" data-stop="1246.799000">This is great because everyone always asks, what theme</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1246.800000" data-stop="1247.279000">is this?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1247.280000" data-stop="1248.159000">What font is this?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1248.160000" data-stop="1249.159000">All right.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1249.000000">20:49</span> <strong>global font scaling instead of the local ones
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0025.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0025.jpg" alt="image from video 00:20:59.967" data-time="00:20:59.967"></a><span class="audio-time caption" data-speaker="Sacha" data-start="1249.160000" data-stop="1252.159000"><strong class="speaker-name">Sacha:</strong> I like your text scaling tweaks that you're just about</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1252.160000" data-stop="1256.459000">to go into. You've changed the global mappings.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1256.460000" data-stop="1256.919000"><strong class="speaker-name">Amin:</strong> Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1256.920000" data-stop="1258.439000">And I actually took this from Prot as well.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1258.440000" data-stop="1259.959000">And it makes a lot more sense.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1259.960000" data-stop="1263.239000">So by default, this, C-x C-+, -,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1263.240000" data-stop="1265.759000">blah, blah, blah, it only scales the text</span> <span class="audio-time caption" data-speaker="Amin" data-start="1265.760000" data-stop="1267.679000">for the current buffer only.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1267.680000" data-stop="1272.839000">But in newer versions of Emacs, in Emacs 29, they also</span> <span class="audio-time caption" data-speaker="Amin" data-start="1272.840000" data-stop="1276.115000">added commands to adjust this globally, including</span> <span class="audio-time caption" data-speaker="Amin" data-start="1276.116000" data-stop="1277.866000">the mode line and all that stuff,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1277.867000" data-stop="1279.359000">which is usually what I want,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1279.360000" data-stop="1281.719000">for example, in this presentation or when I'm sharing</span> <span class="audio-time caption" data-speaker="Amin" data-start="1281.720000" data-stop="1282.559000">my screen right now.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1282.560000" data-stop="1284.479000">It scales everything up globally.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1284.480000" data-stop="1288.959000">So yeah, I just swapped these to be the default, and</span> <span class="audio-time caption" data-speaker="Amin" data-start="1288.960000" data-stop="1292.119000">then I add keybinds for the just local variants in</span> <span class="audio-time caption" data-speaker="Amin" data-start="1292.120000" data-stop="1296.359000">case I need to use that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1296.360000" data-stop="1297.119000">Yep.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1297.000000">21:37</span> <strong>display-fill-column-indicator</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="1297.120000" data-stop="1299.239000"><strong class="speaker-name">Amin:</strong> And then here I have display-fill-column-indicator.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1299.240000" data-stop="1302.559000">I don't know, maybe this is just me, but sometimes I'm</span> <span class="audio-time caption" data-speaker="Amin" data-start="1302.560000" data-stop="1305.519000">kind of OCD about keeping my text lined up at exactly,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1305.520000" data-stop="1309.079000">for example, the 70 characters column.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1309.080000" data-stop="1312.479000">I care a lot about that, especially if I'm writing</span> <span class="audio-time caption" data-speaker="Amin" data-start="1312.480000" data-stop="1316.479000">code or text that I want to also visually look nice.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1316.480000" data-stop="1317.999000">And I enable this.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1318.000000" data-stop="1322.399000">And let's see, I enable it for prog-mode.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1322.400000" data-stop="1328.439000">So yeah, I guess if I, for example, do this…</span> <span class="audio-time caption" data-speaker="Amin" data-start="1328.440000" data-stop="1331.159000">This little thin line that we see here, that's the</span> <span class="audio-time caption" data-speaker="Amin" data-start="1331.160000" data-stop="1333.559000">display filler column indicator.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1333.560000" data-stop="1337.159000">I used to have it globally enabled, but then I found</span> <span class="audio-time caption" data-speaker="Amin" data-start="1337.160000" data-stop="1340.239000">that a bit too much, so I just enable it with a hook</span> <span class="audio-time caption" data-speaker="Amin" data-start="1340.240000" data-stop="1342.759000">in the modes that I want.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1342.760000" data-stop="1345.033000"><strong class="speaker-name">Sacha:</strong> Yeah, and the theme makes it very subtle.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1345.034000" data-stop="1346.967000">It's just there as a reminder,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1346.968000" data-stop="1347.900000">don't go beyond this line.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1347.901000" data-stop="1351.367000">You can if you really want to, but just try not to.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1351.368000" data-stop="1359.579000"><strong class="speaker-name">Amin:</strong> Yeah, exactly. And then my essentials…</span> <span class="audio-time caption" data-speaker="Amin" data-start="1359.580000" data-stop="1362.999000">This is where I configure a lot of key</span> <span class="audio-time caption" data-speaker="Amin" data-start="1363.000000" data-stop="1366.439000">behaviours of Emacs, all built-in stuff for the most</span> <span class="audio-time caption" data-speaker="Amin" data-start="1366.440000" data-stop="1369.119000">part, or things that are key to my workflows.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1369.120000" data-stop="1372.119000">For example, I always want to start with a *scratch​*</span> <span class="audio-time caption" data-speaker="Amin" data-start="1372.120000" data-stop="1373.759000">buffer.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1373.000000">22:53</span> <strong>emacsclient for EDITOR and VISUAL
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0026.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0026.jpg" alt="image from video 00:22:53.767" data-time="00:22:53.767"></a><span class="audio-time caption" data-speaker="Amin" data-start="1373.760000" data-stop="1377.439000"><strong class="speaker-name">Amin:</strong> Start the Emacs server if it's not running.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1377.440000" data-stop="1381.599000">And this is very useful, very helpful so that then you</span> <span class="audio-time caption" data-speaker="Amin" data-start="1381.600000" data-stop="1384.959000">can call into an existing Emacs process with</span> <span class="audio-time caption" data-speaker="Amin" data-start="1384.960000" data-stop="1387.439000">emacsclient and have it edit a file.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1387.440000" data-stop="1390.079000">I don't use it for anything fancy just yet.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1390.080000" data-stop="1392.919000">I believe Prot also mentioned in his video with you,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1392.920000" data-stop="1396.239000">Sacha, that he uses it for things like org-capture to</span> <span class="audio-time caption" data-speaker="Amin" data-start="1396.240000" data-stop="1400.519000">spawn a new buffer in his existing Emacs session</span> <span class="audio-time caption" data-speaker="Amin" data-start="1400.520000" data-stop="1402.039000">and things like that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1402.040000" data-stop="1403.879000">You can do pretty cool things with it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1403.880000" data-stop="1408.519000">But yeah, I just use it for being able to easily use</span> <span class="audio-time caption" data-speaker="Amin" data-start="1408.520000" data-stop="1411.799000">my Emacs as EDITOR and VISUAL text editors.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1411.800000" data-stop="1417.759000">So yeah, this sets that up.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1417.000000">23:37</span> <strong>fundamental-mode-hook
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0027.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0027.jpg" alt="image from video 00:23:42.200" data-time="00:23:42.200"></a><span class="audio-time caption" data-speaker="Amin" data-start="1417.760000" data-stop="1418.719000"><strong class="speaker-name">Amin:</strong> Adding a fundamental mode hook.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1418.720000" data-stop="1420.619000">Again, I took this from Prot.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1420.620000" data-stop="1422.199000"><strong class="speaker-name">Sacha:</strong> I was surprised by that because I was like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1422.200000" data-stop="1424.519000">oh, there isn't a fundamental-mode-hook?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1424.520000" data-stop="1427.519000">Okay, that makes sense now.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1427.520000" data-stop="1429.067000"><strong class="speaker-name">Amin:</strong> Right, right.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1429.068000" data-stop="1432.319000">Yeah, there isn't a fundamental-mode-hook by design.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1432.320000" data-stop="1435.119000">But I still, in the past, have found that I wanted</span> <span class="audio-time caption" data-speaker="Amin" data-start="1435.120000" data-stop="1435.319000">that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1435.320000" data-stop="1437.959000">For example, for this display-fill-column-indicator,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1437.960000" data-stop="1440.319000">when I had it enabled everywhere, I was like, it would</span> <span class="audio-time caption" data-speaker="Amin" data-start="1440.320000" data-stop="1442.639000">be nice if I could at least disable it for Fundamental</span> <span class="audio-time caption" data-speaker="Amin" data-start="1442.640000" data-stop="1442.959000">mode.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1442.960000" data-stop="1444.399000">And at the time, I didn't have this.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1444.400000" data-stop="1445.999000">I added this just recently.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1446.000000" data-stop="1448.599000">So if I decide to go back to using something globally,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1448.600000" data-stop="1451.239000">but I don't want it in fundamental-mode, then I can</span> <span class="audio-time caption" data-speaker="Amin" data-start="1451.240000" data-stop="1453.919000">disable it using this.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1453.920000" data-stop="1458.359000">Yeah, and then some standard stuff like I prefer</span> <span class="audio-time caption" data-speaker="Amin" data-start="1458.360000" data-stop="1463.579000">spaces and a tab width of four characters.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1463.000000">24:23</span> <strong>indicate-buffer-boundaries
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0008.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0008.jpg" alt="image from video 00:22:02.433" data-time="00:22:02.433"></a><span class="audio-time caption" data-speaker="Amin" data-start="1463.580000" data-stop="1465.319000"><strong class="speaker-name">Amin:</strong> Visually indicate buffer boundaries.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1465.320000" data-stop="1468.801000">This is a little bit hard to see right now,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1468.802000" data-stop="1471.020000">but here at the bottom left</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0009.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0009.jpg" alt="image from video 00:22:02.433" data-time="00:22:02.433"></a><span class="audio-time caption" data-speaker="Amin" data-start="1471.021000" data-stop="1473.159000"><strong class="speaker-name">Amin:</strong> you see a little down arrow</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0012.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0012.jpg" alt="image from video 00:24:33.800" data-time="00:24:33.800"></a><span class="audio-time caption" data-speaker="Amin" data-start="1473.160000" data-stop="1474.799000"><strong class="speaker-name">Amin:</strong> and then the little top arrow.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1474.800000" data-stop="1481.619000">And… Let's see if I can.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1481.620000" data-stop="1484.319000"><strong class="speaker-name">Sacha:</strong> Oh!</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0010.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0010.jpg" alt="image from video 00:24:43.167" data-time="00:24:43.167"></a><span class="audio-time caption" data-speaker="Amin" data-start="1484.320000" data-stop="1486.559000"><strong class="speaker-name">Amin:</strong> And also here, for example, when it all fits</span> <span class="audio-time caption" data-speaker="Amin" data-start="1486.560000" data-stop="1487.239000">in the view.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1487.240000" data-stop="1489.759000"><strong class="speaker-name">Sacha:</strong> Huh, that is cool.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1489.760000" data-stop="1490.919000">I was looking at that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1490.920000" data-stop="1491.919000">What does it do?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1491.920000" data-stop="1494.799000">And so that tells you, you can still scroll up or you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1494.800000" data-stop="1497.039000">can still scroll down, and you don't have to look at</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1497.040000" data-stop="1498.799000">the scroll bar to see where you are.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1498.800000" data-stop="1501.679000">It just says there's more there.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1501.680000" data-stop="1503.399000"><strong class="speaker-name">Amin:</strong> Yeah, exactly.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1503.400000" data-stop="1503.839000">Yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1503.840000" data-stop="1506.359000">And it also helps distinguish when there's a newline</span> <span class="audio-time caption" data-speaker="Amin" data-start="1506.360000" data-stop="1508.119000">character at the end of the file or not.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1508.120000" data-stop="1509.799000">So here in this buffer, there is.</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0013.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0013.jpg" alt="image from video 00:25:10.533" data-time="00:25:10.533"></a><span class="audio-time caption" data-speaker="Amin" data-start="1509.800000" data-stop="1514.199000"><strong class="speaker-name">Amin:</strong> But if I delete that, you see this indicator here</span> <span class="audio-time caption" data-speaker="Amin" data-start="1514.200000" data-stop="1515.639000">changed shape.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1515.640000" data-stop="1518.479000">But if I go back and add the new line again.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1518.480000" data-stop="1521.639000">So yeah, that's also been very helpful for me because</span> <span class="audio-time caption" data-speaker="Amin" data-start="1521.640000" data-stop="1523.959000">I added configuration files and some of these pieces</span> <span class="audio-time caption" data-speaker="Amin" data-start="1523.960000" data-stop="1526.199000">of software are sensitive to having a new line at the</span> <span class="audio-time caption" data-speaker="Amin" data-start="1526.200000" data-stop="1526.959000">end of the file.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1526.960000" data-stop="1531.099000">So yeah, it's very helpful and useful for that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1531.100000" data-stop="1534.119000"><strong class="speaker-name">Sacha:</strong> I would not have guessed that from the very</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1534.120000" data-stop="1536.959000">short line in your config that turns that on.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1536.960000" data-stop="1538.678000">It's one line, (setq-default</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1538.679000" data-stop="1543.079000">indicate-buffer-boundaries 'left), and yet it adds this nice little</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1543.080000" data-stop="1546.219000">nuance to the way that fringe looks.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1546.220000" data-stop="1546.719000"><strong class="speaker-name">Amin:</strong> Right.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1546.720000" data-stop="1547.839000">Yeah, absolutely.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1547.840000" data-stop="1550.799000">Perhaps I should expand more on it at some point later</span> <span class="audio-time caption" data-speaker="Amin" data-start="1550.800000" data-stop="1552.399000">to explain these things.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1552.400000" data-stop="1554.859000">But yeah, just this one line.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1554.860000" data-stop="1559.059000"><strong class="speaker-name">Sacha:</strong> May I recommend screenshots?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1559.060000" data-stop="1560.519000"><strong class="speaker-name">Amin:</strong> Yes, you may, for sure. Yeah, I will</span> <span class="audio-time caption" data-speaker="Amin" data-start="1560.520000" data-stop="1564.959000">definitely do that as well,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1564.960000" data-stop="1567.067000">because I'm also a bit of a visual person.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1567.068000" data-stop="1568.733000">I like seeing screenshots and videos,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1568.734000" data-stop="1570.159000">so yeah I'll take that to heart</span> <span class="audio-time caption" data-speaker="Amin" data-start="1570.160000" data-stop="1572.299000">and do that for my own configuration as well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1572.300000" data-stop="1575.500000"><strong class="speaker-name">Sacha:</strong> When I post this, I'll probably… I figured</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1575.501000" data-stop="1578.033000">out how to have the transcripts and then screenshots</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1578.034000" data-stop="1579.433000">embedded into my transcript.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1579.434000" data-stop="1582.033000">I'll generate it automatically from the subtitle file.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1582.034000" data-stop="1584.633000">Our EmacsConf transcripts are going to get so fancy</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1584.634000" data-stop="1588.300000">next year. But you can pull those screenshots</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1588.301000" data-stop="1591.719000">and drop them into your config. It'll be great.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1591.720000" data-stop="1596.419000"><strong class="speaker-name">Amin:</strong> Nice. Yeah, for sure. Sounds good.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1596.000000">26:36</span> <strong>enabling and disabling commands
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0028.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0028.jpg" alt="image from video 00:26:36.433" data-time="00:26:36.433"></a><span class="audio-time caption" data-speaker="Amin" data-start="1596.420000" data-stop="1598.600000"><strong class="speaker-name">Amin:</strong> And then here, I just enable some of these</span> <span class="audio-time caption" data-speaker="Amin" data-start="1598.601000" data-stop="1600.733000">commands that are disabled by default.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1600.734000" data-stop="1605.800000">So yeah, it's useful, especially narrow-to-page,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1605.801000" data-stop="1607.267000">for example, or narrow-to-region.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1607.268000" data-stop="1609.433000">These are commands where Emacs disables them</span> <span class="audio-time caption" data-speaker="Amin" data-start="1609.434000" data-stop="1612.833000">by default so that newcomers</span> <span class="audio-time caption" data-speaker="Amin" data-start="1612.834000" data-stop="1615.100000">don't accidentally hit them and get very</span> <span class="audio-time caption" data-speaker="Amin" data-start="1615.101000" data-stop="1617.133000">confused by what just happened.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1617.134000" data-stop="1619.500000">It doesn't disable them for good.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1619.501000" data-stop="1621.733000">It just basically prompts you for confirmation.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1621.734000" data-stop="1624.267000">Are you sure you want to run this command?</span> <span class="audio-time caption" data-speaker="Amin" data-start="1624.268000" data-stop="1626.900000">I'm sure, at least about these commands.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1626.901000" data-stop="1628.167000">So I just enable them.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1628.168000" data-stop="1631.233000">And then something like, for example, overwrite-mode,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1631.234000" data-stop="1632.800000">which I never use</span> <span class="audio-time caption" data-speaker="Amin" data-start="1632.801000" data-stop="1634.267000">and I don't want to accidentally enable.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1634.268000" data-stop="1636.667000">I just put it disabled so that if I do accidentally</span> <span class="audio-time caption" data-speaker="Amin" data-start="1636.668000" data-stop="1639.300000">hit the keys, which might be, I don't know, something</span> <span class="audio-time caption" data-speaker="Amin" data-start="1639.301000" data-stop="1643.000000">insert or whatever, then it will prompt me</span> <span class="audio-time caption" data-speaker="Amin" data-start="1643.001000" data-stop="1645.899000">to make sure that I meant to do that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1645.900000" data-stop="1648.233000"><strong class="speaker-name">Sacha:</strong> That reminds me, I should probably turn that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1648.234000" data-stop="1650.833000">off for myself and then you get a whole new keyboard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1650.834000" data-stop="1653.979000">shortcut you can use too.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1653.980000" data-stop="1656.933000"><strong class="speaker-name">Amin:</strong> Right, yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1656.934000" data-stop="1657.879000">Let's see.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1657.000000">27:37</span> <strong>package-review-policy
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0029.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0029.jpg" alt="image from video 00:27:37.900" data-time="00:27:37.900"></a><span class="audio-time caption" data-speaker="Amin" data-start="1657.880000" data-stop="1662.999000"><strong class="speaker-name">Amin:</strong> Yeah, I have just one line setting for package.el.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1663.000000" data-stop="1666.279000">In Emacs 31, we will be getting a package-review-policy</span> <span class="audio-time caption" data-speaker="Amin" data-start="1666.280000" data-stop="1667.439000">which is very helpful.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1667.440000" data-stop="1670.479000">So if you do use package.el for installing packages</span> <span class="audio-time caption" data-speaker="Amin" data-start="1670.480000" data-stop="1674.159000">from GNU ELPA, NonGNU ELPA, MELPA or whatever else,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1674.160000" data-stop="1676.359000">you can enable this, and then whenever you update your</span> <span class="audio-time caption" data-speaker="Amin" data-start="1676.360000" data-stop="1680.679000">packages, you'll get a diff of what changed in this</span> <span class="audio-time caption" data-speaker="Amin" data-start="1680.680000" data-stop="1683.719000">new revision of the package that you're downloading</span> <span class="audio-time caption" data-speaker="Amin" data-start="1683.720000" data-stop="1685.519000">and you're about to enable.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1685.520000" data-stop="1688.039000">And you can presumably say yes or</span> <span class="audio-time caption" data-speaker="Amin" data-start="1688.040000" data-stop="1691.579000">at least see what's going on, which I'd find helpful.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1691.580000" data-stop="1693.759000"><strong class="speaker-name">Sacha:</strong> But you're not using packages, you mentioned,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1693.760000" data-stop="1700.919000">so you're just checking everything out and then you're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1700.920000" data-stop="1701.979000">just git pulling whenever you feel like it.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1701.980000" data-stop="1704.239000"><strong class="speaker-name">Amin:</strong> Yeah, so right now I'm using git pulls and git</span> <span class="audio-time caption" data-speaker="Amin" data-start="1704.240000" data-stop="1706.079000">submodules, very manual.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1706.080000" data-stop="1709.999000">I put this here because I think it's generally a very</span> <span class="audio-time caption" data-speaker="Amin" data-start="1710.000000" data-stop="1713.679000">welcome change and awesome new feature that I want to</span> <span class="audio-time caption" data-speaker="Amin" data-start="1713.680000" data-stop="1714.959000">spread the word about.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1714.960000" data-stop="1718.239000">So maybe someone who's looking at my config, they use</span> <span class="audio-time caption" data-speaker="Amin" data-start="1718.240000" data-stop="1720.159000">package and that's perfectly fine.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1720.160000" data-stop="1722.199000">So this is just here to spread the word about it</span> <span class="audio-time caption" data-speaker="Amin" data-start="1722.200000" data-stop="1723.159000">mainly, I guess.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1723.160000" data-stop="1725.439000">And if I start using package at some point myself in</span> <span class="audio-time caption" data-speaker="Amin" data-start="1725.440000" data-stop="1730.839000">the future, then I will have this enabled.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1730.840000" data-stop="1732.760000">Let's see.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1732.000000">28:52</span> <strong>getting the Info files from the Emacs source directory
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0030.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0030.jpg" alt="image from video 00:28:52.800" data-time="00:28:52.800"></a><span class="audio-time caption" data-speaker="Amin" data-start="1732.800000" data-stop="1738.239000"><strong class="speaker-name">Amin:</strong> Very quickly, here I extend Info-directory-list.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1738.240000" data-stop="1741.919000">I like to, at least on some of my machines,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1741.920000" data-stop="1745.399000">use Emacs that I built from source directly in the</span> <span class="audio-time caption" data-speaker="Amin" data-start="1745.400000" data-stop="1748.599000">source repository of Emacs.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1748.600000" data-stop="1752.639000">Just after doing make, I don't run make install,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1752.640000" data-stop="1754.919000">even though it's very easy to do that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1754.920000" data-stop="1757.919000">You can install to a custom location by providing</span> <span class="audio-time caption" data-speaker="Amin" data-start="1757.920000" data-stop="1760.399000">&#45;&#45;prefix when you're ./configure-ing Emacs.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1760.400000" data-stop="1762.999000">Sometimes I just find it more convenient for me to not</span> <span class="audio-time caption" data-speaker="Amin" data-start="1763.000000" data-stop="1766.039000">do that and just run make and then exit and reopen</span> <span class="audio-time caption" data-speaker="Amin" data-start="1766.040000" data-stop="1766.959000">Emacs.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1766.960000" data-stop="1770.245000">And for that kind of a setup, I just extend the</span> <span class="audio-time caption" data-speaker="Amin" data-start="1770.246000" data-stop="1773.879000">Info-directory-list to include the info subdirectory of the</span> <span class="audio-time caption" data-speaker="Amin" data-start="1773.880000" data-stop="1777.359000">Emacs source repository so that the built-in Emacs</span> <span class="audio-time caption" data-speaker="Amin" data-start="1777.360000" data-stop="1785.119000">info manuals will be available to me.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1785.000000">29:45</span> <strong>recentf, adding directories
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0031.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0031.jpg" alt="image from video 00:29:46.600" data-time="00:29:46.600"></a><span class="audio-time caption" data-speaker="Amin" data-start="1785.120000" data-stop="1786.600000"><strong class="speaker-name">Amin:</strong> And then I use recentf</span> <span class="audio-time caption" data-speaker="Amin" data-start="1786.601000" data-stop="1792.039000">for tracking recent revisited files.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1792.040000" data-stop="1794.560000">I bind it to C-c f r e</span> <span class="audio-time caption" data-speaker="Amin" data-start="1794.600000" data-stop="1800.239000">for me to get a pop-up completion for visiting a</span> <span class="audio-time caption" data-speaker="Amin" data-start="1800.240000" data-stop="1803.759000">recent file, it has completion.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1803.760000" data-stop="1808.079000">So if I hit TAB here, for example, we can see some of</span> <span class="audio-time caption" data-speaker="Amin" data-start="1808.080000" data-stop="1811.499000">these files or directories that I visited recently.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1811.500000" data-stop="1813.200000"><strong class="speaker-name">Sacha:</strong> I see.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1813.201000" data-stop="1816.399000">And then you're adding the directory to it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1816.400000" data-stop="1819.519000">So what does that let you do?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1819.520000" data-stop="1821.999000">Because I'm assuming you're already in there in the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1822.000000" data-stop="1822.759000">directory.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1822.760000" data-stop="1826.819000">But how does that change your recentf?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1826.820000" data-stop="1830.279000"><strong class="speaker-name">Amin:</strong> Right. So I need to think to remember this,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1830.280000" data-stop="1834.239000">but I think the point of this was that if I</span> <span class="audio-time caption" data-speaker="Amin" data-start="1834.240000" data-stop="1839.759000">open a project in VC or in Dired, then I</span> <span class="audio-time caption" data-speaker="Amin" data-start="1839.760000" data-stop="1843.039000">would like that directory to also get added to my</span> <span class="audio-time caption" data-speaker="Amin" data-start="1843.040000" data-stop="1846.719000">recentf files list, because I think by default,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1846.720000" data-stop="1854.399000">recentf only includes files, not directories.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1854.400000" data-stop="1857.319000"><strong class="speaker-name">Sacha:</strong> You're in it, you start up Magit or whatever,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1857.320000" data-stop="1860.079000">and then you move on to something else, but you want</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1860.080000" data-stop="1863.339000">to be able to easily go back to it.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1863.340000" data-stop="1866.239000"><strong class="speaker-name">Amin:</strong> Yeah, for example, I like to keep my recently</span> <span class="audio-time caption" data-speaker="Amin" data-start="1866.240000" data-stop="1869.159000">visited directories in recentf as well.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1869.160000" data-stop="1871.759000">Because that's one of the main ways I jump between</span> <span class="audio-time caption" data-speaker="Amin" data-start="1871.760000" data-stop="1874.159000">projects and stuff, even though there is literally a</span> <span class="audio-time caption" data-speaker="Amin" data-start="1874.160000" data-stop="1876.319000">built-in Emacs project mode, which I still use.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1876.320000" data-stop="1879.919000">The only thing that I have here is…</span> <span class="audio-time caption" data-speaker="Amin" data-start="1879.920000" data-stop="1885.879000">I don't want to add my home directory to the recently</span> <span class="audio-time caption" data-speaker="Amin" data-start="1885.880000" data-stop="1889.599000">visited list, so the only thing that this function</span> <span class="audio-time caption" data-speaker="Amin" data-start="1889.600000" data-stop="1894.319000">does is to skip that if I'm opening the home directory.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1894.320000" data-stop="1898.439000">That's about it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1898.000000">31:38</span> <strong>Scrolling
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0033.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0033.jpg" alt="image from video 00:32:10.933" data-time="00:32:10.933"></a><span class="audio-time caption" data-speaker="Amin" data-start="1898.440000" data-stop="1901.759000"><strong class="speaker-name">Amin:</strong> And then here I configure mouse and scrolling behaviour.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1901.760000" data-stop="1907.159000">So I want Emacs to scroll very gently, one line at a</span> <span class="audio-time caption" data-speaker="Amin" data-start="1907.160000" data-stop="1907.679000">time.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1907.680000" data-stop="1910.679000">I think the default is that when you reach the end of</span> <span class="audio-time caption" data-speaker="Amin" data-start="1910.680000" data-stop="1913.799000">the page, it'll jump half a page down and then</span> <span class="audio-time caption" data-speaker="Amin" data-start="1913.800000" data-stop="1914.439000">recenter.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1914.440000" data-stop="1917.999000">I don't remember default behaviour because I don't use</span> <span class="audio-time caption" data-speaker="Amin" data-start="1918.000000" data-stop="1921.599000">it very much, but yeah, this basically makes it</span> <span class="audio-time caption" data-speaker="Amin" data-start="1921.600000" data-stop="1923.919000">very predictable. For example, when I reach</span> <span class="audio-time caption" data-speaker="Amin" data-start="1923.920000" data-stop="1927.039000">the edge of the page here and I press C-n,</span> <span class="audio-time caption" data-speaker="Amin" data-start="1927.040000" data-stop="1930.919000">it'll only scroll one line at a time, instead of</span> <span class="audio-time caption" data-speaker="Amin" data-start="1930.920000" data-stop="1933.399000">jumping and then doing something like</span> <span class="audio-time caption" data-speaker="Amin" data-start="1933.400000" data-stop="1934.800000">this.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1934.801000" data-stop="1937.359000"><strong class="speaker-name">Sacha:</strong> Oh yeah, mine does! Mine doesn't do that, so</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1937.360000" data-stop="1939.879000">it does that jumping thing. I see what you mean</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1939.880000" data-stop="1942.200000">here. Interesting.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1942.201000" data-stop="1945.599000"><strong class="speaker-name">Amin:</strong> Yeah, so you can tweak that with scroll-conservatively</span> <span class="audio-time caption" data-speaker="Amin" data-start="1945.600000" data-stop="1948.599000">and then scroll-preserve-screen-position, I believe.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1948.000000">32:28</span> <strong>auto revert
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0034.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0034.jpg" alt="image from video 00:32:37.733" data-time="00:32:37.733"></a><span class="audio-time caption" data-speaker="Amin" data-start="1948.600000" data-stop="1956.239000"><strong class="speaker-name">Amin:</strong> Yeah, and then I use autorevert, which is pretty</span> <span class="audio-time caption" data-speaker="Amin" data-start="1956.240000" data-stop="1957.719000">helpful.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1957.720000" data-stop="1961.239000">So this will have Emacs watch, for example, files that</span> <span class="audio-time caption" data-speaker="Amin" data-start="1961.240000" data-stop="1963.679000">are open in your buffers.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1963.680000" data-stop="1966.799000">And if they change on disk, Emacs will automatically</span> <span class="audio-time caption" data-speaker="Amin" data-start="1966.800000" data-stop="1969.959000">refresh the buffer so that you get the latest version.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1969.960000" data-stop="1973.199000">The cool thing is you can press undo in one of these</span> <span class="audio-time caption" data-speaker="Amin" data-start="1973.200000" data-stop="1976.119000">files that's been autoreverted so that you get the</span> <span class="audio-time caption" data-speaker="Amin" data-start="1976.120000" data-stop="1978.959000">revision that was there right before the change.</span> <span class="audio-time caption" data-speaker="Amin" data-start="1978.960000" data-stop="1983.139000">So I've used that sometimes as well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1983.140000" data-stop="1985.919000"><strong class="speaker-name">Sacha:</strong> Yeah, and sometimes autofollow also is nice</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1985.920000" data-stop="1988.119000">for log files and things like that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1988.120000" data-stop="1992.519000">But yeah, autoreverting is great.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="1992.520000" data-stop="1994.059000"><strong class="speaker-name">Amin:</strong> Yeah, for sure.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1994.000000">33:14</span> <strong>Repeat mode
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0035.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0035.jpg" alt="image from video 00:33:14.067" data-time="00:33:14.067"></a><span class="audio-time caption" data-speaker="Amin" data-start="1994.060000" data-stop="1996.959000"><strong class="speaker-name">Amin:</strong> repeat-mode is something that I've only recently</span> <span class="audio-time caption" data-speaker="Amin" data-start="1996.960000" data-stop="2000.639000">started using, especially with my Emacs EXWM setup,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2000.640000" data-stop="2002.959000">using Emacs as my window manager.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2002.960000" data-stop="2006.599000">For example, if I hit C-x o, we see here in the</span> <span class="audio-time caption" data-speaker="Amin" data-start="2006.600000" data-stop="2011.319000">echo area where it says repeat with o or capital O. So</span> <span class="audio-time caption" data-speaker="Amin" data-start="2011.320000" data-stop="2015.159000">I can now only press o instead of saying C-x o,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2015.160000" data-stop="2019.319000">C-x o to do that multiple times.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2019.320000" data-stop="2023.559000">Keymaps that have support for this basically indicate</span> <span class="audio-time caption" data-speaker="Amin" data-start="2023.560000" data-stop="2027.919000">that they want to be repeatable can declare that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2027.920000" data-stop="2031.439000">And then once you invoke one of the keys in those</span> <span class="audio-time caption" data-speaker="Amin" data-start="2031.440000" data-stop="2034.279000">keymaps, then you can repeat it with just that single</span> <span class="audio-time caption" data-speaker="Amin" data-start="2034.280000" data-stop="2035.039000">character.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2035.040000" data-stop="2037.879000">And for example, for my setup, I have that with my</span> <span class="audio-time caption" data-speaker="Amin" data-start="2037.880000" data-stop="2041.359000">EXWM workspace switching keys.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2041.360000" data-stop="2045.599000">So I can easily go to the next and previous</span> <span class="audio-time caption" data-speaker="Amin" data-start="2045.600000" data-stop="2048.519000">workspaces, many of them at a time by just pressing p</span> <span class="audio-time caption" data-speaker="Amin" data-start="2048.520000" data-stop="2053.399000">and n instead of doing the shortcut multiple times.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2053.400000" data-stop="2056.479000"><strong class="speaker-name">Sacha:</strong> And actually, if you don't mind jumping</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2056.480000" data-stop="2060.679000">ahead, the EXWM part of your config is fairly complex,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2060.680000" data-stop="2065.439000">and I think not a lot of people have a lot of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2065.440000" data-stop="2067.599000">experience seeing EXWM in action.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2067.600000" data-stop="2071.039000">And I don't know whether you're comfortable sharing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2071.040000" data-stop="2073.439000">you switching around to different workspaces, but if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2073.440000" data-stop="2075.839000">that is something that you can do, how are you doing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2075.840000" data-stop="2078.719000">all this awesomeness?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2078.720000" data-stop="2083.479000">I'm still too scared to use EXWM myself.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2083.480000" data-stop="2084.359000">Stability.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2084.360000" data-stop="2091.319000">But that's a me problem, not an EXWM problem.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2091.000000">34:51</span> <strong>EXWM
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0036.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0036.jpg" alt="image from video 00:35:26.600" data-time="00:35:26.600"></a><span class="audio-time caption" data-speaker="Amin" data-start="2091.320000" data-stop="2093.799000"><strong class="speaker-name">Amin:</strong> Yeah, EXWM was pretty awesome.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2093.800000" data-stop="2097.519000">I used it back in 2018, '19 for a while, and then I</span> <span class="audio-time caption" data-speaker="Amin" data-start="2097.520000" data-stop="2100.079000">kind of moved on to Sway and Wayland.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2100.080000" data-stop="2102.159000">But I don't know.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2102.160000" data-stop="2104.759000">It's something that I feel like once you try it, you</span> <span class="audio-time caption" data-speaker="Amin" data-start="2104.760000" data-stop="2106.479000">want to keep going back to it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2106.480000" data-stop="2110.639000">So recently, this past month or so, I decided to give</span> <span class="audio-time caption" data-speaker="Amin" data-start="2110.640000" data-stop="2114.679000">it an earnest try and try to actually address any pain</span> <span class="audio-time caption" data-speaker="Amin" data-start="2114.680000" data-stop="2116.039000">points that I've noticed.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2116.040000" data-stop="2118.919000">So it's much more usable for me now, and I'm sticking</span> <span class="audio-time caption" data-speaker="Amin" data-start="2118.920000" data-stop="2119.479000">with it for now.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2119.480000" data-stop="2122.359000">I'm not a Wayland hater, but I'm just saying, at least</span> <span class="audio-time caption" data-speaker="Amin" data-start="2122.360000" data-stop="2124.039000">for now, I'm using EXWM.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2124.040000" data-stop="2126.599000">And I'm happy to talk about it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2126.600000" data-stop="2128.599000"><strong class="speaker-name">Sacha:</strong> OK, what do you love about your setup for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2128.600000" data-stop="2130.939000">that one?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2130.940000" data-stop="2132.319000"><strong class="speaker-name">Amin:</strong> EXWM?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2132.320000" data-stop="2135.199000"><strong class="speaker-name">Sacha:</strong> Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2135.200000" data-stop="2136.599000">Like, you're doing a lot of rename buffers.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2136.600000" data-stop="2139.199000">Yeah, yeah, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2139.200000" data-stop="2140.399000"><strong class="speaker-name">Amin:</strong> Right.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2140.400000" data-stop="2141.159000">Yeah, let me think.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2141.160000" data-stop="2142.199000">There's a couple of things.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2142.200000" data-stop="2145.559000">So, for the longest time, my Emacs EXWM configuration</span> <span class="audio-time caption" data-speaker="Amin" data-start="2145.560000" data-stop="2148.959000">used super key as a prefix,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2148.960000" data-stop="2151.719000">which is the Windows [key] or the one with the</span> <span class="audio-time caption" data-speaker="Amin" data-start="2151.720000" data-stop="2155.159000">logo, basically, to switch workspaces, launch</span> <span class="audio-time caption" data-speaker="Amin" data-start="2155.160000" data-stop="2156.239000">applications and such.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2156.240000" data-stop="2162.719000">And at least the way that EXWM is right now, it</span> <span class="audio-time caption" data-speaker="Amin" data-start="2162.720000" data-stop="2163.319000">doesn't…</span> <span class="audio-time caption" data-speaker="Amin" data-start="2163.320000" data-stop="2167.559000">Like the way you have to add those global key bindings</span> <span class="audio-time caption" data-speaker="Amin" data-start="2167.560000" data-stop="2171.839000">kind of slows down the EXWM startup.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2171.840000" data-stop="2173.599000">And I had many such key bindings.</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0037.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0037.jpg" alt="image from video 00:36:16.467" data-time="00:36:16.467"></a><span class="audio-time caption" data-speaker="Amin" data-start="2173.600000" data-stop="2176.439000"><strong class="speaker-name">Amin:</strong> So one thing that I did kind of recently is to</span> <span class="audio-time caption" data-speaker="Amin" data-start="2176.440000" data-stop="2184.799000">define a prefix map here, like bandali-prefix-exwm-map.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2184.800000" data-stop="2189.039000">So I bind all of the keys and commands that I want</span> <span class="audio-time caption" data-speaker="Amin" data-start="2189.040000" data-stop="2193.399000">here, and then this helps me really minimize what I'm</span> <span class="audio-time caption" data-speaker="Amin" data-start="2193.400000" data-stop="2195.439000">telling EXWM, which is here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2195.440000" data-stop="2199.319000">For example, this is how you set global keys with</span> <span class="audio-time caption" data-speaker="Amin" data-start="2199.320000" data-stop="2204.639000">EXWM, and I just point it to my prefix map.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2204.640000" data-stop="2207.759000">C-c x and then any of those letters and</span> <span class="audio-time caption" data-speaker="Amin" data-start="2207.760000" data-stop="2208.679000">functions that we saw.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2208.680000" data-stop="2211.679000">That's kind of annoying.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2211.680000" data-stop="2217.439000">I still use the super key here, but I have it s-x</span> <span class="audio-time caption" data-speaker="Amin" data-start="2217.440000" data-stop="2218.639000">and s-,.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2218.640000" data-stop="2222.319000">On the left-hand side of my keyboard, x is right next</span> <span class="audio-time caption" data-speaker="Amin" data-start="2222.320000" data-stop="2226.279000">to super, so I can hit it in one go with one motion</span> <span class="audio-time caption" data-speaker="Amin" data-start="2226.280000" data-stop="2228.639000">almost as a single key with these two fingers.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2228.640000" data-stop="2231.460000">On the right side of my keyboard,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2231.461000" data-stop="2233.109000">I don't have a super key,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2233.110000" data-stop="2236.279000">but I have a control key that I remapped to super.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2236.280000" data-stop="2241.079000">On the right side, I do s-, with these two</span> <span class="audio-time caption" data-speaker="Amin" data-start="2241.080000" data-stop="2242.719000">fingers.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2242.720000" data-stop="2248.359000">It's still very convenient for me to invoke those</span> <span class="audio-time caption" data-speaker="Amin" data-start="2248.360000" data-stop="2249.079000">commands.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2249.080000" data-stop="2253.399000">And pairing this up with repeat-mode, as we can see</span> <span class="audio-time caption" data-speaker="Amin" data-start="2253.400000" data-stop="2257.879000">just here, actually, then I can hit s-, and</span> <span class="audio-time caption" data-speaker="Amin" data-start="2257.880000" data-stop="2262.319000">then p, n, or h, j, k, l many times to switch</span> <span class="audio-time caption" data-speaker="Amin" data-start="2262.320000" data-stop="2266.559000">workspaces or shift focus to different windows and</span> <span class="audio-time caption" data-speaker="Amin" data-start="2266.560000" data-stop="2269.919000">stuff without having to hit that kind of annoying</span> <span class="audio-time caption" data-speaker="Amin" data-start="2269.920000" data-stop="2273.599000">s-x or s-, repeatedly.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2273.600000" data-stop="2278.319000">Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2278.320000" data-stop="2279.199000"><strong class="speaker-name">Sacha:</strong> That sounds really cool.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2279.200000" data-stop="2280.279000">I should look into that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2280.280000" data-stop="2282.999000">Sorry, quick aside.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2283.000000">38:03</span> <strong>Audio setup</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2283.000000" data-stop="2285.559000"><strong class="speaker-name">Sacha:</strong> @blaiseutube would like to compliment you on your awesome</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2285.560000" data-stop="2286.359000">audio setup.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2286.360000" data-stop="2287.479000">It sounds like you're in the room with him.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2287.480000" data-stop="2290.039000">Apparently, I sound like I'm on speakerphone, but your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2290.040000" data-stop="2292.879000">audio setup is top-notch, apparently.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2292.880000" data-stop="2296.759000">But that looks like a Blue Yeti, so I have to find out</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2296.760000" data-stop="2298.159000">what's going on.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2298.160000" data-stop="2300.919000">What microphone are you using?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2300.920000" data-stop="2302.159000"><strong class="speaker-name">Amin:</strong> It is indeed a Blue Yeti.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2302.160000" data-stop="2303.079000"><strong class="speaker-name">Sacha:</strong> Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2303.080000" data-stop="2305.399000">So I just have to ask him for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2305.400000" data-stop="2307.079000">okay, what kind of boom mic?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2307.080000" data-stop="2309.159000">Anyway, we'll do that all offline because it's not</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2309.160000" data-stop="2312.399000">Emacs related.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2312.400000" data-stop="2313.919000"><strong class="speaker-name">Amin:</strong> Yeah, it's just the Blue Yeti.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2313.920000" data-stop="2316.279000">Yeah, I turned down the gain.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2316.280000" data-stop="2319.599000">I used to have gain higher, but then it picks up</span> <span class="audio-time caption" data-speaker="Amin" data-start="2319.600000" data-stop="2321.599000">more noise from around the room or around</span> <span class="audio-time caption" data-speaker="Amin" data-start="2321.600000" data-stop="2322.439000">the house.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2322.440000" data-stop="2325.759000">So I turned down the gain a lot and then I get</span> <span class="audio-time caption" data-speaker="Amin" data-start="2325.760000" data-stop="2328.639000">close to the mic so that it only captures my voice.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2328.640000" data-stop="2330.759000">Okay.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2330.760000" data-stop="2332.239000"><strong class="speaker-name">Sacha:</strong> I'm gonna need the boom.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2332.240000" data-stop="2334.119000">Otherwise, I'm squished into that corner.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2334.120000" data-stop="2334.679000">All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2334.680000" data-stop="2337.599000">So you were doing repeat-map before I said oh,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2337.600000" data-stop="2340.879000">let's talk about EXWM because you've got cool stuff</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2340.880000" data-stop="2343.079000">there.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2343.080000" data-stop="2346.599000"><strong class="speaker-name">Amin:</strong> Yeah, and I can continue talking about the EXWM.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2346.600000" data-stop="2350.279000">There's a lot here.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2350.000000">39:10</span> <strong>keymaps for launching different applications</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="2350.280000" data-stop="2355.399000"><strong class="speaker-name">Amin:</strong> I have, let's see, s-, SPC.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2355.400000" data-stop="2357.719000">I bind it to async-shell-command to use as my</span> <span class="audio-time caption" data-speaker="Amin" data-start="2357.720000" data-stop="2360.399000">simple, little, dmenu-thing for</span> <span class="audio-time caption" data-speaker="Amin" data-start="2360.400000" data-stop="2361.639000">launching applications.</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0039.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0039.jpg" alt="image from video 00:39:11.767" data-time="00:39:11.767"></a><span class="audio-time caption" data-speaker="Amin" data-start="2361.640000" data-stop="2364.959000"><strong class="speaker-name">Amin:</strong> Some of these things, like browsers, I still</span> <span class="audio-time caption" data-speaker="Amin" data-start="2364.960000" data-stop="2367.119000">do them frequently enough, and I use different</span> <span class="audio-time caption" data-speaker="Amin" data-start="2367.120000" data-stop="2368.119000">browser profiles.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2368.120000" data-stop="2374.999000">So I just define a new keymap so I can basically one-shot</span> <span class="audio-time caption" data-speaker="Amin" data-start="2375.000000" data-stop="2378.439000">launch Chromium or Firefox in a specific browser [profile] or an</span> <span class="audio-time caption" data-speaker="Amin" data-start="2378.440000" data-stop="2379.999000">incognito window and such.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2380.000000" data-stop="2384.359000">So yeah, I just do s-x b and then, for example, c</span> <span class="audio-time caption" data-speaker="Amin" data-start="2384.360000" data-stop="2386.039000">to launch Chromium and all that stuff.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2386.040000" data-stop="2389.299000">So I found this pretty convenient.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2389.000000">39:49</span> <strong>bandali-call-interactively-insert
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0040.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0040.jpg" alt="image from video 00:40:57.567" data-time="00:40:57.567"></a><span class="audio-time caption" data-speaker="Amin" data-start="2389.300000" data-stop="2395.639000"><strong class="speaker-name">Amin:</strong> Speaking of key bindings, before I get down this,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2395.640000" data-stop="2401.999000">let's see if I can find… C-c h.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2402.000000" data-stop="2405.239000">I think this is just before my EXWM setup.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2405.240000" data-stop="2407.839000">I'm pretty proud of this.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2407.840000" data-stop="2409.079000">I love this.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2409.080000" data-stop="2412.759000">It really goes to show how awesome Emacs is and</span> <span class="audio-time caption" data-speaker="Amin" data-start="2412.760000" data-stop="2414.199000">extensible it is.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2414.200000" data-stop="2416.039000">Let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2416.040000" data-stop="2419.799000">So as we know, these various help commands and</span> <span class="audio-time caption" data-speaker="Amin" data-start="2419.800000" data-stop="2422.319000">describe commands are under C-h prefix.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2422.320000" data-stop="2423.879000">But some of them are not bound,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2423.880000" data-stop="2426.679000">for example, find-library or describe-face.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2426.680000" data-stop="2429.519000">Some of these I use pretty frequently.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2429.520000" data-stop="2433.309000">I was really having trouble coming up with</span> <span class="audio-time caption" data-speaker="Amin" data-start="2433.310000" data-stop="2435.174000">descriptive-enough keybindings</span> <span class="audio-time caption" data-speaker="Amin" data-start="2435.175000" data-stop="2438.439000">or short-enough keybindings for all of them.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2438.440000" data-stop="2441.839000">I put some of them here, for example, like</span> <span class="audio-time caption" data-speaker="Amin" data-start="2441.840000" data-stop="2443.559000">C-c f l for find-library.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2443.560000" data-stop="2447.319000">But I can't do that for all of them.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2447.320000" data-stop="2451.239000">What I did was just do C-c h a or C-c h d.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2451.240000" data-stop="2456.839000">What this will do is basically, if I show that,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2456.840000" data-stop="2461.279000">It basically opens up M-x, fills in describe-,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2461.280000" data-stop="2465.366000">and then I can just type, for example, face,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2465.367000" data-stop="2466.079000">and that's it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2466.080000" data-stop="2468.839000">So it basically opens up the minibuffer for me,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2468.840000" data-stop="2471.759000">pre-fills it with the string that I want, and I can</span> <span class="audio-time caption" data-speaker="Amin" data-start="2471.760000" data-stop="2473.959000">type what is it that I'm looking for.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2473.960000" data-stop="2475.319000">And I found this to be</span> <span class="audio-time caption" data-speaker="Amin" data-start="2475.320000" data-stop="2478.999000">better than trying to bind a million different</span> <span class="audio-time caption" data-speaker="Amin" data-start="2479.000000" data-stop="2480.719000">keyboard things for describe this and that,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2480.720000" data-stop="2483.359000">apropos this and that, find this and that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2483.360000" data-stop="2487.439000">So yeah and the way that we do that is to just use</span> <span class="audio-time caption" data-speaker="Amin" data-start="2487.440000" data-stop="2490.679000">a minibuffer-with-setup-hook, and you just have a</span> <span class="audio-time caption" data-speaker="Amin" data-start="2490.680000" data-stop="2492.319000">little lambda to insert the string that you give</span> <span class="audio-time caption" data-speaker="Amin" data-start="2492.320000" data-stop="2496.279000">it, and then you invoke it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2496.280000" data-stop="2497.479000"><strong class="speaker-name">Sacha:</strong> Yeah, this is pretty cool.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2497.480000" data-stop="2499.599000">When I saw that in your config, I was like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2499.600000" data-stop="2501.132000">I'm going to steal that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2501.133000" data-stop="2502.380000">Pre-filling the minibuffer</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2502.381000" data-stop="2504.119000">but still letting you do stuff with it,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2504.120000" data-stop="2506.879000">it's such a powerful thing, not just for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2506.880000" data-stop="2509.359000">completing the command itself, but even for when</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2509.360000" data-stop="2510.934000">you're using the command,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2510.935000" data-stop="2513.741000">but you want to do something with the input before.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2513.742000" data-stop="2515.871000">You don't want to do it all the way,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2515.872000" data-stop="2517.679000">send it in and submit right away.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2517.680000" data-stop="2520.199000">You want to actually do something with it after you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2520.200000" data-stop="2521.239000">insert it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2521.240000" data-stop="2522.779000">So great tip.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2522.780000" data-stop="2524.119000"><strong class="speaker-name">Amin:</strong> Yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2524.120000" data-stop="2524.719000">Thanks.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2524.720000" data-stop="2525.879000">Yeah, it's pretty useful.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2525.880000" data-stop="2527.479000">It's pretty nice.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2527.480000" data-stop="2527.959000">Yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2527.960000" data-stop="2531.359000">And then back to the Emacs or EXWM stuff.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2531.360000" data-stop="2538.039000">So before I had, I used to yeah, sorry, go ahead.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2538.040000" data-stop="2540.279000"><strong class="speaker-name">Sacha:</strong> Sorry.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2540.280000" data-stop="2541.933000">I forgot whether I was muted or unmuted.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2541.934000" data-stop="2546.719000"><strong class="speaker-name">Amin:</strong> Okay, no worries.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2546.000000">42:26</span> <strong>workspaces
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0041.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0041.jpg" alt="image from video 00:42:56.600" data-time="00:42:56.600"></a><span class="audio-time caption" data-speaker="Amin" data-start="2546.720000" data-stop="2549.639000"><strong class="speaker-name">Amin:</strong> For the longest time, I had 10 default</span> <span class="audio-time caption" data-speaker="Amin" data-start="2549.640000" data-stop="2553.199000">EXWM workspaces on startup, and that can slow</span> <span class="audio-time caption" data-speaker="Amin" data-start="2553.200000" data-stop="2555.399000">things down a little bit.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2555.400000" data-stop="2559.679000">So I found that okay, I don't really use</span> <span class="audio-time caption" data-speaker="Amin" data-start="2559.680000" data-stop="2561.079000">all 10 workspaces always.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2561.080000" data-stop="2562.999000">So I set it to 5.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2563.000000" data-stop="2564.879000">So I get five workspaces initially.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2564.880000" data-stop="2568.439000">But I still bind keys here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2568.440000" data-stop="2569.879000">Like if we go down.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2569.880000" data-stop="2573.839000">Let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2573.840000" data-stop="2574.639000">Here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2574.640000" data-stop="2579.999000">So here, I define those keys for all the way from,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2580.000000" data-stop="2583.599000">let's say, from 0 to 9 for all 10.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2583.600000" data-stop="2586.479000">And then if I try to switch to a workspace that</span> <span class="audio-time caption" data-speaker="Amin" data-start="2586.480000" data-stop="2589.479000">doesn't exist, then EXWM will just go ahead and</span> <span class="audio-time caption" data-speaker="Amin" data-start="2589.480000" data-stop="2590.759000">create it for me.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2590.760000" data-stop="2594.279000">Yeah, so I found that pretty cool.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2594.280000" data-stop="2595.839000">You can create workspaces on the fly.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2595.840000" data-stop="2599.219000">Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2599.220000" data-stop="2601.239000"><strong class="speaker-name">Sacha:</strong> Yeah, and I saw that it moves your current</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2601.240000" data-stop="2602.159000">window there, too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2602.160000" data-stop="2603.719000">So that's just like, OK.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2603.720000" data-stop="2606.359000">Let's move it to workspace number two or whatever.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2606.360000" data-stop="2608.699000">Very cool.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2608.700000" data-stop="2609.119000"><strong class="speaker-name">Amin:</strong> Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2609.120000" data-stop="2611.879000">I have keys or convenience keys for moving</span> <span class="audio-time caption" data-speaker="Amin" data-start="2611.880000" data-stop="2613.079000">some window to some workspace.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2613.080000" data-stop="2614.399000">Yeah, it's nice.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2614.400000" data-stop="2616.199000">Let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2616.200000" data-stop="2616.559000">Let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2616.560000" data-stop="2617.519000">Yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2617.520000" data-stop="2619.839000">So these are just made key bindings.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2619.840000" data-stop="2626.379000">I use hjkl here for switching windows.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2626.000000">43:46</span> <strong>ZSA Voyager split keyboard, super x as a single key
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0042.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0042.jpg" alt="image from video 00:45:46.167" data-time="00:45:46.167"></a><span class="audio-time caption" data-speaker="Amin" data-start="2626.380000" data-stop="2630.439000"><strong class="speaker-name">Amin:</strong> I also have a ZSA Voyager split</span> <span class="audio-time caption" data-speaker="Amin" data-start="2630.440000" data-stop="2633.079000">ergonomic keyboard.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2633.080000" data-stop="2639.239000">I can basically customize it infinitely.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2639.240000" data-stop="2642.839000">For example, I don't really have a super key on the</span> <span class="audio-time caption" data-speaker="Amin" data-start="2642.840000" data-stop="2643.479000">first layer.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2643.480000" data-stop="2646.559000">What I have is a key that will do the s-x thingy,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2646.560000" data-stop="2649.119000">basically, my prefix.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2649.120000" data-stop="2652.279000">So that's the last missing piece is that if I'm</span> <span class="audio-time caption" data-speaker="Amin" data-start="2652.280000" data-stop="2654.959000">at home and if I have this keyboard with me, then I</span> <span class="audio-time caption" data-speaker="Amin" data-start="2654.960000" data-stop="2657.079000">just hit one key and then that's it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2657.080000" data-stop="2658.679000">I'm in my prefix.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2658.680000" data-stop="2661.479000">But even if not, on the laptop, the s-x or the</span> <span class="audio-time caption" data-speaker="Amin" data-start="2661.480000" data-stop="2664.279000">super comma are still easy enough for me to hit</span> <span class="audio-time caption" data-speaker="Amin" data-start="2664.280000" data-stop="2666.619000">it with one hand.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2666.620000" data-stop="2668.799000"><strong class="speaker-name">Sacha:</strong> Now I'm jealous and I definitely want</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2668.800000" data-stop="2671.759000">to assign my prefixes to their own keys.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2671.760000" data-stop="2672.319000">Very tempting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2672.320000" data-stop="2674.999000">I've started using the numpad because my laptop has</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2675.000000" data-stop="2675.879000">one.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2675.880000" data-stop="2679.679000">I only use the numpad rarely, but we all need more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2679.680000" data-stop="2682.679000">keys.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2682.680000" data-stop="2685.039000"><strong class="speaker-name">Amin:</strong> Yeah, ergonomic keyboards are pretty nice,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2685.040000" data-stop="2688.479000">especially these ones. For example, the ZSA ones where</span> <span class="audio-time caption" data-speaker="Amin" data-start="2688.480000" data-stop="2692.879000">you can put QMK on it, the QMK firmware. You can</span> <span class="audio-time caption" data-speaker="Amin" data-start="2692.880000" data-stop="2699.239000">define keys in a C file. I can actually show that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2699.240000" data-stop="2716.239000">Let's see… QMK Firmware, Keyboards, ZSA,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2716.240000" data-stop="2726.519000">Voyager, Bandali, and then keymap.c.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2726.520000" data-stop="2732.619000"><strong class="speaker-name">Sacha:</strong> Is this in your repository somewhere?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2732.620000" data-stop="2734.959000"><strong class="speaker-name">Amin:</strong> Right. It's in a different repository, but it's</span> <span class="audio-time caption" data-speaker="Amin" data-start="2734.960000" data-stop="2738.319000">still on https://git.kelar.org next to my configs</span> <span class="audio-time caption" data-speaker="Amin" data-start="2738.320000" data-stop="2744.399000">repository. You can find this as well, but if I go</span> <span class="audio-time caption" data-speaker="Amin" data-start="2744.400000" data-stop="2746.159000">smaller…</span> <span class="audio-time caption" data-speaker="Amin" data-start="2746.160000" data-stop="2750.279000">Yeah, you can define keys here and have different</span> <span class="audio-time caption" data-speaker="Amin" data-start="2750.280000" data-stop="2751.639000">layers, like the base layer.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2751.640000" data-stop="2754.959000">And then you can define a key to switch between</span> <span class="audio-time caption" data-speaker="Amin" data-start="2754.960000" data-stop="2758.039000">different layers and put some of the keys there anyway.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2758.040000" data-stop="2762.479000">So yeah, it's a whole rabbit hole in and of itself.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2762.480000" data-stop="2765.639000">Prot also uses a split ergonomic keyboard.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2765.640000" data-stop="2768.759000">It really does help if you're typing for long</span> <span class="audio-time caption" data-speaker="Amin" data-start="2768.760000" data-stop="2770.639000">periods of time.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2770.640000" data-stop="2775.159000">I actually had these for a while, and I wasn't using</span> <span class="audio-time caption" data-speaker="Amin" data-start="2775.160000" data-stop="2778.039000">them too much, but I started slowly getting some pain</span> <span class="audio-time caption" data-speaker="Amin" data-start="2778.040000" data-stop="2779.679000">in my wrists and here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2779.680000" data-stop="2782.639000">So I was like, okay, I have the keyboard,</span> <span class="audio-time caption" data-speaker="Amin" data-start="2782.640000" data-stop="2784.959000">might as well put it to good use, and I've started</span> <span class="audio-time caption" data-speaker="Amin" data-start="2784.960000" data-stop="2786.839000">using it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2786.000000">46:26</span> <strong>Keybindings
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0043.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0043.jpg" alt="image from video 00:46:53.767" data-time="00:46:53.767"></a><span class="audio-time caption" data-speaker="Sacha" data-start="2786.840000" data-stop="2788.839000"><strong class="speaker-name">Sacha:</strong> Okay, so most of your keyboard shortcuts come</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2788.840000" data-stop="2793.319000">off that kind of s-x or C-c something, and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2793.320000" data-stop="2796.759000">then you have a long prefix sequence, and you just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2796.760000" data-stop="2799.759000">remember everything or you use your…</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2799.760000" data-stop="2804.959000">pre-fill some of it and then fill in the rest of the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2804.960000" data-stop="2810.859000">command.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2810.860000" data-stop="2813.759000"><strong class="speaker-name">Amin:</strong> Pretty much all my window management related</span> <span class="audio-time caption" data-speaker="Amin" data-start="2813.760000" data-stop="2818.079000">keys are on this s-x prefix that I'm showing here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2818.080000" data-stop="2822.119000">And then I have a few other ones which I think I</span> <span class="audio-time caption" data-speaker="Amin" data-start="2822.120000" data-stop="2822.679000">showed earlier.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2822.680000" data-stop="2824.879000">Is it this one?</span> <span class="audio-time caption" data-speaker="Amin" data-start="2824.880000" data-stop="2828.679000">Anyway, I bind a few general keys outside of the</span> <span class="audio-time caption" data-speaker="Amin" data-start="2828.680000" data-stop="2832.600000">s-x thing, like C-c e i.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2832.601000" data-stop="2837.033000">For example, I have C-c e e for eval-last-sexp.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2837.034000" data-stop="2839.367000">I do that a lot, so it's easy to hit that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2839.368000" data-stop="2843.379000">Making frames or deleting frames.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2843.380000" data-stop="2846.633000"><strong class="speaker-name">Sacha:</strong> I love how Emacs uptime is something you use</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2846.634000" data-stop="2851.379000">frequently enough that you have a keyboard shortcut for it.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2851.380000" data-stop="2852.233000"><strong class="speaker-name">Amin:</strong> Yeah, of course.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2852.234000" data-stop="2854.100000">I mean, I'm sometimes curious to see how long has my</span> <span class="audio-time caption" data-speaker="Amin" data-start="2854.101000" data-stop="2862.019000">Emacs session been running.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2862.020000" data-stop="2864.559000">To continue with the EXWM stuff, let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2864.560000" data-stop="2869.559000">This is just some keybindings I define here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2869.560000" data-stop="2871.399000">It's all Emacs Lisp, right?</span> <span class="audio-time caption" data-speaker="Amin" data-start="2871.400000" data-stop="2872.119000">It's amazing.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2872.120000" data-stop="2875.119000">You can mapc over whatever sequence and create</span> <span class="audio-time caption" data-speaker="Amin" data-start="2875.120000" data-stop="2877.519000">keybindings like that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2877.520000" data-stop="2879.999000">Only with Emacs we can do things like that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2880.000000" data-stop="2882.359000">I just love it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2882.360000" data-stop="2885.040000">Let's see.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2885.000000">48:05</span> <strong>Media buttons
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0044.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0044.jpg" alt="image from video 00:48:36.200" data-time="00:48:36.200"></a><span class="audio-time caption" data-speaker="Amin" data-start="2885.080000" data-stop="2888.079000"><strong class="speaker-name">Amin:</strong> I still keep these three other keys for raising and</span> <span class="audio-time caption" data-speaker="Amin" data-start="2888.080000" data-stop="2892.799000">lowering the volume and toggling mute off of that</span> <span class="audio-time caption" data-speaker="Amin" data-start="2892.800000" data-stop="2896.879000">prefix and just directly on my keyboard, hitting it</span> <span class="audio-time caption" data-speaker="Amin" data-start="2896.880000" data-stop="2901.359000">directly in the exwm-input-global-keys because I do</span> <span class="audio-time caption" data-speaker="Amin" data-start="2901.360000" data-stop="2904.279000">that very, very frequently.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2904.280000" data-stop="2906.599000">But I also have scripts that I can invoke.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2906.600000" data-stop="2910.239000">I should do keycast.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2910.240000" data-stop="2916.179000">So yeah, I can</span> <span class="audio-time caption" data-speaker="Amin" data-start="2916.180000" data-stop="2917.639000">invoke the prefix with semicolon.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2917.640000" data-stop="2921.919000">I can set my volume here, adjust it here, type in what</span> <span class="audio-time caption" data-speaker="Amin" data-start="2921.920000" data-stop="2927.039000">volume I want, or with the single quote, I can enter a</span> <span class="audio-time caption" data-speaker="Amin" data-start="2927.040000" data-stop="2929.079000">value for the screen brightness.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2929.080000" data-stop="2931.359000">I like these things to be exact depending on the</span> <span class="audio-time caption" data-speaker="Amin" data-start="2931.360000" data-stop="2932.039000">lighting in the room.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2932.040000" data-stop="2938.039000">I have preferred brightness values of 50 or 12 or 10</span> <span class="audio-time caption" data-speaker="Amin" data-start="2938.040000" data-stop="2940.039000">that I manually adjust.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2940.040000" data-stop="2944.999000">I guess it's a poor man's version of having something</span> <span class="audio-time caption" data-speaker="Amin" data-start="2945.000000" data-stop="2948.959000">with a light sensor that can pick up and adjust</span> <span class="audio-time caption" data-speaker="Amin" data-start="2948.960000" data-stop="2951.599000">automatically.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2951.600000" data-stop="2952.279000">I do it manually.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2952.280000" data-stop="2952.959000">Yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2952.960000" data-stop="2957.179000">Sorry, you just muted yourself again.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2957.180000" data-stop="2959.799000"><strong class="speaker-name">Sacha:</strong> You're just probably this close to writing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2959.800000" data-stop="2962.119000">the Emacs Lisp that takes your webcam image and then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2962.120000" data-stop="2962.879000">adjusts your light.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2962.880000" data-stop="2965.639000">But I think Prot was also saying he likes to do the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2965.640000" data-stop="2967.999000">lighting changes manually as well because warmer</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2968.000000" data-stop="2970.439000">colors versus cooler colors and all of that stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2970.440000" data-stop="2972.839000">Anyway, so you have all these buttons that EXWM</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2972.840000" data-stop="2976.639000">listens to and it can launch various things for.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2976.640000" data-stop="2981.899000">That's a lot of things.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="2981.900000" data-stop="2983.279000"><strong class="speaker-name">Amin:</strong> Yeah, those are pretty cool.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2983.000000">49:43</span> <strong>exwm-input-simulation-keys!
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0045.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0045.jpg" alt="image from video 00:50:08.267" data-time="00:50:08.267"></a><span class="audio-time caption" data-speaker="Amin" data-start="2983.280000" data-stop="2985.959000"><strong class="speaker-name">Amin:</strong> EXWM has this lovely feature called input</span> <span class="audio-time caption" data-speaker="Amin" data-start="2985.960000" data-stop="2987.239000">simulation keys where</span> <span class="audio-time caption" data-speaker="Amin" data-start="2987.240000" data-stop="2990.439000">You can basically use it to bring Emacs key bindings</span> <span class="audio-time caption" data-speaker="Amin" data-start="2990.440000" data-stop="2993.799000">to other applications like Firefox or whatever.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2993.800000" data-stop="2995.959000">And yeah, it's mind blowing when you try it for the</span> <span class="audio-time caption" data-speaker="Amin" data-start="2995.960000" data-stop="2996.639000">first time.</span> <span class="audio-time caption" data-speaker="Amin" data-start="2996.640000" data-stop="3000.719000">for example, I bind C-b to just hit</span> <span class="audio-time caption" data-speaker="Amin" data-start="3000.720000" data-stop="3002.879000">the left arrow on the keyboard.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3002.880000" data-stop="3004.999000">And it does that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3005.000000" data-stop="3008.239000">So I can define all of these commands that I'm using</span> <span class="audio-time caption" data-speaker="Amin" data-start="3008.240000" data-stop="3010.279000">or used to using in Emacs.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3010.280000" data-stop="3014.279000">So I can get them in Firefox or other applications as</span> <span class="audio-time caption" data-speaker="Amin" data-start="3014.280000" data-stop="3014.519000">well.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3014.520000" data-stop="3016.959000">Realistically, it's mostly Firefox.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3016.960000" data-stop="3019.319000">It's the only other program that I spend any</span> <span class="audio-time caption" data-speaker="Amin" data-start="3019.320000" data-stop="3021.159000">reasonable amount of time outside of Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3021.197000" data-stop="3024.199000"><strong class="speaker-name">Sacha:</strong> Let me point out this very important one that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3024.200000" data-stop="3025.039000">you have there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3025.040000" data-stop="3028.239000">Under selection/cut/copy/paste, I see a C-w</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3028.240000" data-stop="3030.519000">input simulation key.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3030.520000" data-stop="3033.079000">So this is for all the people who have accidentally</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3033.080000" data-stop="3036.079000">closed their browser tab while trying to copy text.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3036.080000" data-stop="3038.239000">This is how you solve that problem.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3038.240000" data-stop="3041.879000">Use EXWM and use EXWM input simulation keys and you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3041.880000" data-stop="3045.599000">don't have to accidentally close your browser tabs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3045.600000" data-stop="3046.439000">again.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3046.440000" data-stop="3049.039000">@blaiseutube asks, hey, what about time since last save?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3049.040000" data-stop="3051.319000">Or do you have some kind of autosave magic?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3051.320000" data-stop="3055.399000">you know, in reference to the uptime thing,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3055.400000" data-stop="3056.119000">right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3056.120000" data-stop="3064.679000">You have this thing that shows you…</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3064.680000" data-stop="3065.359000"><strong class="speaker-name">Amin:</strong> I don't think I have anything for autosave,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3065.360000" data-stop="3072.079000">but I have this habit of… I save everything pretty</span> <span class="audio-time caption" data-speaker="Amin" data-start="3072.080000" data-stop="3073.239000">regularly.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3073.240000" data-stop="3075.359000">Yeah, so I've never really needed that feature, but</span> <span class="audio-time caption" data-speaker="Amin" data-start="3075.360000" data-stop="3078.199000">I'm sure Emacs has something where you can, at the</span> <span class="audio-time caption" data-speaker="Amin" data-start="3078.200000" data-stop="3081.239000">very least, just very dumb, simple implementation of</span> <span class="audio-time caption" data-speaker="Amin" data-start="3081.240000" data-stop="3084.519000">has it been idle for one minute, then just do a save</span> <span class="audio-time caption" data-speaker="Amin" data-start="3084.520000" data-stop="3085.599000">buffer.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3085.600000" data-stop="3087.759000">You can roll your own.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3087.760000" data-stop="3089.999000">But I don't have anything.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3090.000000" data-stop="3090.360000"><strong class="speaker-name">Sacha:</strong> All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3090.401000" data-stop="3094.359000">I'm getting really tempted now to try out EXWM, even</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3094.360000" data-stop="3097.919000">if it's just for those global keyboard remapping</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3097.920000" data-stop="3099.339000">things.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3099.000000">51:39</span> <strong>exwm: managing floating windows
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0046.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0046.jpg" alt="image from video 00:51:43.100" data-time="00:51:43.100"></a><span class="audio-time caption" data-speaker="Sacha" data-start="3099.340000" data-stop="3103.079000"><strong class="speaker-name">Sacha:</strong> How is it for windows that you've got to have floating?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3103.080000" data-stop="3106.559000">I feel like it's very good at handling tiling things,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3106.560000" data-stop="3109.599000">but how is it for sometimes the apps kind of really</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3109.600000" data-stop="3112.439000">want the floating window?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3112.440000" data-stop="3114.879000"><strong class="speaker-name">Amin:</strong> Right, yeah, so you can toggle any window to</span> <span class="audio-time caption" data-speaker="Amin" data-start="3114.880000" data-stop="3118.279000">be floating or not, and you can also - actually, we're</span> <span class="audio-time caption" data-speaker="Amin" data-start="3118.280000" data-stop="3121.359000">just looking at it here. EXWM manage configurations,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3121.360000" data-stop="3126.039000">to match on the instance name or the class name of a</span> <span class="audio-time caption" data-speaker="Amin" data-start="3126.040000" data-stop="3130.199000">window that you can get from xprop, to automatically</span> <span class="audio-time caption" data-speaker="Amin" data-start="3130.200000" data-stop="3134.959000">make that tiling. For example, if I do my prefix and</span> <span class="audio-time caption" data-speaker="Amin" data-start="3134.960000" data-stop="3138.159000">then capital T, it launches a floating terminal for me</span> <span class="audio-time caption" data-speaker="Amin" data-start="3138.160000" data-stop="3141.039000">here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3141.040000" data-stop="3145.839000">And if I go back to where I set it up, I just launch</span> <span class="audio-time caption" data-speaker="Amin" data-start="3145.840000" data-stop="3147.719000">Xterm with the -name argument.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3147.720000" data-stop="3150.159000">This is where it can set the instance.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3150.160000" data-stop="3152.759000">And I just put any string you can want, like floating,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3152.760000" data-stop="3153.359000">for example.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3153.360000" data-stop="3157.399000">And then here in my configuration, I just check that</span> <span class="audio-time caption" data-speaker="Amin" data-start="3157.400000" data-stop="3160.079000">if the instance name is floating, then I'll go ahead</span> <span class="audio-time caption" data-speaker="Amin" data-start="3160.080000" data-stop="3161.519000">and float the window.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3161.520000" data-stop="3163.919000">Simple as that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3163.920000" data-stop="3165.639000"><strong class="speaker-name">Sacha:</strong> All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3165.640000" data-stop="3169.879000">This is starting to look exceedingly tempting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3169.880000" data-stop="3173.839000">Lol, I save everything regularly, so he's one of those</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3173.840000" data-stop="3180.639000">people who compulsively hit C-x C-s.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3180.640000" data-stop="3181.639000"><strong class="speaker-name">Amin:</strong> Yeah, I do that a lot.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3181.640000" data-stop="3182.239000">I don't know.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3182.240000" data-stop="3182.999000">It's just me.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3183.000000" data-stop="3184.759000">But, yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3184.760000" data-stop="3185.239000">Yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3185.240000" data-stop="3189.399000">And then, I don't know.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3189.400000" data-stop="3190.999000">EXWM is awesome.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3191.000000">53:11</span> <strong>exwm: application-specific local simulation keys
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0047.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0047.jpg" alt="image from video 00:53:11.000" data-time="00:53:11.000"></a><span class="audio-time caption" data-speaker="Amin" data-start="3191.000000" data-stop="3193.879000"><strong class="speaker-name">Amin:</strong> You can also put local simulation keys,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3193.880000" data-stop="3196.999000">application-specific simulation keys, depending</span> <span class="audio-time caption" data-speaker="Amin" data-start="3197.000000" data-stop="3199.999000">on, the application, terminals, for</span> <span class="audio-time caption" data-speaker="Amin" data-start="3200.000000" data-stop="3201.559000">example, or, Zathura.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3201.560000" data-stop="3203.079000">This is a PDF viewer.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3203.080000" data-stop="3208.759000">To have application-specific custom key bindings,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3208.760000" data-stop="3209.999000">how cool is that?</span> <span class="audio-time caption" data-speaker="Amin" data-start="3210.000000" data-stop="3213.199000">For example, if I'm in Xterm or something like the</span> <span class="audio-time caption" data-speaker="Amin" data-start="3213.200000" data-stop="3217.879000">Mate terminal, hitting C-c C-c twice basically,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3217.880000" data-stop="3220.919000">it'll just send the C-c key to the terminal.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3220.920000" data-stop="3223.879000">Because one thing with EXWM is that you can set it to</span> <span class="audio-time caption" data-speaker="Amin" data-start="3223.880000" data-stop="3227.639000">capture a couple of Emacs prefixes, like C-x or</span> <span class="audio-time caption" data-speaker="Amin" data-start="3227.640000" data-stop="3228.079000">C-c.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3228.080000" data-stop="3232.399000">So the application by default doesn't see it because</span> <span class="audio-time caption" data-speaker="Amin" data-start="3232.400000" data-stop="3233.279000">Emacs captures it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3233.280000" data-stop="3234.959000">But this is one of those</span> <span class="audio-time caption" data-speaker="Amin" data-start="3234.960000" data-stop="3239.599000">mechanisms by which you can send a key through.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3239.600000" data-stop="3244.219000">Let's see.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3244.000000">54:04</span> <strong>binding C-q to exwm-input-send-next-key</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="3244.220000" data-stop="3249.639000"><strong class="speaker-name">Amin:</strong> The other thing is, you can set it like EXWM inputs</span> <span class="audio-time caption" data-speaker="Amin" data-start="3249.640000" data-stop="3250.999000">send next key.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3251.000000" data-stop="3253.999000">So the default is C-c C-q, but I just</span> <span class="audio-time caption" data-speaker="Amin" data-start="3254.000000" data-stop="3259.319000">bind it to C-q, and I, for example, can do</span> <span class="audio-time caption" data-speaker="Amin" data-start="3259.320000" data-stop="3261.639000">C-q C-t to send C-t to the</span> <span class="audio-time caption" data-speaker="Amin" data-start="3261.640000" data-stop="3262.679000">underlying application.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3262.680000" data-stop="3264.159000">So that's the other thing.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3264.160000" data-stop="3268.579000">Yeah, and then let's see.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3268.000000">54:28</span> <strong>Renaming buffers
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0049.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0049.jpg" alt="image from video 00:55:05.333" data-time="00:55:05.333"></a><span class="audio-time caption" data-speaker="Amin" data-start="3268.580000" data-stop="3271.239000"><strong class="speaker-name">Amin:</strong> So this thingy here, I enable EXWM and I add this</span> <span class="audio-time caption" data-speaker="Amin" data-start="3271.240000" data-stop="3275.199000">rename hook and all it does is basically to add the</span> <span class="audio-time caption" data-speaker="Amin" data-start="3275.200000" data-stop="3281.559000">window titles to the buffer that I can see on the</span> <span class="audio-time caption" data-speaker="Amin" data-start="3281.560000" data-stop="3283.479000">mode line.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3283.480000" data-stop="3285.599000">But as long as it's within a certain</span> <span class="audio-time caption" data-speaker="Amin" data-start="3285.600000" data-stop="3287.759000">reasonable length, like for example, I have 25</span> <span class="audio-time caption" data-speaker="Amin" data-start="3287.760000" data-stop="3288.239000">characters.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3288.240000" data-stop="3291.479000">If it's longer than that, it will just put dot dot dot (...).</span> <span class="audio-time caption" data-speaker="Amin" data-start="3291.480000" data-stop="3293.879000">So yeah, that's all the purpose of that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3293.880000" data-stop="3300.599000">Let's see, for example, if I launch Xterm, it appears</span> <span class="audio-time caption" data-speaker="Amin" data-start="3300.600000" data-stop="3301.439000">there.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3301.440000" data-stop="3305.319000">The perfect example is actually here on the right-hand</span> <span class="audio-time caption" data-speaker="Amin" data-start="3305.320000" data-stop="3305.519000">side.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3305.520000" data-stop="3308.159000">On the mode line, we see Firefox ESR Emacs Chat.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3308.160000" data-stop="3311.079000">It's a bit long, so it just puts the dot dot dot there.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3311.080000" data-stop="3316.919000">So that's all that does.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3316.920000" data-stop="3319.759000"><strong class="speaker-name">Sacha:</strong> Yeah, now being able to use Emacs to manage</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3319.760000" data-stop="3321.919000">the tiling of these things instead of my having to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3321.920000" data-stop="3326.079000">fiddle with alt-dragging things to snap nicely into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3326.080000" data-stop="3326.639000">buffers.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3326.640000" data-stop="3328.759000">Yes, very cool stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3328.760000" data-stop="3329.559000">EXWM.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3329.560000" data-stop="3332.739000">Gotta try it.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3332.740000" data-stop="3334.399000"><strong class="speaker-name">Amin:</strong> Yeah, for sure.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3334.400000" data-stop="3336.279000">Yeah, let's see.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3336.000000">55:36</span> <strong>dunst for notifications
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0050.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0050.jpg" alt="image from video 00:55:36.300" data-time="00:55:36.300"></a><span class="audio-time caption" data-speaker="Amin" data-start="3336.280000" data-stop="3338.359000"><strong class="speaker-name">Amin:</strong> Here I launch Dunst if the executable is</span> <span class="audio-time caption" data-speaker="Amin" data-start="3338.360000" data-stop="3340.959000">installed for getting notifications in EXWM.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3340.960000" data-stop="3344.839000">I think there's at least one or two Emacs specific</span> <span class="audio-time caption" data-speaker="Amin" data-start="3344.840000" data-stop="3348.039000">packages that implement a simple notification</span> <span class="audio-time caption" data-speaker="Amin" data-start="3348.040000" data-stop="3351.599000">daemon or backend so that Emacs itself can handle</span> <span class="audio-time caption" data-speaker="Amin" data-start="3351.600000" data-stop="3352.039000">that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3352.040000" data-stop="3354.679000">But I found Dunst good enough for my use cases coming</span> <span class="audio-time caption" data-speaker="Amin" data-start="3354.680000" data-stop="3357.399000">from i3, Sway, like tiling window manager</span> <span class="audio-time caption" data-speaker="Amin" data-start="3357.400000" data-stop="3358.639000">background.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3358.640000" data-stop="3360.559000">I just reuse that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3360.560000" data-stop="3365.719000">So yeah, I just start a process, keep a handle of it</span> <span class="audio-time caption" data-speaker="Amin" data-start="3365.720000" data-stop="3367.759000">in this bandali&#45;&#45;dunst-process variable here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3367.760000" data-stop="3371.919000">And this thing I discovered recently, it's cool.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3371.920000" data-stop="3375.279000">using set-process-query-on-exit-flag, you</span> <span class="audio-time caption" data-speaker="Amin" data-start="3375.280000" data-stop="3378.159000">can basically have Emacs not ask you if you want to</span> <span class="audio-time caption" data-speaker="Amin" data-start="3378.160000" data-stop="3381.159000">exit Emacs if that process is still running.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3381.160000" data-stop="3383.359000">It'll just kill it without confirming with you.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3383.360000" data-stop="3387.199000">So just a little convenience.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3387.200000" data-stop="3389.279000"><strong class="speaker-name">Sacha:</strong> That is also cool.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3389.280000" data-stop="3391.479000">Just a heads up, I have about 15 minutes before the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3391.480000" data-stop="3394.919000">kiddo runs out because she'll be done with school then.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3394.920000" data-stop="3397.879000">Even just the EXWM part and other things that you've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3397.880000" data-stop="3401.599000">shown us in the config have been super awesome.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3401.600000" data-stop="3404.599000">But are there other things in the next 15 minutes that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3404.600000" data-stop="3407.519000">you would love to show people so that they can see how</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3407.520000" data-stop="3414.539000">it works in practice?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3414.000000">56:54</span> <strong>exwm xsettings and responding to screen configuration changes
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0051.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0051.jpg" alt="image from video 00:57:13.733" data-time="00:57:13.733"></a><span class="audio-time caption" data-speaker="Amin" data-start="3414.540000" data-stop="3415.999000"><strong class="speaker-name">Amin:</strong> One thing I'll just mention, EXWM,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3416.000000" data-stop="3419.319000">one more thing, and then I'll go check.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3419.320000" data-stop="3424.679000">I think this is kind of recent: EXWM xsettings, and</span> <span class="audio-time caption" data-speaker="Amin" data-start="3424.680000" data-stop="3430.439000">this allows you to dynamically at runtime change some</span> <span class="audio-time caption" data-speaker="Amin" data-start="3430.440000" data-stop="3433.719000">of these things that you would normally set in an X</span> <span class="audio-time caption" data-speaker="Amin" data-start="3433.720000" data-stop="3440.839000">resources file, like fonts. These kinds of settings</span> <span class="audio-time caption" data-speaker="Amin" data-start="3440.840000" data-stop="3444.759000">were especially commonplace back when Wayland wasn't a</span> <span class="audio-time caption" data-speaker="Amin" data-start="3444.760000" data-stop="3447.279000">thing or wasn't very popular. You would set some of</span> <span class="audio-time caption" data-speaker="Amin" data-start="3447.280000" data-stop="3448.399000">these font settings there.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3448.400000" data-stop="3451.999000">With EXWM xsettings, you can do this dynamically,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3452.000000" data-stop="3459.119000">and what's awesome about that is it also lets you hook</span> <span class="audio-time caption" data-speaker="Amin" data-start="3459.120000" data-stop="3463.119000">into, for example, if your screen configuration</span> <span class="audio-time caption" data-speaker="Amin" data-start="3463.120000" data-stop="3467.839000">changes, if you plug in a monitor or unplug it, then</span> <span class="audio-time caption" data-speaker="Amin" data-start="3467.840000" data-stop="3473.399000">you can run whatever xrandr command to set it up and</span> <span class="audio-time caption" data-speaker="Amin" data-start="3473.400000" data-stop="3475.199000">also adjust those settings.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3475.200000" data-stop="3479.399000">The main thing I use it for is to change the DPI</span> <span class="audio-time caption" data-speaker="Amin" data-start="3479.400000" data-stop="3483.639000">setting. The thing with X11 or Xorg is, unfortunately,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3483.640000" data-stop="3487.439000">there's no per-monitor DPI. There's one global DPI.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3487.440000" data-stop="3491.799000">But I found that on my high-DPI laptop screen, if I</span> <span class="audio-time caption" data-speaker="Amin" data-start="3491.800000" data-stop="3496.159000">set the resolution to 1920x1080 instead of the full</span> <span class="audio-time caption" data-speaker="Amin" data-start="3496.160000" data-stop="3500.079000">resolution, then the default DPI of 96 works just fine</span> <span class="audio-time caption" data-speaker="Amin" data-start="3500.080000" data-stop="3504.479000">with my external monitor as well. All this little hook</span> <span class="audio-time caption" data-speaker="Amin" data-start="3504.480000" data-stop="3508.079000">does, by calling into this function, is: if I'm</span> <span class="audio-time caption" data-speaker="Amin" data-start="3508.080000" data-stop="3510.879000">plugging in my external monitor, lower the resolution</span> <span class="audio-time caption" data-speaker="Amin" data-start="3510.880000" data-stop="3515.119000">and lower the DPI, and if I unplug it, go back to the</span> <span class="audio-time caption" data-speaker="Amin" data-start="3515.120000" data-stop="3519.359000">high thing. I just love this.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3519.360000" data-stop="3520.533000"><strong class="speaker-name">Sacha:</strong> That's great.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3520.534000" data-stop="3522.199000">We're definitely not going to demonstrate that because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3522.200000" data-stop="3524.079000">plugging in and unplugging monitors is not a good</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3524.080000" data-stop="3527.279000">thing for screen sharing, but that sounds really cool.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3527.280000" data-stop="3530.559000">When things change, you can actually get your system</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3530.560000" data-stop="3533.399000">to adapt to the changes for you.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3533.400000" data-stop="3534.359000"><strong class="speaker-name">Amin:</strong> Yeah, it's lovely.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3534.360000" data-stop="3535.559000">Let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3535.560000" data-stop="3539.879000">There's so much more to talk about.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3539.000000">58:59</span> <strong>Slowly getting back into Org mode</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="3539.880000" data-stop="3543.359000"><strong class="speaker-name">Amin:</strong> I'm slowly getting back into Org Mode again.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3543.360000" data-stop="3548.479000">For the longest time, I didn't use it and I just used</span> <span class="audio-time caption" data-speaker="Amin" data-start="3548.480000" data-stop="3550.119000">Markdown for my website as well.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3550.120000" data-stop="3553.119000">But I found that it's kind of limited.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3553.120000" data-stop="3555.919000">For example, I was using a Markdown implementation</span> <span class="audio-time caption" data-speaker="Amin" data-start="3555.920000" data-stop="3559.199000">that was written in C and I can't easily customize it.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3559.200000" data-stop="3563.919000">Whereas with Org, I can hook into or create</span> <span class="audio-time caption" data-speaker="Amin" data-start="3563.920000" data-stop="3566.519000">my custom HTML backend that's a</span> <span class="audio-time caption" data-speaker="Amin" data-start="3566.520000" data-stop="3570.479000">derivative of ox-html, even if I don't necessarily like</span> <span class="audio-time caption" data-speaker="Amin" data-start="3570.480000" data-stop="3573.759000">the defaults or the settings for ox-html.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3573.760000" data-stop="3578.359000">I just recently started writing a new backend called</span> <span class="audio-time caption" data-speaker="Amin" data-start="3578.360000" data-stop="3581.079000">bhtml for Bandali HTML.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3581.080000" data-stop="3583.439000">It's just a boilerplate.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3583.440000" data-stop="3586.459000">I don't have much there yet, but that's the idea.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3586.460000" data-stop="3589.199000"><strong class="speaker-name">Sacha:</strong> I love how you can hook into all of these different</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3589.200000" data-stop="3592.119000">aspects of Emacs and get it to do exactly what you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3592.120000" data-stop="3593.979000">want.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3593.980000" data-stop="3594.679000"><strong class="speaker-name">Amin:</strong> Yeah, so that's cool.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3594.680000" data-stop="3598.159000">Let's see.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3598.000000">59:58</span> <strong>chat notes
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0052.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0052.jpg" alt="image from video 01:00:16.067" data-time="01:00:16.067"></a><span class="audio-time caption" data-speaker="Amin" data-start="3598.160000" data-stop="3601.319000"><strong class="speaker-name">Amin:</strong> I have written some things about the prompt for this</span> <span class="audio-time caption" data-speaker="Amin" data-start="3601.320000" data-stop="3601.679000">meeting.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3601.680000" data-stop="3608.999000">Yeah, so I talked about that stuff briefly.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3609.000000" data-stop="3611.639000">Minibuffer setup.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3611.640000" data-stop="3614.559000">Things that I love about my setup is that it's kind of</span> <span class="audio-time caption" data-speaker="Amin" data-start="3614.560000" data-stop="3616.039000">portable, simple.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3616.040000" data-stop="3618.839000">People can easily copy things from it if they want.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3618.840000" data-stop="3620.159000">It's kind of self-contained.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3620.160000" data-stop="3623.319000">And that was kind of a big thing a while back when I</span> <span class="audio-time caption" data-speaker="Amin" data-start="3623.320000" data-stop="3627.159000">wanted to use my configurations on a couple of work</span> <span class="audio-time caption" data-speaker="Amin" data-start="3627.160000" data-stop="3628.199000">machines.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3628.200000" data-stop="3632.799000">And these don't have direct outbound internet access.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3632.800000" data-stop="3636.599000">So I couldn't do things like installing packages with</span> <span class="audio-time caption" data-speaker="Amin" data-start="3636.600000" data-stop="3639.759000">ELPA because that's done over HTTP.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3639.760000" data-stop="3642.879000">So yeah, I use submodules now.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3642.880000" data-stop="3647.439000">I recently began documenting my setup, very much</span> <span class="audio-time caption" data-speaker="Amin" data-start="3647.440000" data-stop="3652.139000">inspired by Prot and Sacha and others.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3652.000000">1:00:52</span> <strong>Mode line</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="3652.140000" data-stop="3654.759000"><strong class="speaker-name">Amin:</strong> The things that I'm looking forward to tweaking next</span> <span class="audio-time caption" data-speaker="Amin" data-start="3654.760000" data-stop="3655.759000">is the mode line.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3655.760000" data-stop="3658.933000">This is basically the default mode line of Emacs.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3658.934000" data-stop="3661.879000">A couple versions ago, they added a setting for</span> <span class="audio-time caption" data-speaker="Amin" data-start="3661.880000" data-stop="3663.479000">compacting the mode line, which</span> <span class="audio-time caption" data-speaker="Amin" data-start="3663.480000" data-stop="3666.733000">improves a lot of the extraneous whitespace in it,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3666.734000" data-stop="3667.700000">which is great.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3667.701000" data-stop="3670.100000">It's still… There's too much information.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3670.101000" data-stop="3672.733000">If you use multiple windows</span> <span class="audio-time caption" data-speaker="Amin" data-start="3672.734000" data-stop="3674.067000">or even especially if you use EXWM</span> <span class="audio-time caption" data-speaker="Amin" data-start="3674.068000" data-stop="3676.900000">all of those things like the date</span> <span class="audio-time caption" data-speaker="Amin" data-start="3676.901000" data-stop="3678.467000">or like the battery get repeated</span> <span class="audio-time caption" data-speaker="Amin" data-start="3678.468000" data-stop="3680.000000">in all of the windows,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3680.001000" data-stop="3682.000000">so I'm looking forward to</span> <span class="audio-time caption" data-speaker="Amin" data-start="3682.001000" data-stop="3684.700000">doing my mode line in such a way that</span> <span class="audio-time caption" data-speaker="Amin" data-start="3684.701000" data-stop="3689.619000">for example, it shows most of those things.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3689.620000" data-stop="3691.500000">And Prot actually has</span> <span class="audio-time caption" data-speaker="Amin" data-start="3691.501000" data-stop="3692.900000">an excellent video about that</span> <span class="audio-time caption" data-speaker="Amin" data-start="3692.901000" data-stop="3695.667000">where he shows how you can create</span> <span class="audio-time caption" data-speaker="Amin" data-start="3695.668000" data-stop="3698.739000">your own custom mode line.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3698.740000" data-stop="3699.700000"><strong class="speaker-name">Sacha:</strong> I've also been tempted</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3699.701000" data-stop="3701.833000">to start using the header line too</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3701.834000" data-stop="3702.833000">because that's another thing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3702.834000" data-stop="3705.799000">that you can put information in.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3705.800000" data-stop="3709.319000"><strong class="speaker-name">Amin:</strong> Right, yep, header-line is awesome.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3709.000000">1:01:49</span> <strong>display-buffer-alist</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3709.320000" data-stop="3710.319000"><strong class="speaker-name">Sacha:</strong> Yeah, the display-buffer-alist</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3710.320000" data-stop="3711.799000">is particularly powerful</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3711.800000" data-stop="3714.799000">because you're combining it with EXWM, so it'd be</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3714.800000" data-stop="3718.959000">interesting to see how you can manage windows and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3718.960000" data-stop="3721.479000">applications and stuff.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3721.480000" data-stop="3722.833000"><strong class="speaker-name">Amin:</strong> Especially, just like how we saw</span> <span class="audio-time caption" data-speaker="Amin" data-start="3722.834000" data-stop="3723.599000">in today's video call</span> <span class="audio-time caption" data-speaker="Amin" data-start="3723.600000" data-stop="3725.959000">and also a call that I had with Prot recently.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3725.960000" data-stop="3728.119000">For example, if I open a describe-variable or</span> <span class="audio-time caption" data-speaker="Amin" data-start="3728.120000" data-stop="3731.999000">something, it'll by default use the right area of the</span> <span class="audio-time caption" data-speaker="Amin" data-start="3732.000000" data-stop="3734.999000">screen right now where our video is.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3735.000000" data-stop="3735.639000">So it reuses that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3735.640000" data-stop="3741.439000">So I'm also looking forward to reading more about and</span> <span class="audio-time caption" data-speaker="Amin" data-start="3741.440000" data-stop="3743.480000">configuring display-buffer-alist.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3743.000000">1:02:23</span> <strong>TRAMP slowness, maybe disabling VC detection?</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="3743.481000" data-stop="3744.619000"><strong class="speaker-name">Amin:</strong> I'd like to figure out some TRAMP slowness.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3744.620000" data-stop="3745.679000">I recently tried using it again.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3745.680000" data-stop="3746.199000">It's awesome.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3746.200000" data-stop="3750.039000">You can seamlessly open files, SSH into other</span> <span class="audio-time caption" data-speaker="Amin" data-start="3750.040000" data-stop="3751.399000">machines and edit files there.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3751.400000" data-stop="3753.039000">But I don't know.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3753.040000" data-stop="3753.959000">It's kind of slow.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3753.960000" data-stop="3756.919000">So I want to see aside from the latency, you know, the</span> <span class="audio-time caption" data-speaker="Amin" data-start="3756.920000" data-stop="3760.759000">physical limit of the latency because of the distance.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3760.760000" data-stop="3763.479000">Is there anything slowing it down?</span> <span class="audio-time caption" data-speaker="Amin" data-start="3763.480000" data-stop="3767.439000">I think I read in the Tramp FAQ that maybe trying to</span> <span class="audio-time caption" data-speaker="Amin" data-start="3767.440000" data-stop="3773.479000">disable VC mode or VC detection for remote connections</span> <span class="audio-time caption" data-speaker="Amin" data-start="3773.480000" data-stop="3776.119000">might help speed it up, or at least having it do only</span> <span class="audio-time caption" data-speaker="Amin" data-start="3776.120000" data-stop="3780.479000">Git, for example, because by default, Emacs's VC has</span> <span class="audio-time caption" data-speaker="Amin" data-start="3780.480000" data-stop="3787.399000">support for Mercurial, CVS, SVN, Git, RCS even.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3787.400000" data-stop="3789.639000"><strong class="speaker-name">Sacha:</strong> Anything anyone has ever wanted to use in the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3789.640000" data-stop="3790.879000">last 40 years.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3790.880000" data-stop="3793.519000">Here we go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3793.520000" data-stop="3798.879000">I saw in your chat config actually that you were doing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3798.880000" data-stop="3803.079000">something with the SSH configs and I'd never come</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3803.080000" data-stop="3803.799000">across that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3803.800000" data-stop="3809.879000">So I was like, oh, that's something I should look into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3809.880000" data-stop="3812.639000">later.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3812.640000" data-stop="3814.159000"><strong class="speaker-name">Amin:</strong> I don't remember the specifics, but it's all</span> <span class="audio-time caption" data-speaker="Amin" data-start="3814.160000" data-stop="3814.839000">out there.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3814.840000" data-stop="3819.239000">Feel free to look into it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3819.000000">1:03:39</span> <strong>eat</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="3819.240000" data-stop="3822.959000"><strong class="speaker-name">Amin:</strong> Especially with this EXWM setup, I still use Xterm</span> <span class="audio-time caption" data-speaker="Amin" data-start="3822.960000" data-stop="3825.919000">sometimes and I have the Emacs EAT terminal, which is</span> <span class="audio-time caption" data-speaker="Amin" data-start="3825.920000" data-stop="3829.799000">a terminal emulator written in Emacs Lisp.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3829.800000" data-stop="3833.159000">If I launch it right now, it's awesome.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3833.160000" data-stop="3837.119000">It actually is very powerful and it's a properly</span> <span class="audio-time caption" data-speaker="Amin" data-start="3837.120000" data-stop="3838.479000">capable terminal emulator.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3838.480000" data-stop="3840.719000">It just can be a little bit slow.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3840.720000" data-stop="3844.319000">It is slower than xterm, but it's still a lot faster</span> <span class="audio-time caption" data-speaker="Amin" data-start="3844.320000" data-stop="3846.119000">than whatever Emacs has built in.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3846.120000" data-stop="3847.519000">So this is pretty cool.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3847.520000" data-stop="3850.159000">But yeah, I don't want to use it a lot.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3850.160000" data-stop="3853.919000">And I kind of started testing, delegating more</span> <span class="audio-time caption" data-speaker="Amin" data-start="3853.920000" data-stop="3858.119000">things or using more async-shell-command to just</span> <span class="audio-time caption" data-speaker="Amin" data-start="3858.120000" data-stop="3860.679000">basically open this prompt and then do whatever I</span> <span class="audio-time caption" data-speaker="Amin" data-start="3860.680000" data-stop="3861.159000">want.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3861.160000" data-stop="3862.879000">anyway.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3862.880000" data-stop="3866.839000"><strong class="speaker-name">Sacha:</strong> I've also heard things about Ghost TTY.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3866.840000" data-stop="3870.599000">Anyway, so that's another thing to look into.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3870.600000" data-stop="3876.959000">Yes, so @Paniash47 says, "With Emacs 31, there's a new</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3876.960000" data-stop="3878.759000">variable where you can hide the minor modes in the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3878.760000" data-stop="3879.079000">mode line."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3879.080000" data-stop="3881.559000">@pkal says it's mode-line-collapse-minor-modes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3881.560000" data-stop="3884.599000">And @Paniash47 also says, "I personally use the Minions</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3884.600000" data-stop="3887.679000">package by Tarsius, and it has some nice features in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3887.680000" data-stop="3888.959000">addition to the built-in features."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3888.960000" data-stop="3891.008000">So other people are tinkering around</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3891.009000" data-stop="3892.919000">with their mode lines as well.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3898.320000" data-stop="3898.919000"><strong class="speaker-name">Amin:</strong> Yeah, it's pretty cool.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3898.920000" data-stop="3902.479000">And then I don't know, I think maybe you touched on</span> <span class="audio-time caption" data-speaker="Amin" data-start="3902.480000" data-stop="3904.399000">something a couple of minutes ago that I was going to</span> <span class="audio-time caption" data-speaker="Amin" data-start="3904.400000" data-stop="3907.179000">go back to, but I forget.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3907.000000">1:05:07</span> <strong>TRAMP completion</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3907.180000" data-stop="3909.999000"><strong class="speaker-name">Sacha:</strong> Tramp SSH completion out of your configs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3910.000000" data-stop="3912.919000">I was like, there's a Tramp sconfig in here that I've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3912.920000" data-stop="3913.639000">never used.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3913.640000" data-stop="3915.119000">And that sounded interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3915.120000" data-stop="3920.839000">Yeah, tramp-parse-sconfig.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3920.840000" data-stop="3924.699000"><strong class="speaker-name">Amin:</strong> Ah, right, right, right. Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3924.700000" data-stop="3926.599000"><strong class="speaker-name">Sacha:</strong> Which, of course, we're not going to let go</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3926.600000" data-stop="3929.359000">because it's private stuff, but yeah.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3929.360000" data-stop="3929.999000"><strong class="speaker-name">Amin:</strong> Right.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3930.000000" data-stop="3931.199000">Yeah, you're welcome to try this.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3931.200000" data-stop="3933.319000">I'm pretty sure, actually, I took this from the Tramp</span> <span class="audio-time caption" data-speaker="Amin" data-start="3933.320000" data-stop="3934.159000">manual itself.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3934.160000" data-stop="3937.679000">And it's one of those things where it's set and</span> <span class="audio-time caption" data-speaker="Amin" data-start="3937.680000" data-stop="3940.719000">forget, I don't remember.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3940.720000" data-stop="3941.639000">But yeah, it's here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3941.640000" data-stop="3945.519000">There was something else that I also wanted to show,</span> <span class="audio-time caption" data-speaker="Amin" data-start="3945.520000" data-stop="3946.159000">but I forget.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3946.160000" data-stop="3949.759000">Let me see if looking at the outlines will remind me</span> <span class="audio-time caption" data-speaker="Amin" data-start="3949.760000" data-stop="3952.539000">or if I will see it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3952.540000" data-stop="3953.799000"><strong class="speaker-name">Sacha:</strong> And that's one of the things I love about</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3953.800000" data-stop="3956.199000">literate configuration is, you know, just kind of look</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3956.200000" data-stop="3959.479000">at the structure and skim it and try to find something</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3959.480000" data-stop="3963.839000">with keywords and ordered lists and all that stuff.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="3963.840000" data-stop="3967.799000"><strong class="speaker-name">Amin:</strong> Right. Yup. Exactly.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3967.800000" data-stop="3970.039000"><strong class="speaker-name">Sacha:</strong> Oh, and you know, people will have access to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3970.040000" data-stop="3972.119000">your full configuration because it is in your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3972.120000" data-stop="3974.999000">repository and you have that lovely HTML export for it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3975.000000" data-stop="3975.559000">as well.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3975.560000" data-stop="3980.159000">So if you, uh, if, if people want to follow up, they</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3980.160000" data-stop="3980.799000">can go through that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3980.800000" data-stop="3984.319000">at length. At some point, you're going to add some more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3984.320000" data-stop="3987.919000">screenshots and possibly even video clips to it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3987.920000" data-stop="3994.539000">so that's there you at https://git.kelar.org</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0053.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0053.jpg" alt="image from video 01:06:34.567" data-time="01:06:34.567"></a><span class="audio-time caption" data-speaker="Amin" data-start="3994.540000" data-stop="3996.159000"><strong class="speaker-name">Amin:</strong> This is my configurations repository.</span> <span class="audio-time caption" data-speaker="Amin" data-start="3996.160000" data-stop="4001.159000">If you go here to treeview .emacs.d, this is the org</span> <span class="audio-time caption" data-speaker="Amin" data-start="4001.160000" data-stop="4001.919000">file.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4001.920000" data-stop="4005.639000">I also export all of those individual components into</span> <span class="audio-time caption" data-speaker="Amin" data-start="4005.640000" data-stop="4007.279000">this lisp subdirectory.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4007.280000" data-stop="4009.319000">All that stuff is here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4009.320000" data-stop="4014.299000">The QMK thingy that was mentioned.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4014.000000">1:06:54</span> <strong>ffs: form feed slides, ^L
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0054.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0054.jpg" alt="image from video 01:08:15.933" data-time="01:08:15.933"></a><span class="audio-time caption" data-speaker="Amin" data-start="4014.300000" data-stop="4015.359000"><strong class="speaker-name">Amin:</strong> Oh, I wanted to mention FFS.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4015.360000" data-stop="4016.399000">Okay, I'll do that as well.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4016.400000" data-stop="4017.959000">Yeah, what's up with that?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4017.960000" data-stop="4019.199000"><strong class="speaker-name">Sacha:</strong> I was trying to find information.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4019.200000" data-stop="4020.559000">It was like, there's no package.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4020.560000" data-stop="4025.539000">It's not what is this thing?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="4025.540000" data-stop="4027.959000"><strong class="speaker-name">Amin:</strong> It's FormFeed Slides and it's going to soon be</span> <span class="audio-time caption" data-speaker="Amin" data-start="4027.960000" data-stop="4028.359000">a package.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4028.360000" data-stop="4030.519000">I was actually talking to Prot about it and I'm hoping</span> <span class="audio-time caption" data-speaker="Amin" data-start="4030.520000" data-stop="4033.399000">to submit it for inclusion in GNU ELPA within, I don't</span> <span class="audio-time caption" data-speaker="Amin" data-start="4033.400000" data-stop="4035.279000">know, the next couple of weeks.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4035.280000" data-stop="4038.759000">It's basically very similar to Prot's Logos package.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4038.760000" data-stop="4042.999000">Turns out we both had the same kind of idea at the</span> <span class="audio-time caption" data-speaker="Amin" data-start="4043.000000" data-stop="4046.599000">exact same time in 2022, and we both used it for our</span> <span class="audio-time caption" data-speaker="Amin" data-start="4046.600000" data-stop="4050.319000">LibrePlanet 2022 presentations.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4050.320000" data-stop="4053.119000">Of course, Prot being the diligent person that he is,</span> <span class="audio-time caption" data-speaker="Amin" data-start="4053.120000" data-stop="4055.428000">he polished his work, documented it,</span> <span class="audio-time caption" data-speaker="Amin" data-start="4055.429000" data-stop="4056.479000">put it on GNU ELPA.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4056.480000" data-stop="4058.622000">I still haven't gotten around to doing it yet,</span> <span class="audio-time caption" data-speaker="Amin" data-start="4058.623000" data-stop="4060.719000">but better late than never.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4060.720000" data-stop="4062.359000">Yeah, let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4062.360000" data-stop="4064.559000">I can maybe show a quick demonstration of that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4064.560000" data-stop="4067.719000">So let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4067.720000" data-stop="4069.399000">Let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4069.400000" data-stop="4077.439000">Anyway, so if I go to my website sources and</span> <span class="audio-time caption" data-speaker="Amin" data-start="4077.440000" data-stop="4080.159000">net-beyond-web.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4080.160000" data-stop="4083.759000">So I had the LibrePlanet talk a couple years ago.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4083.760000" data-stop="4087.959000">So what FFS is basically, it looks for a</span> <span class="audio-time caption" data-speaker="Amin" data-start="4087.960000" data-stop="4088.867000">particular character in this case,</span> <span class="audio-time caption" data-speaker="Amin" data-start="4088.868000" data-stop="4092.919000">or the default case,</span> <span class="audio-time caption" data-speaker="Amin" data-start="4092.920000" data-stop="4095.929000">it's the page-delimiter, ^L,</span> <span class="audio-time caption" data-speaker="Amin" data-start="4095.930000" data-stop="4099.079000">which you can insert by hitting C-q C-l.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4099.080000" data-stop="4103.759000">It basically then designates each of these areas</span> <span class="audio-time caption" data-speaker="Amin" data-start="4103.760000" data-stop="4108.959000">as one slide. So, very, very simple slideshow</span> <span class="audio-time caption" data-speaker="Amin" data-start="4108.960000" data-stop="4111.439000">that you don't even have to use Org or outline or any</span> <span class="audio-time caption" data-speaker="Amin" data-start="4111.440000" data-stop="4115.599000">other major or minor mode. If I launch ffs,</span> <span class="audio-time caption" data-speaker="Amin" data-start="4115.600000" data-stop="4122.239000">by default, it's in a mode where it binds a couple of</span> <span class="audio-time caption" data-speaker="Amin" data-start="4122.240000" data-stop="4124.919000">convenience keys, like p and n, to go into the next</span> <span class="audio-time caption" data-speaker="Amin" data-start="4124.920000" data-stop="4125.639000">and previous slide.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4125.640000" data-stop="4129.999000">You can hit e to edit a slide, similar to Org source, and</span> <span class="audio-time caption" data-speaker="Amin" data-start="4130.000000" data-stop="4132.639000">then make your changes and all of that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4132.640000" data-stop="4137.899000">And then you can start a presentation by hitting s.</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0055.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0055.jpg" alt="image from video 01:08:58.767" data-time="01:08:58.767"></a><span class="audio-time caption" data-speaker="Amin" data-start="4137.900000" data-stop="4141.439000"><strong class="speaker-name">Amin:</strong> It has hooks for, for example, bumping up the font size</span> <span class="audio-time caption" data-speaker="Amin" data-start="4141.440000" data-stop="4144.599000">or whatever, hiding the mode line.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4144.600000" data-stop="4147.599000">I can toggle the mode line by hitting m here.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4147.600000" data-stop="4150.959000">Let's see.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4150.960000" data-stop="4156.399000">I can also toggle the cursor with c, to make the cursor</span> <span class="audio-time caption" data-speaker="Amin" data-start="4156.400000" data-stop="4157.199000">visible or not.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4157.200000" data-stop="4158.439000">So, yeah.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4158.440000" data-stop="4163.479000">And then I'm just hitting p and n.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4163.480000" data-stop="4165.119000"><strong class="speaker-name">Sacha:</strong> Very simple, very minimalist.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4165.120000" data-stop="4168.399000">You have a file, you've got page markers, and that's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4168.400000" data-stop="4171.859000">all you got.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="4171.860000" data-stop="4172.919000"><strong class="speaker-name">Amin:</strong> Yeah, pretty much.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4172.920000" data-stop="4174.819000">And then…</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="4174.000000">1:09:34</span> <strong>Speaker notes</strong></div><p></p><span class="audio-time caption" data-speaker="Amin" data-start="4174.820000" data-stop="4176.799000"><strong class="speaker-name">Amin:</strong> The neat thing that it has that I also liked</span> <span class="audio-time caption" data-speaker="Amin" data-start="4176.800000" data-stop="4179.799000">implementing at the time is it has a speaker notes</span> <span class="audio-time caption" data-speaker="Amin" data-start="4179.800000" data-stop="4180.639000">feature.</span> <p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0056.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/mpv-shot0056.jpg" alt="image from video 01:09:47.767" data-time="01:09:47.767"></a><span class="audio-time caption" data-speaker="Amin" data-start="4180.640000" data-stop="4184.999000"><strong class="speaker-name">Amin:</strong> So you can designate a file as being the speaker</span> <span class="audio-time caption" data-speaker="Amin" data-start="4185.000000" data-stop="4187.759000">notes where it has the same structure separators with</span> <span class="audio-time caption" data-speaker="Amin" data-start="4187.760000" data-stop="4190.679000">^L. But you can type your notes over here,</span> <span class="audio-time caption" data-speaker="Amin" data-start="4190.680000" data-stop="4190.959000">whatever.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4190.960000" data-stop="4194.639000">And you can basically open these in two different</span> <span class="audio-time caption" data-speaker="Amin" data-start="4194.640000" data-stop="4197.879000">windows or two different frames on separate displays.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4197.880000" data-stop="4201.159000">And then in whichever one of those you advance the</span> <span class="audio-time caption" data-speaker="Amin" data-start="4201.160000" data-stop="4205.779000">slides, like p n n, it also does the other one.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4205.780000" data-stop="4206.967000"><strong class="speaker-name">Sacha:</strong> That's brilliant.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4206.968000" data-stop="4209.319000">I was looking for a way to do that so I can pretend to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4209.320000" data-stop="4211.279000">know what I'm talking about when I have something on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4211.280000" data-stop="4215.159000">screen, but I can just read my notes or even just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4215.160000" data-stop="4216.839000">remember what points I wanted to make.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4216.840000" data-stop="4218.039000">So this is great.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4218.040000" data-stop="4219.119000">You have speaker notes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4219.120000" data-stop="4220.639000">You've got the main screen.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4220.640000" data-stop="4221.999000">They can be in two different frames.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4222.000000" data-stop="4224.679000">You can have your frame that you're sharing and your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4224.680000" data-stop="4227.199000">frame that you're not sharing that has all of your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4227.200000" data-stop="4227.799000">cheat sheets.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4227.800000" data-stop="4229.079000">Excellent.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4229.080000" data-stop="4231.119000">And on that note, in about one minute, the kid is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4231.120000" data-stop="4234.039000">going to come running out and want to have snack and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4234.040000" data-stop="4234.599000">all that stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4234.600000" data-stop="4237.959000">Thank you so much for walking through parts of your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4237.960000" data-stop="4238.279000">config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4238.280000" data-stop="4239.559000">There is more.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4239.560000" data-stop="4242.559000">And so everyone who wants to find out more can go</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4242.560000" data-stop="4243.759000">check out your setup.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4243.760000" data-stop="4247.359000">I have a great many things that I want to try out,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4247.360000" data-stop="4253.039000">starting from EXWM to little things like figuring out</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4253.040000" data-stop="4255.799000">a boom mic setup because apparently your audio setup</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4255.800000" data-stop="4257.159000">is making me very jealous.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4257.160000" data-stop="4260.279000">Yes, thank you for doing this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4260.280000" data-stop="4262.839000">I'm going to post the transcript and the chapters.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4262.840000" data-stop="4264.479000">I have a chapter every minute.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4264.480000" data-stop="4268.319000">It's going to be a long time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4268.320000" data-stop="4269.399000">But it was good.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4269.400000" data-stop="4270.359000">Lots of cool stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4270.360000" data-stop="4273.199000">Thank you again.</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="4273.200000" data-stop="4274.233000"><strong class="speaker-name">Amin:</strong> Sounds great.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4274.234000" data-stop="4275.159000">And yeah, you're very welcome.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4275.160000" data-stop="4276.959000">And thank you so much for having me as well, Sacha.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4276.960000" data-stop="4279.159000">I'm very delighted to be here, especially, I think,</span> <span class="audio-time caption" data-speaker="Amin" data-start="4279.160000" data-stop="4280.359000">just by chance.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4280.360000" data-stop="4283.079000">I think I'm the first person who you're doing this</span> <span class="audio-time caption" data-speaker="Amin" data-start="4283.080000" data-stop="4284.759000">with after the long hiatus.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4284.760000" data-stop="4286.679000">So that's an extra honor for me.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4286.680000" data-stop="4288.759000">But yeah, it's been fun.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4288.760000" data-stop="4292.479000">I could go on for hours.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4292.480000" data-stop="4293.719000">I'm sure we both could.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4293.720000" data-stop="4297.219000">This has been fun.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4297.220000" data-stop="4299.233000"><strong class="speaker-name">Sacha:</strong> If we wanted to go on for hours,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4299.234000" data-stop="4300.933000">Prot has more flexible scheduling,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4300.934000" data-stop="4303.033000">so he can chat with people for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4303.034000" data-stop="4304.667000">two hours and stuff, and you already have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4304.668000" data-stop="4306.159000">conversations going on with him.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4306.160000" data-stop="4308.959000">But I unfortunately have a small mammal who's 10</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4308.960000" data-stop="4312.119000">years old and loves me very much, and likes to not let</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4312.120000" data-stop="4313.799000">me concentrate for very long.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4313.800000" data-stop="4316.319000">But thank you everyone for joining.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4316.320000" data-stop="4317.799000">Thank you for the chat.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4317.800000" data-stop="4318.959000">And thank you also, stream,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4318.960000" data-stop="4320.319000">for all the interesting questions.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4320.320000" data-stop="4322.519000">I will send you all the information</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4322.520000" data-stop="4323.479000">and update the post.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4323.480000" data-stop="4326.599000">And we'll see you all on Thursday.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4326.600000" data-stop="4328.279000">I've got another chat.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4328.280000" data-stop="4330.719000">All of a sudden, all these Emacs chats</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4330.720000" data-stop="4331.719000">are going to happen.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4331.720000" data-stop="4332.119000">Thanks.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4332.120000" data-stop="4336.119000">Oh, and you said you're happy to be on the hook for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4336.120000" data-stop="4340.259000">doing another EmacsConf this year, right?</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="4340.260000" data-stop="4341.868000"><strong class="speaker-name">Amin:</strong> Yes. You can hold me to that.</span> <span class="audio-time caption" data-speaker="Amin" data-start="4341.480000" data-stop="4343.200000">There will be another EmacsConf this year</span> <span class="audio-time caption" data-speaker="Amin" data-start="4343.201000" data-stop="4344.933000">and I will be active in it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4344.934000" data-stop="4346.567000"><strong class="speaker-name">Sacha:</strong> Alright then, I'm going to end that broadcast.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4346.568000" data-stop="4349.159000">Thanks everyone, bye!</span> <p></p><span class="audio-time caption" data-speaker="Amin" data-start="4349.160000" data-stop="4350.000000"><strong class="speaker-name">Amin:</strong> Thank you, bye bye!</span></div>
<p></p>


<a name="end-ec21-transcript"></a></details>
</div>
</div>
<div id="outline-container-current-notes-for-next-time-emacs-chat-21-amin-bandali-chat" class="outline-3">
<h3 id="current-notes-for-next-time-emacs-chat-21-amin-bandali-chat">Chat</h3>
<div class="outline-text-3" id="text-current-notes-for-next-time-emacs-chat-21-amin-bandali-chat">
<ul class="org-ul">
<li>sachactube: This is a test message</li>
<li>sachactube: Getting ready for Emacs Chat 21 with Amin Bandali, <a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/">https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/</a></li>
<li>JacksonScholberg: Yo</li>
<li>sachactube: Yo yo yo, we are live!</li>
<li>IhorRadchenkoyantar92: &hellip; and the list can continue until the end of the stream? :)</li>
<li>IhorRadchenkoyantar92: do you compile those packages?</li>
<li>sachactube: Automatically compiled by prepare-user-lisp because of user-lisp-directory, I think</li>
<li>IhorRadchenkoyantar92: makes sense</li>
<li>IhorRadchenkoyantar92: this configure macro looks a lot like good old use-package</li>
<li>IhorRadchenkoyantar92: I just do (use-package foo :config <a id="orga0df547"></a>) and then :tangle no in actual src block</li>
<li>IhorRadchenkoyantar92: what is funny, with-eval-after-load is itself a macro</li>
<li>sachactube: hahaha, it's much smaller though</li>
<li>IhorRadchenkoyantar92: not smaller at all! Because there is recursion with-eval-after-load (macro) -&gt; eval-after-load (also macro!)</li>
<li>IhorRadchenkoyantar92: hmm. wrong</li>
<li>IhorRadchenkoyantar92: ok. let me not do two things at the same time</li>
<li>blaiseutube: yay, I made it!</li>
<li>blaiseutube: screenshots and also asciicinema</li>
<li>blaiseutube: asciinema ?</li>
<li>blaiseutube: whatever</li>
<li>sachactube: and gif-screencast</li>
<li>blaiseutube: nice</li>
<li>blaiseutube: Sacha, your mic volume is just a bit lower than his so it's a bit harder (for me) to hear you.</li>
<li>sachactube: Hmm, let me try turning my dial, let's see if this next one is better</li>
<li>blaiseutube: better, I think</li>
<li>blaiseutube: it's also that Amin has an awesome microphone. The result sounds like Amin is in the room with me and we are both listening to you on speakerphone. it's not terrible</li>
<li>blaiseutube: we're all friends her</li>
<li>blaiseutube: here</li>
<li>sachactube: I think we have the same mic, but he has an awesome setup, so I'm going to bug him for tips =D</li>
<li>paniash47: Hello there! Nice to see this chat. :)</li>
<li>blaiseutube: yes, low gain and close mic is good. Sacha if prefer to avoid a boom, you can use a microphone with a tight pattern and increase gain. LMK if you want to unleash my inner audio engineer.</li>
<li>sachactube: oooh. my mic is right next to my laptop though, so I'm not sure I can get away from the typing noises</li>
<li>sachactube: I'll just have to get cozy with y'all</li>
<li>blaiseutube: mini buffet is an underrated superpower. I think Kakoune adopted that also</li>
<li>blaiseutube: helpful for a11y and users with sequential processing/ ADHD issues</li>
<li>blaiseutube: (I noticed that the comments are recorded so I'm trying to add value 🥴)</li>
<li>paniash47: Split keyboards make sense with vanilla keybindings. I'd like to switch but moving from evil is difficult :(</li>
<li>sachactube: much appreciated!</li>
<li>blaiseutube: what about "time since last save" or do you have some auto save magic?</li>
<li>blaiseutube: 🤯</li>
<li>blaiseutube: emacs all the things</li>
<li>blaiseutube: LOL, "I save everything regularly" &hellip;so he's one of <mark>those</mark> people.</li>
<li>paniash47: I think with emacs 31, there's a new variable where you can hide the minor modes in the modeline</li>
<li>pkal_: mode-line-collapse-minor-modes</li>
<li>paniash47: I personally use the minions package by tarsius (Magit author) and it has some nice features in addition to the built-in feature.</li>
<li>paniash47: ghostel is the package :)</li>
<li>blaiseutube: BRB</li>
</ul>

<p>
Find more Emacs Chats or join the fun: <a href="https://sachachua.com/emacs-chat">https://sachachua.com/emacs-chat</a>
</p>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/index.org">View Org source for this post</a></div>
<p>You can <a href="https://social.sachachua.com/@sacha/statuses/01KQSRZ5PF37X0VDHJMMFZPNWT" 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%2Femacs-chat-with-amin-bandali%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>
		<dc:creator>Sacha Chua</dc:creator></item>
	</channel>
</rss>