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

xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"

>
<channel>
	<title>Sacha Chua - category - emacs-chat-podcast</title>
	<atom:link href="https://sachachua.com/blog/category/emacs-chat-podcast/feed/index.xml" rel="self" type="application/rss+xml" />
	<atom:link href="https://sachachua.com/blog/category/emacs-chat-podcast" rel="alternate" type="text/html" />
	<link>https://sachachua.com/blog/category/emacs-chat-podcast/feed/index.xml</link>
	<description>Emacs, sketches, and life</description>
  <itunes:author>Sacha Chua</itunes:author>
<itunes:type>episodic</itunes:type>
<itunes:owner><itunes:name>Sacha Chua</itunes:name><itunes:email>sacha@sachachua.com</itunes:email></itunes:owner>
<itunes:summary>Conversations about Emacs (a very customizable text editor) and life</itunes:summary>
<itunes:image href="https://sachachua.com/assets/images/emacs-chat-thumbnail.png"></itunes:image>
<itunes:category text="Technology"></itunes:category>
<itunes:explicit>false</itunes:explicit>
	<lastBuildDate>Mon, 01 Jun 2026 16:50:38 GMT</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>11ty</generator>
  <item>
		<title>Emacs Chat 24: Omar Antolin Camarena</title>
		<link>https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Fri, 29 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><enclosure url="https://archive.org/download/emacs-chat-24-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena.mp3"
               length="65441061"
               type="audio/mpeg" />
		<description><![CDATA[<div class="update" id="orgbe753d6">
<p>
<span class="timestamp-wrapper"><time class="timestamp" datetime="2026-05-31">[2026-05-31 Sun]</time></span>: Updated transcript and added a link to <a href="https://sachachua.com/blog/2026/05/karthik-s-notes-on-emacs-chat-24-omar-antolin-camarena/">Karthik's notes</a>.
</p>

</div>

<p>
I chatted with Omar Antolín Camarena about Emacs, keyboard macros, temporary buffers, Embark, and other workflow tips.
<video preload="none" controls="1" src="https://archive.org/download/emacs-chat-24-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena" poster="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/2026-05-17_18-03-54.png" type="nil"><track kind="subtitles" label="Captions" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena.vtt" srclang="en" default=""><span>Video not supported. Thumbnail:<br><img src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/2026-05-17_18-03-54.png" alt="Thumbnail"></span></video>
</p>

<p>
<a href="https://archive.org/details/emacs-chat-24-omar-antolin-camarena/">View in the Internet Archive</a>, <a href="https://sachachua.com/blog/feed/index.xml#ID-emacs-chat-24-omar-antolin-camarena-transcript">read the transcript online</a>, <a href="https://youtube.com/live/M7-dJb2GTN4">watch or comment on YouTube</a>, download <a href="https://archive.org/download/emacs-chat-24-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena.mp3">the audio</a> or <a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena.vtt">the transcript</a>, or <a href="mailto:sacha@sachachua.com">e-mail me</a>.
</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/placeholder">oantolin/placeholder: Emacs package to treat any buffer as a template with placeholders to fill-in · 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>
<li><a href="https://toobnix.org/w/752ix2RNx5BijosuYtSGCv">#Emacs #Embark with Omar Antolin, Ramin Honary and Kent Pitman #lisp and more #interview #lispyGopherClimate - toobnix</a></li>

<li><a href="https://sachachua.com/blog/2026/05/karthik-s-notes-on-emacs-chat-24-omar-antolin-camarena/">Karthik's notes on Emacs Chat 24: Omar Antolin Camarena</a></li>
<li></li>
</ul>
<p>
You can add the iCal for upcoming Emacs Chat episodes to your calendar. <a href="https://sachachua.com/topic/emacs-chat/upcoming-emacs-chats.ics">https://sachachua.com/topic/emacs-chat/upcoming-emacs-chats.ics</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 id="outline-container-emacs-chats-emacs-chat-24-omar-antolin-camarena-chapters" class="outline-3">
<h3 id="emacs-chats-emacs-chat-24-omar-antolin-camarena-chapters"><a href="https://sachachua.com/blog/feed/index.xml#emacs-chats-emacs-chat-24-omar-antolin-camarena-chapters">Chapters</a></h3>
<div class="outline-text-3" id="text-emacs-chats-emacs-chat-24-omar-antolin-camarena-chapters">
<p>
</p><ul class="org-ul">
<li><span class="audio-time" data-start="0.031" data-stop="2.117">0:00</span> Ignore this part</li>
<li><span class="audio-time" data-start="18.170" data-stop="21.917">0:18</span> Opening</li>
<li><span class="audio-time" data-start="46.000" data-stop="49.309">0:46</span> How did you get into Emacs in the first place?</li>
<li><span class="audio-time" data-start="361.253" data-stop="363.958">6:01</span> Repeating edits</li>
<li><span class="audio-time" data-start="448.726" data-stop="453.415">7:28</span> dot-mode: repeating commands</li>
<li><span class="audio-time" data-start="564.410" data-stop="567.534">9:24</span> block-undo: undo things as a chunk</li>

<li><span class="audio-time" data-start="629.139" data-stop="631.102">10:29</span> Starting and stopping keyboard macros</li>

<li><span class="audio-time" data-start="735.848" data-stop="741.857">12:15</span> Keycast and Embark</li>

<li><span class="audio-time" data-start="813.575" data-stop="814.716">13:33</span> apply-macro-to-lines-of-paragraph</li>
<li><span class="audio-time" data-start="994.070" data-stop="997.474">16:34</span> embark-on-last-message</li>
<li><span class="audio-time" data-start="1086.124" data-stop="1086.565">18:06</span> tmp-buffer with a major mode</li>

<li><span class="audio-time" data-start="1166.532" data-stop="1171.279">19:26</span> placeholder</li>

<li><span class="audio-time" data-start="1238.605" data-stop="1240.307">20:38</span> enable-recursive-minibuffers</li>
<li><span class="audio-time" data-start="1377.928" data-stop="1380.210">22:57</span> Overriding embark-select</li>

<li><span class="audio-time" data-start="1412.967" data-stop="1415.823">23:32</span> quick-calc</li>

<li><span class="audio-time" data-start="1590.600" data-stop="1593.080">26:30</span> Multiple cursors</li>
<li><span class="audio-time" data-start="1660.582" data-stop="1662.105">27:40</span> Block-undo and regular undo</li>
<li><span class="audio-time" data-start="1733.600" data-stop="1736.085">28:53</span> Cycling through Embark targets</li>
<li><span class="audio-time" data-start="1899.840" data-stop="1901.855">31:39</span> Imenu for navigation</li>
<li><span class="audio-time" data-start="1971.993" data-stop="1974.556">32:51</span> Collaboration</li>
<li><span class="audio-time" data-start="2281.080" data-stop="2282.638">38:01</span> Technology adoption and Emacs packages</li>
<li><span class="audio-time" data-start="2406.100" data-stop="2409.479">40:06</span> Personal packages and naming conventions</li>
<li><span class="audio-time" data-start="2546.500" data-stop="2548.574">42:26</span> find-file-at-point and directory names</li>

<li><span class="audio-time" data-start="2629.200" data-stop="2631.734">43:49</span> The value of using Emacs’s APIs</li>
<li><span class="audio-time" data-start="2696.840" data-stop="2698.175">44:56</span> org-ql and usual files</li>

<li><span class="audio-time" data-start="2826.260" data-stop="2827.596">47:06</span> Shortcuts for org-ql search syntax</li>
<li><span class="audio-time" data-start="2863.400" data-stop="2865.651">47:43</span> Org TODO states: TODO, WAIT, DONE, NOPE</li>

<li><span class="audio-time" data-start="2906.460" data-stop="2908.199">48:26</span> The inserter macro</li>

<li><span class="audio-time" data-start="3005.760" data-stop="3007.302">50:05</span> luggage: generative art experiments</li>

<li><span class="audio-time" data-start="3229.383" data-stop="3230.805">53:49</span> Teaching and Emacs</li>
<li><span class="audio-time" data-start="3293.187" data-stop="3293.888">54:53</span> The print10 generator</li>

<li><span class="audio-time" data-start="3383.600" data-stop="3386.598">56:23</span> arXiv</li>

<li><span class="audio-time" data-start="3509.103" data-stop="3510.727">58:29</span> Toggle keymap</li>

<li><span class="audio-time" data-start="3654.970" data-stop="3658.619">1:00:54</span> isearch-delete-wrong</li>

<li><span class="audio-time" data-start="3794.105" data-stop="3797.269">1:03:14</span> isearch - continue from the beginning of the match</li>

<li><span class="audio-time" data-start="3912.460" data-stop="3916.084">1:05:12</span> Using keymaps to remember sets of commands</li>
<li><span class="audio-time" data-start="3964.981" data-stop="3966.383">1:06:04</span> Other things from the config</li>
</ul>

<p></p>
</div>
</div>
<div id="outline-container-emacs-chats-emacs-chat-24-omar-antolin-camarena-transcript" class="outline-3">
<h3 id="emacs-chats-emacs-chat-24-omar-antolin-camarena-transcript"><a href="https://sachachua.com/blog/feed/index.xml#emacs-chats-emacs-chat-24-omar-antolin-camarena-transcript">Transcript</a></h3>
<div class="outline-text-3" id="text-emacs-chats-emacs-chat-24-omar-antolin-camarena-transcript">
<details class="code-details"><a name="ID-emacs-chat-24-omar-antolin-camarena-transcript"></a><summary>Expand this to see the transcript and screenshots</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>Ignore this part</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="0.031000" data-stop="2.117000"><strong class="speaker-name">Sacha:</strong>  Cut off at, you know, roughly an</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2.217000" data-stop="3.702000">hour and seven minutes from now.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3.762000" data-stop="5.347000">She's going to come out and have lunch.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="6.751000" data-stop="7.072000">Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="7.593000" data-stop="7.914000">All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="7.934000" data-stop="9.619000">Going live.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="13.160000" data-stop="17.008000">Alright folks, we are here a little bit early.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="18.000000">0:18</span> <strong>Opening</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="18.170000" data-stop="21.917000"><strong class="speaker-name">Sacha:</strong>  This is Emacs Chat 24 with Omar Antolin Camarena,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="22.378000" data-stop="24.963000">whom we know from Embark and Orderless and a lot</span> <span class="audio-time caption" data-speaker="Sacha" data-start="25.003000" data-stop="27.388000">of other little packages that I personally use on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="27.468000" data-stop="28.190000">a daily basis.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="28.210000" data-stop="29.693000">I'm very much looking forward to this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="29.773000" data-stop="31.656000">conversation.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="31.676000" data-stop="33.480000"><strong class="speaker-name">Omar:</strong>  Yeah, so am I. Very excited.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="34.270000" data-stop="36.676000"><strong class="speaker-name">Sacha:</strong>  Of course, before we dive into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="36.736000" data-stop="40.205000">all these lovely details, tell us a little bit</span> <span class="audio-time caption" data-speaker="Sacha" data-start="40.225000" data-stop="41.288000">more about your context.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="41.509000" data-stop="43.454000">You're a researcher at the Mathematics</span> <span class="audio-time caption" data-speaker="Sacha" data-start="43.554000" data-stop="43.995000">Institute.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="44.055000" data-stop="45.940000">I can see why Emacs would be a great fit for that.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="46.000000">0:46</span> <strong>How did you get into Emacs in the first place?</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="46.000000" data-stop="49.309000"><strong class="speaker-name">Sacha:</strong> How did you get into Emacs in the first place?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="49.795000" data-stop="52.740000"><strong class="speaker-name">Omar:</strong>  I think it's just by virtue</span> <span class="audio-time caption" data-speaker="Omar" data-start="52.780000" data-stop="53.361000">of being old.</span> <span class="audio-time caption" data-speaker="Omar" data-start="53.441000" data-stop="55.945000">When I started out looking for a text editor,</span> <span class="audio-time caption" data-speaker="Omar" data-start="55.985000" data-stop="57.687000">there were not that many great options.</span> <span class="audio-time caption" data-speaker="Omar" data-start="58.328000" data-stop="63.136000">When I was a teenager, 30 years ago, I</span> <span class="audio-time caption" data-speaker="Omar" data-start="63.276000" data-stop="65.459000">decided to install Linux because I heard about it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="65.559000" data-stop="68.063000">That was the era where you went to a newsstand</span> <span class="audio-time caption" data-speaker="Omar" data-start="68.123000" data-stop="70.026000">and you bought a Linux magazine that came with a</span> <span class="audio-time caption" data-speaker="Omar" data-start="70.066000" data-stop="73.452000">CD, and I installed Linux from that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="73.472000" data-stop="77.558000">I think it was Slackware, maybe.</span> <span class="audio-time caption" data-speaker="Omar" data-start="77.538000" data-stop="82.511000">I was already a hobby computer programmer.</span> <span class="audio-time caption" data-speaker="Omar" data-start="82.751000" data-stop="86.000000">I've been learning programming languages since I</span> <span class="audio-time caption" data-speaker="Omar" data-start="86.060000" data-stop="88.707000">was a child, when my father gave me my first</span> <span class="audio-time caption" data-speaker="Omar" data-start="88.747000" data-stop="90.872000">computer.</span> <span class="audio-time caption" data-speaker="Omar" data-start="91.392000" data-stop="93.816000">I think that was the main reason I switched to</span> <span class="audio-time caption" data-speaker="Omar" data-start="93.856000" data-stop="94.116000">Linux.</span> <span class="audio-time caption" data-speaker="Omar" data-start="94.337000" data-stop="96.701000">I noticed that people wrote many more</span> <span class="audio-time caption" data-speaker="Omar" data-start="97.121000" data-stop="99.665000">interpreters and compilers for Linux than for</span> <span class="audio-time caption" data-speaker="Omar" data-start="99.706000" data-stop="100.026000">Windows.</span> <span class="audio-time caption" data-speaker="Omar" data-start="100.587000" data-stop="102.430000">That's why I wanted to use Linux.</span> <span class="audio-time caption" data-speaker="Omar" data-start="102.650000" data-stop="104.734000">I needed a text editor that handled all sorts of</span> <span class="audio-time caption" data-speaker="Omar" data-start="104.814000" data-stop="106.096000">weird programming languages.</span> <span class="audio-time caption" data-speaker="Omar" data-start="107.278000" data-stop="110.022000">I was looking for a general purpose one, not an</span> <span class="audio-time caption" data-speaker="Omar" data-start="110.123000" data-stop="110.443000">IDE.</span> <span class="audio-time caption" data-speaker="Omar" data-start="110.904000" data-stop="114.109000">I used IDEs, younger ones, like Turbo Pascal.</span> <span class="audio-time caption" data-speaker="Omar" data-start="114.089000" data-stop="116.011000">Probably that was the main one.</span> <span class="audio-time caption" data-speaker="Omar" data-start="116.111000" data-stop="116.752000">I loved that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="116.772000" data-stop="117.293000">It was great.</span> <span class="audio-time caption" data-speaker="Omar" data-start="117.973000" data-stop="120.737000">I went through the Linux distro, tried a</span> <span class="audio-time caption" data-speaker="Omar" data-start="120.797000" data-stop="124.779000">bunch of editors.</span> <span class="audio-time caption" data-speaker="Omar" data-start="124.780000" data-stop="128.225000">I settled on Emacs and Emacs-like editors.</span> <span class="audio-time caption" data-speaker="Omar" data-start="128.324000" data-stop="131.389000">I tried Jove, which stands for Jonathan's Own</span> <span class="audio-time caption" data-speaker="Omar" data-start="131.429000" data-stop="132.350000">Version of Emacs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="134.292000" data-stop="136.975000">And there was also an editor called...</span> <span class="audio-time caption" data-speaker="Omar" data-start="137.258000" data-stop="138.140000">Oh, I forget.</span> <span class="audio-time caption" data-speaker="Omar" data-start="138.160000" data-stop="140.787000">There was one that had its own extension language</span> <span class="audio-time caption" data-speaker="Omar" data-start="140.847000" data-stop="141.750000">called S-Lang.</span> <span class="audio-time caption" data-speaker="Omar" data-start="142.492000" data-stop="143.655000">I used that for a while.</span> <span class="audio-time caption" data-speaker="Omar" data-start="144.276000" data-stop="148.327000">A little later, I remember using Slava Pestov's</span> <span class="audio-time caption" data-speaker="Omar" data-start="148.427000" data-stop="149.129000">jEdit.</span> <span class="audio-time caption" data-speaker="Omar" data-start="149.149000" data-stop="151.335000">I really like that, too, although</span> <span class="audio-time caption" data-speaker="Omar" data-start="151.720000" data-stop="154.005000">Java is not that fun to write extensions in.</span> <span class="audio-time caption" data-speaker="Omar" data-start="156.771000" data-stop="158.976000">I was looking for an editor and I wanted it to be</span> <span class="audio-time caption" data-speaker="Omar" data-start="159.016000" data-stop="161.200000">extensible, which is funny because I hardly ever</span> <span class="audio-time caption" data-speaker="Omar" data-start="161.240000" data-stop="161.621000">extend it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="162.263000" data-stop="164.868000">I just wanted there to be the option.</span> <span class="audio-time caption" data-speaker="Omar" data-start="165.129000" data-stop="166.532000">I used Emacs for a long time.</span> <span class="audio-time caption" data-speaker="Omar" data-start="167.153000" data-stop="169.037000">But when I got serious at</span> <span class="audio-time caption" data-speaker="Omar" data-start="169.422000" data-stop="171.400000">being efficient at text-editing,</span> <span class="audio-time caption" data-speaker="Omar" data-start="171.401000" data-stop="173.433000">I actually switched to Vim.</span> <span class="audio-time caption" data-speaker="Omar" data-start="173.434000" data-stop="178.918000">I switched back to Emacs many years later because</span> <span class="audio-time caption" data-speaker="Omar" data-start="178.998000" data-stop="181.523000">of one very specific problem in Vim.</span> <span class="audio-time caption" data-speaker="Omar" data-start="181.543000" data-stop="184.688000">The syntax highlighting for LaTeX files is pretty</span> <span class="audio-time caption" data-speaker="Omar" data-start="184.728000" data-stop="185.490000">slow.</span> <span class="audio-time caption" data-speaker="Omar" data-start="185.510000" data-stop="187.253000">On a normal computer, you won't notice that</span> <span class="audio-time caption" data-speaker="Omar" data-start="187.293000" data-stop="187.693000">it's slow.</span> <span class="audio-time caption" data-speaker="Omar" data-start="188.034000" data-stop="191.901000">But I had a little netbook that was like 10 years</span> <span class="audio-time caption" data-speaker="Omar" data-start="191.981000" data-stop="194.485000">old when I had it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="194.465000" data-stop="197.850000">I took it to class to take notes in math</span> <span class="audio-time caption" data-speaker="Omar" data-start="197.870000" data-stop="198.832000">courses.</span> <span class="audio-time caption" data-speaker="Omar" data-start="198.852000" data-stop="204.941000">I was writing in LaTeX Live with a bunch of</span> <span class="audio-time caption" data-speaker="Omar" data-start="205.021000" data-stop="206.143000">macros to insert things.</span> <span class="audio-time caption" data-speaker="Omar" data-start="206.703000" data-stop="210.449000">The syntax highlighting meant that Vim lagged</span> <span class="audio-time caption" data-speaker="Omar" data-start="210.629000" data-stop="212.432000">behind my typing.</span> <span class="audio-time caption" data-speaker="Omar" data-start="212.452000" data-stop="214.856000">I'm not that fast of a typist, so it was</span> <span class="audio-time caption" data-speaker="Omar" data-start="215.036000" data-stop="215.557000">problematic.</span> <span class="audio-time caption" data-speaker="Omar" data-start="216.158000" data-stop="218.381000">The Vim manual has an entire section on what</span> <span class="audio-time caption" data-speaker="Omar" data-start="218.421000" data-stop="220.424000">to do if text highlighting is slow.</span> <span class="audio-time caption" data-speaker="Omar" data-start="220.664000" data-stop="223.088000">You can look for it with</span> <span class="audio-time caption" data-speaker="Omar" data-start="223.372000" data-stop="225.660000">Vim :help tex-slow</span> <span class="audio-time caption" data-speaker="Omar" data-start="225.800000" data-stop="230.597000">That pops up the right section of the manual.</span> <span class="audio-time caption" data-speaker="Omar" data-start="231.573000" data-stop="233.776000">I tried everything that it said there and they</span> <span class="audio-time caption" data-speaker="Omar" data-start="233.816000" data-stop="236.159000">all made it slightly faster, but none of them</span> <span class="audio-time caption" data-speaker="Omar" data-start="236.199000" data-stop="237.921000">really solved the lag, other than turning off</span> <span class="audio-time caption" data-speaker="Omar" data-start="237.961000" data-stop="238.622000">syntax highlighting.</span> <span class="audio-time caption" data-speaker="Omar" data-start="239.123000" data-stop="240.925000">I turned off syntax highlighting and took</span> <span class="audio-time caption" data-speaker="Omar" data-start="241.005000" data-stop="243.388000">notes for like half a semester, and then I decided</span> <span class="audio-time caption" data-speaker="Omar" data-start="243.429000" data-stop="246.713000">to try Emacs on that old netbook. Its syntax</span> <span class="audio-time caption" data-speaker="Omar" data-start="246.753000" data-stop="248.115000">highlighting was perfectly snappy.</span> <span class="audio-time caption" data-speaker="Omar" data-start="248.515000" data-stop="250.117000">This is just a weird thing in Vim that</span> <span class="audio-time caption" data-speaker="Omar" data-start="250.278000" data-stop="253.321000">specifically LaTeX syntax highlighting is slow.</span> <span class="audio-time caption" data-speaker="Omar" data-start="253.402000" data-stop="257.547000">I never noticed it being slow in any other...</span> <span class="audio-time caption" data-speaker="Omar" data-start="258.100000" data-stop="260.142000">I don't know what Vim calls them, what Emacs</span> <span class="audio-time caption" data-speaker="Omar" data-start="260.163000" data-stop="261.065000">would call a major mode.</span> <span class="audio-time caption" data-speaker="Omar" data-start="261.987000" data-stop="264.090000">It was only ever slow in LaTeX, but that was</span> <span class="audio-time caption" data-speaker="Omar" data-start="264.150000" data-stop="265.753000">enough to get me to try Emacs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="266.093000" data-stop="269.239000">But by then in Vim, I had learned that you want</span> <span class="audio-time caption" data-speaker="Omar" data-start="269.940000" data-stop="272.785000">very granular motion commands to move by word or</span> <span class="audio-time caption" data-speaker="Omar" data-start="272.845000" data-stop="275.509000">by sentence, and you want to be able to be placed</span> <span class="audio-time caption" data-speaker="Omar" data-start="275.569000" data-stop="277.292000">at the end of the word or at the beginning of the</span> <span class="audio-time caption" data-speaker="Omar" data-start="277.332000" data-stop="278.995000">word.</span> <span class="audio-time caption" data-speaker="Omar" data-start="278.975000" data-stop="283.419000">All of these higher-level editing constructs that</span> <span class="audio-time caption" data-speaker="Omar" data-start="283.459000" data-stop="285.141000">Vim really pushes you toward.</span> <span class="audio-time caption" data-speaker="Omar" data-start="285.581000" data-stop="287.543000">In Emacs, I hadn't done any of that before.</span> <span class="audio-time caption" data-speaker="Omar" data-start="287.583000" data-stop="288.984000">I moved around with the arrow keys.</span> <span class="audio-time caption" data-speaker="Omar" data-start="290.225000" data-stop="292.447000">But when I came back to Emacs after having been</span> <span class="audio-time caption" data-speaker="Omar" data-start="292.487000" data-stop="294.069000">in Vim, then I wanted to get serious about</span> <span class="audio-time caption" data-speaker="Omar" data-start="294.109000" data-stop="295.810000">editing efficiently in Emacs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="296.491000" data-stop="299.213000">I think I actually like it better than Vim</span> <span class="audio-time caption" data-speaker="Omar" data-start="299.233000" data-stop="299.754000">now.</span> <span class="audio-time caption" data-speaker="Omar" data-start="299.774000" data-stop="304.098000">But yeah, that's why I switched back to Emacs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="304.218000" data-stop="307.260000">It's just this quirk that LaTeX syntax</span> <span class="audio-time caption" data-speaker="Omar" data-start="307.441000" data-stop="308.982000">highlighting is slow in Vim.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="308.962000" data-stop="310.244000"><strong class="speaker-name">Sacha:</strong>  Well, their loss.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="310.685000" data-stop="313.350000">So you tried a whole bunch of other editors.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="313.690000" data-stop="316.435000">You got into Vim because you wanted to be more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="316.495000" data-stop="317.016000">efficient.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="318.699000" data-stop="322.286000">Getting deeply into Vim was great, but you ran</span> <span class="audio-time caption" data-speaker="Sacha" data-start="322.346000" data-stop="323.027000">into that bug.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="323.247000" data-stop="325.351000">So you switched to Emacs because it was more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="325.411000" data-stop="328.236000">efficient, more performant.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="328.216000" data-stop="331.901000">All that experience with Vim has made you a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="331.941000" data-stop="333.924000">better Emacs user because now you're like, okay,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="333.944000" data-stop="336.188000">you appreciate all the navigation and movement.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="336.528000" data-stop="338.010000">And you were telling me over email...</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="338.070000" data-stop="340.394000"><strong class="speaker-name">Omar:</strong>  Things I missed from Vim.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="340.414000" data-stop="340.774000"><strong class="speaker-name">Sacha:</strong>  Yeah,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="340.794000" data-stop="343.979000">You were telling me over email how the kind of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="344.019000" data-stop="347.304000">the keyboard macros that you got used to in Vim,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="348.245000" data-stop="350.428000">you've translated some of that over to Emacs and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="350.508000" data-stop="351.390000">how you use them.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="351.410000" data-stop="353.633000">We definitely want to get into that.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="353.798000" data-stop="355.321000"><strong class="speaker-name">Omar:</strong>  Keyboard macro-like things.</span> <span class="audio-time caption" data-speaker="Omar" data-start="355.421000" data-stop="358.227000">In Emacs, for a while, I used multiple-cursors.</span> <span class="audio-time caption" data-speaker="Omar" data-start="359.068000" data-stop="360.752000">I liked it a lot.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="361.000000">6:01</span> <strong>Repeating edits</strong></div><p></p><span class="audio-time caption" data-speaker="Omar" data-start="361.253000" data-stop="363.958000"><strong class="speaker-name">Omar:</strong> One thing I really missed from Vim is the dot</span> <span class="audio-time caption" data-speaker="Omar" data-start="363.978000" data-stop="366.723000">command that repeats the last edit.</span> <span class="audio-time caption" data-speaker="Omar" data-start="367.405000" data-stop="369.609000">But in Vim, edits are composite things.</span> <span class="audio-time caption" data-speaker="Omar" data-start="369.709000" data-stop="373.697000">You have a command to change</span> <span class="audio-time caption" data-speaker="Omar" data-start="373.677000" data-stop="375.201000">a sentence, for example.</span> <span class="audio-time caption" data-speaker="Omar" data-start="375.743000" data-stop="377.949000">That will delete the current sentence,</span> <span class="audio-time caption" data-speaker="Omar" data-start="377.969000" data-stop="380.256000">put you into insert mode, let you type a new</span> <span class="audio-time caption" data-speaker="Omar" data-start="380.296000" data-stop="382.703000">sentence, and when you press escape, that</span> <span class="audio-time caption" data-speaker="Omar" data-start="382.763000" data-stop="383.465000">concludes the edit.</span> <span class="audio-time caption" data-speaker="Omar" data-start="383.485000" data-stop="385.731000">The whole edit is the operation of deleting</span> <span class="audio-time caption" data-speaker="Omar" data-start="385.772000" data-stop="387.557000">the current sentence and replacing it with the</span> <span class="audio-time caption" data-speaker="Omar" data-start="387.617000" data-stop="389.121000">specific thing you typed.</span> <span class="audio-time caption" data-speaker="Omar" data-start="389.101000" data-stop="392.106000">That is a thing you can repeat.</span> <span class="audio-time caption" data-speaker="Omar" data-start="392.387000" data-stop="399.018000">The repeatable edit commands in Vim are much</span> <span class="audio-time caption" data-speaker="Omar" data-start="399.459000" data-stop="403.746000">coarser and more conceptually appropriate units</span> <span class="audio-time caption" data-speaker="Omar" data-start="403.806000" data-stop="404.407000">than in Emacs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="404.427000" data-stop="406.591000">The repeat command repeats the last Emacs</span> <span class="audio-time caption" data-speaker="Omar" data-start="406.611000" data-stop="408.915000">command, but everything runs a command in Emacs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="408.895000" data-stop="410.778000">You can repeat inserting the last character.</span> <span class="audio-time caption" data-speaker="Omar" data-start="410.838000" data-stop="411.720000">That's not very useful.</span> <span class="audio-time caption" data-speaker="Omar" data-start="411.780000" data-stop="415.486000">You want to repeat at least the whole consecutive</span> <span class="audio-time caption" data-speaker="Omar" data-start="415.586000" data-stop="417.389000">stretch of characters you inserted.</span> <span class="audio-time caption" data-speaker="Omar" data-start="417.850000" data-stop="419.753000">Undo in Emacs does do that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="420.254000" data-stop="421.476000">Undo coalesces.</span> <span class="audio-time caption" data-speaker="Omar" data-start="421.756000" data-stop="424.461000">If you type a bunch of characters and you undo,</span> <span class="audio-time caption" data-speaker="Omar" data-start="425.102000" data-stop="426.665000">it doesn't undo them one by one.</span> <span class="audio-time caption" data-speaker="Omar" data-start="426.685000" data-stop="427.867000">It undoes them.</span> <span class="audio-time caption" data-speaker="Omar" data-start="428.127000" data-stop="430.932000">It clumps them depending on pauses between your</span> <span class="audio-time caption" data-speaker="Omar" data-start="430.972000" data-stop="431.713000">typing.</span> <span class="audio-time caption" data-speaker="Omar" data-start="431.693000" data-stop="432.675000">That's fine.</span> <span class="audio-time caption" data-speaker="Omar" data-start="432.715000" data-stop="434.599000">I want that sort of coarseness.</span> <span class="audio-time caption" data-speaker="Omar" data-start="434.819000" data-stop="436.703000">I don't want to undo every single step at a time.</span> <span class="audio-time caption" data-speaker="Omar" data-start="436.863000" data-stop="438.586000">Similarly, when you repeat things, you don't</span> <span class="audio-time caption" data-speaker="Omar" data-start="438.606000" data-stop="440.530000">want to repeat every single step.</span> <span class="audio-time caption" data-speaker="Omar" data-start="440.971000" data-stop="444.337000">I think Vim has like a pretty good unit of</span> <span class="audio-time caption" data-speaker="Omar" data-start="445.139000" data-stop="446.963000">things you can repeat.</span> <span class="audio-time caption" data-speaker="Omar" data-start="446.983000" data-stop="448.566000">I was missing that in Emacs.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="448.000000">7:28</span> <strong>dot-mode: repeating commands</strong></div><p></p><span class="audio-time caption" data-speaker="Omar" data-start="448.726000" data-stop="453.415000"><strong class="speaker-name">Omar:</strong> There's a package called dot-mode</span> <span class="audio-time caption" data-speaker="Omar" data-start="453.597000" data-stop="455.780000">which I used to use and I like a lot.</span> <span class="audio-time caption" data-speaker="Omar" data-start="456.280000" data-stop="460.445000">I'm not exactly sure why I stopped using it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="462.467000" data-stop="465.771000">So this gives you a more Vim-like experience for</span> <span class="audio-time caption" data-speaker="Omar" data-start="465.991000" data-stop="470.096000">repeating commands in Emacs and what it does is</span> <span class="audio-time caption" data-speaker="Omar" data-start="470.136000" data-stop="475.382000">that it watches you as you type and it constantly</span> <span class="audio-time caption" data-speaker="Omar" data-start="475.462000" data-stop="478.947000">makes a keyboard macro out of the last</span> <span class="audio-time caption" data-speaker="Omar" data-start="479.027000" data-stop="482.811000">consecutive stretch of buffer modifying commands.</span> <span class="audio-time caption" data-speaker="Omar" data-start="483.449000" data-stop="486.573000">So, for example, in Vim, if you want to change a</span> <span class="audio-time caption" data-speaker="Omar" data-start="486.633000" data-stop="488.415000">word, there is a change word command, and you</span> <span class="audio-time caption" data-speaker="Omar" data-start="488.435000" data-stop="491.099000">type <code>c w</code>, and then you change the word, and then</span> <span class="audio-time caption" data-speaker="Omar" data-start="491.139000" data-stop="492.060000">that thing gets repeated.</span> <span class="audio-time caption" data-speaker="Omar" data-start="492.461000" data-stop="494.483000">In Emacs, to change a word, it's not a single</span> <span class="audio-time caption" data-speaker="Omar" data-start="494.563000" data-stop="494.924000">unit, right?</span> <span class="audio-time caption" data-speaker="Omar" data-start="494.944000" data-stop="497.387000">You delete the word, and then you type in</span> <span class="audio-time caption" data-speaker="Omar" data-start="497.427000" data-stop="500.811000">something new, and each character you type is</span> <span class="audio-time caption" data-speaker="Omar" data-start="501.773000" data-stop="506.138000">running insert-char. dot-mode will coalesce</span> <span class="audio-time caption" data-speaker="Omar" data-start="506.259000" data-stop="508.361000">all of that into a single keyboard macro that you</span> <span class="audio-time caption" data-speaker="Omar" data-start="508.381000" data-stop="509.743000">can repeat, right?</span> <span class="audio-time caption" data-speaker="Omar" data-start="509.723000" data-stop="513.493000">If you do some motion command that doesn't modify</span> <span class="audio-time caption" data-speaker="Omar" data-start="513.813000" data-stop="516.139000">the buffer, and then you delete a word and type a</span> <span class="audio-time caption" data-speaker="Omar" data-start="516.179000" data-stop="518.986000">new word, everything from the deletion to the end</span> <span class="audio-time caption" data-speaker="Omar" data-start="519.006000" data-stop="521.373000">of the typing would be what dot mode repeats.</span> <span class="audio-time caption" data-speaker="Omar" data-start="521.653000" data-stop="523.999000">The experience is actually very similar to</span> <span class="audio-time caption" data-speaker="Omar" data-start="524.120000" data-stop="526.686000">using dot in Vim.</span> <span class="audio-time caption" data-speaker="Omar" data-start="526.666000" data-stop="528.209000">In my opinion, a little bit better,</span> <span class="audio-time caption" data-speaker="Omar" data-start="528.269000" data-stop="530.594000">because in Vim, I often had this problem.</span> <span class="audio-time caption" data-speaker="Omar" data-start="530.754000" data-stop="533.359000">It gets you into this competitive video game</span> <span class="audio-time caption" data-speaker="Omar" data-start="533.399000" data-stop="534.502000">mentality.</span> <span class="audio-time caption" data-speaker="Omar" data-start="534.602000" data-stop="536.726000">How do I do the edit in a single repeatable</span> <span class="audio-time caption" data-speaker="Omar" data-start="536.766000" data-stop="537.087000">command?</span> <span class="audio-time caption" data-speaker="Omar" data-start="537.107000" data-stop="539.271000">I want to be able to use dot to do this again.</span> <span class="audio-time caption" data-speaker="Omar" data-start="539.672000" data-stop="541.536000">So that you have to think ahead.</span> <span class="audio-time caption" data-speaker="Omar" data-start="541.896000" data-stop="543.680000">It's kind of distracting.</span> <span class="audio-time caption" data-speaker="Omar" data-start="543.700000" data-stop="546.105000">Of course, if a sensible person would not get</span> <span class="audio-time caption" data-speaker="Omar" data-start="546.405000" data-stop="548.269000">caught up in that, it would just...</span> <span class="audio-time caption" data-speaker="Omar" data-start="548.249000" data-stop="549.851000">do the edit whichever way they can,</span> <span class="audio-time caption" data-speaker="Omar" data-start="550.211000" data-stop="552.575000">but I wanted to maximize the repeatability.</span> <span class="audio-time caption" data-speaker="Omar" data-start="554.157000" data-stop="556.179000">dot-mode lets you be a little bit more relaxed.</span> <span class="audio-time caption" data-speaker="Omar" data-start="556.439000" data-stop="560.124000">It still catches all of the thing that should</span> <span class="audio-time caption" data-speaker="Omar" data-start="560.164000" data-stop="561.426000">have been a single edit.</span> <span class="audio-time caption" data-speaker="Omar" data-start="561.446000" data-stop="562.928000">So yeah, I like it a lot.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="563.508000" data-stop="564.390000"><strong class="speaker-name">Sacha:</strong>  So that's dot-mode.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="564.000000">9:24</span> <strong>block-undo: undo things as a chunk
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-01-06-05-633.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-01-06-05-633.jpg" alt="image from video 01:06:05.633" data-time="01:06:05.633"></a><span class="audio-time caption" data-speaker="Sacha" data-start="564.410000" data-stop="567.534000"><strong class="speaker-name">Sacha:</strong> You also mentioned block-undo.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="568.375000" data-stop="571.799000"><strong class="speaker-name">Omar:</strong>  That is a package of mine I can</span> <span class="audio-time caption" data-speaker="Omar" data-start="571.939000" data-stop="572.620000">show you.</span> <span class="audio-time caption" data-speaker="Omar" data-start="573.629000" data-stop="576.293000">That's the entire package.</span> <span class="audio-time caption" data-speaker="Omar" data-start="576.734000" data-stop="580.259000">It just uses this <code>with-undo-amalgamate</code> command.</span> <span class="audio-time caption" data-speaker="Omar" data-start="580.279000" data-stop="584.246000">Whatever you run inside <code>with-undo-amalgamate</code></span> <span class="audio-time caption" data-speaker="Omar" data-start="584.566000" data-stop="586.549000">undoes in a single step.</span> <span class="audio-time caption" data-speaker="Omar" data-start="586.589000" data-stop="589.714000">I use it for executions of keyboard macros.</span> <span class="audio-time caption" data-speaker="Omar" data-start="589.694000" data-stop="594.860000">A keyboard macro, if you run it all over the</span> <span class="audio-time caption" data-speaker="Omar" data-start="594.901000" data-stop="597.604000">place, if you apply it to every line in a region,</span> <span class="audio-time caption" data-speaker="Omar" data-start="598.024000" data-stop="601.349000">or you just repeat it a hundred times, that is a</span> <span class="audio-time caption" data-speaker="Omar" data-start="601.449000" data-stop="602.851000">lot of tiny individual edits.</span> <span class="audio-time caption" data-speaker="Omar" data-start="603.351000" data-stop="605.494000">If you undo that, you do not want to undo them</span> <span class="audio-time caption" data-speaker="Omar" data-start="606.115000" data-stop="606.635000">one by one.</span> <span class="audio-time caption" data-speaker="Omar" data-start="607.216000" data-stop="611.221000">This just makes them all undo in a single step,</span> <span class="audio-time caption" data-speaker="Omar" data-start="611.541000" data-stop="613.023000">which is what Vim does, actually.</span> <span class="audio-time caption" data-speaker="Omar" data-start="613.063000" data-stop="614.565000">This is one of the things that I said, no,</span> <span class="audio-time caption" data-speaker="Omar" data-start="614.605000" data-stop="615.426000">Vim has this right.</span> <span class="audio-time caption" data-speaker="Omar" data-start="615.486000" data-stop="616.748000">I need this in Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="617.605000" data-stop="619.067000"><strong class="speaker-name">Sacha:</strong>  Okay, that makes sense.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="619.928000" data-stop="623.232000">So dot-mode is more like implicit keyboard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="623.272000" data-stop="625.034000">macro boundary definitions.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="626.015000" data-stop="628.138000">This one is like the undo-ness of it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="629.000000">10:29</span> <strong>Starting and stopping keyboard macros
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-11-29-533.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-11-29-533.jpg" alt="image from video 00:11:29.533" data-time="00:11:29.533"></a><span class="audio-time caption" data-speaker="Sacha" data-start="629.139000" data-stop="631.102000"><strong class="speaker-name">Sacha:</strong> I saw in your config, you also have more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="631.162000" data-stop="633.385000">convenient shortcuts for starting and stopping</span> <span class="audio-time caption" data-speaker="Sacha" data-start="633.425000" data-stop="634.766000">keyboard macros.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="634.866000" data-stop="640.473000">It's like a modifier and the keystroke instead</span> <span class="audio-time caption" data-speaker="Sacha" data-start="640.513000" data-stop="642.956000">of two or like function keys, which are further</span> <span class="audio-time caption" data-speaker="Sacha" data-start="643.017000" data-stop="643.297000">away.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="643.477000" data-stop="645.840000">I'm guessing you use keyboard macros a lot.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="646.900000" data-stop="647.541000"><strong class="speaker-name">Omar:</strong>  Yeah, I do.</span> <span class="audio-time caption" data-speaker="Omar" data-start="650.524000" data-stop="654.849000">When I got rid of dot-mode, it was an experiment</span> <span class="audio-time caption" data-speaker="Omar" data-start="654.889000" data-stop="657.993000">to see if I could just remember to record</span> <span class="audio-time caption" data-speaker="Omar" data-start="658.053000" data-stop="659.494000">keyboard macros.</span> <span class="audio-time caption" data-speaker="Omar" data-start="659.514000" data-stop="662.718000">The thing that the dot-mode or the dot command in</span> <span class="audio-time caption" data-speaker="Omar" data-start="662.758000" data-stop="665.201000">Vim solves is that you don't always have the</span> <span class="audio-time caption" data-speaker="Omar" data-start="665.261000" data-stop="666.983000">foresight to record a keyboard macro.</span> <span class="audio-time caption" data-speaker="Omar" data-start="667.003000" data-stop="668.645000">Sometimes you realize, oh, I need to do the same</span> <span class="audio-time caption" data-speaker="Omar" data-start="668.745000" data-stop="670.427000">at some other places,</span> <span class="audio-time caption" data-speaker="Omar" data-start="670.407000" data-stop="673.415000">but you didn't record it ahead of time.</span> <span class="audio-time caption" data-speaker="Omar" data-start="673.455000" data-stop="676.163000">Then you wind up doing it once, realizing you</span> <span class="audio-time caption" data-speaker="Omar" data-start="676.203000" data-stop="678.008000">need to do it a bunch of times, then recording</span> <span class="audio-time caption" data-speaker="Omar" data-start="678.048000" data-stop="679.271000">the macro, then doing it again.</span> <span class="audio-time caption" data-speaker="Omar" data-start="679.732000" data-stop="682.841000">I wanted to see if I could remember to record</span> <span class="audio-time caption" data-speaker="Omar" data-start="682.881000" data-stop="683.563000">macros.</span> <span class="audio-time caption" data-speaker="Omar" data-start="683.583000" data-stop="686.290000">I decided that I needed to make it as</span> <span class="audio-time caption" data-speaker="Omar" data-start="686.270000" data-stop="688.232000">as frictionless as possible.</span> <span class="audio-time caption" data-speaker="Omar" data-start="689.514000" data-stop="692.418000">This is the command that is bound by default to</span> <span class="audio-time caption" data-speaker="Omar" data-start="693.479000" data-stop="697.764000">F3.</span> <span class="audio-time caption" data-speaker="Omar" data-start="697.924000" data-stop="702.750000">I like it better than the thing that's bound to</span> <span class="audio-time caption" data-speaker="Omar" data-start="703.171000" data-stop="706.675000">C-x ( because</span> <span class="audio-time caption" data-speaker="Omar" data-start="706.840000" data-stop="710.245000">this <code>kmacro-start-macro-or-insert-counter</code> does</span> <span class="audio-time caption" data-speaker="Omar" data-start="710.285000" data-stop="710.686000">both things.</span> <span class="audio-time caption" data-speaker="Omar" data-start="710.806000" data-stop="712.789000">It could start a recording, or if you are</span> <span class="audio-time caption" data-speaker="Omar" data-start="712.849000" data-stop="716.014000">recording, it will insert the keyboard macro</span> <span class="audio-time caption" data-speaker="Omar" data-start="716.054000" data-stop="719.159000">counter.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="721.802000" data-stop="723.225000"><strong class="speaker-name">Sacha:</strong>  For folks who are like, what?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="723.385000" data-stop="723.926000">Macros?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="723.946000" data-stop="724.446000">Counters?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="724.527000" data-stop="726.590000">Yes, you can have your keyboard macro</span> <span class="audio-time caption" data-speaker="Sacha" data-start="726.690000" data-stop="729.815000">automatically add one to a number, for example.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="729.875000" data-stop="730.836000">There you go.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-12-10-867.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-12-10-867.jpg" alt="image from video 00:12:10.867" data-time="00:12:10.867"></a><span class="audio-time caption" data-speaker="Sacha" data-start="730.856000" data-stop="731.697000"><strong class="speaker-name">Sacha:</strong> Hello, hello, hello.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="735.000000">12:15</span> <strong>Keycast and Embark
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-16-44-033.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-16-44-033.jpg" alt="image from video 00:16:44.033" data-time="00:16:44.033"></a><span class="audio-time caption" data-speaker="Omar" data-start="735.848000" data-stop="741.857000"><strong class="speaker-name">Omar:</strong>  I also activated keycast.</span> <span class="audio-time caption" data-speaker="Omar" data-start="743.259000" data-stop="744.361000">I hope people can follow along.</span> <span class="audio-time caption" data-speaker="Omar" data-start="744.461000" data-stop="747.786000">I have some small modifications to make</span> <span class="audio-time caption" data-speaker="Omar" data-start="748.347000" data-stop="749.869000">embark transparent to keycast.</span> <span class="audio-time caption" data-speaker="Omar" data-start="749.889000" data-stop="753.414000">If I use embark, you see embark-act, but then</span> <span class="audio-time caption" data-speaker="Omar" data-start="753.555000" data-stop="755.798000">you also see what command I call.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="756.689000" data-stop="758.873000"><strong class="speaker-name">Sacha:</strong>  I just stole that from your config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="759.214000" data-stop="761.077000">I wasn't entirely sure if I was using it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="761.117000" data-stop="762.760000">correctly, but it definitely looked like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="762.780000" data-stop="764.183000">something interesting and useful.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="764.724000" data-stop="767.449000"><strong class="speaker-name">Omar:</strong>  If you don't use that change, then</span> <span class="audio-time caption" data-speaker="Omar" data-start="768.692000" data-stop="770.355000">keycast doesn't see through embark and you</span> <span class="audio-time caption" data-speaker="Omar" data-start="770.415000" data-stop="772.639000">don't get which actions you called.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="772.923000" data-stop="774.745000"><strong class="speaker-name">Sacha:</strong>  Yeah, the opacity of some of these</span> <span class="audio-time caption" data-speaker="Sacha" data-start="774.966000" data-stop="782.154000">kind of key binding niceties... they hide a lot of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="782.195000" data-stop="784.598000">stuff from the standard Emacs ways of doing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="784.658000" data-stop="784.958000">things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="785.419000" data-stop="789.083000">That's one of the criticisms of transient and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="789.243000" data-stop="790.265000">other tools.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="790.405000" data-stop="792.648000">I'm glad that you're finding these ways to make</span> <span class="audio-time caption" data-speaker="Sacha" data-start="792.728000" data-stop="795.471000">these packages work well with other packages.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="796.514000" data-stop="800.101000"><strong class="speaker-name">Omar:</strong>  I think this was by request.</span> <span class="audio-time caption" data-speaker="Omar" data-start="800.161000" data-stop="801.022000">Somebody requested it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="801.063000" data-stop="802.145000">Maybe it was Prot.</span> <span class="audio-time caption" data-speaker="Omar" data-start="802.146000" data-stop="804.048000">It's definitely a good idea.</span> <span class="audio-time caption" data-speaker="Omar" data-start="810.139000" data-stop="813.105000">The code for that is on the Embark Wiki as well.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="813.000000">13:33</span> <strong>apply-macro-to-lines-of-paragraph</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="813.575000" data-stop="814.716000"><strong class="speaker-name">Sacha:</strong>  The other thing that I wanted to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="814.757000" data-stop="817.921000">point out that you make a convenient keyboard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="818.021000" data-stop="821.305000">shortcut for in terms of keyboard macros is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="821.385000" data-stop="824.029000"><code>apply-macro-to-lines-of-paragraph</code>, which I
personally</span> <span class="audio-time caption" data-speaker="Sacha" data-start="824.049000" data-stop="826.191000">had not been using until I saw your config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="826.231000" data-stop="827.593000">And I was like, that is a thing.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="829.796000" data-stop="830.517000"><strong class="speaker-name">Omar:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="830.557000" data-stop="840.319000">Well, that's a command that I wrote.</span> <span class="audio-time caption" data-speaker="Omar" data-start="840.320000" data-stop="843.526000">It’s a wrapper around <code>apply-macro-to-region-lines</code>,</span> <span class="audio-time caption" data-speaker="Omar" data-start="845.168000" data-stop="847.171000">but it automatically uses the paragraph.</span> <span class="audio-time caption" data-speaker="Omar" data-start="847.191000" data-stop="849.434000">That way you don't need to select it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="849.454000" data-stop="851.618000">I find that extremely convenient.</span> <span class="audio-time caption" data-speaker="Omar" data-start="855.779000" data-stop="857.401000">What would be a good example of that?</span> <span class="audio-time caption" data-speaker="Omar" data-start="857.421000" data-stop="859.204000">You want to wrap something.</span> <span class="audio-time caption" data-speaker="Omar" data-start="861.107000" data-stop="865.753000">What should I do as an example of this?</span> <span class="audio-time caption" data-speaker="Omar" data-start="866.094000" data-stop="868.317000">For some reason, I needed to convert these things</span> <span class="audio-time caption" data-speaker="Omar" data-start="868.998000" data-stop="875.487000">to, say, unwrap the parentheses and turn them</span> <span class="audio-time caption" data-speaker="Omar" data-start="875.527000" data-stop="877.149000">into an Org Mode table.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="878.171000" data-stop="879.693000"><strong class="speaker-name">Sacha:</strong>  Yeah, that makes sense.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="879.713000" data-stop="881.235000"><strong class="speaker-name">Omar:</strong>  I just apply it to the rest of</span> <span class="audio-time caption" data-speaker="Omar" data-start="881.275000" data-stop="881.816000">the paragraph.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="882.958000" data-stop="883.879000"><strong class="speaker-name">Sacha:</strong>  Magic.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="886.880000" data-stop="889.533000">That's great, because I would normally</span> <span class="audio-time caption" data-speaker="Sacha" data-start="889.534000" data-stop="893.533000">just start executing the macro and hope I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="893.534000" data-stop="894.533000">remember to stop at the end,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="894.534000" data-stop="897.067000">but then I overshoot, and then I have to undo,
j</span> <span class="audio-time caption" data-speaker="Sacha" data-start="897.068000" data-stop="899.100000">and then it's a mess.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="899.101000" data-stop="901.006000"><strong class="speaker-name">Omar:</strong>  Or you could select the paragraph and then just</span> <span class="audio-time caption" data-speaker="Omar" data-start="901.146000" data-stop="904.973000">use the built-in <code>apply-macro-to-lines-in-region</code>.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="905.881000" data-stop="907.945000"><strong class="speaker-name">Sacha:</strong>  Yes, yes, that's a possibility.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="908.346000" data-stop="909.308000"><strong class="speaker-name">Omar:</strong>  It just saves you the step of</span> <span class="audio-time caption" data-speaker="Omar" data-start="909.388000" data-stop="910.310000">marking the paragraph.</span> <span class="audio-time caption" data-speaker="Omar" data-start="910.390000" data-stop="913.176000">I found that I most often when I used apply macro</span> <span class="audio-time caption" data-speaker="Omar" data-start="913.196000" data-stop="914.999000">to lines in region, the region was exactly a</span> <span class="audio-time caption" data-speaker="Omar" data-start="915.060000" data-stop="915.420000">paragraph.</span> <span class="audio-time caption" data-speaker="Omar" data-start="915.440000" data-stop="916.963000">So I figured like there's no point in...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="917.464000" data-stop="918.426000"><strong class="speaker-name">Sacha:</strong>  All right, all right.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="918.507000" data-stop="922.675000"><strong class="speaker-name">Omar:</strong>  It's undone in a single step.</span> <span class="audio-time caption" data-speaker="Omar" data-start="922.655000" data-stop="925.619000">Like the application.</span> <span class="audio-time caption" data-speaker="Omar" data-start="925.639000" data-stop="928.323000">The thing I recorded as a macro, that is not</span> <span class="audio-time caption" data-speaker="Omar" data-start="928.383000" data-stop="929.064000">coalesced.</span> <span class="audio-time caption" data-speaker="Omar" data-start="929.084000" data-stop="930.346000">Yes, of course.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="930.366000" data-stop="932.509000"><strong class="speaker-name">Sacha:</strong>  Because that's the actual recording</span> <span class="audio-time caption" data-speaker="Sacha" data-start="932.589000" data-stop="932.829000">of it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="933.490000" data-stop="936.054000">Charlie Baker in the chat says,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="936.094000" data-stop="938.117000">"Definitely going to add the keycast transparency</span> <span class="audio-time caption" data-speaker="Sacha" data-start="938.157000" data-stop="938.798000">to my config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="938.818000" data-stop="940.160000">I've been wanting that for a while."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="940.540000" data-stop="942.803000">These little demos of like, oh,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="942.863000" data-stop="945.227000">this is what this thing in your config does.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="945.627000" data-stop="947.390000">It's very helpful for people to be able to see</span> <span class="audio-time caption" data-speaker="Sacha" data-start="948.952000" data-stop="949.733000">its awesomeness.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="949.753000" data-stop="959.239000"><strong class="speaker-name">Omar:</strong>  Where is that?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="959.240000" data-stop="960.628000"><strong class="speaker-name">Sacha:</strong>  One of the other interesting things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="960.668000" data-stop="962.990000">you mentioned was your placeholder package.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="963.010000" data-stop="964.953000">I can see how the keyword macros help you with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="964.993000" data-stop="966.314000">text that's already there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="966.334000" data-stop="967.916000">Then you've got these placeholders for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="968.056000" data-stop="969.758000">informal snippets or quick snippets.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="970.679000" data-stop="971.300000">Show us that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="971.400000" data-stop="973.182000">You use it a lot.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="973.162000" data-stop="973.803000"><strong class="speaker-name">Omar:</strong>  Yeah, I do.</span> <span class="audio-time caption" data-speaker="Omar" data-start="975.046000" data-stop="978.352000">Oh, that <code>tmp-buffer</code> is a command I have for</span> <span class="audio-time caption" data-speaker="Omar" data-start="978.673000" data-stop="981.599000">popping up temporary buffers in specific major</span> <span class="audio-time caption" data-speaker="Omar" data-start="981.639000" data-stop="981.939000">modes.</span> <span class="audio-time caption" data-speaker="Omar" data-start="983.122000" data-stop="984.765000">Maybe I can quickly show that first.</span> <span class="audio-time caption" data-speaker="Omar" data-start="985.125000" data-stop="985.707000">Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="986.729000" data-stop="987.410000">So let's see.</span> <span class="audio-time caption" data-speaker="Omar" data-start="989.213000" data-stop="990.115000">Oh, yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="990.255000" data-stop="991.558000">So let me...</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="994.000000">16:34</span> <strong>embark-on-last-message</strong></div><p></p><span class="audio-time caption" data-speaker="Omar" data-start="994.070000" data-stop="997.474000"><strong class="speaker-name">Omar:</strong> There I used another little command I have.</span> <span class="audio-time caption" data-speaker="Omar" data-start="998.896000" data-stop="1001.259000"><code>embark-on-last-message</code></span> <span class="audio-time caption" data-speaker="Omar" data-start="1001.279000" data-stop="1004.322000">It just calls Embark on the last thing in the</span> <span class="audio-time caption" data-speaker="Omar" data-start="1004.382000" data-stop="1005.123000">messages buffer.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1007.306000" data-stop="1010.490000">Often I want to act on the thing that is the last</span> <span class="audio-time caption" data-speaker="Omar" data-start="1010.550000" data-stop="1012.712000">word in the echo area,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1012.732000" data-stop="1015.015000">so that's what this does.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1016.429000" data-stop="1016.950000"><strong class="speaker-name">Sacha:</strong>  Okay.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1017.810000" data-stop="1019.352000"><strong class="speaker-name">Omar:</strong>  The last thing in the echo</span> <span class="audio-time caption" data-speaker="Omar" data-start="1019.512000" data-stop="1022.375000">area was this symbol <code>embark-on-last-message</code> so I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1022.435000" data-stop="1024.196000">can act on it directly.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1024.217000" data-stop="1025.759000"><strong class="speaker-name">Sacha:</strong>  Which is brilliant because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1025.779000" data-stop="1028.121000">I keep switching to the messages buffer to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1028.161000" data-stop="1031.023000">try to copy something, and by the time I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1031.064000" data-stop="1032.906000">switch, sometimes there are other messages,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1032.986000" data-stop="1035.729000">so it's great to just be</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1035.769000" data-stop="1036.770000">able to do something.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1036.790000" data-stop="1038.050000"><strong class="speaker-name">Omar:</strong>  If there are other messages,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1038.252000" data-stop="1040.534000">then I also switch to the messages buffer, but if</span> <span class="audio-time caption" data-speaker="Omar" data-start="1040.594000" data-stop="1043.057000">I want to act on the very last thing, I have that</span> <span class="audio-time caption" data-speaker="Omar" data-start="1043.097000" data-stop="1043.517000">command for it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1043.497000" data-stop="1044.377000"><strong class="speaker-name">Sacha:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1044.397000" data-stop="1047.320000">I'm saying this is faster, so I get the chance of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1047.421000" data-stop="1050.344000">just hitting the shortcut before another timer</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1050.764000" data-stop="1052.746000">goes in and messes around with my messages.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1053.307000" data-stop="1054.528000">So yes, shortcuts.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1054.548000" data-stop="1055.549000">Okay, temp buffer.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1056.290000" data-stop="1058.072000">Tell us about that.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1058.152000" data-stop="1061.836000"><strong class="speaker-name">Omar:</strong>  You can configure single... Wait, where am I?</span> <span class="audio-time caption" data-speaker="Omar" data-start="1063.958000" data-stop="1064.839000">Transcribing job.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1065.259000" data-stop="1068.623000">I ran Whisper by accident.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1069.323000" data-stop="1070.404000"><strong class="speaker-name">Sacha:</strong>  Which is another thing I wanted to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1070.464000" data-stop="1071.245000">check.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1071.265000" data-stop="1072.947000">Many things I want to talk to you about…</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1076.030000" data-stop="1077.953000"><strong class="speaker-name">Omar:</strong>  The idea of using Whisper, I stole</span> <span class="audio-time caption" data-speaker="Omar" data-start="1078.013000" data-stop="1078.333000">from you</span> <span class="audio-time caption" data-speaker="Omar" data-start="1079.835000" data-stop="1082.078000">using it to dictate. I thought, oh, this looks</span> <span class="audio-time caption" data-speaker="Omar" data-start="1082.139000" data-stop="1082.579000">convenient</span> <span class="audio-time caption" data-speaker="Omar" data-start="1082.619000" data-stop="1084.442000">if the model is good. I tried it and it is</span> <span class="audio-time caption" data-speaker="Omar" data-start="1084.482000" data-stop="1084.862000">very good.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1086.000000">18:06</span> <strong>tmp-buffer with a major mode
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-18-10-233.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-18-10-233.jpg" alt="image from video 00:18:10.233" data-time="00:18:10.233"></a><span class="audio-time caption" data-speaker="Sacha" data-start="1086.124000" data-stop="1086.565000"><strong class="speaker-name">Sacha:</strong>  Temp buffer.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1087.045000" data-stop="1089.148000"><strong class="speaker-name">Omar:</strong>  Different major modes.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1089.869000" data-stop="1093.415000">It has a customizable list of bindings for</span> <span class="audio-time caption" data-speaker="Omar" data-start="1093.655000" data-stop="1094.696000">specific major modes.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-18-19-533.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-18-19-533.jpg" alt="image from video 00:18:19.533" data-time="00:18:19.533"></a><span class="audio-time caption" data-speaker="Omar" data-start="1095.217000" data-stop="1097.520000"><strong class="speaker-name">Omar:</strong> It also has an option to just prompt you for a</span> <span class="audio-time caption" data-speaker="Omar" data-start="1097.560000" data-stop="1098.101000">major mode.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1099.724000" data-stop="1104.269000">It pops up a temp buffer in whatever major</span> <span class="audio-time caption" data-speaker="Omar" data-start="1104.309000" data-stop="1104.990000">mode you chose.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1106.251000" data-stop="1110.216000">I use it all the time to make new scratch buffers.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1110.236000" data-stop="1111.257000"><strong class="speaker-name">Sacha:</strong>  Yeah, I can see that's useful.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1111.277000" data-stop="1115.021000">I switch to a buffer that's got a name that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1115.061000" data-stop="1116.923000">doesn't exist yet, and then I have to press more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1116.963000" data-stop="1118.104000">keys to get to the major mode.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1118.405000" data-stop="1119.326000"><strong class="speaker-name">Omar:</strong>  But if you're doing certain</span> <span class="audio-time caption" data-speaker="Omar" data-start="1119.346000" data-stop="1122.409000">things, just type random letters to make a new</span> <span class="audio-time caption" data-speaker="Omar" data-start="1122.489000" data-stop="1122.769000">buffer,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1122.930000" data-stop="1125.132000">this is much better.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1125.172000" data-stop="1127.014000">They might as well all be called temp.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1128.107000" data-stop="1130.249000"><strong class="speaker-name">Sacha:</strong>  Do you reuse the buffers, or it's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1130.289000" data-stop="1131.290000">always just the one buffer?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1132.091000" data-stop="1134.934000"><strong class="speaker-name">Omar:</strong>  New buffer, then I kill it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1134.954000" data-stop="1135.655000"><strong class="speaker-name">Sacha:</strong>  Very temporary.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1136.216000" data-stop="1136.596000">Gotcha.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1137.177000" data-stop="1138.778000"><strong class="speaker-name">Omar:</strong>  By the way, <code>kill-current-buffer</code> doesn’t</span> <span class="audio-time caption" data-speaker="Omar" data-start="1138.818000" data-stop="1139.899000">have a default key binding.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1139.960000" data-stop="1141.041000">I don't understand why not.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1144.464000" data-stop="1145.586000">OK.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1145.746000" data-stop="1148.889000">I bind it to <code>C-c C-k</code>, which normally, I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1148.929000" data-stop="1149.790000">think, is <code>kill-buffer</code>,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1149.830000" data-stop="1152.833000">but why would you want to kill a buffer that's</span> <span class="audio-time caption" data-speaker="Omar" data-start="1152.893000" data-stop="1155.516000">not the one you're looking at?</span> <span class="audio-time caption" data-speaker="Omar" data-start="1156.930000" data-stop="1159.059000">Wait, what was I going to show you?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1159.481000" data-stop="1160.204000"><strong class="speaker-name">Sacha:</strong>  You were going to show me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1160.264000" data-stop="1161.067000">placeholders.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1162.393000" data-stop="1163.557000"><strong class="speaker-name">Omar:</strong>  Right.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1166.000000">19:26</span> <strong>placeholder
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-19-42-100.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-19-42-100.jpg" alt="image from video 00:19:42.100" data-time="00:19:42.100"></a><span class="audio-time caption" data-speaker="Omar" data-start="1166.532000" data-stop="1171.279000"><strong class="speaker-name">Omar:</strong> I often need to send several similar email</span> <span class="audio-time caption" data-speaker="Omar" data-start="1171.319000" data-stop="1171.820000">messages.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1173.242000" data-stop="1178.109000">I'm going to invite you on some day of some month</span> <span class="audio-time caption" data-speaker="Omar" data-start="1178.910000" data-stop="1181.454000">to give a talk, etc.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1182.075000" data-stop="1184.979000">That's the body of an email.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1185.440000" data-stop="1186.902000">I'll write it once.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1186.962000" data-stop="1191.950000">Here I’m using <code>placeholder-insert</code> to insert this
symbol.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1192.511000" data-stop="1194.193000">It appears in green,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1194.832000" data-stop="1198.479000">but it doesn't matter.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1198.519000" data-stop="1199.200000">It's just text.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1199.340000" data-stop="1202.065000">You could type that symbol yourself.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-20-05-633.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-20-05-633.jpg" alt="image from video 00:20:05.633" data-time="00:20:05.633"></a><span class="audio-time caption" data-speaker="Omar" data-start="1202.566000" data-stop="1206.232000"><strong class="speaker-name">Omar:</strong> Then the <code>placeholder-next</code> and -previous</span> <span class="audio-time caption" data-speaker="Omar" data-start="1206.272000" data-stop="1210.340000">commands will cycle among those and let you fill</span> <span class="audio-time caption" data-speaker="Omar" data-start="1210.740000" data-stop="1212.403000">each one in.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1212.644000" data-stop="1214.086000">You don't have to fill it in right now.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1214.708000" data-stop="1216.591000">If you repeat the command, it restores the</span> <span class="audio-time caption" data-speaker="Omar" data-start="1216.631000" data-stop="1218.915000">placeholder and moves you to the next location.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1219.368000" data-stop="1221.231000"><strong class="speaker-name">Sacha:</strong>  That's one of the things I liked</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1221.291000" data-stop="1223.815000">about the implementation compared to yasnippet,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1223.835000" data-stop="1225.538000">because yasnippet, you’ve got to actually remember</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1225.578000" data-stop="1227.781000">to fill in the fields before you move on to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1227.821000" data-stop="1228.422000">something else.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1228.683000" data-stop="1231.087000">If you get out of it, you can't tab to the next</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1231.127000" data-stop="1231.667000">field.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1231.688000" data-stop="1234.312000">The placeholders will let you go and come</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1234.372000" data-stop="1236.876000">back and look up some information and put that in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1236.936000" data-stop="1237.697000">and so forth.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1238.000000">20:38</span> <strong>enable-recursive-minibuffers</strong></div><p></p><span class="audio-time caption" data-speaker="Omar" data-start="1238.605000" data-stop="1240.307000"><strong class="speaker-name">Omar:</strong>  Yeah, there's lots of things I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1240.367000" data-stop="1242.690000">loved about Vim, but one thing I grew to strongly</span> <span class="audio-time caption" data-speaker="Omar" data-start="1242.750000" data-stop="1245.593000">dislike is modal computer programs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1246.274000" data-stop="1247.936000">Not just modal editing, modal anything.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1248.196000" data-stop="1250.739000">I don't like being forced to finish what I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1250.799000" data-stop="1251.180000">started.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1251.720000" data-stop="1254.424000">I want to be able to get distracted and go off</span> <span class="audio-time caption" data-speaker="Omar" data-start="1254.464000" data-stop="1255.885000">and do something else.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1255.905000" data-stop="1258.749000">For example, in Emacs, I very much dislike the</span> <span class="audio-time caption" data-speaker="Omar" data-start="1258.849000" data-stop="1262.453000">default value of <code>enable-recursive-minibuffers</code>.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1263.901000" data-stop="1266.886000">The default value is <code>nil</code>.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1266.926000" data-stop="1269.711000">They don't let you use the minibuffer if you're</span> <span class="audio-time caption" data-speaker="Omar" data-start="1269.751000" data-stop="1271.213000">already using the minibuffer.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1271.313000" data-stop="1273.056000">Emacs is supposed to be about freedom.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1273.116000" data-stop="1274.639000">Why is that the default value?</span> <span class="audio-time caption" data-speaker="Omar" data-start="1275.440000" data-stop="1277.523000">So I set it to <code>t</code>, which is more sensible.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1277.864000" data-stop="1279.767000">That way you're not stuck in the minibuffer.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1281.012000" data-stop="1282.214000"><strong class="speaker-name">Sacha:</strong>  Actually, one of the things that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1282.254000" data-stop="1284.558000">I've been trying to figure out is when I'm in a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1284.658000" data-stop="1287.182000">minibuffer, sometimes I want to use Embark to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1287.222000" data-stop="1289.145000">insert something into the minibuffer, but then I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1289.205000" data-stop="1291.850000">end up inserting it into the buffer buffer.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1291.870000" data-stop="1295.035000"><strong class="speaker-name">Omar:</strong>  Yeah, there's no... Embark doesn't</span> <span class="audio-time caption" data-speaker="Omar" data-start="1295.075000" data-stop="1298.160000">have any solution to that problem.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1298.461000" data-stop="1300.706000">It doesn't always do that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1300.746000" data-stop="1302.510000">It does that if you're in the minibuffer in a</span> <span class="audio-time caption" data-speaker="Omar" data-start="1302.570000" data-stop="1304.193000">completion session.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1304.374000" data-stop="1306.599000">If you're in the minibuffer in a non-completion</span> <span class="audio-time caption" data-speaker="Omar" data-start="1306.659000" data-stop="1309.064000">session, then it acts as a regular buffer.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1309.124000" data-stop="1314.148000">So if you're in eval and here you had...</span> <span class="audio-time caption" data-speaker="Omar" data-start="1314.149000" data-stop="1316.480000">You can use <code>embark-insert</code> in the usual way to</span> <span class="audio-time caption" data-speaker="Omar" data-start="1316.580000" data-stop="1318.444000">duplicate stuff.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1318.508000" data-stop="1320.412000"><strong class="speaker-name">Sacha:</strong>  I have a workaround.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1320.432000" data-stop="1323.618000">I just use kill. I copy the text</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1323.698000" data-stop="1325.582000">instead of inserting it and that works out fine.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1327.125000" data-stop="1328.187000"><strong class="speaker-name">Omar:</strong>  Yeah, I do too.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1328.648000" data-stop="1331.653000">The behavior of inserting into the previous</span> <span class="audio-time caption" data-speaker="Omar" data-start="1331.714000" data-stop="1334.539000">buffer is so useful that I don't think I would</span> <span class="audio-time caption" data-speaker="Omar" data-start="1334.559000" data-stop="1335.321000">want to change that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1335.761000" data-stop="1337.465000">But yeah, it is unfortunate that for that</span> <span class="audio-time caption" data-speaker="Omar" data-start="1337.505000" data-stop="1340.230000">specific instance, you can't use insert.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1340.615000" data-stop="1344.241000"><strong class="speaker-name">Sacha:</strong>  I appreciate that Embark allows</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1344.301000" data-stop="1346.445000">us to have all of these key bindings that we can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1346.485000" data-stop="1347.186000">do stuff with.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1347.547000" data-stop="1349.931000">I noticed in your config, in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1349.991000" data-stop="1352.476000">addition to Embark, you also modify a lot of the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1352.556000" data-stop="1357.284000">standard key maps to add other shortcuts to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1357.324000" data-stop="1358.927000">rebind things that make sense to you.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1359.717000" data-stop="1363.866000">Key bindings are something that a lot of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1363.906000" data-stop="1366.051000">people struggle with, trying to figure out more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1366.091000" data-stop="1367.935000">places to put more shortcuts that make</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1367.975000" data-stop="1368.195000">sense.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1368.235000" data-stop="1371.222000">What are the key shortcuts that work really well</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1371.282000" data-stop="1374.148000">for you?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1377.000000">22:57</span> <strong>Overriding embark-select
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-23-18-367.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-23-18-367.jpg" alt="image from video 00:23:18.367" data-time="00:23:18.367"></a><span class="audio-time caption" data-speaker="Omar" data-start="1377.928000" data-stop="1380.210000"><strong class="speaker-name">Omar:</strong>  One thing I don't like about the default</span> <span class="audio-time caption" data-speaker="Omar" data-start="1380.230000" data-stop="1384.875000">Embark configuration is that <code>SPC</code> is used for</span> <span class="audio-time caption" data-speaker="Omar" data-start="1385.056000" data-stop="1390.101000"><code>embark-select</code>, which marks a target for later use.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1390.121000" data-stop="1392.824000">I hardly ever use <code>embark-select</code>, so I would</span> <span class="audio-time caption" data-speaker="Omar" data-start="1392.864000" data-stop="1396.048000">rather <code>SPC</code>be for marking the region, which is</span> <span class="audio-time caption" data-speaker="Omar" data-start="1396.088000" data-stop="1398.031000">something I do pretty often, and have</span> <span class="audio-time caption" data-speaker="Omar" data-start="1398.032000" data-stop="1401.274000"><code>embark-select</code> on <code>C-SPC</code>, which is not a
command I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1401.374000" data-stop="1402.515000">use very often.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1402.495000" data-stop="1404.237000">I swapped those.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1406.039000" data-stop="1409.443000">I think most of this is just adding new actions</span> <span class="audio-time caption" data-speaker="Omar" data-start="1409.663000" data-stop="1411.665000">that feel specific to me.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1412.000000">23:32</span> <strong>quick-calc
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-24-05-733.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-24-05-733.jpg" alt="image from video 00:24:05.733" data-time="00:24:05.733"></a><span class="audio-time caption" data-speaker="Omar" data-start="1412.967000" data-stop="1415.823000"><strong class="speaker-name">Omar:</strong> <code>quick-calc</code> is the thing usually found to</span> <span class="audio-time caption" data-speaker="Omar" data-start="1415.824000" data-stop="1420.195000"><code>C-x *</code>… <code>calc-dispatch</code> is the command.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1420.215000" data-stop="1424.540000">It’s <code>C-x * q</code>. That’s <code>quick-calc</code>.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1425.121000" data-stop="1426.622000">It's useful as an Embark action.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1429.124000" data-stop="1434.612000">If you have an expression and you... Wait, what am I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1434.652000" data-stop="1441.441000">doing wrong? I forgot</span> <span class="audio-time caption" data-speaker="Omar" data-start="1441.481000" data-stop="1445.587000">what my binding to mark what Vim calls a</span> <span class="audio-time caption" data-speaker="Omar" data-start="1445.707000" data-stop="1448.050000">word in capital letters, which means a consecutive</span> <span class="audio-time caption" data-speaker="Omar" data-start="1448.110000" data-stop="1450.754000">stretch of non-space characters... If you</span> <span class="audio-time caption" data-speaker="Omar" data-start="1450.774000" data-stop="1452.912000">mark this, I can act on it with <code>=</code>,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1452.913000" data-stop="1454.018000">get the result.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1454.487000" data-stop="1458.192000"><strong class="speaker-name">Sacha:</strong>  And specifically this <code>embark-region-map</code> is what</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1459.054000" data-stop="1460.536000">you can add in the selected region.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1461.056000" data-stop="1463.179000">Incidentally, I've been playing around with using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1463.199000" data-stop="1465.102000">the Selected package for this because it also</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1465.122000" data-stop="1466.104000">gives you the key map.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1467.706000" data-stop="1467.926000"><strong class="speaker-name">Omar:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1467.946000" data-stop="1469.829000">I love the Selected package and recommend it</span> <span class="audio-time caption" data-speaker="Omar" data-start="1469.889000" data-stop="1470.109000">often.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1470.189000" data-stop="1474.596000">I don't use it myself just because the only thing</span> <span class="audio-time caption" data-speaker="Omar" data-start="1474.656000" data-stop="1477.560000">it would save me is calling <code>embark-act</code>,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1477.580000" data-stop="1479.983000">because the commands I would put in the selected</span> <span class="audio-time caption" data-speaker="Omar" data-start="1480.023000" data-stop="1481.986000">key map are exactly the commands I have in the</span> <span class="audio-time caption" data-speaker="Omar" data-start="1482.026000" data-stop="1483.228000"><code>embark-region-map</code>.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1483.208000" data-stop="1486.077000">For me, Selected would only save me one</span> <span class="audio-time caption" data-speaker="Omar" data-start="1486.117000" data-stop="1487.822000">keystroke, which is <code>Embark Act</code>,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1487.963000" data-stop="1490.712000">so I don't feel it's worth it, but it's a great</span> <span class="audio-time caption" data-speaker="Omar" data-start="1490.752000" data-stop="1491.012000">idea.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1492.798000" data-stop="1495.206000">For example, I do use the rectangle keymap.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1495.948000" data-stop="1496.931000">Yes.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1497.485000" data-stop="1500.269000">So they're the only difference.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1500.489000" data-stop="1503.293000">It's equally good an idea as Selected is.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1503.593000" data-stop="1505.736000">The only difference is that the rectangle keymap</span> <span class="audio-time caption" data-speaker="Omar" data-start="1506.016000" data-stop="1508.800000">comes with Emacs and Selected is an external</span> <span class="audio-time caption" data-speaker="Omar" data-start="1508.840000" data-stop="1509.180000">package.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1509.200000" data-stop="1512.204000">I decided it's not worth installing an</span> <span class="audio-time caption" data-speaker="Omar" data-start="1512.265000" data-stop="1514.127000">external package when I could just use</span> <span class="audio-time caption" data-speaker="Omar" data-start="1514.147000" data-stop="1517.972000"><code>Embark Act</code>, which I do have to use because otherwise
I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1518.012000" data-stop="1519.454000">won't understand people's bug reports.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1520.856000" data-stop="1523.900000">But the rectangle mode there, that one is</span> <span class="audio-time caption" data-speaker="Omar" data-start="1523.940000" data-stop="1524.260000">built in,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1524.280000" data-stop="1526.243000">so I just found a bunch of useful stuff in it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1526.830000" data-stop="1528.853000"><strong class="speaker-name">Sacha:</strong>  Yeah, and I noticed you have also</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1528.933000" data-stop="1531.658000">like you have a <code>narrow-to-point</code> so that you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1531.798000" data-stop="1534.482000">use your rectangle commands to yank something</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1534.522000" data-stop="1534.823000">into it,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1535.163000" data-stop="1537.186000">so I get the sense that you use rectangles a fair</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1537.227000" data-stop="1537.407000">bit.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1537.447000" data-stop="1539.891000"><strong class="speaker-name">Omar:</strong>  You've really read my configuration</span> <span class="audio-time caption" data-speaker="Omar" data-start="1539.931000" data-stop="1541.093000">very carefully.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1541.153000" data-stop="1542.675000">This <code>narrow-to-point</code> is subtle.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1543.056000" data-stop="1545.460000">I am very impressed that you figured out the</span> <span class="audio-time caption" data-speaker="Omar" data-start="1545.500000" data-stop="1546.341000">reason for it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1546.456000" data-stop="1549.139000"><strong class="speaker-name">Sacha:</strong>  I started digging through</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1549.239000" data-stop="1551.162000"><code>narrow-extras</code> because I saw your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1551.182000" data-stop="1552.103000"><code>narrow-or-widen-dwim</code></span> <span class="audio-time caption" data-speaker="Sacha" data-start="1552.143000" data-stop="1554.005000">and I said, yes, I need that in my life.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1555.146000" data-stop="1557.189000"><strong class="speaker-name">Omar:</strong>  I don't think... I took it from somebody.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1557.870000" data-stop="1560.713000">Endless Parentheses, probably.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1561.694000" data-stop="1564.558000">The issue with <code>narrow-to-point</code>, the reason you</span> <span class="audio-time caption" data-speaker="Omar" data-start="1564.618000" data-stop="1567.721000">need it, is that if you insert a rectangle</span> <span class="audio-time caption" data-speaker="Omar" data-start="1567.782000" data-stop="1574.910000">somewhere, try to insert it in a blank line,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1575.329000" data-stop="1578.559000">and it'll overlap with what was after it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1579.121000" data-stop="1581.649000">But if you first narrow to the point and then</span> <span class="audio-time caption" data-speaker="Omar" data-start="1581.709000" data-stop="1584.718000">insert the rectangle and then widen again, it</span> <span class="audio-time caption" data-speaker="Omar" data-start="1584.738000" data-stop="1585.822000">gets its own blank lines.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1586.464000" data-stop="1590.599000">That's the reason I have it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1590.000000">26:30</span> <strong>Multiple cursors</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1590.600000" data-stop="1593.080000"><strong class="speaker-name">Sacha:</strong>  @zor_​org asks, was there a time you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1593.120000" data-stop="1595.042000">wanted multiple cursors?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1595.062000" data-stop="1596.023000">Have you ever been tempted?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1596.524000" data-stop="1597.685000"><strong class="speaker-name">Omar:</strong>  Multiple cursors.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1600.468000" data-stop="1602.930000">I think it gave me a false sense of security</span> <span class="audio-time caption" data-speaker="Omar" data-start="1603.010000" data-stop="1606.995000">which is why I experimented not using it and then</span> <span class="audio-time caption" data-speaker="Omar" data-start="1607.035000" data-stop="1609.357000">the experiment just never stopped.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1609.758000" data-stop="1612.120000">The thing with</span> <span class="audio-time caption" data-speaker="Omar" data-start="1612.100000" data-stop="1613.162000">multiple cursors...</span> <span class="audio-time caption" data-speaker="Omar" data-start="1613.943000" data-stop="1616.068000">Multiple cursors are more interactive than</span> <span class="audio-time caption" data-speaker="Omar" data-start="1616.108000" data-stop="1620.456000">keyboard macros, because if you can see several</span> <span class="audio-time caption" data-speaker="Omar" data-start="1620.496000" data-stop="1623.281000">cursors on the screen, you can visually make sure</span> <span class="audio-time caption" data-speaker="Omar" data-start="1623.341000" data-stop="1625.425000">that what you're doing does apply correctly at</span> <span class="audio-time caption" data-speaker="Omar" data-start="1625.465000" data-stop="1626.868000">each of those locations.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1627.591000" data-stop="1630.394000">But then I started noticing that that made me</span> <span class="audio-time caption" data-speaker="Omar" data-start="1630.474000" data-stop="1632.537000">feel very confident I was doing things the right</span> <span class="audio-time caption" data-speaker="Omar" data-start="1632.557000" data-stop="1633.538000">way in multiple cursors,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1633.858000" data-stop="1636.301000">but there were some cursors offscreen where I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1636.361000" data-stop="1638.343000">wasn't paying attention to what was happening</span> <span class="audio-time caption" data-speaker="Omar" data-start="1638.383000" data-stop="1639.064000">there,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1639.084000" data-stop="1641.607000">and then I got it wrong and was more confused.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1641.627000" data-stop="1643.769000">Just psychologically, a keyboard macro,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1643.789000" data-stop="1645.912000">since I know I don't see the other places where</span> <span class="audio-time caption" data-speaker="Omar" data-start="1645.952000" data-stop="1648.274000">I'm going to run it, I'm more careful when I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1648.335000" data-stop="1649.616000">record the keyboard macro.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1649.596000" data-stop="1654.212000">It's a psychological trick I'm playing on myself.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1654.774000" data-stop="1656.680000">By using keyboard macros instead of multiple</span> <span class="audio-time caption" data-speaker="Omar" data-start="1656.700000" data-stop="1659.510000">cursors, I force myself to pay more attention to</span> <span class="audio-time caption" data-speaker="Omar" data-start="1659.550000" data-stop="1660.112000">what I'm doing.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1660.000000">27:40</span> <strong>Block-undo and regular undo</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1660.582000" data-stop="1662.105000"><strong class="speaker-name">Sacha:</strong>  Does the block undo still let you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1662.686000" data-stop="1665.731000">select a region in order to undo just the part</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1665.751000" data-stop="1668.235000">that was within it, in case you notice offscreen</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1668.276000" data-stop="1670.640000">that it's done something bad in just these</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1670.760000" data-stop="1671.541000">entries?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1671.561000" data-stop="1673.725000"><strong class="speaker-name">Omar:</strong>  Yeah, that's completely independent.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1673.745000" data-stop="1676.390000">That built-in Emacs behavior is not affected by</span> <span class="audio-time caption" data-speaker="Omar" data-start="1676.871000" data-stop="1678.353000">undo boundaries.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1679.435000" data-stop="1680.497000"><strong class="speaker-name">Sacha:</strong>  Wait, is it?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1680.713000" data-stop="1683.878000"><strong class="speaker-name">Omar:</strong>  If it overlaps with part of... I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1683.938000" data-stop="1684.278000">don't know.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1684.318000" data-stop="1684.879000">Sorry, sorry.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1686.261000" data-stop="1686.802000">I don't know.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1688.365000" data-stop="1691.850000">So if I have a big change that I amalgamated into</span> <span class="audio-time caption" data-speaker="Omar" data-start="1691.890000" data-stop="1694.995000">a single undo, and then I pick a region that</span> <span class="audio-time caption" data-speaker="Omar" data-start="1695.135000" data-stop="1697.779000">overlaps partially with that but not completely,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1697.799000" data-stop="1699.021000">what would undo and region do?</span> <span class="audio-time caption" data-speaker="Omar" data-start="1699.541000" data-stop="1700.062000">I don't know.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1700.343000" data-stop="1701.945000">I think it...</span> <span class="audio-time caption" data-speaker="Omar" data-start="1702.398000" data-stop="1703.101000">I'm just guessing.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1703.241000" data-stop="1705.812000">I would just think that it sees that the affected</span> <span class="audio-time caption" data-speaker="Omar" data-start="1705.872000" data-stop="1709.467000">region by the big block undo is not completely</span> <span class="audio-time caption" data-speaker="Omar" data-start="1709.528000" data-stop="1711.456000">contained in the region and then it doesn't undo</span> <span class="audio-time caption" data-speaker="Omar" data-start="1711.536000" data-stop="1711.817000">it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1712.354000" data-stop="1714.677000"><strong class="speaker-name">Sacha:</strong>  Okay, so I'm just going to conclude</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1714.737000" data-stop="1717.361000">that you do not make mistakes with your keyboard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1717.401000" data-stop="1717.881000">macros.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1719.163000" data-stop="1721.626000"><strong class="speaker-name">Omar:</strong>  I can easily undo</span> <span class="audio-time caption" data-speaker="Omar" data-start="1721.646000" data-stop="1723.869000">them instead of having to keep running on undo.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1723.889000" data-stop="1726.392000">So it's not that I don't make mistakes, but that</span> <span class="audio-time caption" data-speaker="Omar" data-start="1726.493000" data-stop="1729.056000">I try to fix them right after running the</span> <span class="audio-time caption" data-speaker="Omar" data-start="1729.096000" data-stop="1730.558000">keyboard macro.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1730.578000" data-stop="1731.519000"><strong class="speaker-name">Sacha:</strong>  All right, all right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1732.360000" data-stop="1733.599000">I had another question.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1733.000000">28:53</span> <strong>Cycling through Embark targets</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1733.600000" data-stop="1736.085000"><strong class="speaker-name">Sacha:</strong> Ou've got a lot of different Embark maps and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1736.165000" data-stop="1738.689000">you've got a lot of different Embark targets.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1740.291000" data-stop="1741.332000">How do you handle</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1742.611000" data-stop="1744.835000">going through the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1744.895000" data-stop="1748.041000">different ones that are at the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1748.101000" data-stop="1749.984000">point? At the moment, I've got</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1750.005000" data-stop="1752.649000">the label at the top and I just flip</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1752.669000" data-stop="1754.753000">through it. I know sometimes I need to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1754.793000" data-stop="1756.897000">hit it twice or sometimes I need to hit</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1756.937000" data-stop="1760.704000"><code>embark-act</code> three times for this kind of thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1760.684000" data-stop="1764.372000">How do you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1764.412000" data-stop="1765.935000">distinguish between lots of them when you're just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1765.956000" data-stop="1766.376000">going through it?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1766.797000" data-stop="1770.145000"><strong class="speaker-name">Omar:</strong>  I think that's the poorest part of</span> <span class="audio-time caption" data-speaker="Omar" data-start="1770.185000" data-stop="1772.690000">the user experience with <code>Embark Act</code> currently.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1773.131000" data-stop="1776.278000">I don't really like it, but I don't have a good</span> <span class="audio-time caption" data-speaker="Omar" data-start="1776.358000" data-stop="1778.102000">alternative.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1778.082000" data-stop="1782.490000">A lot of people like <code>expand-region</code> and I don’t</span> <span class="audio-time caption" data-speaker="Omar" data-start="1782.530000" data-stop="1784.434000">like it because I feel like I have to hammer it</span> <span class="audio-time caption" data-speaker="Omar" data-start="1784.674000" data-stop="1785.976000">off.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1785.996000" data-stop="1788.962000">I prefer to have a lot of… This is another thing</span> <span class="audio-time caption" data-speaker="Omar" data-start="1789.002000" data-stop="1790.945000">I learned from Vim: have a lot of commands to</span> <span class="audio-time caption" data-speaker="Omar" data-start="1790.986000" data-stop="1794.091000">mark specific things and just memorize all of</span> <span class="audio-time caption" data-speaker="Omar" data-start="1794.472000" data-stop="1794.572000">them.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1794.552000" data-stop="1796.975000">But <code>expand-region</code> says, no, don’t memorize</span> <span class="audio-time caption" data-speaker="Omar" data-start="1797.015000" data-stop="1797.175000">that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1797.215000" data-stop="1800.278000">Just hammer on <code>expand-region</code> until you get the</span> <span class="audio-time caption" data-speaker="Omar" data-start="1800.338000" data-stop="1800.819000">thing you want.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1800.859000" data-stop="1806.826000">Ffor me, even though it's objectively fast, it</span> <span class="audio-time caption" data-speaker="Omar" data-start="1806.846000" data-stop="1808.668000">just feels very slow.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1808.688000" data-stop="1810.330000">It feels like I have to hit it four times</span> <span class="audio-time caption" data-speaker="Omar" data-start="1810.490000" data-stop="1811.651000">whenever I want to mark something.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1812.051000" data-stop="1814.474000">I get the same feeling from cycling in</span> <span class="audio-time caption" data-speaker="Omar" data-start="1814.534000" data-stop="1814.694000"><code>embark-act</code>.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1814.915000" data-stop="1816.056000">I don't really like it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1816.136000" data-stop="1819.059000">But if we had come up with a better alternative,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1819.079000" data-stop="1821.322000">and I say we because I discussed this in the</span> <span class="audio-time caption" data-speaker="Omar" data-start="1821.362000" data-stop="1822.483000">GitHub issues with</span> <span class="audio-time caption" data-speaker="Omar" data-start="1822.463000" data-stop="1828.466000">with Daniel Mendler and Prot, and I think @hmelman</span> <span class="audio-time caption" data-speaker="Omar" data-start="1828.506000" data-stop="1832.502000">was also in those discussions, and maybe</span> <span class="audio-time caption" data-speaker="Omar" data-start="1832.582000" data-stop="1833.566000">Clemens Radermacher?</span> <span class="audio-time caption" data-speaker="Omar" data-start="1836.622000" data-stop="1839.726000">I just couldn't come up with a much better</span> <span class="audio-time caption" data-speaker="Omar" data-start="1839.786000" data-stop="1840.447000">alternative,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1840.467000" data-stop="1842.250000">so I put up with it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1842.610000" data-stop="1844.273000">I don't need to cycle that much.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1844.373000" data-stop="1846.976000">I almost always want to act on the first target.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1846.996000" data-stop="1850.942000">Which is unfair, because I decided what the first</span> <span class="audio-time caption" data-speaker="Omar" data-start="1850.982000" data-stop="1852.524000">target is in the default configuration,</span> <span class="audio-time caption" data-speaker="Omar" data-start="1852.544000" data-stop="1855.288000">so it's sort of tuned so that I hardly ever need</span> <span class="audio-time caption" data-speaker="Omar" data-start="1855.328000" data-stop="1855.768000">to cycle.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1855.869000" data-stop="1858.492000">I apologize if it means other people need to</span> <span class="audio-time caption" data-speaker="Omar" data-start="1858.532000" data-stop="1859.153000">cycle a lot.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1859.453000" data-stop="1859.934000"><strong class="speaker-name">Sacha:</strong>  Nonsense.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1859.974000" data-stop="1861.818000">We can all modify our target list,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1862.500000" data-stop="1864.264000">so we can always tune it to what we want.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1865.045000" data-stop="1866.428000"><strong class="speaker-name">Omar:</strong>  I mean, it's a lot of work, right?</span> <span class="audio-time caption" data-speaker="Omar" data-start="1866.949000" data-stop="1869.936000">I think the default Embark configuration is over</span> <span class="audio-time caption" data-speaker="Omar" data-start="1870.036000" data-stop="1871.499000">half of the source code of Embark.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1873.083000" data-stop="1879.116000">The configuration is... Where does that start?</span> <span class="audio-time caption" data-speaker="Omar" data-start="1879.653000" data-stop="1882.035000">Oh, I wish the autoload cookies were not in the</span> <span class="audio-time caption" data-speaker="Omar" data-start="1882.115000" data-stop="1882.476000">outline.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1884.378000" data-stop="1889.062000"><strong class="speaker-name">Sacha:</strong>  If you do a space, oh, I guess it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1889.102000" data-stop="1890.143000">doesn't do that, right?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1890.163000" data-stop="1891.184000"><strong class="speaker-name">Omar:</strong>  Oh, yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1891.204000" data-stop="1895.188000">For orderless, I use</span> <span class="audio-time caption" data-speaker="Omar" data-start="1895.248000" data-stop="1899.839000">the escapable spaces, so I can do that.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1899.000000">31:39</span> <strong>Imenu for navigation</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1899.840000" data-stop="1901.855000"><strong class="speaker-name">Sacha:</strong>  I should also point out that your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1901.935000" data-stop="1905.638000">config uses a lot of imenu also, which was</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1905.698000" data-stop="1907.040000">another interesting thing I picked up.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1907.440000" data-stop="1909.542000"><strong class="speaker-name">Omar:</strong>  Yeah, I like imenu, yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1909.522000" data-stop="1911.184000">I should add imenu for this.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1911.304000" data-stop="1914.348000">One thing I did to imenu is I added a section for</span> <span class="audio-time caption" data-speaker="Omar" data-start="1914.388000" data-stop="1917.031000">key maps.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1917.051000" data-stop="1920.114000"><strong class="speaker-name">Sacha:</strong>  I saw that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1920.274000" data-stop="1922.176000">You have a regular expression so you can see it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1922.257000" data-stop="1923.999000">easily.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1925.180000" data-stop="1925.540000"><strong class="speaker-name">Omar:</strong>  Right.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1930.106000" data-stop="1932.488000">It's not half, but a big chunk of Embark is just</span> <span class="audio-time caption" data-speaker="Omar" data-start="1932.528000" data-stop="1934.010000">the default configuration.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1934.260000" data-stop="1937.996000">It would be a lot of work to configure Embark</span> <span class="audio-time caption" data-speaker="Omar" data-start="1938.036000" data-stop="1938.619000">from scratch.</span> <span class="audio-time caption" data-speaker="Omar" data-start="1938.699000" data-stop="1940.467000">That's why the package comes with an extensive</span> <span class="audio-time caption" data-speaker="Omar" data-start="1940.527000" data-stop="1941.672000">default configuration.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1942.225000" data-stop="1944.367000"><strong class="speaker-name">Sacha:</strong>  Charlie Baker says, “I have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1944.407000" data-stop="1946.869000"><code>embark-act</code> set up to expand in the same way</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1946.929000" data-stop="1948.991000"><code>expand-region</code> does, but with Embark’s type
awareness,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1949.071000" data-stop="1950.553000">it's easy to add a contract function.”</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1950.573000" data-stop="1952.935000">I guess maybe also some highlighting helps</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1952.955000" data-stop="1953.355000">with that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1954.336000" data-stop="1956.738000">Charlie also says, “I also have a completing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1956.778000" data-stop="1958.800000">read interface in the transient menu to jump</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1958.860000" data-stop="1961.022000">directly to one of the many types under point</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1961.062000" data-stop="1963.144000">that I'm seeking.” Charlie, you're going to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1963.184000" data-stop="1964.926000">share somewhere so I can steal that part of your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1964.966000" data-stop="1965.666000">config, right?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="1967.248000" data-stop="1968.609000"><strong class="speaker-name">Omar:</strong>  I mean, that would be something I</span> <span class="audio-time caption" data-speaker="Omar" data-start="1968.649000" data-stop="1971.912000">would consider adding to Embark itself.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1971.000000">32:51</span> <strong>Collaboration</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1971.993000" data-stop="1974.556000"><strong class="speaker-name">Sacha:</strong>  You mentioned having all these</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1974.596000" data-stop="1977.500000">conversations with Daniel and others through</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1977.520000" data-stop="1979.242000">GitHub and other things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1979.282000" data-stop="1982.986000">I wanted to touch on that because I think in the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1983.107000" data-stop="1987.312000">Emacs community, it's pretty rare to find people</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1987.352000" data-stop="1989.574000">who are collaborating on packages and packages</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1989.614000" data-stop="1990.896000">that work so well together.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1991.717000" data-stop="1995.822000">The partnership between your packages and Daniel</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1995.862000" data-stop="1998.505000">Mendler or Minad's packages with Consult and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1998.545000" data-stop="2000.768000">Vertico and Marginalia is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2000.748000" data-stop="2003.657000">really nice. We don't see a lot</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2003.677000" data-stop="2006.406000">of examples of that kind of inter-packaged</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2006.486000" data-stop="2008.813000">conversation as much.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2008.894000" data-stop="2011.281000">How did that start?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2011.632000" data-stop="2013.536000"><strong class="speaker-name">Omar:</strong>  I think it was mostly Daniel's</span> <span class="audio-time caption" data-speaker="Omar" data-start="2013.576000" data-stop="2013.977000">initiative.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2014.138000" data-stop="2019.570000">I had started work on Orderless and</span> <span class="audio-time caption" data-speaker="Omar" data-start="2019.670000" data-stop="2022.797000">Embark. I think his first package was</span> <span class="audio-time caption" data-speaker="Omar" data-start="2022.897000" data-stop="2025.463000">Consult, maybe, of this family of packages.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2028.189000" data-stop="2032.600000">I remember Embark was a pretty sad shape when</span> <span class="audio-time caption" data-speaker="Omar" data-start="2032.601000" data-stop="2034.600000">Daniel started raising issues</span> <span class="audio-time caption" data-speaker="Omar" data-start="2034.601000" data-stop="2038.800000">on the Github. He really lit a fire under me</span> <span class="audio-time caption" data-speaker="Omar" data-start="2038.801000" data-stop="2041.800000">to improve Embark.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2041.801000" data-stop="2044.000000">It started with him complaining about things</span> <span class="audio-time caption" data-speaker="Omar" data-start="2044.001000" data-stop="2046.967000">in Embark, and I immediately realized that he</span> <span class="audio-time caption" data-speaker="Omar" data-start="2046.968000" data-stop="2048.367000">was thinking very carefully about</span> <span class="audio-time caption" data-speaker="Omar" data-start="2048.368000" data-stop="2051.367000">the user experience, so I thought</span> <span class="audio-time caption" data-speaker="Omar" data-start="2051.368000" data-stop="2053.033000">he is full of good ideas</span> <span class="audio-time caption" data-speaker="Omar" data-start="2053.034000" data-stop="2054.194000">and I should listen to them.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2054.174000" data-stop="2056.742000">Back then at the start of Embark and</span> <span class="audio-time caption" data-speaker="Omar" data-start="2056.782000" data-stop="2059.449000">Orderless, Prot was also very involved in</span> <span class="audio-time caption" data-speaker="Omar" data-start="2059.550000" data-stop="2060.672000">discussing the design.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2060.954000" data-stop="2062.418000">All of this is on GitHub issues.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2063.360000" data-stop="2066.952000">Some software archaeologists can find all of it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2067.539000" data-stop="2072.130000">So I think we started working together when</span> <span class="audio-time caption" data-speaker="Omar" data-start="2072.190000" data-stop="2074.357000">we realized we were both writing Marginalia,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2074.657000" data-stop="2076.723000">so we decided to merge those two packages into a</span> <span class="audio-time caption" data-speaker="Omar" data-start="2076.783000" data-stop="2077.224000">single one.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2077.906000" data-stop="2081.495000">I think maybe the name Marginalia was</span> <span class="audio-time caption" data-speaker="Omar" data-start="2081.514000" data-stop="2082.317000">suggested by Prot,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2082.456000" data-stop="2084.282000">I don't remember, but it's a very good name.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2084.532000" data-stop="2090.559000">The collaboration was completely unplanned.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2091.040000" data-stop="2094.484000">We just did it because we had already talked on</span> <span class="audio-time caption" data-speaker="Omar" data-start="2094.524000" data-stop="2098.069000">the Embark issues and Daniel's suggestions</span> <span class="audio-time caption" data-speaker="Omar" data-start="2098.109000" data-stop="2102.194000">improved Embark a great deal in a short amount of</span> <span class="audio-time caption" data-speaker="Omar" data-start="2102.214000" data-stop="2102.534000">time.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2103.155000" data-stop="2106.719000">So then when we both realized we were writing</span> <span class="audio-time caption" data-speaker="Omar" data-start="2106.779000" data-stop="2108.842000">something like Marginalia, we decided to just</span> <span class="audio-time caption" data-speaker="Omar" data-start="2108.922000" data-stop="2111.265000">merge those two packages and write a single one.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2111.245000" data-stop="2113.828000">Since that worked out well, we kept on</span> <span class="audio-time caption" data-speaker="Omar" data-start="2113.868000" data-stop="2114.428000">collaborating.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2115.510000" data-stop="2119.233000">So far, we haven't co-written any other package.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2120.355000" data-stop="2123.358000">One thing like that is that now Daniel is a</span> <span class="audio-time caption" data-speaker="Omar" data-start="2123.418000" data-stop="2125.881000">co-maintainer of Orderless, which is great</span> <span class="audio-time caption" data-speaker="Omar" data-start="2125.961000" data-stop="2128.964000">because Daniel is extremely efficient at fixing</span> <span class="audio-time caption" data-speaker="Omar" data-start="2129.044000" data-stop="2129.324000">bugs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2129.464000" data-stop="2132.568000">He does it instantly.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2132.588000" data-stop="2136.272000">He figures out what's wrong and has a patch in a</span> <span class="audio-time caption" data-speaker="Omar" data-start="2136.332000" data-stop="2138.674000">few minutes after he looks at the issue.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2138.714000" data-stop="2140.476000">He looks at the issue</span> <span class="audio-time caption" data-speaker="Omar" data-start="2140.456000" data-stop="2142.339000">the day it was posted or the day after.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2142.459000" data-stop="2145.142000">I can't do things that quickly.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2145.263000" data-stop="2149.969000">It's great that he's helping out with orderless.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2150.409000" data-stop="2152.312000">It wasn't planned.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2152.472000" data-stop="2154.315000">It just felt right from the very beginning.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2154.415000" data-stop="2157.819000">I immediately realized he had some great ideas</span> <span class="audio-time caption" data-speaker="Omar" data-start="2157.900000" data-stop="2159.942000">and implemented a lot of them.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2161.444000" data-stop="2163.968000">Then we started doing that the other way around.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2164.068000" data-stop="2166.712000">I started commenting on a bunch of issues in</span> <span class="audio-time caption" data-speaker="Omar" data-start="2167.392000" data-stop="2169.315000">Consult and Vertico.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2169.852000" data-stop="2173.537000">I think I exerted some pressure on Daniel to add</span> <span class="audio-time caption" data-speaker="Omar" data-start="2173.577000" data-stop="2177.021000">features to Vertico, like the grid view and the</span> <span class="audio-time caption" data-speaker="Omar" data-start="2177.082000" data-stop="2177.923000">horizontal view.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2178.884000" data-stop="2181.207000">Or maybe specifically the grid view, because at</span> <span class="audio-time caption" data-speaker="Omar" data-start="2181.227000" data-stop="2183.790000">the time I was... I'm sort of slow to switch</span> <span class="audio-time caption" data-speaker="Omar" data-start="2184.031000" data-stop="2185.352000">basic Emacs infrastructure.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2185.713000" data-stop="2187.916000">I wasn't using Vertico for a long time, even</span> <span class="audio-time caption" data-speaker="Omar" data-start="2187.936000" data-stop="2188.857000">though I was like</span> <span class="audio-time caption" data-speaker="Omar" data-start="2188.837000" data-stop="2193.533000">opining on the Github issues for Vertico,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2193.534000" data-stop="2195.033000">and the reason was that</span> <span class="audio-time caption" data-speaker="Omar" data-start="2195.034000" data-stop="2198.337000">I was stuck with the vastly inferior <code>embark-live</code>.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2198.858000" data-stop="2201.303000">There was this <code>embark-live</code> thing where you could</span> <span class="audio-time caption" data-speaker="Omar" data-start="2201.864000" data-stop="2204.360000">pop up a buffer with the targets in the</span> <span class="audio-time caption" data-speaker="Omar" data-start="2204.361000" data-stop="2206.514000">minibuffer, which just means a completion candidate.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2206.534000" data-stop="2209.360000">So you could use Embark as a kind of</span> <span class="audio-time caption" data-speaker="Omar" data-start="2209.340000" data-stop="2212.224000">completion user interface.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2213.346000" data-stop="2217.172000">It was very slow, but it was very featureful.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2217.492000" data-stop="2220.317000">You could do a vertical list.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2220.357000" data-stop="2221.318000">You could do a grid.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2221.659000" data-stop="2224.182000">In the list, you could activate zebra stripes.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2225.284000" data-stop="2226.806000">Yeah, you can see</span> <span class="audio-time caption" data-speaker="Omar" data-start="2227.668000" data-stop="2229.110000">that's been removed from Embark.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2229.511000" data-stop="2233.356000">But I kept saying to Daniel, I'll switch to</span> <span class="audio-time caption" data-speaker="Omar" data-start="2233.477000" data-stop="2235.359000">Vertico if you add a grid view.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2235.660000" data-stop="2237.743000">He eventually did add the grid view.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2237.723000" data-stop="2240.346000">I kept my word and switched to Vertico, which is much</span> <span class="audio-time caption" data-speaker="Omar" data-start="2240.406000" data-stop="2242.168000">better than the thing in Embark.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2242.228000" data-stop="2243.870000">I was just being stubborn by not switching</span> <span class="audio-time caption" data-speaker="Omar" data-start="2243.950000" data-stop="2244.871000">earlier.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2244.891000" data-stop="2246.733000">But if I had switched earlier, maybe Vertico</span> <span class="audio-time caption" data-speaker="Omar" data-start="2246.773000" data-stop="2248.916000">wouldn't have a grid view.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2249.677000" data-stop="2251.279000"><strong class="speaker-name">Sacha:</strong>  I think it's definitely a good</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2251.339000" data-stop="2258.407000">example of a set of packages that has... So all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2258.427000" data-stop="2260.289000">this started in about 2020s or so.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2261.010000" data-stop="2265.655000">So we actually can see how people have gotten into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2265.955000" data-stop="2269.560000">using Vertico and all the other packages compared</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2269.600000" data-stop="2272.304000">to, say, looking at more popular packages that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2272.344000" data-stop="2273.686000">have been around for a long time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2273.726000" data-stop="2277.431000">"Of course everyone's been using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2277.531000" data-stop="2278.592000">Org Mode for a long time."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2278.632000" data-stop="2279.333000">It's there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2279.373000" data-stop="2281.079000">It's part of the fabric.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2281.000000">38:01</span> <strong>Technology adoption and Emacs packages</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2281.080000" data-stop="2282.638000"><strong class="speaker-name">Sacha:</strong> It's very interesting to see the technology</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2282.658000" data-stop="2284.240000">adoption around it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2284.280000" data-stop="2286.303000">A lot of the things that people struggle with as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2286.383000" data-stop="2288.386000">package authors is getting other people to try</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2288.426000" data-stop="2291.490000">out their stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2291.470000" data-stop="2294.837000">With Orderless and Embark probably in the early</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2294.897000" data-stop="2298.203000">days, what was that like to put this thing out</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2298.224000" data-stop="2301.410000">there in the world and have people start to try</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2301.490000" data-stop="2302.733000">it?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2302.753000" data-stop="2303.995000">How did people find it?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2305.004000" data-stop="2307.989000"><strong class="speaker-name">Omar:</strong>  I personally found it very scary.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2308.791000" data-stop="2313.159000">At the beginning, I still thought Embark was a</span> <span class="audio-time caption" data-speaker="Omar" data-start="2313.500000" data-stop="2315.884000">part of my personal Emacs configuration that sort</span> <span class="audio-time caption" data-speaker="Omar" data-start="2315.924000" data-stop="2318.609000">of grew out of control and I decided to publish</span> <span class="audio-time caption" data-speaker="Omar" data-start="2318.649000" data-stop="2319.090000">separately.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2320.272000" data-stop="2322.977000">But then I have all these people telling me how</span> <span class="audio-time caption" data-speaker="Omar" data-start="2323.017000" data-stop="2325.582000">to improve what I still thought of as part of my</span> <span class="audio-time caption" data-speaker="Omar" data-start="2325.642000" data-stop="2328.447000">personal configuration.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2328.427000" data-stop="2330.470000">I think one thing that helped was that people</span> <span class="audio-time caption" data-speaker="Omar" data-start="2330.510000" data-stop="2331.391000">made very good suggestions.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2331.411000" data-stop="2333.714000">So I realized, no, no, it's worth publishing</span> <span class="audio-time caption" data-speaker="Omar" data-start="2334.134000" data-stop="2336.397000">reusable parts of your configuration just for the</span> <span class="audio-time caption" data-speaker="Omar" data-start="2336.677000" data-stop="2339.401000">GitHub issues, just for people finding bugs and</span> <span class="audio-time caption" data-speaker="Omar" data-start="2339.441000" data-stop="2341.804000">suggesting improvements and so on.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2342.645000" data-stop="2347.511000">But yeah, I had to adjust to having some users.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2347.551000" data-stop="2349.013000">At first, it was very few people.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2350.235000" data-stop="2353.459000">But then they got added to Doom.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2353.499000" data-stop="2356.122000">I think they were made the default in Doom.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2356.237000" data-stop="2359.243000">That was a huge influx of users.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2359.283000" data-stop="2361.248000">That was very scary.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2361.508000" data-stop="2363.813000">We were suddenly flooded with new bug reports,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2363.933000" data-stop="2365.917000">like all of the packages in the family.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2366.038000" data-stop="2370.327000">I remember feeling like there's a horde of Doom</span> <span class="audio-time caption" data-speaker="Omar" data-start="2370.447000" data-stop="2371.950000">users running at us.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2374.748000" data-stop="2375.749000"><strong class="speaker-name">Sacha:</strong>  All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2377.070000" data-stop="2378.832000">So, starter kit, then everybody gets</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2378.892000" data-stop="2381.534000">into it, and then everybody starts talking about</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2381.614000" data-stop="2382.835000">it because they're like, yeah, you know, it's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2382.875000" data-stop="2383.055000">great.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2383.075000" data-stop="2385.578000">You can specify things out of order.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2385.638000" data-stop="2387.540000">You don't have to remember what words come in,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2387.560000" data-stop="2389.081000">which order when you're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2389.121000" data-stop="2389.882000">completing things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2390.542000" data-stop="2393.465000">Those of us who aren't on starter kits are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2393.485000" data-stop="2395.046000">like, yes, we should try that too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2395.847000" data-stop="2397.589000">That's how it's done.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2397.609000" data-stop="2399.991000"><strong class="speaker-name">Omar:</strong>  Doom helped a lot to raise</span> <span class="audio-time caption" data-speaker="Omar" data-start="2400.771000" data-stop="2406.099000">awareness and adoption.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2406.000000">40:06</span> <strong>Personal packages and naming conventions</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2406.100000" data-stop="2409.479000"><strong class="speaker-name">Sacha:</strong>  You've got a lot of other small packages.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2410.040000" data-stop="2412.724000">For something as small as block-undo, which you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2412.764000" data-stop="2414.947000">showed us, it really just fits in one screen.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2414.967000" data-stop="2416.529000">Is that something that you would set up as a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2416.589000" data-stop="2419.233000">different repository or just as a file within</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2419.253000" data-stop="2419.854000">your current one?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2419.874000" data-stop="2421.496000"><strong class="speaker-name">Omar:</strong>  No, those are all in my <code>user-lisp</code></span> <span class="audio-time caption" data-speaker="Omar" data-start="2421.616000" data-stop="2422.117000">directory.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2423.940000" data-stop="2425.382000"><strong class="speaker-name">Sacha:</strong>  I have actually successfully used</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2425.562000" data-stop="2428.226000">use package to grab stuff out of your <code>user-lisp</code></span> <span class="audio-time caption" data-speaker="Sacha" data-start="2428.246000" data-stop="2431.350000">directory and use them in my config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2431.330000" data-stop="2432.211000">Yeah,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2432.231000" data-stop="2432.751000">it works.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2432.891000" data-stop="2435.934000">I just say, all right, my <code>load path</code> is here where</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2435.954000" data-stop="2437.155000">I've checked out your source code.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2438.276000" data-stop="2440.899000">It defines these commands. Then I can bind</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2440.979000" data-stop="2445.243000">your functions to my shortcuts.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2446.063000" data-stop="2450.467000">Although, because your functions are named the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2450.507000" data-stop="2455.151000">way that I would expect Emacs functions to be</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2455.191000" data-stop="2457.634000">named, I've been defaliasing them so that I don't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2457.754000" data-stop="2459.635000">accidentally say, oh yeah, that's totally built</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2459.736000" data-stop="2461.337000">in when it isn't.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2461.317000" data-stop="2465.481000"><strong class="speaker-name">Omar:</strong>  Yeah, I'm inconsistent with these</span> <span class="audio-time caption" data-speaker="Omar" data-start="2465.521000" data-stop="2467.464000">little packages in my <code>user-lisp</code> directory.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2468.244000" data-stop="2470.747000">In some of them, I do stick to the convention</span> <span class="audio-time caption" data-speaker="Omar" data-start="2470.807000" data-stop="2473.350000">that the package name is a prefix for all the</span> <span class="audio-time caption" data-speaker="Omar" data-start="2473.390000" data-stop="2474.491000">functions,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2474.511000" data-stop="2475.272000">and for some, I don't.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2475.312000" data-stop="2477.795000">For some, I just try to name them the way exactly</span> <span class="audio-time caption" data-speaker="Omar" data-start="2477.835000" data-stop="2478.215000">what you said.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2478.235000" data-stop="2479.857000">Like, what would these be called if they were</span> <span class="audio-time caption" data-speaker="Omar" data-start="2479.897000" data-stop="2480.778000">built into Emacs?</span> <span class="audio-time caption" data-speaker="Omar" data-start="2481.278000" data-stop="2483.521000">Which means they don't share a consistent prefix</span> <span class="audio-time caption" data-speaker="Omar" data-start="2483.621000" data-stop="2483.861000">often.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2484.362000" data-stop="2487.125000">I should probably make that more</span> <span class="audio-time caption" data-speaker="Omar" data-start="2487.225000" data-stop="2488.506000">consistently</span> <span class="audio-time caption" data-speaker="Omar" data-start="2488.486000" data-stop="2491.131000">use the package name as a prefix so that they're</span> <span class="audio-time caption" data-speaker="Omar" data-start="2491.371000" data-stop="2492.173000">easier to dot.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2493.014000" data-stop="2494.697000"><strong class="speaker-name">Sacha:</strong>  Or I have another suggestion.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2494.737000" data-stop="2499.105000">You could get <code>apply-kmacro-to-paragraph</code> or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2499.165000" data-stop="2501.589000">whatever that is into core Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2501.609000" data-stop="2502.651000">That would be great for everyone.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2504.254000" data-stop="2505.817000"><strong class="speaker-name">Omar:</strong>  Yeah, maybe that one is useful</span> <span class="audio-time caption" data-speaker="Omar" data-start="2505.857000" data-stop="2507.760000">enough.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2508.263000" data-stop="2510.526000">Some of these I don't use anymore because I think</span> <span class="audio-time caption" data-speaker="Omar" data-start="2510.546000" data-stop="2513.829000">I've substituted them with workflows with Embark.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2513.849000" data-stop="2515.771000">For example, <code>eval-region-advice</code>.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2515.791000" data-stop="2518.955000">It bothered me that none of the evaluate commands</span> <span class="audio-time caption" data-speaker="Omar" data-start="2519.335000" data-stop="2522.299000">are “do what you mean” in the most common sense in</span> <span class="audio-time caption" data-speaker="Omar" data-start="2522.359000" data-stop="2522.779000">Emacs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2522.799000" data-stop="2524.942000">The most common sense of do what I mean in Emacs</span> <span class="audio-time caption" data-speaker="Omar" data-start="2525.002000" data-stop="2527.104000">is if the region is active, use the region.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2527.144000" data-stop="2528.846000">Otherwise, do the normal thing.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2529.567000" data-stop="2531.529000">All of the evaluate commands should evaluate</span> <span class="audio-time caption" data-speaker="Omar" data-start="2531.549000" data-stop="2532.791000">the region if the region is active.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2534.012000" data-stop="2536.735000">So that's what this does.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2536.715000" data-stop="2539.199000">But I don't use that anymore, because to evaluate</span> <span class="audio-time caption" data-speaker="Omar" data-start="2539.259000" data-stop="2545.409000">a region, I usually use <code>embark-act</code> <code>e</code>. What
else</span> <span class="audio-time caption" data-speaker="Omar" data-start="2545.549000" data-stop="2546.499000">is here?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2546.000000">42:26</span> <strong>find-file-at-point and directory names
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-43-06-133.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-43-06-133.jpg" alt="image from video 00:43:06.133" data-time="00:43:06.133"></a><span class="audio-time caption" data-speaker="Omar" data-start="2546.500000" data-stop="2548.574000"><strong class="speaker-name">Omar:</strong> Oh, some of these things are like tiny things</span> <span class="audio-time caption" data-speaker="Omar" data-start="2548.594000" data-stop="2551.379000">that are almost invisible, like this.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2552.441000" data-stop="2554.504000">In Eshell buffers,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2554.889000" data-stop="2559.778000">By default, <code>find-file-at-point</code> doesn’t realize</span> <span class="audio-time caption" data-speaker="Omar" data-start="2559.818000" data-stop="2565.107000">that if it sees the filename printed in an <code>eshell</code></span> <span class="audio-time caption" data-speaker="Omar" data-start="2565.147000" data-stop="2568.834000">buffer, it won't look at the prompt to figure out</span> <span class="audio-time caption" data-speaker="Omar" data-start="2568.894000" data-stop="2570.076000">what directory it came from.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2570.296000" data-stop="2571.919000">If you type <code>ls</code></span> <span class="audio-time caption" data-speaker="Omar" data-start="2572.000000" data-stop="2574.764000">and you're in your current working directory,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2574.784000" data-stop="2578.409000">all of those listed files, the <code>find-file-at-point</code></span> <span class="audio-time caption" data-speaker="Omar" data-start="2578.469000" data-stop="2581.714000">guesses that they are files in the default</span> <span class="audio-time caption" data-speaker="Omar" data-start="2581.754000" data-stop="2583.036000">directory, and that guess is correct.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2583.517000" data-stop="2586.100000">But if, further above, you had gone into a</span> <span class="audio-time caption" data-speaker="Omar" data-start="2586.120000" data-stop="2588.724000">different directory, called <code>ls</code> there,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2589.165000" data-stop="2591.829000">then those files are no longer in what is now the</span> <span class="audio-time caption" data-speaker="Omar" data-start="2591.889000" data-stop="2592.810000">default directory.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2592.790000" data-stop="2596.856000">So this just adds a little bit of smarts to</span> <span class="audio-time caption" data-speaker="Omar" data-start="2596.916000" data-stop="2597.898000"><code>find-file-at-point</code>.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2598.038000" data-stop="2599.981000">It looks at the prior prompt to see what</span> <span class="audio-time caption" data-speaker="Omar" data-start="2600.041000" data-stop="2603.567000">directory that was run in, and then tries to see</span> <span class="audio-time caption" data-speaker="Omar" data-start="2603.627000" data-stop="2605.810000">if the files it sees there are in that directory.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2606.151000" data-stop="2608.114000">Of course, the only reason I want this is</span> <span class="audio-time caption" data-speaker="Omar" data-start="2608.174000" data-stop="2611.279000">because I sometimes use <code>embark-act</code> on files I see</span> <span class="audio-time caption" data-speaker="Omar" data-start="2611.319000" data-stop="2612.841000">written in the Eshell buffer.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2613.665000" data-stop="2614.207000"><strong class="speaker-name">Sacha:</strong>  I love this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2614.608000" data-stop="2617.097000">I love how all these little bits of code show</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2617.117000" data-stop="2620.288000">that at some point you were annoyed by a tiny,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2620.308000" data-stop="2622.555000">tiny problem and you're like, that's it,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2622.596000" data-stop="2623.980000">I'm just going to write some code and it's never</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2624.000000" data-stop="2629.199000">going to be a problem again.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2629.000000">43:49</span> <strong>The value of using Emacs’s APIs</strong></div><p></p><span class="audio-time caption" data-speaker="Omar" data-start="2629.200000" data-stop="2631.734000"><strong class="speaker-name">Omar:</strong>  One thing I like about this is it</span> <span class="audio-time caption" data-speaker="Omar" data-start="2631.774000" data-stop="2637.300000">also shows sticking to Emacs APIs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2637.320000" data-stop="2639.983000">Embark uses <code>find-file-at-point</code> to guess what things</span> <span class="audio-time caption" data-speaker="Omar" data-start="2640.283000" data-stop="2641.865000">are referred to files.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2642.846000" data-stop="2645.589000">I did this to improve the functionality of Embark</span> <span class="audio-time caption" data-speaker="Omar" data-start="2645.849000" data-stop="2648.312000">in Eshell buffers, but what it really does is</span> <span class="audio-time caption" data-speaker="Omar" data-start="2648.392000" data-stop="2650.494000">improve the functionality of <code>find-file-at-point</code>,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2650.594000" data-stop="2651.996000">which I hardly ever use directly.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2652.056000" data-stop="2655.720000">I almost always use it through Embark.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2656.747000" data-stop="2661.778000"><strong class="speaker-name">Sacha:</strong>  Send it upstream!</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2662.920000" data-stop="2666.809000">Okay, so you use Emacs for working with a shell,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2666.829000" data-stop="2669.515000">working with your files, doing math, doing some</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2669.555000" data-stop="2670.537000">programming as well.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2671.038000" data-stop="2673.704000">Are there unexpected things that you use Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2673.764000" data-stop="2674.165000">for?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2675.360000" data-stop="2677.203000"><strong class="speaker-name">Omar:</strong>  I don't think so.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2679.167000" data-stop="2679.948000">Mostly I write.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2680.549000" data-stop="2682.633000">It's mostly writing prose.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2682.653000" data-stop="2687.541000">I think I was slightly misled about what a job in</span> <span class="audio-time caption" data-speaker="Omar" data-start="2687.601000" data-stop="2688.343000">academia is like.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2688.583000" data-stop="2689.805000">I mostly write emails.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2689.825000" data-stop="2696.839000">That's the bulk of my job by the time consumed.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2696.000000">44:56</span> <strong>org-ql and usual files
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-45-18-667.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-45-18-667.jpg" alt="image from video 00:45:18.667" data-time="00:45:18.667"></a><span class="audio-time caption" data-speaker="Sacha" data-start="2696.840000" data-stop="2698.175000"><strong class="speaker-name">Sacha:</strong>  You have some shortcuts around</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2699.217000" data-stop="2702.081000">org-ql for managing your agenda or other things.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2702.101000" data-stop="2707.029000"><strong class="speaker-name">Omar:</strong>  This notion of the usual files.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2707.189000" data-stop="2711.295000">I was often using org-ql to search this set of</span> <span class="audio-time caption" data-speaker="Omar" data-start="2711.335000" data-stop="2711.635000">files:</span> <span class="audio-time caption" data-speaker="Omar" data-start="2712.196000" data-stop="2715.661000">every file mentioned in a refile target,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2715.681000" data-stop="2717.564000">every file mentioned in a capture template,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2718.666000" data-stop="2723.473000">and every file agenda file.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2724.297000" data-stop="2724.978000">Here it is.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2725.739000" data-stop="2727.582000">So I thought that's what I want to search.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2727.622000" data-stop="2729.485000">I want to search every file I mentioned in a</span> <span class="audio-time caption" data-speaker="Omar" data-start="2729.525000" data-stop="2733.310000">refile target, every agenda file, and every file</span> <span class="audio-time caption" data-speaker="Omar" data-start="2733.350000" data-stop="2735.193000">that I mentioned in some template.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2736.054000" data-stop="2737.376000">That's what this does.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2738.618000" data-stop="2740.281000"><strong class="speaker-name">Sacha:</strong>  I don't know if you trust your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2742.244000" data-stop="2744.908000">hiding things enough for us to try that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2745.248000" data-stop="2746.810000">Since you put so much work into it...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2747.311000" data-stop="2749.434000">Or do you want me to hide the screen first and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2749.454000" data-stop="2751.317000">then you can let me know when it's safe to look?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2751.449000" data-stop="2752.191000"><strong class="speaker-name">Omar:</strong>  No, no, that's fine.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2752.571000" data-stop="2754.696000">I can show you the censorship process.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2754.716000" data-stop="2756.820000">What I thought I would do is I could show you</span> <span class="audio-time caption" data-speaker="Omar" data-start="2757.441000" data-stop="2760.267000">the... Wait, what is this?</span> <span class="audio-time caption" data-speaker="Omar" data-start="2760.287000" data-stop="2761.350000">Why is that not an action?</span> <span class="audio-time caption" data-speaker="Omar" data-start="2761.470000" data-stop="2762.031000">Oh, library.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2763.454000" data-stop="2764.797000">Oh, I have not loaded this.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2767.603000" data-stop="2768.725000">Yes, now it's loaded.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2769.126000" data-stop="2771.230000">Oh, so this should be...</span> <span class="audio-time caption" data-speaker="Omar" data-start="2772.188000" data-stop="2776.072000">Why is this not recognizing org-ql usual files as</span> <span class="audio-time caption" data-speaker="Omar" data-start="2776.092000" data-stop="2777.654000">a variable now that this is loaded?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2778.775000" data-stop="2779.115000"><strong class="speaker-name">Sacha:</strong>  Oh, great.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2779.656000" data-stop="2782.319000">I'm also open to debugging demonstrations live</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2782.399000" data-stop="2784.922000">because that is something that a lot of people do.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2784.942000" data-stop="2786.143000"><strong class="speaker-name">Omar:</strong>  Sorry, I think it just hadn't</span> <span class="audio-time caption" data-speaker="Omar" data-start="2786.203000" data-stop="2787.945000">loaded this file.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2787.965000" data-stop="2789.667000">Now I ran a command from here and now I</span> <span class="audio-time caption" data-speaker="Omar" data-start="2789.707000" data-stop="2790.508000">should have a variable.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2790.528000" data-stop="2791.649000">Yes, I have a variable.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2792.089000" data-stop="2793.451000">So we can go to Customize.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-46-33-967.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-46-33-967.jpg" alt="image from video 00:46:33.967" data-time="00:46:33.967"></a><span class="audio-time caption" data-speaker="Omar" data-start="2793.971000" data-stop="2795.953000"><strong class="speaker-name">Omar:</strong> The ones that have sensitive information are</span> <span class="audio-time caption" data-speaker="Omar" data-start="2796.014000" data-stop="2800.238000">tasks, home, health,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2801.467000" data-stop="2802.208000">Definitely work.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2804.011000" data-stop="2804.933000">Journal.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2804.953000" data-stop="2806.536000">I don't really mind people seeing my journal, but</span> <span class="audio-time caption" data-speaker="Omar" data-start="2806.596000" data-stop="2807.117000">that's boring.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2808.179000" data-stop="2808.600000">There we go.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2808.940000" data-stop="2809.461000">Yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2809.561000" data-stop="2813.889000">So now I got rid of all of the sensitive files.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2813.949000" data-stop="2815.492000">And so now I can show you.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2816.013000" data-stop="2817.836000">I usually just search through all of these files</span> <span class="audio-time caption" data-speaker="Omar" data-start="2817.896000" data-stop="2818.176000">at once.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2821.182000" data-stop="2823.606000">So I had a list of things I wanted to tell you</span> <span class="audio-time caption" data-speaker="Omar" data-start="2823.646000" data-stop="2826.259000">about.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2826.000000">47:06</span> <strong>Shortcuts for org-ql search syntax</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2826.260000" data-stop="2827.596000"><strong class="speaker-name">Sacha:</strong>  I should also point out that your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2827.656000" data-stop="2830.780000">config has some stuff for inserting things into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2830.920000" data-stop="2833.623000">the org-ql search syntax.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2833.643000" data-stop="2835.185000"><strong class="speaker-name">Omar:</strong>  You're extremely prepared for this</span> <span class="audio-time caption" data-speaker="Omar" data-start="2835.665000" data-stop="2835.946000">chat.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2836.246000" data-stop="2841.512000">Yes, <code>C-,</code>has a little key map that will</span> <span class="audio-time caption" data-speaker="Omar" data-start="2841.572000" data-stop="2843.315000">insert stuff like priority.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2845.417000" data-stop="2847.960000">Oh, I don't have, let me remove “Sacha”.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2848.092000" data-stop="2850.497000">Oh, yes, everything that I have with priorities</span> <span class="audio-time caption" data-speaker="Omar" data-start="2850.557000" data-stop="2851.840000">is in one of the files I removed.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2851.900000" data-stop="2854.085000">I only use priorities for work.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2854.105000" data-stop="2854.827000"><strong class="speaker-name">Sacha:</strong>  Okay, gotcha.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2855.729000" data-stop="2863.399000"><strong class="speaker-name">Omar:</strong>  We could use to-dos.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2863.000000">47:43</span> <strong>Org TODO states: TODO, WAIT, DONE, NOPE
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-47-45-733.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-47-45-733.jpg" alt="image from video 00:47:45.733" data-time="00:47:45.733"></a><span class="audio-time caption" data-speaker="Sacha" data-start="2863.400000" data-stop="2865.651000"><strong class="speaker-name">Sacha:</strong>  I love that you have a to-do state</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2865.711000" data-stop="2866.793000">called NOPE.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2867.667000" data-stop="2869.009000"><strong class="speaker-name">Omar:</strong>  It's for things that are</span> <span class="audio-time caption" data-speaker="Omar" data-start="2869.049000" data-stop="2871.152000">cancelled, but I don't want to delete them yet.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2871.673000" data-stop="2875.038000">Actually, it's mainly there because when I</span> <span class="audio-time caption" data-speaker="Omar" data-start="2875.219000" data-stop="2877.402000">archive them, I want to know that I had that task</span> <span class="audio-time caption" data-speaker="Omar" data-start="2877.442000" data-stop="2879.786000">at some point, but decided not to do it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2879.806000" data-stop="2881.769000"><strong class="speaker-name">Sacha:</strong>  Well, it's so much less verbose than CANCELLED,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2881.949000" data-stop="2883.979000">so I think I might actually just...</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2883.980000" data-stop="2890.302000"><strong class="speaker-name">Omar:</strong>  For a long time, I was using monospace fonts, so I wanted to</span> <span class="audio-time caption" data-speaker="Omar" data-start="2890.542000" data-stop="2892.445000">have everything fit in four letters.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2893.106000" data-stop="2894.248000">So I have...</span> <span class="audio-time caption" data-speaker="Omar" data-start="2894.515000" data-stop="2898.994000">Yeah, all of my, I have TODO, WAIT, DONE, NOPE,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2899.255000" data-stop="2900.560000">and they're all four letters long.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2901.653000" data-stop="2902.414000"><strong class="speaker-name">Sacha:</strong>  Nope.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2902.434000" data-stop="2902.854000">Gotcha.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2902.974000" data-stop="2903.214000">Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2903.234000" data-stop="2906.459000">So that's org-ql and that's your inserting thingy.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2906.000000">48:26</span> <strong>The inserter macro
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-48-36-667.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-48-36-667.jpg" alt="image from video 00:48:36.667" data-time="00:48:36.667"></a><span class="audio-time caption" data-speaker="Sacha" data-start="2906.460000" data-stop="2908.199000"><strong class="speaker-name">Sacha:</strong> The other thing that I wanted to point out</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2908.219000" data-stop="2910.221000">that your definition of the inserter was nice</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2910.241000" data-stop="2911.142000">because it's a macro.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2911.182000" data-stop="2913.043000">So you have this thing that allows you to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2913.063000" data-stop="2916.466000">just define all these interactive functions.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2916.506000" data-stop="2918.408000">You can add it to the key map because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2918.428000" data-stop="2920.370000">the key map expects interactive functions.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2921.010000" data-stop="2923.092000">If people are watching, yeah, this is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2923.132000" data-stop="2923.733000">something you can do.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2923.753000" data-stop="2927.356000"><strong class="speaker-name">Omar:</strong>  I should tell you that there was</span> <span class="audio-time caption" data-speaker="Omar" data-start="2927.696000" data-stop="2929.878000">actually a serious performance bug previously.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2929.918000" data-stop="2931.660000">What I had before this…</span> <span class="audio-time caption" data-speaker="Omar" data-start="2931.640000" data-stop="2936.190000">This string is a keyboard macro that inserts</span> <span class="audio-time caption" data-speaker="Omar" data-start="2936.651000" data-stop="2937.513000">those letters.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2938.996000" data-stop="2941.281000">It is extremely slow if you do it that way for</span> <span class="audio-time caption" data-speaker="Omar" data-start="2941.321000" data-stop="2941.822000">some reason.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2941.942000" data-stop="2945.490000">I think org-ql searches after the T, after the O,</span> <span class="audio-time caption" data-speaker="Omar" data-start="2945.590000" data-stop="2947.995000">after the D, after the O, after the colon.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2948.212000" data-stop="2950.876000">For some reason, that was extremely slow.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2951.297000" data-stop="2956.265000">So I switched to these lambdas that just call</span> <span class="audio-time caption" data-speaker="Omar" data-start="2956.365000" data-stop="2956.805000">insert.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2957.126000" data-stop="2960.351000">That does it in a single step, and it's</span> <span class="audio-time caption" data-speaker="Omar" data-start="2960.391000" data-stop="2961.012000">instantaneous.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2961.613000" data-stop="2963.937000">But my first instinct was, oh, well, this is a</span> <span class="audio-time caption" data-speaker="Omar" data-start="2963.977000" data-stop="2965.099000">good use of keyboard macros.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2965.119000" data-stop="2966.881000">I'll just assign these to keyboard macros.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2967.082000" data-stop="2969.445000">It's not a good idea in this</span> <span class="audio-time caption" data-speaker="Omar" data-start="2969.505000" data-stop="2970.227000">particular case.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2972.798000" data-stop="2974.761000"><strong class="speaker-name">Sacha:</strong>  I imagine there should be some kind</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2974.801000" data-stop="2977.525000">of debouncing on org-ql to make it not do that if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2977.545000" data-stop="2980.450000">you're typing very quickly, but... I don't think</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2980.490000" data-stop="2980.810000">there is.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2980.890000" data-stop="2983.054000"><strong class="speaker-name">Omar:</strong>  Let me see if... Maybe also do a</span> <span class="audio-time caption" data-speaker="Omar" data-start="2983.094000" data-stop="2983.995000">longer one so it...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2986.779000" data-stop="2987.340000"><strong class="speaker-name">Sacha:</strong>  That's okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2987.360000" data-stop="2989.804000">I take your word for the bug that you ran into.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="2991.467000" data-stop="2992.769000"><strong class="speaker-name">Omar:</strong>  I wanted to show you just because</span> <span class="audio-time caption" data-speaker="Omar" data-start="2992.789000" data-stop="2995.813000">it just feels like a really long pause, but it</span> <span class="audio-time caption" data-speaker="Omar" data-start="2995.853000" data-stop="2997.416000">didn't work right now and I don't know why not.</span> <span class="audio-time caption" data-speaker="Omar" data-start="2998.077000" data-stop="2998.838000">That's okay.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2999.259000" data-stop="3000.240000"><strong class="speaker-name">Sacha:</strong>  Curse of the live demo.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3003.157000" data-stop="3004.218000">So that's inserter.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3005.000000">50:05</span> <strong>luggage: generative art experiments
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-51-32-367.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-51-32-367.jpg" alt="image from video 00:51:32.367" data-time="00:51:32.367"></a><span class="audio-time caption" data-speaker="Sacha" data-start="3005.760000" data-stop="3007.302000"><strong class="speaker-name">Sacha:</strong> One thing that I definitely want to make sure we</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3007.342000" data-stop="3011.547000">had time for was your little generative art</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3011.607000" data-stop="3013.089000">experiment, <code>luggage</code>,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3014.150000" data-stop="3015.412000">because you're having fun with Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3017.114000" data-stop="3017.394000"><strong class="speaker-name">Omar:</strong>  Yes.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3017.654000" data-stop="3018.155000">Yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3018.876000" data-stop="3022.180000">There are some people doing amazing generative...</span> <span class="audio-time caption" data-speaker="Omar" data-start="3022.200000" data-stop="3022.640000">Oh my gosh.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3022.780000" data-stop="3024.202000">I do not even have it installed.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3025.083000" data-stop="3025.323000">Yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3027.246000" data-stop="3028.287000">Let's...</span> <span class="audio-time caption" data-speaker="Omar" data-start="3029.060000" data-stop="3031.424000">I forgot that we were going to do that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3031.945000" data-stop="3032.365000">That's okay.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3032.506000" data-stop="3033.487000">But it should be easy.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3034.449000" data-stop="3035.611000">How is <code>:vc</code> used?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3036.332000" data-stop="3037.234000"><strong class="speaker-name">Sacha:</strong>  <code>(:vc (:url …))</code>.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3039.237000" data-stop="3041.380000"><strong class="speaker-name">Omar:</strong>  I have to go to a previous example</span> <span class="audio-time caption" data-speaker="Omar" data-start="3041.421000" data-stop="3041.921000">to figure out.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3044.265000" data-stop="3045.888000"><strong class="speaker-name">Sacha:</strong>  I'm surprised you don't have a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3045.948000" data-stop="3048.492000"><code>consult-line</code> and then just
<code>embark-insert</code>.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3049.494000" data-stop="3050.395000"><strong class="speaker-name">Omar:</strong>  I do that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3050.436000" data-stop="3052.098000">I do that a lot.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3052.118000" data-stop="3053.160000">But I forgot this time.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3053.258000" data-stop="3055.081000"><strong class="speaker-name">Sacha:</strong>  Actually, looking at your config, I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3055.141000" data-stop="3057.605000">learned about <code>consult-multi-occur</code> because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3058.447000" data-stop="3061.171000">apparently there all these multi-buffer equivalents to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3061.192000" data-stop="3062.494000">the commands that I've been using.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3063.015000" data-stop="3065.739000">That is really useful for using stuff</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3065.779000" data-stop="3067.502000">from buffers I'm not even looking at.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3070.808000" data-stop="3071.529000"><strong class="speaker-name">Omar:</strong>  Okay, load it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3072.531000" data-stop="3073.653000"><strong class="speaker-name">Sacha:</strong>  Let's see if it actually can still</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3073.693000" data-stop="3074.514000">do the thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3076.417000" data-stop="3077.359000">There we go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3079.533000" data-stop="3083.258000">So you have some Emacs Lisp to generate this SVG.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3084.119000" data-stop="3086.482000">Yeah, and it's just got...</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3087.123000" data-stop="3089.005000"><strong class="speaker-name">Omar:</strong>  And which other ones do I have?</span> <span class="audio-time caption" data-speaker="Omar" data-start="3090.627000" data-stop="3091.048000">Luggage.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3091.108000" data-stop="3091.609000">There we go.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3092.750000" data-stop="3094.172000">Tubes.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3098.998000" data-stop="3102.783000">I think this one has some nice</span> <span class="audio-time caption" data-speaker="Omar" data-start="3102.903000" data-stop="3106.688000">other color schemes.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3108.743000" data-stop="3109.729000">Classic?</span> <span class="audio-time caption" data-speaker="Omar" data-start="3110.212000" data-stop="3111.620000">Classic is the one.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3111.942000" data-stop="3115.463000">Oh yeah, stained glasses is the one I wanted.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3118.227000" data-stop="3119.589000"><strong class="speaker-name">Sacha:</strong>  Nice.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3120.791000" data-stop="3122.694000">I wanted to mention it specifically because a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3122.734000" data-stop="3125.218000">lot of times people think, oh, Emacs is a text</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3125.318000" data-stop="3126.340000">editor.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3126.360000" data-stop="3129.024000">But because it's also got support for SVG and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3129.064000" data-stop="3131.307000">other types of graphics, you can play around with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3131.387000" data-stop="3131.488000">it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3131.528000" data-stop="3133.551000">Sometimes it's just doing it for fun like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3133.591000" data-stop="3135.934000">this, but also there might be some other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3135.975000" data-stop="3138.879000">visualizations that you can do with Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3138.899000" data-stop="3141.643000">That is actually pretty interesting.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3141.663000" data-stop="3141.884000"><strong class="speaker-name">Omar:</strong>  Yeah.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-52-26-800.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-52-26-800.jpg" alt="image from video 00:52:26.800" data-time="00:52:26.800"></a><span class="audio-time caption" data-speaker="Omar" data-start="3141.904000" data-stop="3143.686000"><strong class="speaker-name">Omar:</strong> Have you heard of this program?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3145.109000" data-stop="3146.631000"><strong class="speaker-name">Sacha:</strong>  No, I haven't come across it.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3146.797000" data-stop="3148.419000"><strong class="speaker-name">Omar:</strong>  There's an entire book with this title.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3148.699000" data-stop="3150.882000">So it's a single line of BASIC.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3150.902000" data-stop="3154.086000">10 print.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3154.106000" data-stop="3156.469000">Oh, I'm not, I don't know BASIC, but the idea is</span> <span class="audio-time caption" data-speaker="Omar" data-start="3156.509000" data-stop="3159.973000">like you randomly pick either forward slash or</span> <span class="audio-time caption" data-speaker="Omar" data-start="3160.073000" data-stop="3160.634000">backslash.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3161.374000" data-stop="3162.816000"><strong class="speaker-name">Sacha:</strong>  Oh, yeah, yeah, that makes sense</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3162.936000" data-stop="3163.076000">now.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3165.319000" data-stop="3167.782000"><strong class="speaker-name">Omar:</strong>  I'm sure this is not correct BASIC,</span> <span class="audio-time caption" data-speaker="Omar" data-start="3168.143000" data-stop="3169.024000">but, you know, something like that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3169.064000" data-stop="3171.066000">Yeah, I get the idea.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3171.518000" data-stop="3172.520000">Yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3172.720000" data-stop="3174.022000">And that's what this does.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3174.062000" data-stop="3174.663000">And then you GOTO 10.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3174.683000" data-stop="3175.544000">It's like...</span> <span class="audio-time caption" data-speaker="Omar" data-start="3177.047000" data-stop="3179.290000">It makes these elaborate mazes.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3179.431000" data-stop="3181.173000">It's an extremely simple program.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3181.895000" data-stop="3183.137000"><strong class="speaker-name">Sacha:</strong>  So this is the kind of stuff you do</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3183.177000" data-stop="3183.557000">for fun.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3184.178000" data-stop="3185.941000">I mean, you probably do lots of other things for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3185.981000" data-stop="3186.382000">fun, too.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3187.784000" data-stop="3188.205000"><strong class="speaker-name">Omar:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3188.225000" data-stop="3192.311000">But this... No, that's not the buffer I wanted.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3192.331000" data-stop="3193.914000">Where is... Did I kill it?</span> <span class="audio-time caption" data-speaker="Omar" data-start="3194.034000" data-stop="3195.957000">I killed it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3197.692000" data-stop="3200.261000">Yeah, one of these I did.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3200.723000" data-stop="3201.205000">What is it?</span> <span class="audio-time caption" data-speaker="Omar" data-start="3201.225000" data-stop="3201.707000">Dominoes.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3201.727000" data-stop="3203.794000">Yeah, this I did for a math talk I gave.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3204.156000" data-stop="3206.725000">It just produces random domino tilings of the</span> <span class="audio-time caption" data-speaker="Omar" data-start="3206.785000" data-stop="3208.090000">board.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3208.829000" data-stop="3213.737000">I gave that talk from an Org file using Prot’s</span> <span class="audio-time caption" data-speaker="Omar" data-start="3215.420000" data-stop="3216.242000">Logos package.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3216.963000" data-stop="3220.950000">I usually use PDF slides, but</span> <span class="audio-time caption" data-speaker="Omar" data-start="3220.990000" data-stop="3222.813000">that time I wanted to use an Org mode buffer</span> <span class="audio-time caption" data-speaker="Omar" data-start="3222.833000" data-stop="3224.636000">because I was going to run code on the computer.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3225.237000" data-stop="3228.002000">Like this, for example, generating random domino</span> <span class="audio-time caption" data-speaker="Omar" data-start="3228.022000" data-stop="3228.863000">tilings.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3229.000000">53:49</span> <strong>Teaching and Emacs</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3229.383000" data-stop="3230.805000"><strong class="speaker-name">Sacha:</strong>  So you've given a number of talks.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3230.866000" data-stop="3232.168000">Do you also teach any courses?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3233.310000" data-stop="3237.757000"><strong class="speaker-name">Omar:</strong>  Yeah, I do teach both undergraduate</span> <span class="audio-time caption" data-speaker="Omar" data-start="3237.797000" data-stop="3239.841000">and graduate math courses.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3240.001000" data-stop="3241.684000">Recently, mostly graduate math courses.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3242.265000" data-stop="3244.349000">But yeah, I really like teaching.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3244.509000" data-stop="3245.631000">You always learn something.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3245.671000" data-stop="3247.534000">Even the subjects that you think you know very</span> <span class="audio-time caption" data-speaker="Omar" data-start="3247.574000" data-stop="3249.838000">well, teaching a course always teaches you</span> <span class="audio-time caption" data-speaker="Omar" data-start="3249.958000" data-stop="3250.459000">something new.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3251.801000" data-stop="3253.905000"><strong class="speaker-name">Sacha:</strong>  Have you gotten students into Emacs?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3254.982000" data-stop="3256.366000"><strong class="speaker-name">Omar:</strong>  No, I don't even try.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3256.606000" data-stop="3260.698000">“I use this weird text editor Emacs, it's</span> <span class="audio-time caption" data-speaker="Omar" data-start="3260.818000" data-stop="3262.763000">pretty cool, but it takes a while to learn.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3263.205000" data-stop="3264.909000">I'm not recommending it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3265.651000" data-stop="3266.112000">I love it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3266.253000" data-stop="3268.519000">If you do try to use it, you can ask me anything.”</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3270.473000" data-stop="3272.656000"><strong class="speaker-name">Sacha:</strong>  Yeah, it's pretty hard.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3272.716000" data-stop="3275.100000">I know some professors are like, okay, this is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3275.140000" data-stop="3277.183000">what we're going to use for the course.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3277.243000" data-stop="3279.627000">But I imagine, depending on your subject matter,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3279.667000" data-stop="3281.369000">you might already have your hands full teaching</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3281.389000" data-stop="3283.332000">the subject matter rather than adding it.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3283.352000" data-stop="3284.213000"><strong class="speaker-name">Omar:</strong>  Oh, yeah, yeah, definitely.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3284.293000" data-stop="3284.614000">No, no.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3285.315000" data-stop="3287.478000">The students I try to talk to Emacs about are</span> <span class="audio-time caption" data-speaker="Omar" data-start="3287.498000" data-stop="3289.601000">like the students that are writing their thesis</span> <span class="audio-time caption" data-speaker="Omar" data-start="3289.641000" data-stop="3291.064000">with me.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3291.084000" data-stop="3292.065000">No, never in a course.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3292.185000" data-stop="3292.906000">I never mention it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3293.000000">54:53</span> <strong>The print10 generator
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-54-56-900.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-54-56-900.jpg" alt="image from video 00:54:56.900" data-time="00:54:56.900"></a><span class="audio-time caption" data-speaker="Omar" data-start="3293.187000" data-stop="3293.888000"><strong class="speaker-name">Omar:</strong> Oh, there it is.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3293.968000" data-stop="3296.812000">In the docstring, I have the correct program in</span> <span class="audio-time caption" data-speaker="Omar" data-start="3296.872000" data-stop="3297.493000">BASIC.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3298.385000" data-stop="3302.453000">The backslash and the forward slash are</span> <span class="audio-time caption" data-speaker="Omar" data-start="3302.553000" data-stop="3304.096000">consecutive ASCII characters.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3304.176000" data-stop="3310.467000">206 and 207.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3311.008000" data-stop="3314.415000">You add a random number between 0 and 1 to</span> <span class="audio-time caption" data-speaker="Omar" data-start="3314.455000" data-stop="3316.258000">this one and then round to the nearest integer.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3316.508000" data-stop="3318.631000"><strong class="speaker-name">Sacha:</strong>  All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3318.751000" data-stop="3320.874000">You can get surprisingly interesting patterns</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3320.994000" data-stop="3321.455000">out of it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3322.997000" data-stop="3325.381000">That is also very cool.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3326.282000" data-stop="3327.884000">Fun with Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3328.485000" data-stop="3331.670000">This could definitely be like a zone screensaver</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3332.331000" data-stop="3333.212000">if you wanted to.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3334.474000" data-stop="3334.975000"><strong class="speaker-name">Omar:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3335.295000" data-stop="3338.219000">I just thought it was really nice that Emacs</span> <span class="audio-time caption" data-speaker="Omar" data-start="3338.279000" data-stop="3339.641000">displays SVGs natively.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3339.661000" data-stop="3342.145000">Those are very easy to generate by text.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3342.547000" data-stop="3346.311000"><strong class="speaker-name">Sacha:</strong>  Are there other interesting corners</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3346.411000" data-stop="3349.014000">of your config that might not be immediately</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3349.134000" data-stop="3350.936000">obvious to people who are just reading the source</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3350.996000" data-stop="3351.957000">code?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3351.977000" data-stop="3353.859000">What other workflow things are nice for you?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3359.264000" data-stop="3362.828000"><strong class="speaker-name">Omar:</strong>  Sorry, what were you saying?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3362.908000" data-stop="3365.551000"><strong class="speaker-name">Sacha:</strong>  I can also start just occurring</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3365.591000" data-stop="3368.474000">through my config for all the things that I've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3368.534000" data-stop="3371.457000">stolen from your config in the last two days.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3372.095000" data-stop="3377.804000"><strong class="speaker-name">Omar:</strong>  I don't think I have any concrete</span> <span class="audio-time caption" data-speaker="Omar" data-start="3377.864000" data-stop="3380.428000">idea of what to show now.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3380.448000" data-stop="3383.599000">I think we've covered most of the ones I wanted.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3383.000000">56:23</span> <strong>arXiv
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-57-42-967.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-57-42-967.jpg" alt="image from video 00:57:42.967" data-time="00:57:42.967"></a><span class="audio-time caption" data-speaker="Omar" data-start="3383.600000" data-stop="3386.598000"><strong class="speaker-name">Omar:</strong> As an academic, I deal a lot with preprints on</span> <span class="audio-time caption" data-speaker="Omar" data-start="3386.618000" data-stop="3388.681000">the arXiv, so I have a little library that will</span> <span class="audio-time caption" data-speaker="Omar" data-start="3390.584000" data-stop="3393.208000">show me the PDF or copy the URL.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3393.661000" data-stop="3398.387000">I like personalized software because it does</span> <span class="audio-time caption" data-speaker="Omar" data-start="3398.447000" data-stop="3399.769000">exactly what you needed to do.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3400.229000" data-stop="3402.693000">I noticed that there were a bunch of tags on</span> <span class="audio-time caption" data-speaker="Omar" data-start="3402.773000" data-stop="3406.438000">Mastodon that related to archive papers.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3406.738000" data-stop="3409.782000">Often when I was in a Mastodon buffer, I wanted to</span> <span class="audio-time caption" data-speaker="Omar" data-start="3410.122000" data-stop="3412.846000">do something to the paper mentioned at point.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3413.166000" data-stop="3414.888000">That's one of the acceptable inputs for my</span> <span class="audio-time caption" data-speaker="Omar" data-start="3415.709000" data-stop="3430.419000">arXiv library.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3430.420000" data-stop="3432.843000">So, for example, this is an arXiv link and I</span> <span class="audio-time caption" data-speaker="Omar" data-start="3432.883000" data-stop="3456.419000">can ask it to show me.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3456.420000" data-stop="3457.258000">So that's a bug.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3457.298000" data-stop="3460.742000">This should definitely have <code>visual-line-mode</code></span> <span class="audio-time caption" data-speaker="Omar" data-start="3461.003000" data-stop="3461.303000">activated.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3462.965000" data-stop="3465.348000">I can just quickly read the</span> <span class="audio-time caption" data-speaker="Omar" data-start="3465.449000" data-stop="3467.832000">abstract without visiting the archive website.</span> <p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-57-51-200.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-57-51-200.jpg" alt="image from video 00:57:51.200" data-time="00:57:51.200"></a><span class="audio-time caption" data-speaker="Omar" data-start="3468.793000" data-stop="3472.798000"><strong class="speaker-name">Omar:</strong> Or I can open the PDF.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3473.158000" data-stop="3473.699000"><strong class="speaker-name">Sacha:</strong>  Very cool.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3473.939000" data-stop="3474.821000">Very convenient.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3477.850000" data-stop="3478.833000"><strong class="speaker-name">Omar:</strong>  Yeah, so.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3480.162000" data-stop="3481.864000">I like that in Emacs you can do all these</span> <span class="audio-time caption" data-speaker="Omar" data-start="3482.224000" data-stop="3484.446000">personal things that you'll need but are not</span> <span class="audio-time caption" data-speaker="Omar" data-start="3484.506000" data-stop="3486.708000">likely to be needed by many people.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3486.768000" data-stop="3488.269000">They're just easy to do.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3488.430000" data-stop="3491.212000">Vim is also very configurable, but the Vim script</span> <span class="audio-time caption" data-speaker="Omar" data-start="3491.252000" data-stop="3494.655000">language is sort of awkward, so I never did</span> <span class="audio-time caption" data-speaker="Omar" data-start="3495.156000" data-stop="3497.198000">anywhere close to the amount of configuration in</span> <span class="audio-time caption" data-speaker="Omar" data-start="3497.558000" data-stop="3498.719000">Vim that I do in Emacs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3503.263000" data-stop="3505.665000">That's why I would never</span> <span class="audio-time caption" data-speaker="Omar" data-start="3505.726000" data-stop="3506.526000">go back to Vim now.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3506.546000" data-stop="3508.448000">I would miss all the stuff I've written.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3509.000000">58:29</span> <strong>Toggle keymap
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-59-06-133.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-00-59-06-133.jpg" alt="image from video 00:59:06.133" data-time="00:59:06.133"></a><span class="audio-time caption" data-speaker="Sacha" data-start="3509.103000" data-stop="3510.727000"><strong class="speaker-name">Sacha:</strong>  One of the little personal</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3510.767000" data-stop="3513.234000">customizations that I liked reading in your config</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3513.294000" data-stop="3515.179000">was the fact that you have a key map just for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3515.239000" data-stop="3518.527000">toggling various things like the mode line or the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3518.607000" data-stop="3519.149000">header, you know?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3519.449000" data-stop="3519.690000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3519.710000" data-stop="3523.660000">You want to tell us more about your awesome</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3523.720000" data-stop="3525.525000">key map for that?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3526.163000" data-stop="3530.210000"><strong class="speaker-name">Omar:</strong>  You don't need them that often, so</span> <span class="audio-time caption" data-speaker="Omar" data-start="3530.270000" data-stop="3532.253000">it's OK if it's under a long prefix.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3532.613000" data-stop="3534.416000">It's just tedious when you want one of them,</span> <span class="audio-time caption" data-speaker="Omar" data-start="3534.456000" data-stop="3536.319000">to have to type the command name.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3536.900000" data-stop="3541.708000">It also helps me remember which things I</span> <span class="audio-time caption" data-speaker="Omar" data-start="3541.888000" data-stop="3542.730000">commonly toggle.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3542.790000" data-stop="3546.015000">I often have to hit <code>C-h</code> here and see what I</span> <span class="audio-time caption" data-speaker="Omar" data-start="3546.075000" data-stop="3548.264000">have available to toggle.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3549.625000" data-stop="3555.070000">I don't know why toggle is a category for</span> <span class="audio-time caption" data-speaker="Omar" data-start="3555.371000" data-stop="3557.032000">commands, because obviously these are very</span> <span class="audio-time caption" data-speaker="Omar" data-start="3557.132000" data-stop="3559.114000">disparate commands that do very different things.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3559.134000" data-stop="3561.556000">But they're things that you occasionally turn on</span> <span class="audio-time caption" data-speaker="Omar" data-start="3561.617000" data-stop="3564.499000">or off, and it's convenient to have them all</span> <span class="audio-time caption" data-speaker="Omar" data-start="3564.519000" data-stop="3564.840000">together.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3565.320000" data-stop="3567.762000">Choosing the letters here was very difficult.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3568.743000" data-stop="3570.445000">Everybody wanted to have the same letters.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3571.566000" data-stop="3573.788000">L was for visual lines.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3573.768000" data-stop="3577.772000">P for variable pitch mode because I think of them</span> <span class="audio-time caption" data-speaker="Omar" data-start="3577.832000" data-stop="3578.873000">as proportional fonts.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3580.594000" data-stop="3581.996000">It took a lot of tweaking.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3582.016000" data-stop="3585.859000">I'm sure if I looked through the GitHub history,</span> <span class="audio-time caption" data-speaker="Omar" data-start="3585.879000" data-stop="3588.782000">you'd see a lot of tiny changes just changing the</span> <span class="audio-time caption" data-speaker="Omar" data-start="3588.822000" data-stop="3591.645000">binding of one of these.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3591.665000" data-stop="3593.547000"><strong class="speaker-name">Sacha:</strong>  I find it difficult to get the hang</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3593.587000" data-stop="3596.109000">of new key bindings, especially for things that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3596.129000" data-stop="3598.351000">I'm not using often enough for the key bindings</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3598.391000" data-stop="3599.833000">to stick.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3599.953000" data-stop="3601.294000"><strong class="speaker-name">Omar:</strong>  I often forget that I have a key</span> <span class="audio-time caption" data-speaker="Omar" data-start="3601.334000" data-stop="3602.475000">binding for something.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3603.687000" data-stop="3605.009000"><strong class="speaker-name">Sacha:</strong>  So how do you deal with that?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3605.129000" data-stop="3607.072000">I mean, yes, you stick it in an Embark keymap and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3607.092000" data-stop="3608.455000">you just bring it up to the target.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3609.637000" data-stop="3616.247000"><strong class="speaker-name">Omar:</strong>  Yeah, I do use Embark bindings in</span> <span class="audio-time caption" data-speaker="Omar" data-start="3616.267000" data-stop="3620.093000">keymap a lot to just explore keymaps and remind</span> <span class="audio-time caption" data-speaker="Omar" data-start="3620.134000" data-stop="3623.379000">myself. I don't need to memorize a</span> <span class="audio-time caption" data-speaker="Omar" data-start="3623.419000" data-stop="3623.699000">binding.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3623.719000" data-stop="3625.743000">I just need to remember that I have a binding.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3626.464000" data-stop="3628.247000">If I have a binding, I can find it later.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3628.307000" data-stop="3629.809000">But sometimes I don't remember that I have a</span> <span class="audio-time caption" data-speaker="Omar" data-start="3629.849000" data-stop="3631.011000">binding,</span> <span class="audio-time caption" data-speaker="Omar" data-start="3631.413000" data-stop="3635.740000">so when I'm looking at my configuration, I'll</span> <span class="audio-time caption" data-speaker="Omar" data-start="3635.760000" data-stop="3638.385000">just re-scan what things I have bound from time</span> <span class="audio-time caption" data-speaker="Omar" data-start="3638.425000" data-stop="3638.725000">to time.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3639.347000" data-stop="3644.095000">Mostly I stick with just… I know under</span> <span class="audio-time caption" data-speaker="Omar" data-start="3644.195000" data-stop="3647.601000">what the start of the prefix is, and then I'll</span> <span class="audio-time caption" data-speaker="Omar" data-start="3647.621000" data-stop="3649.804000">just use Embark to remind me of what I have there.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3650.485000" data-stop="3653.691000">Which is nice, because you can also see the docstrings.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3654.000000">1:00:54</span> <strong>isearch-delete-wrong
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-01-01-32-267.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-01-01-32-267.jpg" alt="image from video 01:01:32.267" data-time="01:01:32.267"></a><span class="audio-time caption" data-speaker="Sacha" data-start="3654.970000" data-stop="3658.619000"><strong class="speaker-name">Sacha:</strong>  I like how you try to use some</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3658.819000" data-stop="3661.345000">of the conventions to make it somewhat easier to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3661.385000" data-stop="3661.766000">remember.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3662.127000" data-stop="3664.011000">One of the key bindings that you have that I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3664.071000" data-stop="3666.317000">want to point out, because I think it's a useful</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3666.397000" data-stop="3669.424000">technique, is you have an <code>isearch-delete-wrong</code>.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3671.048000" data-stop="3676.078000"><strong class="speaker-name">Omar:</strong>  Right.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3676.919000" data-stop="3681.745000">isearch keeps track of where the last portion</span> <span class="audio-time caption" data-speaker="Omar" data-start="3681.805000" data-stop="3683.888000">of the search string that matched is.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3684.368000" data-stop="3686.611000">You can see it highlighted in the buffer,</span> <span class="audio-time caption" data-speaker="Omar" data-start="3686.631000" data-stop="3686.831000">right?</span> <span class="audio-time caption" data-speaker="Omar" data-start="3687.452000" data-stop="3691.838000">So this means it found up to “del”, and then it</span> <span class="audio-time caption" data-speaker="Omar" data-start="3691.898000" data-stop="3693.620000">didn't find "tok".</span> <span class="audio-time caption" data-speaker="Omar" data-start="3693.640000" data-stop="3695.762000"><code>isearch-delete-wrong</code> will just delete that entire</span> <span class="audio-time caption" data-speaker="Omar" data-start="3695.802000" data-stop="3696.283000">part.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3698.474000" data-stop="3700.076000"><strong class="speaker-name">Sacha:</strong>  So that way, you can just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3700.156000" data-stop="3702.378000">restart from what actually exists.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3702.959000" data-stop="3705.222000">Combining that with the fact that you've got</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3705.262000" data-stop="3710.608000">your search whitespace regular expression to be a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3710.728000" data-stop="3712.239000">wildcard means you can...</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3712.240000" data-stop="3714.032000"><strong class="speaker-name">Omar:</strong>  Oh yes, this I stole from Prot.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3714.692000" data-stop="3716.434000">He recommends this.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3716.454000" data-stop="3718.437000"><strong class="speaker-name">Sacha:</strong>  Yeah, which means you can use</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3718.477000" data-stop="3720.439000">isearch to find things, even if there's other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3720.479000" data-stop="3721.400000">stuff in between them.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3721.720000" data-stop="3723.382000">When you can't find something, you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3723.402000" data-stop="3723.823000">restart.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3724.884000" data-stop="3725.865000"><strong class="speaker-name">Omar:</strong>  I'm not sure...</span> <span class="audio-time caption" data-speaker="Omar" data-start="3726.183000" data-stop="3729.588000">I'm not sure if this is the best setting.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3729.689000" data-stop="3733.294000">I want to be able to search this way sometimes,</span> <span class="audio-time caption" data-speaker="Omar" data-start="3733.354000" data-stop="3736.279000">and sometimes with whitespaces treated literally,</span> <span class="audio-time caption" data-speaker="Omar" data-start="3736.499000" data-stop="3738.603000">so I should keep statistics on how often I</span> <span class="audio-time caption" data-speaker="Omar" data-start="3738.663000" data-stop="3739.745000">actually have to turn this off.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3739.785000" data-stop="3741.908000">It might be that for me the better default is the</span> <span class="audio-time caption" data-speaker="Omar" data-start="3741.948000" data-stop="3742.589000">other way around.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3745.133000" data-stop="3747.437000">You can turn it off with <code>M-s SPC</code>.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3747.898000" data-stop="3749.620000">Match spaces literally.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3751.023000" data-stop="3753.827000"><code>isearch-toggle-lax-whitespace</code>.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3754.870000" data-stop="3756.592000">I don't know.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3756.632000" data-stop="3760.277000">Maybe for me the default would be to treat</span> <span class="audio-time caption" data-speaker="Omar" data-start="3760.778000" data-stop="3764.142000">whitespace literally, because I find that if I</span> <span class="audio-time caption" data-speaker="Omar" data-start="3764.182000" data-stop="3768.488000">have a space in my search string, I often want to</span> <span class="audio-time caption" data-speaker="Omar" data-start="3768.528000" data-stop="3769.950000">turn on the literal matching.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3770.450000" data-stop="3772.052000">But it's probably still this is the better</span> <span class="audio-time caption" data-speaker="Omar" data-start="3772.072000" data-stop="3772.353000">default.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3772.373000" data-stop="3774.275000">I think I do it less than half of the time I have</span> <span class="audio-time caption" data-speaker="Omar" data-start="3774.295000" data-stop="3774.696000">a space.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3775.257000" data-stop="3777.880000">But it's not that far from half, it feels.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3778.200000" data-stop="3780.203000">I don't have statistics.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3782.630000" data-stop="3784.296000"><strong class="speaker-name">Sacha:</strong>  How do you even collect statistics</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3784.396000" data-stop="3784.938000">on this?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3784.958000" data-stop="3786.864000">Aside from making a little note every time you're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3786.884000" data-stop="3787.888000">like, oh, I didn't like this.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3788.731000" data-stop="3791.139000"><strong class="speaker-name">Omar:</strong>  I mean, I would instrument isearch</span> <span class="audio-time caption" data-speaker="Omar" data-start="3791.199000" data-stop="3793.045000">somehow, but I haven't thought about that problem.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3794.000000">1:03:14</span> <strong>isearch - continue from the beginning of the match
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-01-03-44-400.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/emacs-chat-24-omar-antolin-camarena-01-03-44-400.jpg" alt="image from video 01:03:44.400" data-time="01:03:44.400"></a><span class="audio-time caption" data-speaker="Omar" data-start="3794.105000" data-stop="3797.269000"><strong class="speaker-name">Omar:</strong> One nice thing I do with isearch is another one</span> <span class="audio-time caption" data-speaker="Omar" data-start="3797.309000" data-stop="3798.591000">of those things I got from Vim.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3799.792000" data-stop="3802.456000">isearch, by default, leaves you at the end of the</span> <span class="audio-time caption" data-speaker="Omar" data-start="3802.496000" data-stop="3802.776000">match.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3803.116000" data-stop="3805.439000">I almost always want to be at the beginning</span> <span class="audio-time caption" data-speaker="Omar" data-start="3805.499000" data-stop="3807.041000">of the match, because that's what I got used to</span> <span class="audio-time caption" data-speaker="Omar" data-start="3807.081000" data-stop="3807.402000">in Vim.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3808.083000" data-stop="3810.806000">I think it must be here.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3811.127000" data-stop="3812.689000">I have something exit at start.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3813.790000" data-stop="3817.895000">I tell isearch to exit at the beginning of the</span> <span class="audio-time caption" data-speaker="Omar" data-start="3817.955000" data-stop="3818.236000">match.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3818.476000" data-stop="3821.139000">The way you use this is you install it as a</span> <span class="audio-time caption" data-speaker="Omar" data-start="3821.259000" data-stop="3823.302000">hook, I believe.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3824.395000" data-stop="3825.196000">Is that right?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3826.578000" data-stop="3827.759000"><strong class="speaker-name">Sacha:</strong>  You seem to have options.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3828.160000" data-stop="3828.360000"><strong class="speaker-name">Omar:</strong>  Yes.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3829.321000" data-stop="3829.681000"><strong class="speaker-name">Sacha:</strong>  I see.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3829.762000" data-stop="3832.665000">So S-RET lets you exit at the end, and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3832.705000" data-stop="3834.708000">then by default... Yeah, which is Emacs default.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3834.988000" data-stop="3837.811000"><strong class="speaker-name">Omar:</strong>  But I find that the better default</span> <span class="audio-time caption" data-speaker="Omar" data-start="3837.872000" data-stop="3838.953000">is to exit at the beginning.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3839.313000" data-stop="3841.075000">Yes, and that's the whole point of that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3841.095000" data-stop="3848.628000">For example, if I want to mark until that parentheses,</span> <span class="audio-time caption" data-speaker="Omar" data-start="3848.629000" data-stop="3851.348000">then I would search for the parentheses,</span> <span class="audio-time caption" data-speaker="Omar" data-start="3851.328000" data-stop="3854.713000">and I don't want to include the parentheses.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3854.733000" data-stop="3855.615000">That's not a good example.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3855.655000" data-stop="3857.718000">But with a word, it's often like, I'm looking for</span> <span class="audio-time caption" data-speaker="Omar" data-start="3857.758000" data-stop="3860.602000">a word, but I want to highlight up to the end of</span> <span class="audio-time caption" data-speaker="Omar" data-start="3860.642000" data-stop="3860.923000">the word.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3861.223000" data-stop="3864.268000">It's just like, if you want to mark a region from</span> <span class="audio-time caption" data-speaker="Omar" data-start="3864.308000" data-stop="3867.513000">point to some search term, with the Emacs</span> <span class="audio-time caption" data-speaker="Omar" data-start="3867.533000" data-stop="3869.536000">default, what you have to search for is the thing</span> <span class="audio-time caption" data-speaker="Omar" data-start="3869.576000" data-stop="3872.661000">that is at the end of the part you want to match.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3872.641000" data-stop="3876.226000">But often I want to say until like the thing that</span> <span class="audio-time caption" data-speaker="Omar" data-start="3876.286000" data-stop="3876.827000">starts here.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3877.107000" data-stop="3878.489000">It's just my brain works that way.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3879.130000" data-stop="3881.514000">So for me, it's much better to exit at the</span> <span class="audio-time caption" data-speaker="Omar" data-start="3881.554000" data-stop="3882.255000">start of the search.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3884.178000" data-stop="3885.259000">Which means I don't understand</span> <span class="audio-time caption" data-speaker="Omar" data-start="3885.279000" data-stop="3886.861000">isearch on other people's Emacs.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3886.901000" data-stop="3889.906000">It just leaves the point in the wrong location</span> <span class="audio-time caption" data-speaker="Omar" data-start="3889.966000" data-stop="3890.386000">all the time.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3890.767000" data-stop="3892.429000">If you're going quickly, you won't realize</span> <span class="audio-time caption" data-speaker="Omar" data-start="3892.449000" data-stop="3893.831000">that it's just a mess.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3894.192000" data-stop="3896.355000">It does mean that I can only use isearch if it's</span> <span class="audio-time caption" data-speaker="Omar" data-start="3896.375000" data-stop="3897.737000">configured this way.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3899.928000" data-stop="3901.830000"><strong class="speaker-name">Sacha:</strong>  Well, that's the thing about Emacs, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3901.910000" data-stop="3904.292000">Once you've got it set up, you've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3904.312000" data-stop="3906.074000">got to use your config because everything else</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3906.114000" data-stop="3907.536000">just feels off.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3908.076000" data-stop="3908.997000">It just feels weird.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3909.017000" data-stop="3909.558000"><strong class="speaker-name">Omar:</strong>  Yeah, that's right.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3910.579000" data-stop="3910.879000"><strong class="speaker-name">Sacha:</strong>  All right.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3912.000000">1:05:12</span> <strong>Using keymaps to remember sets of commands</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3912.460000" data-stop="3916.084000"><strong class="speaker-name">Sacha:</strong> Going back to the toggle keymap, @gcentauri says,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3916.124000" data-stop="3916.805000">I'm not lazy enough.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3916.865000" data-stop="3919.087000">I just M-x orderless consult, find the thing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3919.107000" data-stop="3921.329000">that I'm toggling, which I do a lot also.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3921.349000" data-stop="3923.391000">I just use M-x for all the things because I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3923.411000" data-stop="3925.553000">just specify parts of it.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3925.573000" data-stop="3926.755000"><strong class="speaker-name">Omar:</strong>  There's some toggles I don't have</span> <span class="audio-time caption" data-speaker="Omar" data-start="3926.795000" data-stop="3928.797000">in the keymap because I use them very rarely, but</span> <span class="audio-time caption" data-speaker="Omar" data-start="3929.177000" data-stop="3929.277000">yeah.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3929.257000" data-stop="3935.109000">What I like also about the keymap is that it's a</span> <span class="audio-time caption" data-speaker="Omar" data-start="3935.269000" data-stop="3938.736000">place to remind myself of the toggle commands.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3938.756000" data-stop="3940.440000">I often just do this.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3940.460000" data-stop="3941.562000">What was the thing?</span> <span class="audio-time caption" data-speaker="Omar" data-start="3942.132000" data-stop="3945.035000">I haven't used that in a while.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3945.215000" data-stop="3949.300000"><strong class="speaker-name">Sacha:</strong>  Having a shorter list, it means you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3949.340000" data-stop="3951.603000">can just use recognition instead of recall, right?</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3953.104000" data-stop="3954.246000"><strong class="speaker-name">Omar:</strong>  It's short enough that I can read</span> <span class="audio-time caption" data-speaker="Omar" data-start="3954.266000" data-stop="3954.566000">through it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3955.367000" data-stop="3956.829000"><strong class="speaker-name">Sacha:</strong>  I like that a lot.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3956.869000" data-stop="3959.812000">I like the fact that with that Embark <code>C-h</code></span> <span class="audio-time caption" data-speaker="Sacha" data-start="3959.992000" data-stop="3961.914000">screen, you can use completion even to select</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3961.934000" data-stop="3964.377000">the commands from that subset.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3964.000000">1:06:04</span> <strong>Other things from the config</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3964.981000" data-stop="3966.383000"><strong class="speaker-name">Sacha:</strong> A couple of other things that I picked up from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3966.403000" data-stop="3967.043000">your config:</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3967.084000" data-stop="3970.007000">There’s your <code>dired-open-externally</code>, so it makes</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3970.047000" data-stop="3972.931000">it very easy to open something in an external</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3973.371000" data-stop="3974.292000">application.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="3974.312000" data-stop="3975.774000"><strong class="speaker-name">Omar:</strong>  And it just calls Embark open</span> <span class="audio-time caption" data-speaker="Omar" data-start="3975.814000" data-stop="3976.255000">externally.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3978.758000" data-stop="3980.139000">This function moved back and forth</span> <span class="audio-time caption" data-speaker="Omar" data-start="3980.199000" data-stop="3981.020000">from different places.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3981.080000" data-stop="3983.223000">I think <code>embark-open-externally</code> used to be in</span> <span class="audio-time caption" data-speaker="Omar" data-start="3983.263000" data-stop="3983.744000">consult.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3984.444000" data-stop="3986.567000">Daniel said he felt it didn't fit in</span> <span class="audio-time caption" data-speaker="Omar" data-start="3986.607000" data-stop="3987.328000">with consult.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3989.771000" data-stop="3994.937000"><code>Embark consult</code> would put it in keymaps.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3995.542000" data-stop="3996.463000">He was right.</span> <span class="audio-time caption" data-speaker="Omar" data-start="3997.904000" data-stop="4000.787000">Consult didn't have a very clear personality at</span> <span class="audio-time caption" data-speaker="Omar" data-start="4000.807000" data-stop="4001.247000">the beginning.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4001.288000" data-stop="4003.109000">It was sort of like a grab bag of commands.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4003.149000" data-stop="4006.953000">Eventually, what gelled is that a</span> <span class="audio-time caption" data-speaker="Omar" data-start="4006.993000" data-stop="4008.995000">command should be in Consult if there is a useful</span> <span class="audio-time caption" data-speaker="Omar" data-start="4009.035000" data-stop="4010.436000">way to write previews for it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4010.456000" data-stop="4012.999000">So, preview is the distinguishing feature of what</span> <span class="audio-time caption" data-speaker="Omar" data-start="4013.059000" data-stop="4014.220000">is a good fit for Consult.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4015.001000" data-stop="4017.023000">Now, I hope Daniel would agree with that.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4017.063000" data-stop="4019.285000">That seems to be the criteria now.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4019.305000" data-stop="4020.025000">That's great.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4020.186000" data-stop="4021.667000">I absolutely love preview.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4021.765000" data-stop="4024.391000">That's one thing I miss a little bit with org-ql.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4024.491000" data-stop="4026.755000">I use org-ql mostly to search through Org files,</span> <span class="audio-time caption" data-speaker="Omar" data-start="4027.497000" data-stop="4030.343000">but the preview is kind of manual in that I use</span> <span class="audio-time caption" data-speaker="Omar" data-start="4030.403000" data-stop="4031.085000">Embark to do it.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4031.225000" data-stop="4035.774000">If I want to preview a command, I just use Embark</span> <span class="audio-time caption" data-speaker="Omar" data-start="4035.955000" data-stop="4036.616000">to do what I mean.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4040.003000" data-stop="4042.288000"><strong class="speaker-name">Sacha:</strong>  Yeah, that's a good idea.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4042.387000" data-stop="4043.090000">I should try that.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="4043.331000" data-stop="4045.380000"><strong class="speaker-name">Omar:</strong>  So any command that doesn't have a</span> <span class="audio-time caption" data-speaker="Omar" data-start="4045.400000" data-stop="4047.890000">preview, I mean does, you can just use <code>embark-dwim</code>,</span> <span class="audio-time caption" data-speaker="Omar" data-start="4047.910000" data-stop="4051.907000">it'll complete the command for you.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4055.735000" data-stop="4057.457000"><strong class="speaker-name">Sacha:</strong>  Okay, the kid has arrived,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4057.477000" data-stop="4058.478000">so I have to go off to lunch.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4058.498000" data-stop="4060.580000">But thank you so much for the quick peek into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4060.600000" data-stop="4062.001000">your config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4063.042000" data-stop="4065.604000">I'll put the transcript together and then people</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4065.644000" data-stop="4066.005000">can do that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4066.025000" data-stop="4067.706000">But in the meantime, people can look at your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4067.746000" data-stop="4069.728000">config for all sorts of wonderful goodness.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="4070.649000" data-stop="4070.909000"><strong class="speaker-name">Omar:</strong>  Thanks.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4070.969000" data-stop="4073.532000"><strong class="speaker-name">Sacha:</strong>  Thanks to everyone for hanging out.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4073.932000" data-stop="4076.294000">Looks like the isearch tip was popular,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4076.355000" data-stop="4078.236000">so you might see a lot of people getting that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4078.256000" data-stop="4078.937000">from your config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4079.578000" data-stop="4081.399000">Anyway, thank you so much for this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="4081.600000" data-stop="4082.721000">I’ll see you around.</span> <p></p><span class="audio-time caption" data-speaker="Omar" data-start="4083.181000" data-stop="4083.922000"><strong class="speaker-name">Omar:</strong>  Thanks, Sacha.</span> <span class="audio-time caption" data-speaker="Omar" data-start="4084.022000" data-stop="4085.303000">This was fantastic.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="4085.283000" data-stop="4086.806000"><strong class="speaker-name">Sacha:</strong>  Alright, nice.</span></div>
<p></p>


<a name="end-emacs-chat-24-omar-antolin-camarena-transcript"></a></details>
</div>
</div>
<div id="outline-container-emacs-chats-emacs-chat-24-omar-antolin-camarena-chat" class="outline-3">
<h3 id="emacs-chats-emacs-chat-24-omar-antolin-camarena-chat"><a href="https://sachachua.com/blog/feed/index.xml#emacs-chats-emacs-chat-24-omar-antolin-camarena-chat">Chat</a></h3>
<div class="outline-text-3" id="text-emacs-chats-emacs-chat-24-omar-antolin-camarena-chat">
<div class="chat" id="org181ed02">
<ul class="org-ul">
<li><span class="nick">takoverflow:</span> ​​Hello Sacha and Omar, thanks for this chat! :)</li>
<li><span class="nick">CharlieBaker707:</span> ​​Definitely going to add the keycast transparency to my config! I've been wanting that for a while!</li>
<li><span class="nick">gcentauri:</span> ​​i'm still a minibuffer noob - its been nil my whole Emacs life!</li>
<li><span class="nick">CharlieBaker707:</span> ​recursive minibuffers is amazing. biggest win for me is that it lets you select things and paste them in, like from a completing-read's history for example</li>
<li><span class="nick">gcentauri:</span> ​haha apparently i do have recursive minibuffers set to t, along with my Vertico config 🤔</li>
<li><span class="nick">Zor_org:</span> ​​was there a time you wanted multiple cursors?</li>
<li><span class="nick">Zor_org:</span> ​if so, was there any workaround you thought of with embark or kmacro?</li>
<li><span class="nick">gcentauri:</span> ​keyboard macros are a fun mini-game</li>
<li><span class="nick">CharlieBaker707:</span> ​I have embark-act set up to expand in the same way expand-region does, but with embark's type awareness. It's also easy to add a contract function.</li>
<li><span class="nick">CharlieBaker707:</span> ​I also have a completing-read interface and a transient menu to jump directly to one of many types under point that I'm seeiking.</li>
<li><span class="nick">CharlieBaker707:</span> ​For sure!</li>
<li><span class="nick">CharlieBaker707:</span> ​I was going to create a tiny extension, but I can open a PR in embark!</li>
<li><span class="nick">Zor_org:</span> ​even more crazy with elfeed 4.0</li>
<li><span class="nick">gcentauri:</span> ​I found Orderless and Embark through Daniel's suggestions in his packages :)</li>
<li><span class="nick">Zor_org:</span> ​if emacs gets canvas patch soon, more things can be done in luggage (lik gifs and image frame as well)</li>
<li><span class="nick">gcentauri:</span> ​i am not lazy enough, i just M-x orderless consult find the thing i'm toggling</li>
<li><span class="nick">PuercoPop:</span> ​​I didn't knew isearch had a built-in way to fix the isearch quirk. Now I can remove the snippet I use the implement it that I cribbed from the internets</li>
<li><span class="nick">gcentauri:</span> ​yeah adding something to a keymap you make does help recall</li>
<li><span class="nick">PuercoPop:</span> ​​The isearch quirk is a common complaint from what I understand</li>
<li><span class="nick">gcentauri:</span> ​yeah i'm gonna use that iserach bit</li>
</ul>

</div>
</div>
</div>
<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>
		</item><item>
		<title>Emacs Chat 23: Emacs Chat with Raymond Zeitler</title>
		<link>https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Thu, 21 May 2026 14:30:32 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-raymond-zeitler/</guid><enclosure url="https://archive.org/download/ec23-raymond-zeitler/ec23-raymond-zeitler.mp3"
               length="56375526"
               type="audio/mpeg" />
		<description><![CDATA[<div class="update" id="org3ee7156">
<p>
<span class="timestamp-wrapper"><time class="timestamp" datetime="2026-05-25">[2026-05-25 Mon]</time></span>: Fixed ICS link
</p>

</div>

<p>
I chatted with Raymond Zeitler about Emacs, life, automation, Org Mode, Diary, and Calendar. There were a couple of cuts to get rid of accidentally shown passwords, but it was a great glimpse into someone's system for managing things.
</p>

<p>
<video preload="none" controls="1" src="https://archive.org/download/ec23-raymond-zeitler/ec23-raymond-zeitler.mp4" type="video/mp4"><track kind="subtitles" label="Captions" src="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler.vtt" srclang="en" default=""></video>
</p>

<p>
<a href="https://archive.org/details/ec23-raymond-zeitler">View in the Internet Archive</a>, <a href="https://youtube.com/live/ro6BZI0Z64I">watch or comment on YouTube</a>, <a href="https://sachachua.com/blog/feed/index.xml#ID-ec23-transcript">read the transcript online</a>, <a href="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler.vtt">download the transcript</a>, <a href="https://archive.org/download/ec23-raymond-zeitler/ec23-raymond-zeitler.mp3">download the audio</a>, or <a href="mailto:sacha@sachachua.com">email me</a>.
</p>

<p>
Related links:
</p>

<ul class="org-ul">
<li><a href="https://www.emacswiki.org/emacs/RaymondZeitler">https://www.emacswiki.org/emacs/RaymondZeitler</a> (config is out of date)</li>
<li><a href="https://www.linkedin.com/in/raymondzeitler/">https://www.linkedin.com/in/raymondzeitler/</a> : Electrical Engineer | Electronic RF Components | Scripting &amp; Automation | US Defense and Aerospace~ Modernizing your company’s legacy design tools</li>
<li>Acting Historian, IEEE Connecticut Section</li>
<li><a href="https://codeberg.org/ZeitRa">https://codeberg.org/ZeitRa</a></li>
<li>The rest of his Internet presence is either private (Facebook) or anonymous (two blogs, Github and Gitlab, Mastodon, Bluesky).</li>
<li><a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Writing-Calendar-Files.html">Writing Calendar Files (GNU Emacs Manual)</a> - cal-tex-cursor-week-iso</li>
<li><a href="https://github.com/chenfengyuan/elisp/blob/master/next-spec-day.el">elisp/next-spec-day.el at master · chenfengyuan/elisp · GitHub</a></li>
</ul>

<p>
You can add the iCal for upcoming Emacs Chat episodes to your calendar. <a href="https://sachachua.com/topic/emacs-chat/upcoming-emacs-chats.ics">https://sachachua.com/topic/emacs-chat/upcoming-emacs-chats.ics</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>

<p>
Chapters:
</p>

<p>
</p><ul class="org-ul">
<li><span class="audio-time" data-start="0.031" data-stop="1.635">0:00</span> Opening</li>
<li><span class="audio-time" data-start="58.967" data-stop="59.167">0:58</span> Introduction</li>
<li><span class="audio-time" data-start="119.780" data-stop="127.070">1:59</span> I love automating workflows</li>
<li><span class="audio-time" data-start="195.680" data-stop="199.827">3:15</span> Org Mode switch</li>
<li><span class="audio-time" data-start="248.891" data-stop="254.288">4:08</span> diary-float</li>
<li><span class="audio-time" data-start="408.640" data-stop="410.218">6:48</span> Tip: Add links to task titles</li>
<li><span class="audio-time" data-start="419.567" data-stop="419.490">6:59</span> diary-float</li>
<li><span class="audio-time" data-start="479.146" data-stop="480.729">7:59</span> The difference between active timestamps and SCHEDULED</li>
<li><span class="audio-time" data-start="606.430" data-stop="606.831">10:06</span> Including other diary files</li>
<li><span class="audio-time" data-start="686.759" data-stop="690.162">11:26</span> cal-tex-cursor-week-iso, printing planner pages on index cards</li>

<li><span class="audio-time" data-start="899.579" data-stop="904.346">14:59</span> Holidays</li>

<li><span class="audio-time" data-start="1005.713" data-stop="1010.279">16:45</span> Making calendars for other people</li>
<li><span class="audio-time" data-start="1047.126" data-stop="1049.049">17:27</span> Keeping track of when things were done on the house</li>
<li><span class="audio-time" data-start="1129.917" data-stop="1132.520">18:49</span> My first customizations: backspace, buffers</li>
<li><span class="audio-time" data-start="1232.330" data-stop="1242.124">20:32</span> Windows and super key</li>

<li><span class="audio-time" data-start="1403.744" data-stop="1404.505">23:23</span> Org Mode class on Udemy, agenda custom commands</li>
<li><span class="audio-time" data-start="1500.386" data-stop="1502.229">25:00</span> toggling tags</li>

<li><span class="audio-time" data-start="1617.864" data-stop="1621.387">26:57</span> TODO states</li>
<li><span class="audio-time" data-start="1641.211" data-stop="1642.172">27:21</span> Functions for Org Agenda</li>

<li><span class="audio-time" data-start="1714.428" data-stop="1719.854">28:34</span> exeln, shellfn: executing things in DOS</li>

<li><span class="audio-time" data-start="1822.987" data-stop="1831.377">30:22</span> Middle mouse click</li>
<li><span class="audio-time" data-start="1919.941" data-stop="1924.507">31:59</span> Keybindings in other apps: Vivaldi</li>
<li><span class="audio-time" data-start="2049.445" data-stop="2051.360">34:09</span> M-s M-w, eww-search-words</li>
<li><span class="audio-time" data-start="2150.480" data-stop="2154.506">35:50</span> Saving links with org-store-link</li>
<li><span class="audio-time" data-start="2309.913" data-stop="2311.175">38:29</span> How I got into Emacs</li>
<li><span class="audio-time" data-start="2505.310" data-stop="2505.571">41:45</span> Maybe my own theme?</li>
<li><span class="audio-time" data-start="2546.947" data-stop="2550.452">42:26</span> Other editors? Always Emacs</li>
<li><span class="audio-time" data-start="2637.645" data-stop="2642.610">43:57</span> Package names</li>
<li><span class="audio-time" data-start="2754.993" data-stop="2758.958">45:54</span> What's next? Maybe auto maintenance</li>
<li><span class="audio-time" data-start="2911.607" data-stop="2914.250">48:31</span> Vibe-coding?</li>
<li><span class="audio-time" data-start="3053.566" data-stop="3058.014">50:53</span> Where people can find me</li>
<li><span class="audio-time" data-start="3122.378" data-stop="3123.460">52:02</span> Org Mode source blocks</li>
<li><span class="audio-time" data-start="3169.443" data-stop="3172.408">52:49</span> Slideshows?</li>
<li><span class="audio-time" data-start="3230.235" data-stop="3232.900">53:50</span> Emacs Chats?</li>
<li><span class="audio-time" data-start="3393.716" data-stop="3399.723">56:33</span> Other resources that would be nice to have</li>
</ul>

<p></p>

<style>
.ec23 span.caption[data-speaker="Sacha"] .speaker-name { color: var(&#45;&#45;modus-rainbow-1); }
.ec23 span.caption[data-speaker="Raymond"] .speaker-name { color: var(&#45;&#45;modus-rainbow-2); }
</style>
<div id="outline-container-emacs-chats-emacs-chat-23-emacs-chat-with-raymond-zeitler-transcript" class="outline-3">
<h3 id="emacs-chats-emacs-chat-23-emacs-chat-with-raymond-zeitler-transcript"><a href="https://sachachua.com/blog/feed/index.xml#emacs-chats-emacs-chat-23-emacs-chat-with-raymond-zeitler-transcript">Transcript</a></h3>
<div class="outline-text-3" id="text-emacs-chats-emacs-chat-23-emacs-chat-with-raymond-zeitler-transcript">
<details class="code-details"><a name="ID-ec23-transcript"></a><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>Opening</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="0.031000" data-stop="1.635000"><strong class="speaker-name">Sacha:</strong>  I'll go live if that's okay with you.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3.620000" data-stop="4.362000">Yeah, good to go?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="5.264000" data-stop="5.605000"><strong class="speaker-name">Raymond:</strong>  Okay.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="6.207000" data-stop="7.490000"><strong class="speaker-name">Sacha:</strong>  All right, going live.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="10.538000" data-stop="15.119000"><strong class="speaker-name">Raymond:</strong>  Let me just stop sharing right now.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="15.120000" data-stop="17.667000"><strong class="speaker-name">Sacha:</strong>  Hi everyone, this is Emacs Chat.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="17.868000" data-stop="19.832000">Emacs Chat 23.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="20.674000" data-stop="23.620000">Today I'm here with Raymond Zeitler who has been</span> <span class="audio-time caption" data-speaker="Sacha" data-start="23.720000" data-stop="25.083000">using Emacs for a long time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="25.123000" data-stop="27.347000">Your EmacsWiki page says since 2000.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="27.367000" data-stop="29.833000">And I know for sure that you've been commenting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="29.893000" data-stop="32.177000">on my blog since about 2008, probably even</span> <span class="audio-time caption" data-speaker="Sacha" data-start="32.217000" data-stop="33.480000">earlier, I don't know.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="33.460000" data-stop="35.062000">Everything gets lost in the mists of time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="35.923000" data-stop="38.607000">I would love to chat with you about the things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="38.647000" data-stop="40.069000">that you've learned over the years, what you're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="40.089000" data-stop="43.614000">still fiddling with, and the things in your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="43.754000" data-stop="46.198000">configuration or workflow that aren't obvious to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="46.278000" data-stop="47.960000">people who are reading configurations.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="48.521000" data-stop="51.005000">It's just Emacs Lisp, but it doesn't show people</span> <span class="audio-time caption" data-speaker="Sacha" data-start="51.505000" data-stop="55.271000">what you do with Emacs that makes you stick with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="55.371000" data-stop="56.953000">it over all this time.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="57.000000">0:57</span> <strong>Introduction</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="57.946000" data-stop="60.589000"><strong class="speaker-name">Sacha:</strong> So yes, but of course, we should do a bit of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="60.649000" data-stop="61.510000">context setting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="62.571000" data-stop="63.672000">You have a lot of different hats.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="63.732000" data-stop="66.034000">You're a historian, you're an electrical engineer.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="66.435000" data-stop="67.676000">How would you describe yourself?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="69.158000" data-stop="70.759000"><strong class="speaker-name">Raymond:</strong>  Well, right now, I would say I'm an</span> <span class="audio-time caption" data-speaker="Raymond" data-start="70.799000" data-stop="74.703000">electrical engineer, but I spend most of my time,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="75.044000" data-stop="78.547000">instead of designing stuff, I work on the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="78.608000" data-stop="80.089000">workflow for the design.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="80.930000" data-stop="85.775000">And I'm writing scripts, you know, to automate</span> <span class="audio-time caption" data-speaker="Raymond" data-start="86.055000" data-stop="87.717000">various parts of the design.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="88.034000" data-stop="91.159000">Now, I just want to pause here because I hear</span> <span class="audio-time caption" data-speaker="Raymond" data-start="91.680000" data-stop="93.303000">like a 10-second delay.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="94.004000" data-stop="94.205000"><strong class="speaker-name">Sacha:</strong>  Yes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="95.587000" data-stop="99.294000">Oh, you have the video open in another tab.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="99.654000" data-stop="101.618000">Yeah, so the 10-second delay is there in case we</span> <span class="audio-time caption" data-speaker="Sacha" data-start="101.658000" data-stop="103.821000">need to panic, you know, in case you accidentally</span> <span class="audio-time caption" data-speaker="Sacha" data-start="103.861000" data-stop="105.464000">flash something you'd rather keep private.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="106.827000" data-stop="108.890000">But it can be quite disconcerting to hear</span> <span class="audio-time caption" data-speaker="Sacha" data-start="108.950000" data-stop="111.274000">yourself talking at the same time that you're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="111.294000" data-stop="112.236000">trying to say something.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="112.992000" data-stop="114.574000"><strong class="speaker-name">Raymond:</strong>  Okay, I think I fixed that.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="115.495000" data-stop="116.597000">Okay.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="117.000000">1:57</span> <strong>I love automating workflows</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="117.658000" data-stop="120.602000"><strong class="speaker-name">Raymond:</strong> Yes, so I'm an electrical engineer, but I also</span> <span class="audio-time caption" data-speaker="Raymond" data-start="120.662000" data-stop="121.683000">love to do scripting.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="121.723000" data-stop="126.509000">Automating any kind of workflow is my favorite</span> <span class="audio-time caption" data-speaker="Raymond" data-start="126.549000" data-stop="129.473000">thing to do, and I would just love to go around</span> <span class="audio-time caption" data-speaker="Raymond" data-start="129.493000" data-stop="134.519000">and help people to find ways to automate the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="134.539000" data-stop="136.782000">workflow.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="137.122000" data-stop="139.200000">Basically, I was doing that ETL,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="139.201000" data-stop="142.333000">you know, extract, transform, and load</span> <span class="audio-time caption" data-speaker="Raymond" data-start="142.365000" data-stop="147.533000">many years ago, I mean, dozens of years ago,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="147.534000" data-stop="150.600000">and showing people how to do that too for them,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="150.601000" data-stop="152.367000">and you know, when they look at me and</span> <span class="audio-time caption" data-speaker="Raymond" data-start="152.368000" data-stop="154.733000">they say, oh my god, thank you so much,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="154.720000" data-stop="157.520000">I'm so glad... You know, it used</span> <span class="audio-time caption" data-speaker="Raymond" data-start="157.520000" data-stop="160.560000">to take me hours to do this.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="160.560000" data-stop="164.733000">Automating a design flow is a good idea</span> <span class="audio-time caption" data-speaker="Raymond" data-start="164.734000" data-stop="167.840000">once you have all your script in place, that</span> <span class="audio-time caption" data-speaker="Raymond" data-start="168.085000" data-stop="172.839000">serves as your documentation.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="172.840000" data-stop="174.271000">If there is a problem with</span> <span class="audio-time caption" data-speaker="Raymond" data-start="174.291000" data-stop="176.774000">the design, you can go back to the script and</span> <span class="audio-time caption" data-speaker="Raymond" data-start="176.914000" data-stop="177.394000">update it.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="177.414000" data-stop="179.576000">So the next time, you're not going to have that</span> <span class="audio-time caption" data-speaker="Raymond" data-start="179.617000" data-stop="180.557000">problem, hopefully.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="181.999000" data-stop="183.721000"><strong class="speaker-name">Sacha:</strong>  You've been learning Python recently,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="183.741000" data-stop="184.301000">too, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="184.321000" data-stop="186.804000">I can imagine that helps a lot with automation.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="187.385000" data-stop="189.367000">Are you taking advantage of things like Org</span> <span class="audio-time caption" data-speaker="Sacha" data-start="189.387000" data-stop="190.928000">Mode as well for the things that you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="191.008000" data-stop="191.929000">partially automate?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="192.410000" data-stop="193.951000"><strong class="speaker-name">Raymond:</strong>  Absolutely.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="194.212000" data-stop="194.552000"><strong class="speaker-name">Sacha:</strong>  Tell us about that.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="195.680000" data-stop="198.404000"><strong class="speaker-name">Raymond:</strong>  Oh, I figured that we should save for the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="198.424000" data-stop="199.827000">last, because it could take the whole thing.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="200.000000">3:20</span> <strong>Org Mode switch</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="200.187000" data-stop="205.095000"><strong class="speaker-name">Raymond:</strong> But yes, I started using Org Mode after you</span> <span class="audio-time caption" data-speaker="Raymond" data-start="205.375000" data-stop="206.958000">jumped ship from Planner Mode.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="207.479000" data-stop="210.884000">I know that you and John Wiegley were big on that,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="210.904000" data-stop="212.487000">and I used to use Planner.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="213.629000" data-stop="215.932000">And I delayed switching to Org Mode, but</span> <span class="audio-time caption" data-speaker="Raymond" data-start="216.413000" data-stop="218.937000">eventually I latched onto it really well.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="219.929000" data-stop="224.957000">So one thing I used Org Mode for at home was for</span> <span class="audio-time caption" data-speaker="Raymond" data-start="225.018000" data-stop="226.881000">bill pay, you know, because you can schedule</span> <span class="audio-time caption" data-speaker="Raymond" data-start="226.921000" data-stop="227.822000">things recurring.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="228.764000" data-stop="234.433000">So you got your mortgage, you can recur, you</span> <span class="audio-time caption" data-speaker="Raymond" data-start="234.453000" data-stop="237.619000">know, and the recurrence is well thought out.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="237.699000" data-stop="241.826000">You know, you could have it scheduled exactly 30</span> <span class="audio-time caption" data-speaker="Raymond" data-start="241.886000" data-stop="245.532000">days away or one month.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="245.000000">4:05</span> <strong>diary-float</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="245.832000" data-stop="249.515000"><strong class="speaker-name">Raymond:</strong> What I found recently, though, is you can</span> <span class="audio-time caption" data-speaker="Raymond" data-start="250.138000" data-stop="251.708000">use the diary:</span> <span class="audio-time caption" data-speaker="Raymond" data-start="252.025000" data-stop="258.414000">diary-float and diary-warning.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="259.476000" data-stop="262.440000">Those functions can be used in Org Mode in</span> <span class="audio-time caption" data-speaker="Raymond" data-start="262.500000" data-stop="263.482000">place of the schedule.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="263.502000" data-stop="264.804000">So that's really cool.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="264.824000" data-stop="266.927000">I have a lot of meetings that occur, let's say,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="267.147000" data-stop="269.250000">the second Wednesday of the month and stuff.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="269.751000" data-stop="272.334000">There's really no way to easily do that out</span> <span class="audio-time caption" data-speaker="Raymond" data-start="272.354000" data-stop="273.596000">of the box with Org Mode.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="274.978000" data-stop="275.839000">So that's fun to do.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="277.482000" data-stop="277.943000">Let's see.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="278.944000" data-stop="281.728000">I'm going to share my Org now, if you want.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="281.978000" data-stop="282.984000"><strong class="speaker-name">Sacha:</strong>  Sure, go ahead.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="283.064000" data-stop="283.949000">If that's okay with you.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="284.734000" data-stop="285.055000"><strong class="speaker-name">Raymond:</strong>  Sure.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="285.397000" data-stop="287.328000">Well, I deleted some of the stuff.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="287.348000" data-stop="289.440000">You know, not all the files are there.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="289.842000" data-stop="291.484000"><strong class="speaker-name">Sacha:</strong>  Thank you.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="291.645000" data-stop="293.808000">It's always interesting to see, because a lot of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="293.848000" data-stop="295.670000">times, when we're trying to demonstrate Org to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="295.690000" data-stop="297.954000">people, we're like, okay, here's a small</span> <span class="audio-time caption" data-speaker="Sacha" data-start="298.014000" data-stop="300.637000">example. But when you see it in the context of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="300.718000" data-stop="303.622000">someone's actual life, with the tons of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="303.722000" data-stop="306.164000">reminders they have... Your agenda is very full,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="306.165000" data-stop="306.766000">for example.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="307.467000" data-stop="310.632000">I'm not the only one with things that are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="310.652000" data-stop="313.159000">scheduled for over 100 days.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="313.160000" data-stop="315.691000"><strong class="speaker-name">Raymond:</strong>  And actually, your talk isn't on here,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="315.811000" data-stop="317.393000">so that's kind of strange.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="318.214000" data-stop="320.197000">So, for example, I was talking about bills, right?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="320.437000" data-stop="322.500000">I don't know if you can see that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="322.540000" data-stop="323.281000"><strong class="speaker-name">Sacha:</strong>  Yeah, I can see that.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="323.301000" data-stop="323.981000"><strong class="speaker-name">Raymond:</strong>  It's not the same.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="325.924000" data-stop="326.545000"><strong class="speaker-name">Sacha:</strong>  Yeah, I see.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="326.665000" data-stop="328.107000">And you're using the logbook.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="328.127000" data-stop="331.811000">You can keep notes in a task.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="331.852000" data-stop="333.373000">You can put all the things there.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="334.094000" data-stop="334.615000"><strong class="speaker-name">Raymond:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="335.101000" data-stop="338.047000">So, you know, something like a mortgage or your</span> <span class="audio-time caption" data-speaker="Raymond" data-start="338.207000" data-stop="340.532000">utility, that's pretty standard.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="340.572000" data-stop="342.917000">That's just +1m, you know, for the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="342.977000" data-stop="343.518000">recurrence.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="343.879000" data-stop="345.402000">Let's see.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="347.065000" data-stop="347.406000">Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="348.787000" data-stop="350.129000"><strong class="speaker-name">Sacha:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="350.389000" data-stop="354.354000">So basically, you have the regular or repeat</span> <span class="audio-time caption" data-speaker="Sacha" data-start="354.775000" data-stop="357.419000">things, plus one month or plus one week for the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="357.439000" data-stop="359.141000">things that can be expressed that way.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="359.161000" data-stop="362.065000">But you also use diary-float for the things that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="362.185000" data-stop="363.607000">are second Wednesday of the month.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="364.128000" data-stop="364.488000"><strong class="speaker-name">Raymond:</strong>  Yes.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="364.648000" data-stop="369.375000">So let me try a different Org file for that.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="369.695000" data-stop="371.858000">Oh, everyone, I have to do this too.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="372.614000" data-stop="376.157000"><strong class="speaker-name">Sacha:</strong>  Oh yeah, you can set a global font</span> <span class="audio-time caption" data-speaker="Sacha" data-start="376.177000" data-stop="377.659000">default scale thingy.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="377.919000" data-stop="380.460000">I don't remember exactly how to do that, but...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="380.461000" data-stop="381.581000">[cut due to passwords] I'll move your screen</span> <span class="audio-time caption" data-speaker="Sacha" data-start="381.582000" data-stop="382.963000">off the thing first while you talk,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="382.964000" data-stop="385.326000">and then I'll move it back when you're ready.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="385.346000" data-stop="388.569000">So we had a bit of a "Oh no, he's showing me like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="388.609000" data-stop="389.610000">meeting passwords online."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="389.630000" data-stop="391.732000">So if you saw that, which probably you didn't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="391.772000" data-stop="395.315000">because 10 second delay, just ignore it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="395.455000" data-stop="399.499000">And then we'll go back and scrub things later.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="400.745000" data-stop="402.467000">Let me know when it's safe to look again.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="403.028000" data-stop="403.649000"><strong class="speaker-name">Raymond:</strong>  Okay, here we go.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="403.669000" data-stop="404.550000">So here's a meeting.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="405.431000" data-stop="406.112000"><strong class="speaker-name">Sacha:</strong>  Okay, okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="406.292000" data-stop="406.713000">We got this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="406.733000" data-stop="408.799000">We got this.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="408.000000">6:48</span> <strong>Tip: Add links to task titles</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="408.800000" data-stop="410.879000"><strong class="speaker-name">Sacha:</strong>  I also want to point out, I love how</span> <span class="audio-time caption" data-speaker="Sacha" data-start="410.919000" data-stop="413.242000">you're using links in the task title.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="413.282000" data-stop="415.925000">You know, that did not occur to me to have the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="416.146000" data-stop="418.549000">links right there so it's easy to get to from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="418.629000" data-stop="419.490000">just the overview.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="419.000000">6:59</span> <strong>diary-float</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="419.510000" data-stop="420.167000"><strong class="speaker-name">Raymond:</strong>  [cut due to passwords]  ...which works</span> <span class="audio-time caption" data-speaker="Raymond" data-start="420.168000" data-stop="421.713000">really in a diary file.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="421.733000" data-stop="422.034000"><strong class="speaker-name">Sacha:</strong>  All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="422.154000" data-stop="423.596000">Let me move it back so people can see.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="425.478000" data-stop="425.859000"><strong class="speaker-name">Raymond:</strong>  It works.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="426.440000" data-stop="430.465000">This is great because it works in Org Mode too.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="430.445000" data-stop="435.316000">If anyone doesn't know it, this is the month.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="435.697000" data-stop="438.604000">And true just means that this meeting occurs</span> <span class="audio-time caption" data-speaker="Raymond" data-start="438.784000" data-stop="439.286000">every month.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="440.067000" data-stop="442.694000">And I believe this means Monday.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="444.538000" data-stop="444.798000"><strong class="speaker-name">Sacha:</strong>  No, Tuesday.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="444.818000" data-stop="446.783000">Although... Your comment says Tuesday, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="446.763000" data-stop="449.867000"><strong class="speaker-name">Raymond:</strong>  Yeah, Tuesday. So that's the second day</span> <span class="audio-time caption" data-speaker="Raymond" data-start="449.868000" data-stop="452.867000">of the week, with Sunday being zero.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="452.868000" data-stop="455.567000">And then this is the week number, the second week.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="455.568000" data-stop="459.133000">Second Tuesday of every month.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="459.134000" data-stop="461.633000">And then you could just put the time there as well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="461.933000" data-stop="462.754000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="463.836000" data-stop="465.459000">I have actually personally never used this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="465.499000" data-stop="468.343000">syntax, but I see people use it for things like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="468.644000" data-stop="471.388000">Emacs meetups and they're like, okay, yeah, we</span> <span class="audio-time caption" data-speaker="Sacha" data-start="471.409000" data-stop="473.532000">meet every second Wednesday or whatever, but</span> <span class="audio-time caption" data-speaker="Sacha" data-start="473.612000" data-stop="476.317000">here's the thing that you can just put into your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="476.417000" data-stop="478.440000">Org agenda and it'll work.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="479.000000">7:59</span> <strong>The difference between active timestamps and SCHEDULED</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="479.146000" data-stop="480.729000"><strong class="speaker-name">Raymond:</strong>  But the problem with this, though, is</span> <span class="audio-time caption" data-speaker="Raymond" data-start="480.849000" data-stop="485.717000">that it doesn't obey the, you know, if you mark</span> <span class="audio-time caption" data-speaker="Raymond" data-start="485.777000" data-stop="487.780000">it done, it'll be marked done.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="488.181000" data-stop="489.563000">So it won't show up again.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="490.104000" data-stop="493.329000">So I'm actually starting to put these in my actual</span> <span class="audio-time caption" data-speaker="Raymond" data-start="493.389000" data-stop="495.012000">diary because</span> <span class="audio-time caption" data-speaker="Raymond" data-start="495.447000" data-stop="497.390000">you know, I don't really need to mark the meeting</span> <span class="audio-time caption" data-speaker="Raymond" data-start="497.450000" data-stop="497.731000">done.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="498.372000" data-stop="500.135000"><strong class="speaker-name">Sacha:</strong>  You know, you can take out, just remove</span> <span class="audio-time caption" data-speaker="Sacha" data-start="500.155000" data-stop="502.218000">the scheduled keyword.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="502.238000" data-stop="504.702000">You can have the active timestamp and it will</span> <span class="audio-time caption" data-speaker="Sacha" data-start="504.803000" data-stop="506.586000">show up on your calendar, but it doesn't have to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="506.626000" data-stop="507.327000">be marked as done.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="508.008000" data-stop="509.530000">And it'll just keep showing up whenever you need</span> <span class="audio-time caption" data-speaker="Sacha" data-start="509.550000" data-stop="509.711000">to.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="510.111000" data-stop="512.275000">So this is the distinction between scheduled,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="512.255000" data-stop="513.876000">which is actually not like a scheduled</span> <span class="audio-time caption" data-speaker="Sacha" data-start="513.917000" data-stop="514.376000">appointment,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="514.437000" data-stop="516.339000">it's like a task that you're scheduling for a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="516.379000" data-stop="519.160000">specific day, versus just using an active</span> <span class="audio-time caption" data-speaker="Sacha" data-start="519.221000" data-stop="521.003000">timestamp, which is the stuff within the angle</span> <span class="audio-time caption" data-speaker="Sacha" data-start="521.043000" data-stop="521.484000">brackets.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="521.904000" data-stop="523.585000">It can be anywhere in your entry.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="523.605000" data-stop="526.188000">It doesn't have to be the second line after your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="526.208000" data-stop="526.548000">heading.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="527.569000" data-stop="530.192000">Then it will show up in your agenda, but it's not</span> <span class="audio-time caption" data-speaker="Sacha" data-start="530.232000" data-stop="532.594000">going to keep showing up like the next day.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="533.174000" data-stop="534.676000">It's not going to say it's overdue.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="535.196000" data-stop="536.698000">It's just going to be for that day.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="537.378000" data-stop="538.900000"><strong class="speaker-name">Raymond:</strong>  Okay.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="538.920000" data-stop="539.060000">Yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="539.080000" data-stop="540.821000">There was somebody who tried to solve the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="540.861000" data-stop="541.502000">problem, though.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="542.107000" data-stop="546.211000">And they came up with next-spec-day, a function,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="546.391000" data-stop="550.915000">but it's not possible to compile that with the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="550.975000" data-stop="552.637000">modern Emacs.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="552.657000" data-stop="556.260000">So I'm just happy with the way I have it now,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="556.300000" data-stop="556.520000">though.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="558.042000" data-stop="558.682000">Yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="558.702000" data-stop="561.425000">But when I first started using</span> <span class="audio-time caption" data-speaker="Raymond" data-start="561.485000" data-stop="567.450000">Emacs, the diary and the calendar were one of the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="567.510000" data-stop="571.354000">first non-text editing uses that I had for it.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="571.722000" data-stop="576.268000">And I'm really getting back into diary.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="577.330000" data-stop="579.693000">I hope I don't show anything else.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="579.974000" data-stop="580.915000"><strong class="speaker-name">Sacha:</strong>  Tell you what, I'm going to move your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="580.955000" data-stop="581.536000">window away.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="581.556000" data-stop="582.517000">Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="582.617000" data-stop="584.119000">And then you can do your thing and then I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="584.159000" data-stop="585.541000">move it back when you're comfy.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="585.561000" data-stop="585.782000"><strong class="speaker-name">Raymond:</strong>  Okay.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="586.062000" data-stop="588.325000"><strong class="speaker-name">Sacha:</strong>  Yeah, I know how to do this now.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="588.345000" data-stop="588.786000">This is good.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="589.247000" data-stop="591.370000">I have two monitors so I can control.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="594.374000" data-stop="595.696000"><strong class="speaker-name">Raymond:</strong>  Where's my screen?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="596.757000" data-stop="597.358000">Oh boy.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="599.140000" data-stop="601.003000">So what I'm showing here</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="601.405000" data-stop="605.369000"><strong class="speaker-name">Sacha:</strong>  I put it back so people can see.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="606.000000">10:06</span> <strong>Including other diary files
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-10-09-867.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-10-09-867.jpg" alt="image from video 00:10:09.867" data-time="00:10:09.867"></a><span class="audio-time caption" data-speaker="Raymond" data-start="606.430000" data-stop="608.933000"><strong class="speaker-name">Raymond:</strong>  My main diary is just diary.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="610.074000" data-stop="612.958000">What I'm doing is I'm using includes, because I</span> <span class="audio-time caption" data-speaker="Raymond" data-start="613.018000" data-stop="618.464000">like to break it up into various files that I can</span> <span class="audio-time caption" data-speaker="Raymond" data-start="619.124000" data-stop="624.150000">comment them out if I don't want something so</span> <span class="audio-time caption" data-speaker="Raymond" data-start="624.230000" data-stop="624.570000">busy.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="628.735000" data-stop="630.737000">The reason I'm doing that is because</span> <span class="audio-time caption" data-speaker="Raymond" data-start="631.139000" data-stop="634.607000">I was tooling around in calendar in the calendar</span> <span class="audio-time caption" data-speaker="Raymond" data-start="634.667000" data-stop="638.315000">functions and there's actually cal-tex-cursor</span> <span class="audio-time caption" data-speaker="Raymond" data-start="638.375000" data-stop="641.943000">functions that so when you go into calendar, for</span> <span class="audio-time caption" data-speaker="Raymond" data-start="642.003000" data-stop="649.620000">example... That's also small, right?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="650.292000" data-stop="650.813000"><strong class="speaker-name">Sacha:</strong>  It's okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="651.313000" data-stop="652.254000">Everyone has seen calendar.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="652.274000" data-stop="653.736000">Well, most people have seen calendar at this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="653.776000" data-stop="656.019000">point, so we know what the calendar is.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="656.039000" data-stop="656.299000">Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="656.379000" data-stop="657.681000">What are we showing?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="657.721000" data-stop="658.662000">What are we seeing?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="658.682000" data-stop="661.305000"><strong class="speaker-name">Raymond:</strong>  So if I wanted to, let's say for next</span> <span class="audio-time caption" data-speaker="Raymond" data-start="661.365000" data-stop="669.736000">week, what I could do is create a, let's see,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="669.756000" data-stop="670.256000">cursor...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="670.396000" data-stop="671.298000">I forgot the command.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="673.320000" data-stop="674.782000"><strong class="speaker-name">Sacha:</strong>  I'm surprised you don't have completion</span> <span class="audio-time caption" data-speaker="Sacha" data-start="674.822000" data-stop="677.185000">set up.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="677.425000" data-stop="679.067000"><strong class="speaker-name">Raymond:</strong>  Yes.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="686.000000">11:26</span> <strong>cal-tex-cursor-week-iso, printing planner pages on index cards
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-14-04-867.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-14-04-867.jpg" alt="image from video 00:14:04.867" data-time="00:14:04.867"></a><span class="audio-time caption" data-speaker="Raymond" data-start="686.759000" data-stop="688.320000"><strong class="speaker-name">Raymond:</strong> Okay, so this is what I like to do.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="688.761000" data-stop="694.566000">So this function, cal-tex-cursor-week-iso</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="697.989000" data-stop="698.610000"><strong class="speaker-name">Sacha:</strong>  It's okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="698.630000" data-stop="699.871000">It's the curse of the live demo.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="702.493000" data-stop="706.577000"><strong class="speaker-name">Raymond:</strong>  All right, I'll create mine.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="706.597000" data-stop="707.738000"><strong class="speaker-name">Sacha:</strong>  Change cursor shape, huh...</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="709.439000" data-stop="711.141000"><strong class="speaker-name">Raymond:</strong>  All right, so for some reason that's</span> <span class="audio-time caption" data-speaker="Raymond" data-start="711.201000" data-stop="711.782000">not working.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="711.802000" data-stop="716.766000">But what you end up doing is you can create</span> <span class="audio-time caption" data-speaker="Raymond" data-start="717.438000" data-stop="719.721000">a weekly planner,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="720.902000" data-stop="723.045000">kind of like a page in a date book,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="724.226000" data-stop="730.895000">and it will show everything from your diary if</span> <span class="audio-time caption" data-speaker="Raymond" data-start="730.935000" data-stop="733.459000">you want...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="733.460000" data-stop="735.821000"><strong class="speaker-name">Sacha:</strong>  In a nice printed format or like a nice</span> <span class="audio-time caption" data-speaker="Sacha" data-start="736.041000" data-stop="736.982000">visual format.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="737.002000" data-stop="739.765000"><strong class="speaker-name">Raymond:</strong>  Yeah, I have to... How do I get that?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="740.046000" data-stop="742.309000">I don't know why it's not working here.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="742.329000" data-stop="749.999000">So...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="750.000000" data-stop="753.460000"><strong class="speaker-name">Sacha:</strong>  Certainly the layouts of things, the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="753.520000" data-stop="755.403000">layouts of date planners is something that I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="755.483000" data-stop="759.088000">sometimes envy about my paper planner days.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="760.270000" data-stop="761.311000">Like you could see things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="763.854000" data-stop="766.218000">I also wanted to point out something that I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="766.258000" data-stop="767.119000">hadn't considered.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="767.199000" data-stop="770.103000">You were using diary for diary entries, it looks</span> <span class="audio-time caption" data-speaker="Sacha" data-start="770.143000" data-stop="770.704000">like also</span> <span class="audio-time caption" data-speaker="Sacha" data-start="771.104000" data-stop="773.628000">not just appointments and reminders, but also</span> <span class="audio-time caption" data-speaker="Sacha" data-start="774.088000" data-stop="775.110000">this is what happened that day.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="775.450000" data-stop="776.672000">Ooh, that is pretty.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="778.120000" data-stop="780.042000">Do you actually print these out or like read them</span> <span class="audio-time caption" data-speaker="Sacha" data-start="780.102000" data-stop="782.164000">on an e-reader or just look at them?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="782.184000" data-stop="782.324000"><strong class="speaker-name">Raymond:</strong>  I did.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="782.905000" data-stop="785.948000">Yeah, I found out that my printer can print</span> <span class="audio-time caption" data-speaker="Raymond" data-start="786.349000" data-stop="788.871000">double-sided on index cards.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="788.891000" data-stop="790.273000"><strong class="speaker-name">Sacha:</strong>  Oh yeah, double-sided.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="790.893000" data-stop="792.595000"><strong class="speaker-name">Raymond:</strong>  So I actually created my own little</span> <span class="audio-time caption" data-speaker="Raymond" data-start="792.635000" data-stop="793.956000">book here.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="794.337000" data-stop="797.540000">So what's nice about this is, you know, when you</span> <span class="audio-time caption" data-speaker="Raymond" data-start="797.560000" data-stop="800.944000">go into a store to look for some planner, many of</span> <span class="audio-time caption" data-speaker="Raymond" data-start="801.044000" data-stop="802.565000">them, like half of them, don't even have the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="802.645000" data-stop="805.108000">lunar phases.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="805.128000" data-stop="809.679000">And let's see if this has a lunar phase.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="809.680000" data-stop="812.017000"><strong class="speaker-name">Sacha:</strong>  So printing planner pages on index cards.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="812.057000" data-stop="812.898000">Very cool.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="813.598000" data-stop="814.680000"><strong class="speaker-name">Raymond:</strong>  So you've got your full moon there.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="814.940000" data-stop="817.983000">And because I was very active in photography,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="818.043000" data-stop="820.325000">nature photography in particular, and doing</span> <span class="audio-time caption" data-speaker="Raymond" data-start="820.385000" data-stop="821.366000">landscapes and stuff.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="821.887000" data-stop="824.390000">So it's really helpful to know when the full moon</span> <span class="audio-time caption" data-speaker="Raymond" data-start="824.510000" data-stop="831.597000">is, more so sunrise and sunset, which I have here.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="831.697000" data-stop="833.539000">Because you get, especially in the winter, you</span> <span class="audio-time caption" data-speaker="Raymond" data-start="833.579000" data-stop="837.523000">get great shots at around sunset.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="838.297000" data-stop="840.160000">Yeah, so that was something that I was really</span> <span class="audio-time caption" data-speaker="Raymond" data-start="840.220000" data-stop="840.901000">interested in.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="842.062000" data-stop="842.964000"><strong class="speaker-name">Sacha:</strong>  Oh, it's so cool.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="843.144000" data-stop="845.207000">It's something I'd never considered using Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="845.547000" data-stop="848.351000">to generate your custom, you know, calendar</span> <span class="audio-time caption" data-speaker="Sacha" data-start="848.812000" data-stop="851.215000">planner thing that you then take offline because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="851.255000" data-stop="852.437000">you're out there in the field.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="852.477000" data-stop="853.438000">You're taking pictures.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="853.498000" data-stop="855.441000">You don't want to open your laptop or look at</span> <span class="audio-time caption" data-speaker="Sacha" data-start="855.481000" data-stop="856.342000">your phone or whatever.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="856.623000" data-stop="857.824000">It's just your index card.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="858.225000" data-stop="858.525000">Nice.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="859.146000" data-stop="860.488000"><strong class="speaker-name">Raymond:</strong>  And there's some astrology in there.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="860.508000" data-stop="862.479000"><strong class="speaker-name">Sacha:</strong>  [cut due to password] We're back to streaming.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="862.480000" data-stop="864.053000">Yeah, birthdays. Gotcha.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="864.294000" data-stop="865.756000"><strong class="speaker-name">Raymond:</strong>  Birthdays.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="866.016000" data-stop="868.219000">And then, so I'll just...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="868.823000" data-stop="870.446000">I wonder if I could do this safely.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="873.432000" data-stop="874.915000"><strong class="speaker-name">Sacha:</strong>  Give me a heads up, I'll move the screen</span> <span class="audio-time caption" data-speaker="Sacha" data-start="875.055000" data-stop="876.658000">off and then I can move it back when you give me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="876.678000" data-stop="877.319000">the heads up again.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="878.722000" data-stop="882.529000"><strong class="speaker-name">Raymond:</strong>  I'm pretty sure my .emacs is pretty...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="883.994000" data-stop="889.443000">If anyone wants to see this and download it, it's</span> <span class="audio-time caption" data-speaker="Raymond" data-start="889.783000" data-stop="891.947000">on emacswiki.org.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="893.008000" data-stop="895.512000">Just look for the page RaymondZeitler.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="895.532000" data-stop="897.555000"><strong class="speaker-name">Sacha:</strong>  Yeah, it's in the related links now for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="897.595000" data-stop="898.277000">the blog post.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="898.357000" data-stop="898.817000">Gotcha.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="899.000000">14:59</span> <strong>Holidays
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-15-07-533.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-15-07-533.jpg" alt="image from video 00:15:07.533" data-time="00:15:07.533"></a><span class="audio-time caption" data-speaker="Raymond" data-start="899.579000" data-stop="902.603000"><strong class="speaker-name">Raymond:</strong>  So what I was looking for here is my</span> <span class="audio-time caption" data-speaker="Raymond" data-start="902.663000" data-stop="904.346000">list of holidays.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="905.648000" data-stop="908.753000">So what you could do with...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="909.593000" data-stop="914.840000">This is basically a calendar thing, but you can</span> <span class="audio-time caption" data-speaker="Raymond" data-start="915.180000" data-stop="916.282000">set up all your holidays.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="916.502000" data-stop="919.827000">For example, Towel Day is coming up.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="919.847000" data-stop="922.450000">It will be Monday for you Hitchhiker's Guide</span> <span class="audio-time caption" data-speaker="Raymond" data-start="922.691000" data-stop="923.612000">geeks.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="924.132000" data-stop="926.856000">You've got your Star Wars Day, you've got Pi Day,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="927.517000" data-stop="929.540000">which you won't find on a regular calendar, of</span> <span class="audio-time caption" data-speaker="Raymond" data-start="929.600000" data-stop="932.023000">course.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="932.392000" data-stop="935.317000">And that's an atrocious thing here.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="935.337000" data-stop="936.759000"><strong class="speaker-name">Sacha:</strong>  I was just admiring that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="937.139000" data-stop="939.243000">It's a very complicated expression, but you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="939.283000" data-stop="939.583000">do it.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="940.345000" data-stop="941.186000"><strong class="speaker-name">Raymond:</strong>  You can, right.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="941.206000" data-stop="943.329000">So that's what I came up for Election Day.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="945.212000" data-stop="947.656000">And if anyone's a Seinfeld fan, you've got your</span> <span class="audio-time caption" data-speaker="Raymond" data-start="947.736000" data-stop="949.920000">Festivus.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="950.701000" data-stop="953.185000">So that's a neat thing.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="953.205000" data-stop="955.028000">Yeah, and don't worry about the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="955.068000" data-stop="956.049000">longitude-latitude.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="957.872000" data-stop="959.074000">Everyone knows where I am.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="961.518000" data-stop="965.233000"><strong class="speaker-name">Sacha:</strong>  [another password hiccup] ... dealing with the panic,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="965.234000" data-stop="968.833000">it's good. It's good practice. And also everyone is very nice,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="968.834000" data-stop="970.700000">so afterwards, I'll just probably make</span> <span class="audio-time caption" data-speaker="Sacha" data-start="970.701000" data-stop="972.267000">this unlisted and then see if there's anything</span> <span class="audio-time caption" data-speaker="Sacha" data-start="972.268000" data-stop="973.100000">that actually needs scrubbing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="973.101000" data-stop="975.499000">But probably it's all good.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="975.500000" data-stop="977.156000">Yes, so you've got calendar, you've got</span> <span class="audio-time caption" data-speaker="Sacha" data-start="977.237000" data-stop="979.442000">holidays, you print them out.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="979.912000" data-stop="982.656000">Are there other ways that you use Emacs, kind of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="982.736000" data-stop="985.159000">in this online-offline way?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="985.900000" data-stop="987.502000">Are there any other things that you like to print</span> <span class="audio-time caption" data-speaker="Sacha" data-start="987.662000" data-stop="989.865000">out, or do you do the rest of the things in your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="989.905000" data-stop="990.326000">computer?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="991.347000" data-stop="992.529000"><strong class="speaker-name">Raymond:</strong>  It's all on computer, yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="992.549000" data-stop="995.173000">So the only thing that's printed out is the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="995.213000" data-stop="996.815000">planner datebook.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="998.437000" data-stop="1000.440000">By planner, I mean this thing.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1002.462000" data-stop="1004.405000">Okay.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1004.425000" data-stop="1005.126000">So...</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1005.000000">16:45</span> <strong>Making calendars for other people</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1005.713000" data-stop="1006.374000"><strong class="speaker-name">Raymond:</strong> Oh, yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1006.594000" data-stop="1009.698000">Anyway, getting back to why I break up my diary</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1009.838000" data-stop="1015.565000">into multiple files is eventually I may want to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1016.346000" data-stop="1019.410000">create these things for other people, right?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1019.871000" data-stop="1021.913000">Print out a date book for my wife, for example.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1022.013000" data-stop="1024.236000">So she's going to want to know when Towel Day is,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1024.256000" data-stop="1025.077000">right?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1025.097000" data-stop="1026.858000">Well, that's a different thing, but she's not</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1026.878000" data-stop="1029.983000">going to want a lot of other things.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1029.963000" data-stop="1031.385000"><strong class="speaker-name">Sacha:</strong>  Yeah, it's very customizable.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1031.425000" data-stop="1033.367000">You can just say, okay, include these, you know,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1033.387000" data-stop="1034.990000">modules in the calendar.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1035.550000" data-stop="1036.452000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1036.472000" data-stop="1036.632000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1036.652000" data-stop="1036.811000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1036.832000" data-stop="1037.333000">Cool.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1038.054000" data-stop="1042.280000"><strong class="speaker-name">Raymond:</strong>  So, and then getting back to the diary again, yes.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1042.300000" data-stop="1045.699000"><strong class="speaker-name">Sacha:</strong>  I can move this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1045.700000" data-stop="1046.200000">We're safe.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1046.201000" data-stop="1045.544000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1045.784000" data-stop="1046.786000">We're safe.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1046.806000" data-stop="1047.733000"><strong class="speaker-name">Raymond:</strong>  Okay.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1047.000000">17:27</span> <strong>Keeping track of when things were done on the house</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1047.734000" data-stop="1051.532000"><strong class="speaker-name">Raymond:</strong> So one thing I like to do is keep track of when</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1052.761000" data-stop="1054.944000">things were done on the house.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1057.748000" data-stop="1060.571000"><strong class="speaker-name">Sacha:</strong>  You've got a license plate?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1060.792000" data-stop="1064.176000"><strong class="speaker-name">Raymond:</strong>  No, there's really nothing bad here.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1065.878000" data-stop="1068.221000">For example, if you want to know when you have to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1068.281000" data-stop="1071.626000">register your car, you can put that in there and</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1071.686000" data-stop="1073.769000">it'll show up on your little planner.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1074.850000" data-stop="1076.372000">So I thought that was pretty neat.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1076.605000" data-stop="1079.291000"><strong class="speaker-name">Sacha:</strong>  And I like that you can say a number of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1079.371000" data-stop="1081.737000">years ago, so it automatically keeps track of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1081.777000" data-stop="1081.997000">that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1082.398000" data-stop="1084.403000">You can wish somebody a specific number of years,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1084.443000" data-stop="1086.508000">happy birthday, instead of just a generic happy</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1086.528000" data-stop="1086.909000">birthday.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1086.929000" data-stop="1088.072000">You don't have to do math.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1089.094000" data-stop="1089.916000">Nice, nice.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1091.219000" data-stop="1093.905000">Diary, I think it's underutilized.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1094.408000" data-stop="1095.510000"><strong class="speaker-name">Raymond:</strong>  It is, yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1095.750000" data-stop="1098.835000">And what I like about Emacs is that the people</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1098.975000" data-stop="1103.202000">who are, you know, creating functions and adding</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1103.262000" data-stop="1108.771000">to it use it and have really good design ideas.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1109.512000" data-stop="1113.218000">So, oh, this is, let's go back to something else</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1113.278000" data-stop="1113.499000">here.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1114.921000" data-stop="1118.667000">Okay, so back to my .Emacs.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1118.687000" data-stop="1119.268000">Let's see.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1120.450000" data-stop="1121.091000">Let me just...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1121.324000" data-stop="1124.048000">In the interim, before we come up with something</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1124.108000" data-stop="1126.552000">else to talk about, I'll just talk about some of</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1126.732000" data-stop="1129.897000">the modifications.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1129.000000">18:49</span> <strong>My first customizations: backspace, buffers</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1129.917000" data-stop="1131.960000"><strong class="speaker-name">Raymond:</strong> And by the way, when I first started using Emacs,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1132.040000" data-stop="1133.482000">I decided not to do anything.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1133.602000" data-stop="1138.209000">I'm a Windows user, so naturally you might want</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1138.229000" data-stop="1142.155000">to use CUA mode, but I never did that.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1142.175000" data-stop="1145.239000">And the first customization I did was...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1145.658000" data-stop="1150.207000">For some reason the backspace key was doing the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1150.267000" data-stop="1151.149000">delete function.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1154.737000" data-stop="1156.260000">I think that was Emacs 19.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1157.362000" data-stop="1161.270000">So that was the one thing I changed.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1163.309000" data-stop="1167.097000">And then the other thing I changed is very soon I</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1167.157000" data-stop="1168.600000">had multiple buffers.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1168.620000" data-stop="1170.825000">Like if you're using Emacs for any amount of</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1170.905000" data-stop="1173.371000">time, even like 10 minutes, you'll have multiple</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1173.391000" data-stop="1174.654000">buffers.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1174.674000" data-stop="1178.161000">And I was using a tabbed web browser at the time,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1178.221000" data-stop="1179.985000">so it's easy.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1179.965000" data-stop="1184.574000">To switch tabs by just pressing the Ctrl-Tab key</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1184.614000" data-stop="1189.884000">or Shift-Ctrl-Tab key to switch between tabs.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1190.525000" data-stop="1194.152000">And I figured, let me do that with the buffers.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1194.232000" data-stop="1196.556000">And so that's somewhere in here.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1199.202000" data-stop="1201.385000"><strong class="speaker-name">Sacha:</strong>  Oh yeah, there's a control tab, control</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1201.426000" data-stop="1203.549000">shift tab, next buffer, and previous buffer.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1204.050000" data-stop="1207.435000"><strong class="speaker-name">Raymond:</strong>  Yeah, so that was one of the first</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1207.756000" data-stop="1213.024000">things besides the delete key modification that I did.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1213.044000" data-stop="1216.890000">But I'm also now, since I have multiple windows</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1217.351000" data-stop="1221.177000">open as well, I'm using the windows...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1221.275000" data-stop="1226.262000">Next and Windows Prior.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1226.943000" data-stop="1231.068000">Next is, I think, the page down key, I believe.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1231.669000" data-stop="1233.051000">And Prior is the page up key.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1233.000000">20:33</span> <strong>Windows and super key
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-21-50-033.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-21-50-033.jpg" alt="image from video 00:21:50.033" data-time="00:21:50.033"></a><span class="audio-time caption" data-speaker="Raymond" data-start="1233.652000" data-stop="1239.460000"><strong class="speaker-name">Raymond:</strong> And how you can get to use the Windows key is, I</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1239.500000" data-stop="1243.545000">got that from Xah Lee's website.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1244.627000" data-stop="1246.510000">And where is that now?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1246.530000" data-stop="1248.312000"><strong class="speaker-name">Sacha:</strong>  Yeah, you make it the super key.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1248.595000" data-stop="1251.899000">I use Xmodmap but other people can use different</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1251.939000" data-stop="1253.802000">things depending on their setup.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1254.443000" data-stop="1256.545000">Although lately I've been experimenting with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1256.646000" data-stop="1260.651000">using Kanata so that my modifiers are one-shot</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1260.691000" data-stop="1261.312000">modifiers.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1261.492000" data-stop="1264.776000">I can tap the super key and then I can let go of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1264.876000" data-stop="1268.241000">it and then I can press whatever key is next so I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1268.281000" data-stop="1269.442000">don't have to hold them at the same time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1270.343000" data-stop="1273.067000">Oh hey look at that it's actually an option!</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1273.216000" data-stop="1274.858000">I didn't even know that it was.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1274.878000" data-stop="1277.442000">You can change it right from Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1278.984000" data-stop="1279.325000">Nice.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1280.246000" data-stop="1281.588000"><strong class="speaker-name">Raymond:</strong>  Yeah, so this is what I set up.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1281.608000" data-stop="1283.130000">I lifted this from the website.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1283.150000" data-stop="1284.212000">There's the URL.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1285.073000" data-stop="1289.759000">And if you're curious, you can go to that Emacs</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1289.779000" data-stop="1292.163000">wiki website and see this.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1292.183000" data-stop="1294.987000">The only thing that I wasn't able to get this to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1295.127000" data-stop="1298.952000">work until I added this statement, which I found</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1300.054000" data-stop="1302.177000">in Stack Overflow or something like that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1302.815000" data-stop="1303.756000"><strong class="speaker-name">Sacha:</strong>  That is interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1304.577000" data-stop="1305.739000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1305.759000" data-stop="1306.720000">All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1306.740000" data-stop="1309.383000">So does it mean that Emacs is entirely</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1309.443000" data-stop="1311.386000">responsible for the Windows key?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1311.486000" data-stop="1314.390000">You don't do anything else with it outside Emacs?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1315.792000" data-stop="1316.052000"><strong class="speaker-name">Raymond:</strong>  Right.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1316.112000" data-stop="1319.076000">So yes, it intercepts the Windows key before</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1319.116000" data-stop="1323.662000">Windows does somehow magically, which can be kind</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1323.702000" data-stop="1325.884000">of frustrating because sometimes I do want to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1326.165000" data-stop="1328.428000">open the start menu from within Emacs and I'm</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1328.828000" data-stop="1332.653000">pressing it and saying, why isn't this working?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1333.223000" data-stop="1334.985000"><strong class="speaker-name">Sacha:</strong>  This is where you just get used to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1335.025000" data-stop="1337.007000">having your own launchers within Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1338.088000" data-stop="1339.110000"><strong class="speaker-name">Raymond:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1339.130000" data-stop="1343.074000">Well, you know that you're a good Emacs user if</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1343.595000" data-stop="1346.498000">you start using the Emacs key bindings in other</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1346.558000" data-stop="1347.118000">programs.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1347.699000" data-stop="1350.282000">You know, how many times I've used C-y to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1350.342000" data-stop="1354.226000">paste something in, you know, my web browser.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1354.907000" data-stop="1355.428000">Oh, boy.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1356.309000" data-stop="1357.890000"><strong class="speaker-name">Sacha:</strong>  Yeah, it's not the C-y that gets</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1357.951000" data-stop="1358.051000">me.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1358.091000" data-stop="1360.754000">It's the C-w because that closes your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1360.794000" data-stop="1362.015000">browser down.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1361.995000" data-stop="1364.782000"><strong class="speaker-name">Raymond:</strong>  Yeah, oh yes, that can be dangerous.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1365.884000" data-stop="1368.230000">But actually C-y can be bad too,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1368.290000" data-stop="1372.380000">because it's like the redo function in a lot of</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1372.420000" data-stop="1372.942000">programs.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1373.162000" data-stop="1375.127000">So if you've undone something,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1376.491000" data-stop="1377.793000">and then you redo it,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1377.813000" data-stop="1380.457000">you can get very confused very quickly.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1380.698000" data-stop="1383.663000">Anyway, so this is a neat thing to do.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1384.103000" data-stop="1385.706000">Some people might want to try that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1386.728000" data-stop="1387.669000"><strong class="speaker-name">Sacha:</strong>  Yeah, for sure.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1388.410000" data-stop="1391.035000">Having a super key means you can then go on and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1391.115000" data-stop="1392.537000">do other things with it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1392.637000" data-stop="1394.841000">You can have all these key bindings because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1394.941000" data-stop="1396.403000">nothing binds to the super key.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1396.524000" data-stop="1398.927000">So you can have all the single character key</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1398.948000" data-stop="1399.769000">bindings you like.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1400.430000" data-stop="1402.954000"><strong class="speaker-name">Raymond:</strong>  Exactly, yeah.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1403.000000">23:23</span> <strong>Org Mode class on Udemy, agenda custom commands</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1403.744000" data-stop="1407.690000"><strong class="speaker-name">Raymond:</strong> So I was taking, believe it or not, there's an</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1407.910000" data-stop="1409.732000">Org Mode class on Udemy.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1411.134000" data-stop="1414.920000">And it's... Rainer König did it.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1415.000000" data-stop="1416.522000">I don't know if I pronounced his name right.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1417.483000" data-stop="1426.997000">But he inspired me to do custom commands.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1428.679000" data-stop="1431.603000">So for example, if I want to look at all my bills</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1431.724000" data-stop="1432.705000">for the week,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1432.988000" data-stop="1435.091000">I would just press the b w.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1435.532000" data-stop="1436.734000"><strong class="speaker-name">Sacha:</strong>  Do you want me to move the window?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1437.475000" data-stop="1437.796000"><strong class="speaker-name">Raymond:</strong>  I don't know.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1437.836000" data-stop="1439.779000">Is there anything dangerous here?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1440.500000" data-stop="1443.685000">I'm not going to do it, but I'm just trying to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1443.745000" data-stop="1445.548000">point out my thing.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1445.989000" data-stop="1446.770000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1446.790000" data-stop="1449.614000">Different agendas for slicing and dicing your Org</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1449.694000" data-stop="1450.796000">data in different ways.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1451.517000" data-stop="1453.340000"><strong class="speaker-name">Raymond:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1453.761000" data-stop="1456.585000">Remember you pointed out earlier that my agenda</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1456.625000" data-stop="1459.570000">was jam-packed with stuff.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1459.718000" data-stop="1463.002000">The way I manage that is I came up with a way to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1463.302000" data-stop="1469.329000">easily apply the today tag to all those things.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1469.349000" data-stop="1473.514000">And I came up with some functions somewhere which</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1473.594000" data-stop="1480.642000">I bind to C-M-S-t. Let's see if I can find it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1481.883000" data-stop="1482.704000"><strong class="speaker-name">Sacha:</strong>  That is interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1482.764000" data-stop="1484.706000">So you're using a tag for the things you want to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1484.746000" data-stop="1485.507000">do today.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1485.824000" data-stop="1486.725000"><strong class="speaker-name">Raymond:</strong>  Yes.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1486.745000" data-stop="1488.508000"><strong class="speaker-name">Sacha:</strong>  Versus scheduling them, because if you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1488.548000" data-stop="1490.071000">schedule them for today, then they will still</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1490.091000" data-stop="1490.812000">show up tomorrow.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1492.494000" data-stop="1493.516000"><strong class="speaker-name">Raymond:</strong>  Well, yes, that's true.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1493.000000">24:53</span> <strong>Toggling tags
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-25-00-400.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-25-00-400.jpg" alt="image from video 00:25:00.400" data-time="00:25:00.400"></a><span class="audio-time caption" data-speaker="Raymond" data-start="1493.856000" data-stop="1496.380000"><strong class="speaker-name">Raymond:</strong> So yes, so these are the two functions I came up</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1496.440000" data-stop="1496.621000">with.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1497.722000" data-stop="1498.664000">Oh, you're toggling.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1499.685000" data-stop="1500.006000">What's that?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1500.386000" data-stop="1501.147000"><strong class="speaker-name">Sacha:</strong>  You toggle that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1501.228000" data-stop="1503.852000">You have something that lets you add or remove a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1503.892000" data-stop="1504.112000">tag.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1504.873000" data-stop="1507.698000"><strong class="speaker-name">Raymond:</strong>  Yes, yes.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1507.718000" data-stop="1508.399000">Yes, exactly.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1508.659000" data-stop="1511.403000">And maybe I could demonstrate that without</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1512.285000" data-stop="1513.907000">displaying too much stuff here.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1515.406000" data-stop="1521.277000">Okay, so here, so in the agenda, I'm a little bit</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1522.459000" data-stop="1524.302000">worried about updating.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1526.806000" data-stop="1528.710000">See, okay, so I don't know if you can see it, but</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1528.750000" data-stop="1531.174000">I just invoked it and then down here in a little.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1532.577000" data-stop="1532.957000"><strong class="speaker-name">Sacha:</strong>  Oh, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1533.839000" data-stop="1537.165000"><strong class="speaker-name">Raymond:</strong>  It says you have to press s r to save</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1537.225000" data-stop="1538.848000">and refresh the screen.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1539.740000" data-stop="1542.925000">And the reason why I didn't automatically refresh</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1542.985000" data-stop="1545.048000">and save files is because I think that's a</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1545.148000" data-stop="1545.989000">dangerous thing.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1546.370000" data-stop="1548.814000"><strong class="speaker-name">Sacha:</strong>  Yeah, because you've been removing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1548.874000" data-stop="1549.154000">things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1549.515000" data-stop="1550.075000">Okay, okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1550.436000" data-stop="1554.202000">But the idea there is you can turn the tag on and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1554.342000" data-stop="1557.607000">off from your agenda directly, which is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1557.667000" data-stop="1558.087000">interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1558.828000" data-stop="1560.150000">Yeah, it's there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1560.531000" data-stop="1563.756000">And you have a different view that shows you just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1563.796000" data-stop="1565.899000">the stuff you're focusing on for today.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1567.212000" data-stop="1571.016000"><strong class="speaker-name">Raymond:</strong>  And I have that bound to "C-c a .".</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1571.237000" data-stop="1572.398000">This is going to be small.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1574.000000" data-stop="1581.508000">So there on the top are my things for today.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1582.189000" data-stop="1584.692000"><strong class="speaker-name">Sacha:</strong>  Yeah, so different ways of prioritizing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1584.952000" data-stop="1588.897000">So your agenda is the stuff that you want to keep</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1588.997000" data-stop="1589.718000">on your radar.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1590.579000" data-stop="1593.582000">And the today stuff is the stuff like, okay, you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1593.602000" data-stop="1594.163000">got some time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1594.223000" data-stop="1596.105000">This is what you're actually going to work on.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1596.305000" data-stop="1597.288000"><strong class="speaker-name">Raymond:</strong>  Right, so.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1599.646000" data-stop="1601.348000"><strong class="speaker-name">Sacha:</strong>  Yeah, there are different ways to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1601.368000" data-stop="1601.768000">approach it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1601.808000" data-stop="1604.271000">Some people have a much more minimalist, okay, if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1604.331000" data-stop="1606.212000">it's on the agenda, it's because I want to do it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1606.253000" data-stop="1606.713000">that day.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1607.033000" data-stop="1608.855000">And then they have a different view showing them</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1608.895000" data-stop="1610.677000">the stuff that they want to keep on their radar.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1610.997000" data-stop="1612.539000">But the nice thing about Org Mode is that it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1612.579000" data-stop="1615.081000">accommodates all these different ways of working.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1615.101000" data-stop="1616.002000"><strong class="speaker-name">Raymond:</strong>  Yeah.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1616.000000">26:56</span> <strong>TODO states</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1616.022000" data-stop="1619.906000"><strong class="speaker-name">Raymond:</strong> And getting back to the Rainer's class on Org</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1619.926000" data-stop="1621.266000">Mode, you know, it's not like the way</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1621.267000" data-stop="1628.995000">Carsten Dominik set it up with the default tags of to-dos.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1628.975000" data-stop="1629.736000">What is it?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1629.756000" data-stop="1631.739000">To do, started, waiting.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1632.580000" data-stop="1636.765000">He does something a little bit different, but it</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1636.825000" data-stop="1637.386000">works for him.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1637.666000" data-stop="1640.470000">So I think that's kind of cool too.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1641.000000">27:21</span> <strong>Functions for Org Agenda
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-28-06-200.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-28-06-200.jpg" alt="image from video 00:28:06.200" data-time="00:28:06.200"></a><span class="audio-time caption" data-speaker="Raymond" data-start="1641.211000" data-stop="1642.793000"><strong class="speaker-name">Raymond:</strong> And by the way, you need two functions.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1643.153000" data-stop="1646.257000">You need one that works in an Org file and</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1646.337000" data-stop="1649.982000">another one in the agenda because they don't work</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1650.042000" data-stop="1650.763000">the same way.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1651.334000" data-stop="1656.542000"><strong class="speaker-name">Sacha:</strong>  I have some functions that act that way,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1656.562000" data-stop="1658.846000">and I usually end up checking if the major mode</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1659.427000" data-stop="1661.230000">is derived from the Org agenda.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1661.250000" data-stop="1663.994000">And then there's an with Org agenda.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1664.415000" data-stop="1667.159000">There's a macro that lets you run the code in the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1667.200000" data-stop="1668.281000">context of the task.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1668.882000" data-stop="1671.647000">So if you needed to kind of switch those</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1671.687000" data-stop="1672.909000">together, it's possible.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1673.470000" data-stop="1675.212000">But you already have something that works, so</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1675.253000" data-stop="1676.194000">it's fine.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1676.174000" data-stop="1678.216000"><strong class="speaker-name">Raymond:</strong>  Yeah, and it's easy because, you know,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1678.236000" data-stop="1682.161000">I copied this from some existing function like,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1682.701000" data-stop="1685.825000">you know, when you press Z, for example, it</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1686.205000" data-stop="1687.146000">creates a note.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1687.166000" data-stop="1690.790000">So you can leverage that code and write your own</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1690.850000" data-stop="1692.212000">code instead.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1692.932000" data-stop="1697.597000"><strong class="speaker-name">Sacha:</strong>  It's called org-agenda-with-point-at-orig-entry.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1697.617000" data-stop="1698.619000">It does the thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1699.419000" data-stop="1701.181000">You know, this part that you're doing at the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1701.221000" data-stop="1703.564000">moment with manually finding the marker and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1703.944000" data-stop="1705.506000">jumping to it and all that stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1706.718000" data-stop="1708.520000">In the future, if you find yourself writing one</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1708.540000" data-stop="1709.602000">of these agenda functions.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1711.884000" data-stop="1712.005000"><strong class="speaker-name">Raymond:</strong>  Yeah.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1714.000000">28:34</span> <strong>exeln, shellfn: executing things in DOS
</strong></div><p></p><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-29-15-767.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/ec23-raymond-zeitler-00-29-15-767.jpg" alt="image from video 00:29:15.767" data-time="00:29:15.767"></a><span class="audio-time caption" data-speaker="Raymond" data-start="1714.428000" data-stop="1716.230000"><strong class="speaker-name">Raymond:</strong> So what else do I have here?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1717.932000" data-stop="1720.655000">Oh, so sometimes I just like to execute.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1720.936000" data-stop="1724.800000">So I do a lot of batch files or scripts, and I'll</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1724.881000" data-stop="1731.268000">just do C-c x to send that particular line</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1731.429000" data-stop="1734.953000">to the DOS prompt just to execute it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1735.760000" data-stop="1736.942000"><strong class="speaker-name">Sacha:</strong>  Oh, execute line.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1736.962000" data-stop="1739.725000">Okay, so that's what EXELN means.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1740.206000" data-stop="1740.587000">That's cool.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1740.607000" data-stop="1745.634000">So it's basically you can evaluate things without</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1745.694000" data-stop="1747.636000">having to switch and paste and switch and paste</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1747.676000" data-stop="1748.858000">and all that stuff.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1748.878000" data-stop="1749.259000"><strong class="speaker-name">Raymond:</strong>  Yes.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1749.879000" data-stop="1752.263000">And just to demonstrate, if I wanted to do the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1752.323000" data-stop="1753.264000">dir command.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1756.308000" data-stop="1760.434000"><strong class="speaker-name">Sacha:</strong>  It's like an eval-last-sexp, but for DOS.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1760.735000" data-stop="1764.420000">Yeah, so this is... And hats off to you for,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1764.440000" data-stop="1766.563000">like, batch scripting with DOS.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1766.884000" data-stop="1769.428000">I'm very spoiled with my bash and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1769.508000" data-stop="1771.411000">zsh, but you're in Windows and you're making</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1771.471000" data-stop="1771.791000">it work.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1772.552000" data-stop="1772.833000"><strong class="speaker-name">Raymond:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1774.074000" data-stop="1778.260000">Which is like a handicap, isn't it?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1778.701000" data-stop="1785.912000">And then I can just send the whole buffer to the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1785.972000" data-stop="1788.375000">command prompt, which I think now there's a</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1788.435000" data-stop="1788.936000">function</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1789.372000" data-stop="1791.735000">that don't really does that, you know, out of the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1791.776000" data-stop="1795.800000">box. Maybe not.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1795.801000" data-stop="1799.467000">And then if I wanted to insert the date, you</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1799.487000" data-stop="1801.289000">know, just some easy stuff like that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1801.430000" data-stop="1803.913000"><strong class="speaker-name">Sacha:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1803.933000" data-stop="1804.274000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1804.294000" data-stop="1805.556000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1805.796000" data-stop="1806.657000">I recently added this insert date and time</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1806.717000" data-stop="1808.400000">thing as an abbrev,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1808.420000" data-stop="1810.863000">So I just type it and that frees up more of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1810.903000" data-stop="1812.165000">my key bindings for other things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1812.926000" data-stop="1813.027000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1813.047000" data-stop="1814.308000">But it's surprising.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1814.328000" data-stop="1816.612000">You always find yourself wanting to refer to the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1816.652000" data-stop="1827.759000">time and that way you don't have to look.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1827.000000">30:27</span> <strong>Middle mouse click</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1827.760000" data-stop="1829.635000"><strong class="speaker-name">Raymond:</strong>  I don't remember how Emacs treated the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1830.296000" data-stop="1833.099000">scroll wheel or the middle mouse button, but I</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1833.180000" data-stop="1834.641000">found that this was very useful.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1837.585000" data-stop="1842.631000">I believe what you can do is click the mouse.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1842.731000" data-stop="1843.652000">Let's see what happens.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1845.014000" data-stop="1848.218000">It pasted what I had there.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1848.400000" data-stop="1849.061000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1849.081000" data-stop="1852.185000">I think middle is usually paste, but it sounds</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1852.266000" data-stop="1854.328000">like you've got it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1854.549000" data-stop="1855.009000">Oh, okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1855.049000" data-stop="1858.494000">So, so you, you can scroll if you're dragging,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1858.595000" data-stop="1861.358000">but you can also click, just middle click to paste.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1861.579000" data-stop="1861.959000">Yes.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1863.021000" data-stop="1863.221000"><strong class="speaker-name">Raymond:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1863.241000" data-stop="1863.842000">So it's fun.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1864.563000" data-stop="1871.492000">There are some things that down-mouse-2 does,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1871.493000" data-stop="1874.357000">and I'm not able to do that now.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1874.337000" data-stop="1879.789000">I think, for example, spell checking, if you</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1879.829000" data-stop="1881.994000">want to correct a word at point, I think the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1882.034000" data-stop="1885.441000">command is to do the mouse-2 button, but I no</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1885.501000" data-stop="1890.051000">longer can do that. But that's okay.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1891.128000" data-stop="1894.091000"><strong class="speaker-name">Sacha:</strong>  Over 20 plus years of Emacs, I'm sure</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1894.832000" data-stop="1897.094000">parts of your workflow have come in and out of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1898.235000" data-stop="1900.297000">viability as things change.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1901.278000" data-stop="1905.422000">I feel like Emacs does make more of an effort to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1905.462000" data-stop="1908.885000">keep things pretty stable for the most part,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1909.146000" data-stop="1911.768000">hence all the contortions that new Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1911.808000" data-stop="1914.031000">development has to do in order to keep things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1914.071000" data-stop="1919.899000">working but also adapt to the times.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1919.000000">31:59</span> <strong>Keybindings in other apps: Vivaldi</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1919.900000" data-stop="1922.304000"><strong class="speaker-name">Raymond:</strong>  I think I mentioned before how I</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1923.806000" data-stop="1927.311000">co-opted the ability to switch tabs.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1927.352000" data-stop="1931.037000">I got the idea from the web browser and</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1931.377000" data-stop="1932.899000">incorporated it into Emacs.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1932.919000" data-stop="1935.343000">But I've started to do the opposite.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1935.904000" data-stop="1942.253000">So if you do C-k, which deletes anything</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1942.293000" data-stop="1945.958000">from point to the end of the line...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1946.360000" data-stop="1949.163000"><strong class="speaker-name">Sacha:</strong>  Yeah, you've up-cased a bunch of things.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1949.184000" data-stop="1951.106000"><strong class="speaker-name">Raymond:</strong>  Yes, I am going to have to close this</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1951.266000" data-stop="1953.148000">because I'm really scared now.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1953.189000" data-stop="1954.410000"><strong class="speaker-name">Sacha:</strong>  revert-buffer, maybe?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1957.093000" data-stop="1957.594000">Or undo?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="1959.476000" data-stop="1960.878000"><strong class="speaker-name">Raymond:</strong>  Yes, I'm trying to do undo.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1960.898000" data-stop="1963.161000">That's what I meant to do.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1963.181000" data-stop="1963.582000">We're back.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1964.242000" data-stop="1964.663000">There we go.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1965.544000" data-stop="1969.769000">So, yeah, because I did C-x C-u</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1969.829000" data-stop="1970.410000">instead of...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1971.655000" data-stop="1972.015000">whatever.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1973.056000" data-stop="1978.001000">So what I've decided to do then is if you're</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1978.101000" data-stop="1980.963000">using a web browser and you're opening new tabs,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1981.043000" data-stop="1988.750000">which I do, so I am able to bind a key and I'm</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1988.850000" data-stop="1993.555000">using control shift K to close all the tabs to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1993.575000" data-stop="1994.756000">the right of the current tab.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1996.397000" data-stop="1998.679000">So that's sort of like borrowing an Emacs</span> <span class="audio-time caption" data-speaker="Raymond" data-start="1998.960000" data-stop="2001.662000">keystroke and using it in my browser.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2004.086000" data-stop="2008.200000">[Sacha] How are you doing that? Are you using AutoHotkey</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2008.201000" data-stop="2011.560000">or does Vivaldi let you do that automatically?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2011.561000" data-stop="2014.033000"></span> <span class="audio-time caption" data-speaker="Raymond" data-start="2014.034000" data-stop="2021.302000">into the Settings - Keyboard shortcuts...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2021.960000" data-stop="2025.063000">So actually, I don't know how to increase the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2025.163000" data-stop="2026.044000">size of this.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2025.780000" data-stop="2026.864000"><strong class="speaker-name">Sacha:</strong>  That's fine. We can see it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2026.985000" data-stop="2029.407000">People can go open up Vivaldi if they're curious.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2029.767000" data-stop="2031.288000">But the idea there is you get used to these</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2031.369000" data-stop="2034.511000">conveniences or these ideas from Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2034.591000" data-stop="2036.233000">And now you're like, OK, I want to make my other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2036.393000" data-stop="2040.277000">apps feel at least a little bit this way.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2041.137000" data-stop="2042.178000"><strong class="speaker-name">Raymond:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2042.198000" data-stop="2045.481000">Yeah, so.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2046.162000" data-stop="2047.904000"><strong class="speaker-name">Sacha:</strong>  Yeah?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2048.024000" data-stop="2048.844000"><strong class="speaker-name">Raymond:</strong>  And I still keep learning stuff about</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2048.985000" data-stop="2050.565000">Emacs.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2050.000000">34:10</span> <strong>M-s M-w, eww-search-words</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2050.900000" data-stop="2053.203000"><strong class="speaker-name">Raymond:</strong> Believe it or not, I didn't know that you could</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2053.322000" data-stop="2058.270000">select a region and then do an internet search on</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2058.331000" data-stop="2059.753000">it, right?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2062.777000" data-stop="2063.697000"><strong class="speaker-name">Sacha:</strong>  Today I am learning.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2064.600000" data-stop="2067.824000">How do you select a region and do an internet</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2067.844000" data-stop="2068.304000">search on it?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2068.324000" data-stop="2074.994000"><strong class="speaker-name">Raymond:</strong>  So M-s M-w (Alt s and Alt w) is loading in EWW.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2075.695000" data-stop="2079.000000">And this is what Atomic Chrome Start Server is.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2079.368000" data-stop="2085.596000">And that's actually a Chrome extension that you</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2085.676000" data-stop="2092.885000">can... Okay, so if I go to some... Okay, okay.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2093.005000" data-stop="2095.248000"><strong class="speaker-name">Sacha:</strong>  It is EWW Search Words.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2096.668000" data-stop="2101.135000">Okay, good.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2101.155000" data-stop="2101.696000">Cool.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2102.737000" data-stop="2105.140000"><strong class="speaker-name">Raymond:</strong>  So if I go to your website now</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2105.677000" data-stop="2109.101000">and I want to type a comment, which I think I can</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2109.141000" data-stop="2109.561000">do, right?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2110.102000" data-stop="2111.903000"><strong class="speaker-name">Sacha:</strong>  Oh, I switched to just doing comments</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2111.923000" data-stop="2112.504000">through email.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2114.626000" data-stop="2117.229000">Because Disqus was getting all ads-y and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2118.010000" data-stop="2120.512000">annoying and tracking JavaScript and stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2120.532000" data-stop="2122.835000">So now it's like every post has an email me if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2122.875000" data-stop="2123.415000">you have thoughts.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2123.816000" data-stop="2125.758000">Sometimes it has a Mastodon link if I've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2125.838000" data-stop="2127.680000">remembered to post it to Mastodon beforehand.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2129.161000" data-stop="2129.862000"><strong class="speaker-name">Raymond:</strong>  So...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2130.871000" data-stop="2134.116000">What I'm trying to do is find a window that I can</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2134.176000" data-stop="2134.717000">type into.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2134.737000" data-stop="2136.579000"><strong class="speaker-name">Sacha:</strong>  There's a search box up there to the top.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2136.599000" data-stop="2139.023000">But basically, you're going to show us how you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2139.063000" data-stop="2142.448000">can take stuff from the browser and put it into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2143.089000" data-stop="2145.272000">Emacs for easier editing.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2145.292000" data-stop="2147.235000"><strong class="speaker-name">Raymond:</strong>  Yes.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2147.496000" data-stop="2149.719000"><strong class="speaker-name">Sacha:</strong>  All right.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2150.000000">35:50</span> <strong>Saving links with Org-store-link</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2150.480000" data-stop="2151.482000"><strong class="speaker-name">Sacha:</strong> Charlie has a question.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2151.562000" data-stop="2155.107000">So Charlie asks, do you use Org Mode protocol at</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2155.288000" data-stop="2157.691000">all for browser to Emacs interaction?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2157.711000" data-stop="2160.255000">If so, were there any complications to set it up</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2160.977000" data-stop="2161.678000">on Windows?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2163.781000" data-stop="2165.183000"><strong class="speaker-name">Raymond:</strong>  I don't.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2165.203000" data-stop="2167.667000"><strong class="speaker-name">Sacha:</strong>  Is there like bookmarklets for capturing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2167.968000" data-stop="2168.989000">or doing things?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2170.071000" data-stop="2171.433000"><strong class="speaker-name">Raymond:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2171.713000" data-stop="2172.354000">So, oh yeah.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2172.435000" data-stop="2173.636000">So capture is just a wonderful tool.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2173.817000" data-stop="2174.177000">Okay.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2174.197000" data-stop="2175.880000">So I'm not sure I'm</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2176.535000" data-stop="2180.406000">I can answer the question, but what I would say</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2180.908000" data-stop="2186.565000">is, let's say if I wanted to... Alright, let's</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2186.605000" data-stop="2187.026000">try this.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2187.086000" data-stop="2188.350000">This might not be too bad.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2190.187000" data-stop="2197.296000">So let's say I wanted to create a link to some ad.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2197.837000" data-stop="2202.583000">So no, I don't use EWW to capture the link.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2202.603000" data-stop="2205.567000">But I just learned out how you can do it.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2206.087000" data-stop="2214.318000">But if I wanted to go to another, all right,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2214.338000" data-stop="2216.361000">well, this is a silly example.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2216.421000" data-stop="2219.805000">But if I were to do just a help,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2222.519000" data-stop="2231.411000">Let's say, if I just wanted to find a place in</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2231.431000" data-stop="2239.341000">the info, in info, if I do C-c-L, it'll create</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2240.282000" data-stop="2243.366000">a link for me, and then if I wanted to here, put</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2243.406000" data-stop="2243.887000">that link.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2246.450000" data-stop="2249.134000">So it's already there in the mode line.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2249.536000" data-stop="2250.178000"></span> <span class="audio-time caption" data-speaker="Raymond" data-start="2250.479000" data-stop="2256.376000"></span> <span class="audio-time caption" data-speaker="Raymond" data-start="2256.396000" data-stop="2257.499000">And I can have that there.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2257.719000" data-stop="2262.553000">So this will go, and I'll close this help.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2262.573000" data-stop="2262.673000"><strong class="speaker-name">Sacha:</strong>  Okay.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2262.694000" data-stop="2264.238000"><strong class="speaker-name">Raymond:</strong>  And then if I click this, it'll open</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2264.278000" data-stop="2264.980000">back up.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2265.263000" data-stop="2267.486000"><strong class="speaker-name">Sacha:</strong>  So you use the org-store-link a lot.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2267.887000" data-stop="2270.571000">Do you use org-capture as well?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2271.672000" data-stop="2271.993000"><strong class="speaker-name">Raymond:</strong>  Yes.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2272.654000" data-stop="2275.418000"><strong class="speaker-name">Sacha:</strong>  I saw your keyboard, your key binding</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2275.478000" data-stop="2276.239000">for it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2276.259000" data-stop="2280.185000">But you don't necessarily have bookmarks or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2280.745000" data-stop="2285.172000">extensions in Vivaldi to do the capturing with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2285.192000" data-stop="2287.495000">the context from your browser.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2287.515000" data-stop="2289.398000">You'll just copy and paste the link manually.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2290.087000" data-stop="2290.767000"><strong class="speaker-name">Raymond:</strong>  Exactly.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2290.768000" data-stop="2293.939000">That sounds like fun, though.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2293.940000" data-stop="2295.594000">[Sacha] That's a nice thing about Emacs.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2295.614000" data-stop="2297.717000">There's always one more thing to tweak,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2297.797000" data-stop="2300.100000">one more thing to learn. You've been tweaking your</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2300.200000" data-stop="2302.203000">Emacs for a long time, and yet there's still more</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2302.243000" data-stop="2304.224000">to do, to fiddle with and explore.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2304.000000">38:24</span> <strong>How I got into Emacs</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2304.225000" data-stop="2310.253000"><strong class="speaker-name">Raymond:</strong> Yeah if you can think way, way, way, back, how did you</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2310.293000" data-stop="2311.555000">get into Emacs in the first place?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2312.395000" data-stop="2313.316000"></span> <span class="audio-time caption" data-speaker="Raymond" data-start="2313.336000" data-stop="2317.943000">So, you know, I was thinking about how my career,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2318.103000" data-stop="2321.148000">like the first half of my career, I've been using</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2321.168000" data-stop="2326.856000">an IBM PC and MS-DOS, and it was all command line</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2327.297000" data-stop="2328.338000">based.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2328.358000" data-stop="2331.643000">And as well, those machines were quite slow.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2331.663000" data-stop="2335.028000">So what we would often do is</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2335.008000" data-stop="2338.832000">Write batch files and basically have things</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2339.733000" data-stop="2341.935000">happen while we were away.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2342.896000" data-stop="2345.779000">Go and get a cup of coffee or leave for the day</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2345.839000" data-stop="2347.761000">and come back the next day and hope it was done.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2349.823000" data-stop="2355.088000">I was working with text files for 20 years.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2357.310000" data-stop="2359.732000">I had a really good text editor.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2359.772000" data-stop="2361.454000">It was called Brief.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2361.603000" data-stop="2365.813000">And it had a lot of nice features.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2365.913000" data-stop="2368.579000">It was, of course... You could record and playback</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2368.719000" data-stop="2370.704000">keystroke macros, right?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2370.744000" data-stop="2371.405000">Sounds familiar.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2372.067000" data-stop="2375.094000">It also had a scripting language.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2375.435000" data-stop="2376.577000">Of course, it had undo.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2376.878000" data-stop="2379.063000">But the nice thing I really liked about it is</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2379.083000" data-stop="2380.827000">that you could do column editing,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2381.330000" data-stop="2384.134000">right? So you could delete columns of text, or add</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2384.174000" data-stop="2386.717000">columns, or cut and paste and move them around, and</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2386.758000" data-stop="2390.262000">stuff like that. Because if you're using a lot of</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2390.403000" data-stop="2395.149000">csv files, it's really columnar</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2395.329000" data-stop="2398.534000">in nature. I guess I can't pronounce</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2398.574000" data-stop="2402.820000">that word. But when I moved to Windows,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2403.280000" data-stop="2406.104000">that text editor didn't work so well. It wasn't</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2406.164000" data-stop="2408.788000">very happy in a multitasking environment</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2409.595000" data-stop="2412.241000">And so I started looking around for stuff.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2413.565000" data-stop="2417.334000">I did find an editor actually that it had the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2417.374000" data-stop="2421.985000">same key bindings as brief, but it had one</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2422.065000" data-stop="2422.586000">problem.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2422.606000" data-stop="2425.393000">And if you open, for example, if you opened a</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2426.215000" data-stop="2427.418000">binary file,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2427.652000" data-stop="2431.236000">that had a null character, it would crash.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2432.056000" data-stop="2434.919000">So I don't know if that bothered me.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2434.999000" data-stop="2437.262000">So then I started looking around for another one.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2438.062000" data-stop="2441.786000">And then I guess it was in Usenet that somebody</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2441.846000" data-stop="2443.147000">said, why don't you try Emacs?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2443.948000" data-stop="2446.070000">As if I heard of it and decided not to.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2448.152000" data-stop="2450.335000">So I did, and I really liked it.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2450.815000" data-stop="2454.739000">So maybe I'm going to go back and search for that</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2455.293000" data-stop="2458.819000">conversation and thank the person.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2458.820000" data-stop="2465.919000">That'd be something I could put on my Org agenda.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2465.000000">41:05</span> <strong>Did it click for you right away or is it something that grew on you over time?</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2465.920000" data-stop="2468.383000"><strong class="speaker-name">Sacha:</strong>  Did it click for you right away or is it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2468.423000" data-stop="2470.087000">something that grew on you over time?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2472.232000" data-stop="2474.297000">I started right away with the tutorial</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2474.918000" data-stop="2479.322000">And I said, ah, this is crazy to have to do.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2480.083000" data-stop="2481.845000">And I don't even know how to navigate with the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2481.885000" data-stop="2483.206000">original key bindings.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2484.247000" data-stop="2487.771000">So I expected to be able to use the arrow keys.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2487.911000" data-stop="2489.492000">And I don't think it was set up that way.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2490.653000" data-stop="2493.156000">But then I stuck with it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2493.176000" data-stop="2496.699000">And like I said, I didn't adopt the CUA binding</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2497.440000" data-stop="2500.223000">or anything like that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2500.243000" data-stop="2504.487000">Yeah, and I just grew to learn it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2505.000000">41:45</span> <strong>Maybe my own theme?</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2505.310000" data-stop="2509.421000"><strong class="speaker-name">Sacha:</strong> I had thought about coming up with a theme for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2509.461000" data-stop="2511.406000">it, a different color theme.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2511.426000" data-stop="2513.090000">And I tried that for a while, but then when I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2513.190000" data-stop="2515.577000">would use a different mode, it just looked</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2515.617000" data-stop="2516.118000">terrible.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2516.238000" data-stop="2520.349000">So I'm keeping the same mode now.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2520.937000" data-stop="2523.240000"></span> <span class="audio-time caption" data-speaker="Sacha" data-start="2523.280000" data-stop="2525.122000">doing is they'll take something like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2525.123000" data-stop="2528.368000">modus themes and then they can change the colors of it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2528.408000" data-stop="2530.351000">without necessarily having to make all the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2530.811000" data-stop="2533.315000">mappings of, okay, this thing in this mode, you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2533.335000" data-stop="2534.577000">should use this kind of face.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2535.018000" data-stop="2536.900000">So if you still want to have your customized</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2536.940000" data-stop="2539.725000">colors, that might be an approach to consider.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2542.308000" data-stop="2543.750000"><strong class="speaker-name">Raymond:</strong>  Yeah. Going to stop sharing for a second.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2544.492000" data-stop="2546.839000"><strong class="speaker-name">Sacha:</strong>  Sure.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2546.000000">42:26</span> <strong>Other editors? Always Emacs</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2546.840000" data-stop="2549.811000"><strong class="speaker-name">Sacha:</strong> Did you ever flirt with other editors again after</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2550.231000" data-stop="2551.113000">getting into Emacs?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2551.213000" data-stop="2553.476000">Or has it basically been mostly Emacs for the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2553.516000" data-stop="2554.037000">last while?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2554.638000" data-stop="2556.380000"><strong class="speaker-name">Raymond:</strong>  Oh my gosh, how could you even say</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2556.440000" data-stop="2557.001000">such a thing?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2557.321000" data-stop="2560.085000">No, it never occurred to me to do that.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2560.406000" data-stop="2565.172000">But some of the guys were using Notepad++, which,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2566.154000" data-stop="2570.740000">you know, mine is the only computer with Emacs.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2570.760000" data-stop="2572.763000">But if I go to another computer, they have</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2573.013000" data-stop="2574.075000">No pad++.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2574.315000" data-stop="2575.357000">I would be using that.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2575.417000" data-stop="2576.378000">And it's nice.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2576.479000" data-stop="2579.083000">It has a tabbed interface so you can switch</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2579.183000" data-stop="2581.767000">between files very easily.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2581.787000" data-stop="2584.311000">But I've never considered switching to something</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2584.371000" data-stop="2584.511000">else.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2584.551000" data-stop="2588.618000">And even, you know, I took a vibe coding class.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2588.638000" data-stop="2593.546000">So they have you use VS code or anti-gravity or</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2593.586000" data-stop="2594.247000">something like that.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2595.068000" data-stop="2599.375000">And I'm thinking, wouldn't it be nice if I could</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2599.355000" data-stop="2603.065000">You know, switch to my Emacs editor and do the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2603.105000" data-stop="2605.411000">typing there and then switch back to anti-gravity.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2606.153000" data-stop="2607.457000">I don't know.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2607.477000" data-stop="2610.705000">But I hear some people are vibe coding with</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2610.826000" data-stop="2613.212000">Emacs, so I might look into that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2614.357000" data-stop="2616.500000"><strong class="speaker-name">Sacha:</strong>  Yeah, there's been an explosion of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2616.560000" data-stop="2618.442000">different ways that people are interacting with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2618.462000" data-stop="2619.123000">these systems.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2619.964000" data-stop="2622.226000">And of course, people are also totally welcome to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2622.266000" data-stop="2623.508000">keep using Emacs without it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2623.528000" data-stop="2627.012000">But if people are curious, as the usual Emacs way</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2627.052000" data-stop="2630.096000">of doing things, there are more than a handful of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2630.176000" data-stop="2632.979000">packages all with their different workflows.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2633.760000" data-stop="2634.901000">You'll find something that fits.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2635.702000" data-stop="2637.624000"><strong class="speaker-name">Raymond:</strong>  Yeah.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2637.000000">43:57</span> <strong>Package names</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2637.645000" data-stop="2642.090000"><strong class="speaker-name">Raymond:</strong> I wanted to ask you, speaking about EWW, do</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2642.110000" data-stop="2643.992000">people pronounce that ew?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2645.508000" data-stop="2648.915000">The thing about a lot of these packages, they</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2648.975000" data-stop="2652.061000">have these wonderfully self-effacing names.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2653.844000" data-stop="2656.970000">There's one called Dismal.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2657.892000" data-stop="2659.155000">That's the acronym for it.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2659.175000" data-stop="2661.539000">And it's Dismode Ain't Lotus.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2661.559000" data-stop="2663.363000">It's basically a spreadsheet.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2664.024000" data-stop="2667.010000">So I was just curious about that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2667.462000" data-stop="2669.145000"><strong class="speaker-name">Sacha:</strong>  I think we spend so much of our time</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2669.325000" data-stop="2671.749000">reading rather than you know hearing or talking</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2671.810000" data-stop="2674.214000">to people so then it's only in the middle of a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2674.294000" data-stop="2676.578000">conversation of a very rare conversation one can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2676.618000" data-stop="2679.603000">have about Emacs either on stream or in person</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2679.623000" data-stop="2682.588000">when you're like okay is it Magit or magic you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2682.628000" data-stop="2686.395000">know do I say ew but that that seems so rude ew</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2686.976000" data-stop="2691.023000">ew ew the Emacs web thing yeah sure</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2692.083000" data-stop="2694.005000"><strong class="speaker-name">Raymond:</strong>  And that's pretty new, isn't it?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2694.085000" data-stop="2694.605000">That mode?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2694.646000" data-stop="2698.129000">Because I remember doing W3 and then WW3.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2698.910000" data-stop="2699.791000"><strong class="speaker-name">Sacha:</strong>  There was a w3m</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2701.432000" data-stop="2702.573000">and elinks.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2703.394000" data-stop="2704.295000">I remember that too.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2705.076000" data-stop="2708.919000"><strong class="speaker-name">Raymond:</strong>  Links, I had a version of that on my,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2710.421000" data-stop="2713.404000">you know, like a DOS version of it, believe it or not.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2715.466000" data-stop="2717.668000">But it was very utilitarian, you know.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2718.138000" data-stop="2718.899000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2718.919000" data-stop="2721.983000">Sometimes you just want to browse the web or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2722.043000" data-stop="2724.686000">get the information without all the clutter that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2724.766000" data-stop="2727.249000">goes on and, you know, just like all the layouts</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2727.309000" data-stop="2728.711000">and the cookie pop ups and whatever.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2728.831000" data-stop="2730.873000">Just get me the stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2730.893000" data-stop="2731.074000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2731.795000" data-stop="2732.115000">Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2732.696000" data-stop="2734.017000"><strong class="speaker-name">Raymond:</strong>  Well, I do think I'm going to be</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2734.137000" data-stop="2739.484000">incorporating EWW more as I think it was Charles</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2739.524000" data-stop="2742.087000">who said, you know, creating a link</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2742.893000" data-stop="2747.143000">using C-c l to create that link and it</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2747.163000" data-stop="2749.549000">basically copies what's around it.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2751.654000" data-stop="2754.000000">I do see the usefulness of that.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2754.000000">45:54</span> <strong>What's next? Maybe auto maintenance</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2754.993000" data-stop="2757.935000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah, because org-capture and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2757.936000" data-stop="2760.339000">org-store-link can just pick up the context for you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2760.459000" data-stop="2762.261000">and then it's so easy to go back to things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2762.402000" data-stop="2762.822000">afterwards.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2763.142000" data-stop="2765.866000">I've also heard good things about org-remark.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2766.967000" data-stop="2769.370000">So that's something that's on my to-do list as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2769.410000" data-stop="2769.630000">well.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2770.251000" data-stop="2772.493000">There are always all these things to be curious</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2772.533000" data-stop="2773.274000">about and learn.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2774.115000" data-stop="2776.038000">What are you looking forward to exploring?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2776.058000" data-stop="2777.219000">So there's EWW.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2777.519000" data-stop="2779.602000">What's next for you in this Emacs journey?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2780.803000" data-stop="2782.485000"><strong class="speaker-name">Raymond:</strong>  Oh boy.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2783.157000" data-stop="2786.862000">I was thinking of using Org as a car maintenance</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2786.942000" data-stop="2788.624000">tool.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2789.245000" data-stop="2792.889000">And as you know, Org is great for scheduling and</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2793.350000" data-stop="2794.531000">projecting out things.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2795.392000" data-stop="2798.636000">The thing about auto maintenance, though, is a</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2798.697000" data-stop="2802.521000">lot of times something has to be done at a</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2802.581000" data-stop="2803.382000">certain mileage.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2803.402000" data-stop="2806.126000">Like every 5,000 miles, you have to rotate the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2806.166000" data-stop="2807.848000">tires, for example.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2807.828000" data-stop="2811.477000">If you're driving regularly, like maybe 100 miles</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2811.537000" data-stop="2813.562000">a week, you could say, oh, that's going to happen</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2813.642000" data-stop="2814.825000">in a year.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2814.845000" data-stop="2819.857000">But if you're driving as erratic, then you'll</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2819.937000" data-stop="2821.180000">probably want a way to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2821.936000" data-stop="2824.700000">download your mileage from the car.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2824.701000" data-stop="2826.433000">Cars are basically just computers, aren't they?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2826.434000" data-stop="2828.633000">I mean, they're computers that we drive around,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2828.634000" data-stop="2832.300000">or sometimes they drive us around, frighteningly so.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2832.301000" data-stop="2839.300000">I'm sure someone is thinking about or has already</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2839.301000" data-stop="2844.872000">come up with a link between a desktop computer and a car.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2846.067000" data-stop="2847.329000">Okay, I'm not seeing.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2847.970000" data-stop="2849.292000">Well, maybe.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2849.312000" data-stop="2851.395000">Maybe that's giving somebody an idea there.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2851.916000" data-stop="2855.502000">But maybe Lori Wired or something can come up</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2855.542000" data-stop="2856.704000">with that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2856.724000" data-stop="2859.088000"><strong class="speaker-name">Sacha:</strong>  And even, you know, even a manually</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2859.148000" data-stop="2861.331000">scheduled reminder, hey, you know, just write</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2861.371000" data-stop="2864.115000">down what your odometer says, and then some kind</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2864.156000" data-stop="2866.419000">of logic that takes a look at that reading and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2866.459000" data-stop="2869.163000">says, okay, it's past this threshold, schedule</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2869.203000" data-stop="2870.185000">this task.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2870.165000" data-stop="2872.307000">And have that done semi-automatically.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2872.327000" data-stop="2873.889000">Sounds really interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2874.470000" data-stop="2876.412000">Because then you could have all sorts of things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2876.452000" data-stop="2880.016000">to say, all right, I have this manually scheduled</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2881.838000" data-stop="2884.041000">recurring task to manually log something.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2884.462000" data-stop="2888.907000">But then it kicks off these processes that then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2889.547000" data-stop="2891.430000">surface all these other tasks that I should do.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2892.070000" data-stop="2892.531000">Could be fun.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2893.372000" data-stop="2895.294000">How would you do that?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2895.314000" data-stop="2896.155000">That sounds really cool.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2898.616000" data-stop="2900.257000"><strong class="speaker-name">Raymond:</strong>  So I don't know if I'll ever do that</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2900.317000" data-stop="2902.920000">because I'm pretty lax with my car maintenance</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2903.020000" data-stop="2905.782000">anyway.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2905.802000" data-stop="2907.784000"><strong class="speaker-name">Sacha:</strong>  It could be like every six months check</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2907.824000" data-stop="2909.606000">to see whether, you know, it's time.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2910.506000" data-stop="2910.987000"><strong class="speaker-name">Raymond:</strong>  Yeah, yeah.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2911.000000">48:31</span> <strong>Vibe-coding?</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2911.607000" data-stop="2915.130000"><strong class="speaker-name">Raymond:</strong> But I probably would try the vibe coding with</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2915.211000" data-stop="2916.292000">Emacs eventually.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2917.593000" data-stop="2919.775000">You know, every so often I see it on Reddit or</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2920.375000" data-stop="2922.077000">Stack Overflow.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2922.097000" data-stop="2923.958000">You know, somebody is trying this package or that</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2924.018000" data-stop="2924.399000">package.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2925.379000" data-stop="2927.121000">Yeah, it might be worth trying.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2927.962000" data-stop="2930.304000"><strong class="speaker-name">Sacha:</strong>  What are the challenges that people</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2930.685000" data-stop="2932.947000">sometimes find when it comes to vibe-coded stuff?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2933.368000" data-stop="2937.332000">It's great for the initial prototype, but once</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2937.372000" data-stop="2939.674000">you start digging into it, it's hard to modify it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2939.734000" data-stop="2942.036000">yourself, so then you become dependent on it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2942.056000" data-stop="2944.579000">And then, of course, the large language model</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2944.639000" data-stop="2946.341000">can't quite get some things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2948.643000" data-stop="2949.964000">How are you finding this so far?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2950.024000" data-stop="2951.806000">I mean, this is very early in your journey.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2951.926000" data-stop="2954.509000">I think you're still experimenting with it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2954.489000" data-stop="2958.248000">But do you find that it's working out for you?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2959.052000" data-stop="2961.343000">How is it with Emacs?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="2964.378000" data-stop="2966.081000"><strong class="speaker-name">Raymond:</strong>  It was just like you said, like it</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2966.121000" data-stop="2967.043000">just can't get it.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2967.063000" data-stop="2969.387000">Like I told it, well, fix this because I don't</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2969.427000" data-stop="2971.230000">like that format, and then it will do it</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2971.290000" data-stop="2971.851000">differently.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2972.572000" data-stop="2975.577000">And then, no, but it changed something else that</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2975.617000" data-stop="2978.002000">it was doing correctly, and I just couldn't get</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2978.062000" data-stop="2979.464000">it to work.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2980.265000" data-stop="2985.134000">And the other thing is, so the course that I was</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2985.214000" data-stop="2986.977000">taking, they wanted...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2986.957000" data-stop="2996.308000">Next.js</span> <span class="audio-time caption" data-speaker="Raymond" data-start="2997.065000" data-stop="3000.628000">And I just can't describe it.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3001.949000" data-stop="3004.071000">So I was trying to back up my computer one day</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3004.131000" data-stop="3008.094000">after installing it, and it's doing on and on in</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3008.114000" data-stop="3009.095000">like 20 minutes.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3010.316000" data-stop="3013.399000">Just because there's so many files and it's just</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3013.479000" data-stop="3013.859000">crazy.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3013.899000" data-stop="3019.003000">So I thought it was fun to try it, but I think</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3019.043000" data-stop="3021.365000">I'll just stick with what I know best.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3022.306000" data-stop="3023.267000"><strong class="speaker-name">Sacha:</strong>  In a way, I'm delighted.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3023.307000" data-stop="3024.368000">We've come full circle.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3024.448000" data-stop="3026.970000">Emacs is now the lightweight solution.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3028.283000" data-stop="3034.252000">It is a lot of fun.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3035.354000" data-stop="3036.997000">Emacs, less AI.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3037.177000" data-stop="3040.803000">AI is not quite at the fun point yet, I think.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3040.823000" data-stop="3044.348000">But I'm glad that there's still more to tinker</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3044.388000" data-stop="3045.250000">with and explore.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3046.011000" data-stop="3049.717000">I have about eight minutes before the kiddo runs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3049.797000" data-stop="3051.760000">out and starts lunch break.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3052.000000">50:52</span> <strong>Where people can find me</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3052.043000" data-stop="3058.014000"><strong class="speaker-name">Sacha:</strong> I'm guessing if people want to keep up with your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3058.074000" data-stop="3061.480000">adventures they can check your EmacsWiki page</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3061.520000" data-stop="3062.061000">for updates.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3062.142000" data-stop="3068.012000">You have some code shared on Codeberg and you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3068.052000" data-stop="3069.856000">mentioned your LinkedIn profile which is in my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3070.377000" data-stop="3073.542000">thing, but how can people keep up with what you're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3073.582000" data-stop="3073.883000">learning?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3075.044000" data-stop="3078.228000"><strong class="speaker-name">Raymond:</strong>  I'm surprised that people would want to.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3078.368000" data-stop="3079.169000"><strong class="speaker-name">Sacha:</strong>  I want to.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3079.409000" data-stop="3083.274000">I do not have an auto to maintain, but I have a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3083.314000" data-stop="3086.677000">cargo bike that I've got to keep up with also.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3086.738000" data-stop="3091.583000">So I'm very interested in these mileage-based task</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3091.643000" data-stop="3093.465000">reminders, if you work something out.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3095.408000" data-stop="3097.049000"><strong class="speaker-name">Raymond:</strong>  Yeah, I'm not pretty good about</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3097.991000" data-stop="3098.992000">publishing stuff.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3100.634000" data-stop="3101.074000">I don't know.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3101.134000" data-stop="3101.975000">That's a good question.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3102.235000" data-stop="3103.617000">I'll come up with something.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3103.968000" data-stop="3107.513000">Maybe I'll be more diligent pushing my updates to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3107.553000" data-stop="3110.077000">the Lisp Codeberg repository.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3110.478000" data-stop="3110.919000">I don't know.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3112.281000" data-stop="3114.063000"><strong class="speaker-name">Sacha:</strong>  Sometimes it just takes somebody saying,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3114.123000" data-stop="3116.327000">your stuff is interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3116.347000" data-stop="3118.150000">I'm telling you, your stuff is interesting.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3118.570000" data-stop="3119.432000"><strong class="speaker-name">Raymond:</strong>  Okay.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3119.452000" data-stop="3120.373000">Thank you so much.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3122.000000">52:02</span> <strong>Org Mode source blocks</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3122.378000" data-stop="3125.303000"><strong class="speaker-name">Raymond:</strong> By the way, I am using source code</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3125.343000" data-stop="3125.984000">blocks now.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3126.145000" data-stop="3129.170000">So like we talked earlier about executing the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3129.210000" data-stop="3132.917000">batch file, I can now put a little batch file</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3133.057000" data-stop="3136.303000">inside a source code and execute it that way.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3136.537000" data-stop="3140.726000"><strong class="speaker-name">Sacha:</strong>  You have those links in your heading and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3141.508000" data-stop="3144.615000">in your Org task bodies.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3145.076000" data-stop="3149.766000">I've been enjoying using Elisp and Shell link</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3149.826000" data-stop="3153.013000">types so that I can put in those partially</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3153.114000" data-stop="3154.697000">automatable things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3154.677000" data-stop="3158.168000">In my workflows, because sometimes you're like, I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3158.208000" data-stop="3159.131000">do have to do it manually.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3159.151000" data-stop="3161.077000">I just can't write a function to do everything.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3161.459000" data-stop="3163.485000">But at least they can document it step by step</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3163.545000" data-stop="3166.535000">and say, okay, do this, run this code block, you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3166.575000" data-stop="3168.180000">know, just do all that stuff.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3169.000000">52:49</span> <strong>Slideshows?</strong></div><p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3169.443000" data-stop="3171.046000"><strong class="speaker-name">Raymond:</strong>  And the other thing I'd like to try to</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3171.166000" data-stop="3176.254000">do is I know some people can create slideshows</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3176.655000" data-stop="3178.178000">with Emacs.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3178.578000" data-stop="3183.466000">And so that looks like it would be worth pursuing.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3183.526000" data-stop="3184.428000">I'd like to try that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3185.550000" data-stop="3186.572000"><strong class="speaker-name">Sacha:</strong>  Oh, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3186.872000" data-stop="3190.157000">Are you thinking of it for the history stuff that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3190.558000" data-stop="3192.441000">you're involved with or other things that you're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3192.461000" data-stop="3192.902000">teaching?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3193.186000" data-stop="3195.770000"><strong class="speaker-name">Raymond:</strong>  So I'm starting to present my</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3195.850000" data-stop="3198.113000">photography as a slideshow.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3198.133000" data-stop="3199.354000">And I thought I would try that.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3199.495000" data-stop="3203.620000">And now I see that Emacs can support images.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3204.081000" data-stop="3206.524000">I don't know how it would work as an export, but</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3206.845000" data-stop="3208.587000">I look into that now.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3209.148000" data-stop="3210.570000"><strong class="speaker-name">Sacha:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3210.590000" data-stop="3213.053000">And even, you know, the couple of times that I've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3213.494000" data-stop="3215.637000">wanted to use Emacs to create, you know, even</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3215.677000" data-stop="3219.502000">just a PDF of these pictures, just being able to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3219.582000" data-stop="3220.864000">automate that instead of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3221.317000" data-stop="3224.433000">pasting and resizing, it's like, ugh, don't do that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3224.434000" data-stop="3226.600000">that way, just have the computer do it for you,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3226.601000" data-stop="3230.233000">and Emacs is great for it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3230.000000">53:50</span> <strong>Emacs Chats?</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3230.234000" data-stop="3232.900000"><strong class="speaker-name">Sacha:</strong> I've been meaning to ask you, what is your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3233.020000" data-stop="3235.144000">viewership with these Emacs chats?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3235.164000" data-stop="3237.028000"><strong class="speaker-name">Raymond:</strong>  Are you starting to see a lot of</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3237.749000" data-stop="3239.072000">traction with that?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3239.238000" data-stop="3240.080000"><strong class="speaker-name">Sacha:</strong>  I have no idea.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3242.865000" data-stop="3244.689000">My goal here is just to get stuff out of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3244.729000" data-stop="3245.711000">interesting people's heads.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3245.852000" data-stop="3247.535000">Interesting stuff out of, yes, interesting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3247.575000" data-stop="3248.056000">people's heads.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3249.098000" data-stop="3253.728000">And I think mainly I'm using it as a way to keep</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3253.808000" data-stop="3255.732000">improving my transcription workflow.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3256.353000" data-stop="3257.937000">I guess I like to train everything into text</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3258.037000" data-stop="3259.019000">afterwards.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3259.039000" data-stop="3260.622000">That way it's searchable.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3260.602000" data-stop="3264.168000">But it's been really fun getting a sense of how</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3264.208000" data-stop="3266.672000">people are using it because we all have such</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3266.752000" data-stop="3268.075000">different workflows.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3268.095000" data-stop="3270.459000">And as I was saying in the beginning, you don't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3270.599000" data-stop="3272.382000">see that when you're looking at someone's config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3272.402000" data-stop="3275.527000">You're like, okay, I see that the code that sets</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3275.567000" data-stop="3278.653000">the key bindings, but how does it work together?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3278.673000" data-stop="3280.095000">And then seeing your Org file, I'm like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3280.278000" data-stop="3282.423000">Oh yeah, why am I not putting the links right</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3282.523000" data-stop="3284.508000">there so that I can just get to them from the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3284.568000" data-stop="3285.050000">agenda?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3285.591000" data-stop="3287.315000">Diary can do that?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3287.576000" data-stop="3293.089000">All that stuff is really, really interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3293.879000" data-stop="3297.464000">It's been great revisiting it after such a long</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3297.504000" data-stop="3299.626000">break, taking care of the kiddo.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3299.726000" data-stop="3301.328000">Now the kiddo is slightly more independent and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3301.529000" data-stop="3304.633000">even has moments where she's like, bye mom, I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3305.073000" data-stop="3305.894000">don't need any help.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3305.914000" data-stop="3307.777000">Like, okay, yes, I'm just going to do my Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3307.817000" data-stop="3308.538000">thing.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3308.678000" data-stop="3311.141000"><strong class="speaker-name">Raymond:</strong>  Asking for the car keys yet or not?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3311.161000" data-stop="3311.702000"><strong class="speaker-name">Sacha:</strong>  No, no, no.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3311.882000" data-stop="3313.804000">Also no car, but someday she's going to, you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3313.824000" data-stop="3316.127000">know, and she actually already likes to bike to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3316.288000" data-stop="3317.229000">the park on her own.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3317.769000" data-stop="3318.430000">So she's 10.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3318.490000" data-stop="3320.853000">She's not at the car level yet, but definitely in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3320.873000" data-stop="3323.236000">the biking and walking by herself, she's keen on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3323.317000" data-stop="3323.717000">that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3323.933000" data-stop="3328.860000">Gradually, independence for both of us and the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3328.880000" data-stop="3329.942000">ability to explore things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3330.282000" data-stop="3331.925000">I'm really liking these Emacs chats.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3333.066000" data-stop="3335.710000">With you and Shay Arison, who's also been a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3335.750000" data-stop="3338.434000">long-time reader, it's like this continuation of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3338.454000" data-stop="3342.360000">a conversation we've been having over decades now.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3342.480000" data-stop="3348.408000">I can't wait to see where this goes next.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3348.428000" data-stop="3352.354000">I've picked up a lot that I, again, would not have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3353.532000" data-stop="3356.667000">really understood just by looking at your EmacsWiki page</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3356.668000" data-stop="3358.700000">and I hope that other people watching</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3358.701000" data-stop="3361.333000">can also get a sense of, like, this is what it looks like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3361.334000" data-stop="3364.833000">in use. Sometimes people think oh, I need to make a video</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3364.834000" data-stop="3367.967000">that's going to be a snazzy demonstration</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3367.968000" data-stop="3370.300000">of this really technical setup,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3370.301000" data-stop="3373.836000">but sometimes it's just the little things that make your life better.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3375.537000" data-stop="3377.299000"><strong class="speaker-name">Raymond:</strong>  Well, I really want to thank you for</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3377.379000" data-stop="3381.804000">doing this, not just this Emacs chat, but just</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3381.944000" data-stop="3385.508000">having your web page and organizing all the Emacs</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3386.028000" data-stop="3386.709000">information.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3387.950000" data-stop="3389.992000">It's just been a wonderful resource.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3391.534000" data-stop="3391.955000"><strong class="speaker-name">Sacha:</strong>  Thank you.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3393.716000" data-stop="3397.140000">In the last two minutes I have before I get like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3397.160000" data-stop="3399.543000">"mom!",</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3399.000000">56:39</span> <strong>Other resources that would be nice to have</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3399.563000" data-stop="3401.585000"><strong class="speaker-name">Sacha:</strong> what kind of resources would you like to see</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3401.945000" data-stop="3402.646000">going forward?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3402.726000" data-stop="3405.409000">What would make your learning even better?</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3406.368000" data-stop="3409.132000"><strong class="speaker-name">Raymond:</strong>  Well, you know, it's just, you know,</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3409.152000" data-stop="3410.854000">just saying something that you did...</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3411.796000" data-stop="3415.561000">For example, when you were... So when I visited</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3415.601000" data-stop="3418.666000">your site and you showed how you could show the</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3419.307000" data-stop="3424.494000">time in someone's native time zone, right?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3424.514000" data-stop="3426.537000">Which is a wonderful thing, right?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3426.557000" data-stop="3429.962000">But I had my own time thing that I was wondering.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3430.042000" data-stop="3431.464000">Like, I wanted to know</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3432.355000" data-stop="3436.401000">if someone had a date, like May 21, what day of</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3436.461000" data-stop="3438.985000">the week is that?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3439.446000" data-stop="3442.030000">I know that I can't go on a meeting on Tuesday.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3442.090000" data-stop="3443.792000">I'm trippable.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3444.553000" data-stop="3447.959000">So I figured out a way you could select it and</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3448.079000" data-stop="3451.183000">send it to a custom search engine that searches</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3451.304000" data-stop="3455.350000">on DuckDuckGo AI and says, what day of the week</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3455.410000" data-stop="3456.091000">is this?</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3456.111000" data-stop="3457.393000">And just include the date.</span> <span class="audio-time caption" data-speaker="Raymond" data-start="3457.553000" data-stop="3458.835000">And it tells you.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3458.950000" data-stop="3460.432000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3460.452000" data-stop="3462.716000">It's nice to be able to modify things, not just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3462.796000" data-stop="3465.420000">in Emacs, but in browsers or anything else.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3466.121000" data-stop="3467.803000">And my personal approach for that date thing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3467.823000" data-stop="3469.185000">would be like, okay, I'm just going to do an</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3469.305000" data-stop="3474.794000">insert date, like a C-c C-! in Org.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3475.294000" data-stop="3477.217000">Because if I type in, you know, the part of the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3477.257000" data-stop="3480.102000">date that will get it to show up, it will include</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3480.142000" data-stop="3480.963000">the day of the week.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3480.983000" data-stop="3482.425000">But that only works in Emacs, of course.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3482.846000" data-stop="3484.468000">Everything should be in Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3485.849000" data-stop="3489.194000">So yeah, I guess one of these little workflows,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3489.294000" data-stop="3492.098000">oh, I just figured out something, sort of posts</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3492.218000" data-stop="3496.784000">can ripple out into other people imagining other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3496.844000" data-stop="3497.845000">things that they can do.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3498.266000" data-stop="3499.788000">And on that note, I'm going to wrap this up very</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3499.848000" data-stop="3500.209000">nicely.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3500.389000" data-stop="3503.133000">I will try to mark this as unlisted so I can see</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3503.173000" data-stop="3506.517000">if I accidentally let any of your passwords slip</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3506.577000" data-stop="3509.882000">past my 10-second panic window.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3510.503000" data-stop="3511.768000">You're okay with your coordinates.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3511.868000" data-stop="3512.370000">That's okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3513.494000" data-stop="3514.157000">Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3514.177000" data-stop="3514.538000">All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3514.658000" data-stop="3515.823000">Thank you so much, Ray.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3516.465000" data-stop="3516.987000"><strong class="speaker-name">Raymond:</strong>  Oh, thank you.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3517.128000" data-stop="3518.754000"><strong class="speaker-name">Sacha:</strong>  And I look forward to more conversations.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3519.236000" data-stop="3520.099000"><strong class="speaker-name">Raymond:</strong>  Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3520.540000" data-stop="3520.922000"><strong class="speaker-name">Sacha:</strong>  All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3521.082000" data-stop="3521.384000">Bye.</span> <p></p><span class="audio-time caption" data-speaker="Raymond" data-start="3521.765000" data-stop="3522.066000"><strong class="speaker-name">Raymond:</strong>  Bye bye.</span></div>
<p></p>


<a name="end-ec23-transcript"></a></details>
</div>
</div>
<div id="outline-container-emacs-chats-emacs-chat-23-emacs-chat-with-raymond-zeitler-chat" class="outline-3">
<h3 id="emacs-chats-emacs-chat-23-emacs-chat-with-raymond-zeitler-chat"><a href="https://sachachua.com/blog/feed/index.xml#emacs-chats-emacs-chat-23-emacs-chat-with-raymond-zeitler-chat">Chat</a></h3>
<div class="outline-text-3" id="text-emacs-chats-emacs-chat-23-emacs-chat-with-raymond-zeitler-chat">
<ul class="org-ul">
<li>sachactube: ​​This is for <a href="https://sachachua.com/blog/2026/05/em">https://sachachua.com/blog/2026/05/em</a>&hellip;</li>
<li>charliemcmackin4859: ​:D</li>
<li>charliemcmackin4859: ​do you use org-mode protocol at all for browser -&gt; emacs interaction? If so, was there any complication to set it up on windows?</li>
<li>charliemcmackin4859: ​I did slideshows a few times at a previous job with org-reveal. I liked it decently.</li>
<li>mtendethecreator: ​Hello sacha</li>
<li>phyzixlab: ​​Thank you both. Great interview</li>
</ul>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/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%2Femacs-chat-with-raymond-zeitler%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>Emacs Chat 22: Shae Erisson</title>
		<link>https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<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 url="https://archive.org/download/ec22-shae-erisson/ec22-shae-erisson.mp3"
               length="60081151"
               type="audio/mpeg" />
		<description><![CDATA[<div class="update" id="org249d216">
<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 preload="none" 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"><a href="https://sachachua.com/blog/feed/index.xml#emacs-chat-22-shae-erisson-chapters">Chapters</a></h3>
<div class="outline-text-3" id="text-emacs-chat-22-shae-erisson-chapters">
<p>
</p><ul class="org-ul">
<li><span class="audio-time" data-start="0.000" data-stop="7.759">0:00</span> Intro</li>
<li><span class="audio-time" data-start="57.200" data-stop="61.159">0:57</span> 1999, IRC, community building in Haskell</li>
<li><span class="audio-time" data-start="118.960" data-stop="122.959">1:58</span> Emacs as a light-weight build-your-own-editor toolkit</li>
<li><span class="audio-time" data-start="171.480" data-stop="175.679">2:51</span> LSP, treesitter, Magit, jujutsu, C++, Python, Haskell, rust</li>
<li><span class="audio-time" data-start="215.780" data-stop="218.319">3:35</span> how does a new person experience Emacs? Emacs is always fun.</li>
<li><span class="audio-time" data-start="243.800" data-stop="247.199">4:03</span> Markov keyboard project, moving to Finland, right-handed Dvorak, split keyboard; Jeff Raskin; I am not a koala</li>
<li><span class="audio-time" data-start="403.368" data-stop="405.159">6:43</span> Purpose-specific function keys</li>
<li><span class="audio-time" data-start="450.920" data-stop="454.039">7:30</span> Trackballs, scroll</li>

<li><span class="audio-time" data-start="494.160" data-stop="497.119">8:14</span> 1" trackpad rings</li>
<li><span class="audio-time" data-start="534.140" data-stop="538.559">8:54</span> Pair programming: ttyshare, shwim</li>
<li><span class="audio-time" data-start="793.040" data-stop="800.479">13:13</span> Recurse Center, "What is that keyboard? What is that editor?!", Emacs bankruptcy and starter kits</li>
<li><span class="audio-time" data-start="966.000" data-stop="969.359">16:06</span> hippie-expand</li>
<li><span class="audio-time" data-start="1034.320" data-stop="1038.999">17:14</span> yasnippet</li>
<li><span class="audio-time" data-start="1132.840" data-stop="1141.199">18:52</span> Function keys</li>
<li><span class="audio-time" data-start="1202.141" data-stop="1205.159">20:02</span> Org Mode</li>

<li><span class="audio-time" data-start="1274.500" data-stop="1277.800">21:14</span> Show Org agenda when idle</li>

<li><span class="audio-time" data-start="1318.120" data-stop="1323.760">21:58</span> Programmers want flow. When programming, light turns red</li>

<li><span class="audio-time" data-start="1465.840" data-stop="1467.000">24:25</span> ef-themes and modus-themes, season</li>
<li><span class="audio-time" data-start="1556.960" data-stop="1558.840">25:56</span> htmlize (does this still work on Wayland?)</li>
<li><span class="audio-time" data-start="1597.634" data-stop="1600.300">26:37</span> lsp-ui-imenu, jumping through rust code</li>

<li><span class="audio-time" data-start="1705.480" data-stop="1710.719">28:25</span> laptop with 126GB of RAM</li>
<li><span class="audio-time" data-start="1786.040" data-stop="1788.479">29:46</span> LSP coolness, Haskell, treesitter</li>
<li><span class="audio-time" data-start="1918.920" data-stop="1922.279">31:58</span> Combobulate</li>
<li><span class="audio-time" data-start="1966.200" data-stop="1972.259">32:46</span> What else are you using your 126 gigabytes of RAM for?</li>
<li><span class="audio-time" data-start="2005.521" data-stop="2007.859">33:25</span> TalonVoice</li>
<li><span class="audio-time" data-start="2085.020" data-stop="2086.119">34:45</span> NixOS, following Steve Purcell about 5 years behind</li>
<li><span class="audio-time" data-start="2103.440" data-stop="2106.639">35:03</span> envrc</li>
<li><span class="audio-time" data-start="2152.620" data-stop="2154.279">35:52</span> time-tracking</li>
<li><span class="audio-time" data-start="2221.060" data-stop="2225.232">37:01</span> taxes with Org Mode, remote lookup</li>

<li><span class="audio-time" data-start="2455.500" data-stop="2462.599">40:55</span> finding notes with C-s</li>
<li><span class="audio-time" data-start="2555.200" data-stop="2558.679">42:35</span> Org Mode, managing inbox</li>
<li><span class="audio-time" data-start="2788.180" data-stop="2790.099">46:28</span> Timestamps</li>
<li><span class="audio-time" data-start="2952.860" data-stop="2954.579">49:12</span> Org timers</li>

<li><span class="audio-time" data-start="3233.640" data-stop="3236.779">53:53</span> Org Mode snippets</li>
<li><span class="audio-time" data-start="3435.460" data-stop="3436.733">57:15</span> Compilation finish function: handle success</li>
</ul>

<p></p>
</div>
</div>
<div id="outline-container-org9521271" class="outline-3">
<h3 id="org9521271"><a href="https://sachachua.com/blog/feed/index.xml#org9521271">Transcript</a></h3>
<div class="outline-text-3" id="text-org9521271">
<details class="code-details"><a name="ID-ec22-transcript"></a><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/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson-00-07-37-067.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/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/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson-00-20-17-133.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/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/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson-00-21-23-933.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/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/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson-00-22-16-067.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/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/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson-00-24-41-000.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/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/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson-00-26-41-100.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/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/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson-00-37-09-900.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/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/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson-00-53-52-300.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/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/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson-00-55-39-300.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/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/2026/05/may-7-emacs-chat-with-shae-erisson/ec22-shae-erisson-00-57-48-300.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/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>
</details></div>
</div>
<div id="outline-container-emacs-chat-22-shae-erisson-chat" class="outline-3">
<h3 id="emacs-chat-22-shae-erisson-chat"><a href="https://sachachua.com/blog/feed/index.xml#emacs-chat-22-shae-erisson-chat">Chat</a></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>
<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>
		</item><item>
		<title>Emacs Chat 21: Amin Bandali</title>
		<link>https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<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 url="https://archive.org/download/ec21-amin-bandali/ec21-amin-bandali.mp3"
               length="69601008"
               type="audio/mpeg" />
		<description><![CDATA[<div class="sticky-toc" id="orge7bf929">
<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="org4c015a9">
<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 preload="none" 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"><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></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="audio-time" data-start="0.000" data-stop="11.559">0:00</span> Introduction: Amin Bandali, software developer and free software activist</li>
<li><span class="audio-time" data-start="65.280" data-stop="66.399">1:05</span> Aspects of life: notetaking, editing, multiple</li>
<li><span class="audio-time" data-start="180.640" data-stop="183.919">3:00</span> Configuration: keeping things simple</li>
<li><span class="audio-time" data-start="298.640" data-stop="303.159">4:58</span> user-lisp-directory, site-lisp if you're using an older Emacs</li>
<li><span class="audio-time" data-start="392.440" data-stop="395.239">6:32</span> Organizing configuration into modules</li>
<li><span class="audio-time" data-start="465.040" data-stop="469.159">7:45</span> early-init</li>

<li><span class="audio-time" data-start="546.180" data-stop="549.479">9:06</span> ring-bell-function</li>
<li><span class="audio-time" data-start="580.000" data-stop="581.759">9:40</span> performance optimizations</li>

<li><span class="audio-time" data-start="625.300" data-stop="627.500">10:25</span> user-lisp</li>

<li><span class="audio-time" data-start="674.220" data-stop="676.279">11:14</span> ignoring byte compilation warnings</li>
<li><span class="audio-time" data-start="715.240" data-stop="718.319">11:55</span> init-file-debug = &ndash;debug-init</li>

<li><span class="audio-time" data-start="773.200" data-stop="776.359">12:53</span> Core</li>

<li><span class="audio-time" data-start="833.580" data-stop="837.199">13:53</span> no longer using bandali-configure; scoping errors, timing execution</li>

<li><span class="audio-time" data-start="1022.760" data-stop="1026.728">17:02</span> Why not use use-package</li>
<li><span class="audio-time" data-start="1117.820" data-stop="1119.067">18:37</span> Defining multiple keybindings</li>

<li><span class="audio-time" data-start="1185.900" data-stop="1188.119">19:45</span> doric-oak uses emphasis instead of colours</li>

<li><span class="audio-time" data-start="1249.160" data-stop="1252.159">20:49</span> global font scaling instead of the local ones</li>

<li><span class="audio-time" data-start="1297.120" data-stop="1299.239">21:37</span> display-fill-column-indicator</li>
<li><span class="audio-time" data-start="1373.760" data-stop="1377.439">22:53</span> emacsclient for EDITOR and VISUAL</li>

<li><span class="audio-time" data-start="1417.760" data-stop="1418.719">23:37</span> fundamental-mode-hook</li>

<li><span class="audio-time" data-start="1463.580" data-stop="1465.319">24:23</span> indicate-buffer-boundaries</li>

<li><span class="audio-time" data-start="1596.420" data-stop="1598.600">26:36</span> enabling and disabling commands</li>

<li><span class="audio-time" data-start="1657.880" data-stop="1662.999">27:37</span> package-review-policy</li>

<li><span class="audio-time" data-start="1732.800" data-stop="1738.239">28:52</span> getting the Info files from the Emacs source directory</li>

<li><span class="audio-time" data-start="1785.120" data-stop="1786.600">29:45</span> recentf, adding directories</li>

<li><span class="audio-time" data-start="1898.440" data-stop="1901.759">31:38</span> Scrolling</li>

<li><span class="audio-time" data-start="1948.600" data-stop="1956.239">32:28</span> auto revert</li>

<li><span class="audio-time" data-start="1994.060" data-stop="1996.959">33:14</span> Repeat mode</li>

<li><span class="audio-time" data-start="2091.320" data-stop="2093.799">34:51</span> EXWM</li>

<li><span class="audio-time" data-start="2283.000" data-stop="2285.559">38:03</span> Audio setup</li>
<li><span class="audio-time" data-start="2350.280" data-stop="2355.399">39:10</span> keymaps for launching different applications</li>
<li><span class="audio-time" data-start="2389.300" data-stop="2395.639">39:49</span> bandali-call-interactively-insert</li>

<li><span class="audio-time" data-start="2546.720" data-stop="2549.639">42:26</span> workspaces</li>

<li><span class="audio-time" data-start="2626.380" data-stop="2630.439">43:46</span> ZSA Voyager split keyboard, super x as a single key</li>

<li><span class="audio-time" data-start="2786.840" data-stop="2788.839">46:26</span> Keybindings</li>

<li><span class="audio-time" data-start="2885.080" data-stop="2888.079">48:05</span> Media buttons</li>

<li><span class="audio-time" data-start="2983.280" data-stop="2985.959">49:43</span> exwm-input-simulation-keys!</li>

<li><span class="audio-time" data-start="3099.340" data-stop="3103.079">51:39</span> exwm: managing floating windows</li>

<li><span class="audio-time" data-start="3191.000" data-stop="3193.879">53:11</span> exwm: application-specific local simulation keys</li>

<li><span class="audio-time" data-start="3244.220" data-stop="3249.639">54:04</span> binding C-q to exwm-input-send-next-key</li>
<li><span class="audio-time" data-start="3268.580" data-stop="3271.239">54:28</span> Renaming buffers</li>

<li><span class="audio-time" data-start="3336.280" data-stop="3338.359">55:36</span> dunst for notifications</li>

<li><span class="audio-time" data-start="3414.540" data-stop="3415.999">56:54</span> exwm xsettings and responding to screen configuration changes</li>

<li><span class="audio-time" data-start="3539.880" data-stop="3543.359">58:59</span> Slowly getting back into Org mode</li>
<li><span class="audio-time" data-start="3598.160" data-stop="3601.319">59:58</span> chat notes</li>

<li><span class="audio-time" data-start="3652.140" data-stop="3654.759">1:00:52</span> Mode line</li>
<li><span class="audio-time" data-start="3709.320" data-stop="3710.319">1:01:49</span> display-buffer-alist</li>
<li><span class="audio-time" data-start="3743.481" data-stop="3744.619">1:02:23</span> TRAMP slowness, maybe disabling VC detection?</li>
<li><span class="audio-time" data-start="3819.240" data-stop="3822.959">1:03:39</span> eat</li>
<li><span class="audio-time" data-start="3907.180" data-stop="3909.999">1:05:07</span> TRAMP completion</li>
<li><span class="audio-time" data-start="4014.300" data-stop="4015.359">1:06:54</span> ffs: form feed slides, ^L</li>

<li><span class="audio-time" data-start="4174.820" data-stop="4176.799">1:09:34</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"><a href="https://sachachua.com/blog/feed/index.xml#current-notes-for-next-time-emacs-chat-21-amin-bandali-transcript">Transcript</a></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><a href="https://sachachua.com/blog/feed/index.xml#end-ec21-transcript">Skip to end</a><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"><a href="https://sachachua.com/blog/feed/index.xml#current-notes-for-next-time-emacs-chat-21-amin-bandali-chat">Chat</a></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="orga0d3d30"></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>
		</item><item>
		<title>June 18: Emacs Chat with Ross A. Baker</title>
		<link>https://sachachua.com/blog/2026/04/june-18-emacs-chat-with-ross-a-baker/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Wed, 22 Apr 2026 18:28:45 GMT</pubDate>
    <category>emacs</category>
<category>emacs-chat-podcast</category>
<category>emacs-chat</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/04/june-18-emacs-chat-with-ross-a-baker/</guid>
		<description><![CDATA[<p>
</p><div class="yt-video"><iframe width="456" height="315" title="YouTube video player" src="https://www.youtube-nocookie.com/embed/_tEcqbi_2o8?enablejsapi=1" frameborder="0" allowfullscreen="">nil</iframe><a href="https://youtube.com/live/_tEcqbi_2o8">Watch on YouTube</a></div>
<p></p>

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

<p>
On June 18, I'll chat with <a href="https://rossabaker.com/">Ross Baker</a> about Emacs and life.
</p>

<ul class="org-ul">
<li><a href="https://rossabaker.com/blog/">Blog</a>
<ul class="org-ul">
<li><a href="https://rossabaker.com/tags/emacs/">Posts tagged #emacs</a></li>
</ul></li>
<li><a href="https://rossabaker.com/configs/emacs/">Emacs config</a>
<ul class="org-ul">
<li><a href="https://rossabaker.com/configs/emacs/early-init/">Emacs Early Init</a></li>
<li><a href="https://rossabaker.com/configs/emacs/khlav-kalash/">Khlav Kalash Emacs</a></li>
<li><a href="https://rossabaker.com/configs/emacs/crab-juice/">Crab Juice Emacs</a></li>
<li><a href="https://rossabaker.com/configs/emacs/rab-starter/">Starter Emacs configuration</a></li>
</ul></li>
</ul>

<p>
This session will be recorded, and I'll update this blog post with notes.
<a href="https://sachachua.com/blog/2026/04/june-18-emacs-chat-with-ross-a-baker/">https://sachachua.com/blog/2026/04/june-18-emacs-chat-with-ross-a-baker/</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/04/june-18-emacs-chat-with-ross-a-baker/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F04%2Fjune-18-emacs-chat-with-ross-a-baker%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>Transcript: Emacs chat with John Wiegley</title>
		<link>https://sachachua.com/blog/2012/07/transcript-emacs-chat-john-wiegley/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Mon, 02 Jul 2012 12:00:06 GMT</pubDate>
    <category>emacs</category>
<category>Emacs Chat</category>
<category>org</category>
<category>podcast</category>
		<guid isPermaLink="false">https://sachachua.com/blog/?p=23536</guid>
		<description><![CDATA[<p>This post is long, so if you&#8217;re reading this on the main page, go to <a href="https://sachachua.com/blog/2012/07/transcript-emacs-chat-john-wiegley/">https://sachachua.com/blog/2012/07/transcript-emacs-chat-john-wiegley/</a> to view the full transcript!</p>
<p>Here&#8217;s the video.</p>
<p><iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/ytNsHmRLZGM" frameborder="0" allowfullscreen=""></iframe></p>
<p><a href="https://archive.org/download/20120612EmacsChatJohnWiegley/2012-06-12-Emacs-Chat-John-Wiegley.mp3">You can also download the MP3.</a><br>
</p>
<p><a href="http://vimeo.com/44778543">John Wiegley &#8211; June 26, 2012</a> from <a href="http://vimeo.com/user1851927">Sacha Chua</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<h3>A day in the life of John Wiegley</h3>
<p>Sacha: One of the things I’ve always been curious about is all the different things that you use Emacs for. You’ve been one of our role models for ages now, and clearly you do a lot of Emacs Lisp programming with it, but what’s a day in the life of John Wiegley like?</p>
<p>J: I spend the most of my time in Org and Gnus. All of my task management… I think I’ve processed over 5,000 tasks in Org mode now, since I started using it. I’m a very very heavy Org mode user. I’m always in Gnus, always checking my e-mail through that. I use ERC. I actually run a second Emacs. For my Mac, I built another Emacs under another name, and I use that Emacs just for running ERC. I use that in conjunction with bitlbee so that I’m always on IM, always on IRC, and also that’s my Twitter client as well. So that’s always running on the side as well. I spend a lot of time then in Eshell, all the programming modes… Most of my day work is in C and C++ when I’m not hacking elisp.</p>
<p>S: Why do you keep your ERC in a separate Emacs? To minimize distraction, or…</p>
<p>J: When I’m hacking on Emacs, I end up needing to restart it quite often. Many many times a day, sometimes. That’s because I never know which definitions… Sometimes you change a definition from a function to a macro or vice versa, and you don’t know which other definitions you have to reevaluate in order for them to inline the new definition. Rather than have to figure that out all the time, I just restart Emacs.</p>
<p>S: Hence your trick of making sure that everything’s compiled and that you’re requiring all the files you need so that it loads up cleanly.</p>
<p>J: I just recently fixed a problem in my .emacs and I discovered that compiling it was not giving me any speed benefit. I thought compilation was what was making my .emacs run so fast, and it wasn’t. It was that I was loading—when I was running a non-byte-compiled Emacs,I was loading things that I didn’t need to load. When I fixed that problem, which is now fixed in my .emacs repository, Emacs loads in just over a second, but without doing any byte-compilation in my Emacs.</p>
<p>S: I must definitely be doing something long, because my Emacs takes a while to load.</p>
<p>J: How long?</p>
<p>S: I don’t know. I tried using the profiling thing, and because I use the Emacs Starter Kit, it didn’t get very deep. It feels like ten seconds or so. It takes a while. I can’t be bouncing it up and down like you do.</p>
<p>S: So you do a lot of Emacs Lisp programming, naturally. You’re on ERC, and you’re doing C and C++ development. Are there other really weird things you do that people wouldn’t expect Emacs to handle?</p>
<p>J: Let me think… I use it to play chess online.</p>
<p>S: Yeah, there are so many games in there! I play Nethack in there, so… pot, kettle, black, here.</p>
<p>J: I use it to look at databases. I use it… Let’s see… I of course use TRAMP to edit not only files remotely, but also local files through sudo so that I can edit them. Weird things I do in Emacs… A mode I forgot to mention is that I use git for all the version control that I do, and so magit is a mode that I just basically live in. For any project that I’m working on, the magit buffer becomes the home buffer for that project, and I’m constantly looking at that buffer to see what work I’ve done, what work should be committed now.</p>
<p>S: I haven’t made that a big part of my workflow yet, but I’ve heard such good things about it.</p>
<p>J: It’s a very nice mode. I use it in conjunction with the built-in vc mode of Emacs. If I’m editing a file and I really quickly want to know what I’ve done to this file, I’ll do C-x v = to get the diff of the current file. If I want an overview of what have I been doing and what I have been touching, I’ll go to the magit buffer and look at the stats.</p>
<p>S: I guess you version-control your Org files too. How many Org files do you typically work with, and how do you manage that?</p>
<p>J: I have eight. All of my active tasks exist in a single Org file. The other seven Org files are all archives. I have an archive file for every project, even though the live project lives in the main TODO file. That way, when I do an Org search, it’s only at that time that it loads in all of the Org files to do the search. I need Org to be as quick as it can, since I’m basically modifying tasks and adding tasks to it as the days go on.</p>
<p>S: That could be it. I’ve got a humongous Org file and org-refile takes a while trying to parse it.</p>
<p>J: Yes, it does, it does. I use Dropbox to synchronize my Org-mode files to my iPhone because I use org-mobile. Another interesting tool I have found is that there’s an app for the iPhone called dropVox, which lets you take a voice note and it puts it into Dropbox. I have an Org-mode hook so that whenever I open my Org-mode buffer, if there’s an audio file in my Dropvox box, it will pop up Dired and show it to me, meaning “You should listen to this and add it as a note to your Org mode now.”</p>
<p>S: That’s awesome. That’s like If This Then That on steroids.</p>
<p>J: All during the day, new tasks are coming in. They’re either coming in by ideas, by e-mail, by webpages… I have a keybinding I use in Emacs. Since I don’t use M-m for anything else, M-m is my make-a-note keybinding. So, wherever I’m at, if I hit M-m, it will make an org-capture and it will link it to whatever I was on when I did the capture, and it will link it to whatever I was on when I did the capture. If I was on an e-mail, it links it to the e-mail. Well, there’s a tool for the Mac called Quick Keys, and Quick Keys lets you rebind things globally on your system. I’ve made it so that M-n works anywhere on the system and tries to be as intelligent as it can. If I’m looking at Chrome and I hit M-n, it will take me to Emacs, pop up the org-capture buffer, and then put a link over to the webpage that I was looking at.</p>
<p>S: Is that using org-protocol or just QuickKeys?</p>
<p>J: It’s not using org-protocol. It’s just using QuickKeys. The only thing QuickKeys is really doing is it’s switching over, and then I use AppleScript from Emacs to talk to Chrome and get the information. I actually use AppleScript quite a lot for many different things. Using AppleScript from Emacs is something I do often.</p>
<p>S: What are some of the other AppleScripty things you do with Emacs?</p>
<p>J: I don’t like to keep Dropbox running all the time because it takes lots of background CPU. At the end of a few days, when I look at my process list and I look at total time in the kernel spent by all the process, Dropbox is usually #2 behind the kernel itself. That’s a little egregious to me when I’m only using it once in a while. I have Applescript so that in Org Mode, when I say go get my mobile tasks, it starts up Dropbox, waits half a minute, and then stops Dropbox. So it’s just running enough time to do this synchronization. And of course, I use that async module that I told you about last week to do that work.</p>
<p>S: It sounds like you’ve got it quite integrated into the other things you use on your Mac. That’s fantastic.</p>
<p>J: Emacs is the center of my entire environment.</p>
<p>S: Being able to glue all these bits together and make things work… That’s incredible.</p>
<h3>On wishlists and Emacs Lisp</h3>
<p>S: What are some of things you wish you could glue together? What’s the John Wiegley to-code-some-point-in-the-future list?</p>
<p>J: I’d like it if Emacs had a foreign function interface so that I could talk directly to databases and other things. There’s a fork of XEmacs that can communicate directly with PostgreSQL, and something like that would be nice because there are some systems that I work with where it would just be faster and more efficient if Emacs could talk to those systems directly instead of me having to communicate with them over a process. Embedding a Python interpreter, or embedding a Ruby interpreter…</p>
<p>S: Vim is extensible in a couple of different languages now, isn’t it?</p>
<p>J: I do prefer Emacs Lisp. I have to tell you that probably of all the languages I’ve used, definitely, Emacs Lisp has been the most fun. I won’t call it the best language out there because it does have its downsides and it’s a little bit slow. I can’t use it for most general tasks. But it’s fun, because you see results immediately, the debugger’s easy to use, the documentation is great and completely available at the tip of your fingers. It may be true that I have written more new code in Emacs Lisp than in any other language by this time.</p>
<p>S: I wouldn’t be surprised.</p>
<p>J: I’ve worked on much bigger projects in C and C++, but those didn’t always involve spitting out reams and reams of new code. Whereas as the day goes by, I’m writing new Emacs Lisp functions usually left and right to get particular jobs done.</p>
<p>S: I’m always running into your name. Oh, Planner! Oh, remember! Oh, eshell!</p>
<p>J: Too bad not all of those projects succeeded as well as I’d hoped.</p>
<p>S: Going back to talking about org-capture and picking up an annotation really quickly… I remember when we were playing around with that. Finding ways to hook parts of Emacs into all the different parts of Emacs… It’s great to see so many people playing around with these ideas.</p>
<h3>The Emacs community</h3>
<p>J: It’s a great community. It’s a good culture around Emacs.</p>
<p>S: How did we end up with something as cool as this? Emacs is pretty unique among the software packages or open source tools I’ve seen. Vim users are pretty happy and they share a lot of tips, and on the other end of the spectrum there’s Eclipse, and there’s a ton of development work around Eclipse, but Emacs… it’s old, but lots of stuff is going on. Why?</p>
<p>J: My opinion on that would be is that the real success was the Lisp machine. The Lisp machine was an entire machine that was what Emacs is to editing. You sit down at your operating system and it doesn’t matter what you’re using – your editor, your shell, your document viewer, whatever – they’re all written in Lisp. You can modify them as you go. The documentation for anything is available as you’re looking at it. You can pop the system into a debugger at any time. Lisp machines may not have succeeded, but Emacs Lisp… Emacs took that environment and that idea, and brought it down to the domain of a single application, the editor. It gives us all the cool things about the Lisp machine: the fact that the debugger’s available all the time and the documentation is completely cross-linked with everything. I think that’s probably what we’re experiencing, and that’s why it’s so much fun.</p>
<p>S: … And the fact that you can get in, you can tweak just that little thing just a little bit, and eventually end up with this massive Emacs configuration because you’ve been tweaking it to fit you.</p>
<p>J: I have to say that the original designers and Dr. Stallman – they had a very good idea when they put in a lot of hooks throughout Emacs. There are other extensible systems out there in the world that are not as extensible because they lack sufficient degree of hookage inside, places where you can latch on a piece of code to execute when something happens. Emacs has got those everywhere. That plus its advising system lets you basically change the behaviour of anything or augment the behaviour of anything.</p>
<p>S: I have to confess it’s one of the things I like the way that Ruby on Rails will let you open up classes, redefine functions, and then continue on with your work. The extensibility built into the very language is very very helpful. It also can be very intimidating.</p>
<h3>Learning Emacs</h3>
<p>S: We’ve talked about this before. You’re maybe one of a few Emacs users over there. I’ll on occasion run into someone who’s curious about Emacs but hasn’t taken the plunge. How do we get more people interested in this stuff?</p>
<p>J: Well, getting them interested is not that hard. It&#8217;s getting them to climb the learning curve that&#8217;s difficult. My wife&#8217;s a physician, and she sees what I do with Org-mode. She&#8217;s been tempted to learn Emacs just to use Org-mode.</p>
<p>S: I hear a lot of stories like that.</p>
<p>J: But the learning curve is so enormous that she just doesn&#8217;t have the time to learn it.</p>
<p>S: At some point you were very much into Vi, and then you said, okay, we’re going to learn things the Emacs way. You just sat down and you did it. Is that something we expect people to sit down and do at some point? Have you come across any things that make it easier for people?</p>
<p>J: Not necessarily that make it easier for people, unfortunately. I think it’s a philosophy thing. I use Emacs. I’m in Emacs and I use Emacs probably 70% of my every working day. It pays dividends to master it. Every efficiency gain I get in Emacs, I get to make use of right away, and it pays off as the days go by. There are people who type for their living who don’t know how to touch-type. That, to me, is the exact same scenario. How can you make your living as an engineer, typing day in, day out, and yet lose the productivity that you would gain by learning to touch-type. Even learning to touch-type – yeah, it will take you a few weeks. You either use a piece of software or go to class, whatever. So there is a hump that you have to get over, and you may not have the time to get over that hump right now, but it’s an investment, and that investment will pay off.</p>
<p>S: Get to know your tools and get to know them really well, because you’re using them all the time. In terms of Emacs, Emacs being very very big and Emacs being something that moves very quickly, what are some of the things that you want to dig into and learn more about?</p>
<p>J: I would like to learn the C side of Emacs more. I’ve never known the C side of Emacs. I’ve just recently been looking at the bytecode interpreter and trying to learn how it does what it does to see if there are ways to get better performance into Emacs. That, for me, is the undiscovered country. That’s where I want to go next.</p>
<p>S: It does sound like a lot of deep magic. That’s the very core of it.</p>
<p>J: It’s not as crazy as it seems. It’s pretty well done on the inside. Emacs without all of its Lisp modes and packages on top of it, if you boil it down to just its essence… the kernel is not really that huge. It’s a very small, very tidy, simple thing. Of course, there are places where it has some rough edges that can be smoothed, but it’s not what people think of as Emacs. They think of this kitchen sink application that does absolutely everything. That’s a lot of Lisp stuff that goes around the little kernel, whereas the kernel is very tight and small. I want to know more about that because anything done in the kernel affects everything else.</p>
<p>S: If you ever get around to doing annotated source code, I’d definitely read that.</p>
<h3>Making money with Emacs</h3>
<p>S: I hear you’re kinda on the hook for eshell documentation or whatever else people would like you to write.</p>
<p>J: That’s true. There’s a reason why the eshell documentation was never written. This would be a whole different discussion. I have some misgivings about what kind of world the GPL would create if it was everywhere. I do a lot of my programming as a hobbyist, but I have to make money programming as well.</p>
<p>The way to make money through software is usually to sell it. Otherwise, if you make money only through services, that never takes off. If you make a piece of software and you license it, it can take off. It can start making money for you and you don’t have to work to earn every day. Then you can use that time that you now have to make more software.</p>
<p>If the only income that you ever made was based on services, then you basically have to be working all day long, and when would you ever get your hobby coding done? When you only have six to eight hours a day to do any coding at all (because there are things that we have to do), you want to have a setup where you can do as much creative coding as possible.</p>
<p>Since the GPL’s view of the world is that you get paid through the services and you get paid through the documentation, when I released eshell, my thought was, “Okay, I’ve written the code, the code is in the GPL, so it’s freely distributable and I can’t charge anyone for it, but if they want services around eshell, then they can pay me for that.” I have always told the community that if someone wants to step up and pay for it, I’ll write the eshell documentation. But that’s never happened. So if the community doesn’t value the eshell documentation enough to pay me to do it, then why would I spend the time that I could be spending coding to write it?</p>
<p>S: Do you know what kind of bounty system we have or something like that for lots of people to say, “I want to pitch in so and so much to e-shell documentation?” Do we have that?</p>
<p>J: Yeah, or a Kickstarter project, for example.</p>
<p>S: That would be cool.</p>
<h3>New users and Emacs happiness</h3>
<p>S: You’ve been an awesomely prolific Emacs Lisp programmer, so it would be interesting…</p>
<p>J: Well, it’s just that I’ve been doing it for so long. It’s been eighteen years now since the first package that I wrote and submitted to Emacs. I know! You were just a kid back then when I was writing align.el.</p>
<p>S: I was ten! I’ve used align.el.</p>
<p>J: Yup. It was made when you were ten.</p>
<p>S: Are you seeing a lot of other young people get interested in this stuff?</p>
<p>J: Sure! It’s basically if you’re not going to be using an IDE like Visual Studio or Eclipse or something, Emacs is still one of the two great editors out there. It’s either going to be you go with Emacs or you go with Vim. It still pulls in new people all the time.</p>
<p>S: There’s just so much. Once people start customizing it, they get sucked in. As you said earlier, there’s a lot of interest in Emacs from the nontechnical side of the world. Writing, scientific papers…</p>
<p>J: We’re getting a lot of new users just because of Org mode.</p>
<p>S: How many years ago was that? Now, it’s just grown into this massive thing where people are writing their research papers and they’re doing their data analyses in org-babel, and having something come out… Literate programming writ large.</p>
<p>J: I started using it in 2007 and I think it was a couple of years old by then already. I tried to drop Org-mode a couple of times. I was thinking, there are sexier-looking apps for the Mac. There are apps that have better and tighter integration for the iPhone. On two different occasions, I left, converted all of my tasks over to a different program, used that program for a few months, came back to Org… and I always felt happy to be back in Org. I don’t know what it is about it. It looks right. It feels right. It’s got the right balance between how finely you can enter and manipulate the information, and how coarsely you can look at it at a glance. Other applications that I used… I don’t know.</p>
<p>There was just something about them, but I wasn’t getting the tasks done. I would put all the tasks into the application and I’d be excited about it for a few weeks, and then after a couple of months, I just wouldn’t look at it any more. I would know that the tasks were in it, but I would never do anything about them. The way I use Org Mode, I use it like a day planner, so that every task I intend to do is scheduled for a particular day. I’m rescheduling tasks and moving them to new days every single day for years now, and it just never has felt like a burden. So there’s something that Org does right.</p>
<p>S: There’s the hack that you told me about the other time where you change your window size, so you watch it shrink as you finish your tasks.</p>
<p>J: I fit it to the window.</p>
<p>S: Little motivational hacks that you can do because you can play around with the tool itself. I remember when I was trying to learn through flashcards using flashcard.el, I rigged it up so that it would tell me a joke using fortune.el and everything I got something right. It was either that or show me a cute cat picture from the files I’d saved off icanhascheezburger. The fact that you can hack it to do all sorts of crazy things… that’s incredible.</p>
<p>J: I just started playing around with its ability to view PDF files. You can use C-x C-f to open a PDF file and you’ll see it in your Emacs. It renders them page by page as PNG files, and then uses the Imagemagick extension built into Emacs 24 to show you those pages. Which is useful to me because I’m often looking at a language specification as I’m writing code, and it’s nice to have it in another buffer the way that I would have Emacs documentation. I can look at the C++ standard now and have it just be in another buffer.</p>
<p>S: How did you come across this new capability, because I didn’t know about this?</p>
<p>J: I think I ran into it accidentally. I think I was in Dired mode and I hit return on a PDF instead of hitting ! to open it, and all of a sudden, there it was, and I was, like, “Wow, I didn’t know Emacs could do that…”</p>
<p>S: Basically, for people who want to learn things… Just do random things in Emacs!</p>
<p>J: Although if you’re going to do random things in Emacs, take notes. Otherwise, you’ll never know how to get back to what you found.</p>
<p>S: That’s what the lossage buffer is for, isn’t it?</p>
<p>J: The lossage buffer can be a bit hard to read, though.</p>
<p>S: Execute-extended-command?</p>
<p>J: I did find on Emacswiki a mode called Command Log. It keeps in a very readable form every command you use.</p>
<p>S: I definitely have to pick up this habit of yours of just reading Emacswiki.</p>
<p>J: That’s how I started learning. You asked about how people get over the learning hump. I’ll tell you what I did. Back in 1994, when I started really wanting to know Emacs, what I did was I printed out the Emacs manual, which at the time was I think seven or eight hundred pages. It was just single-sided paper. I probably killed a small tree doing it. But I brought that stack of papers over to my desk and I put it to the side. At the time, my machine was slow enough that I was often waiting for builds to finish. What I would do is while whatever was building on my machine, I would pick up the top page of the Emacs manual, I’d read it, and then I would throw it away. I just did that over several weeks’ time. I ended up reading the Emacs manual in all of this dead time that I had, waiting for compilations to finish. I made that a yearly habit for the first four years, just to constantly refresh my knowledge of what’s in there, because it’s such a massively huge environment. It helped.</p>
<p>S: My story is that I’ve used Emacspeak to synthesize the Emacs manual so that I can listen to it while walking around. I was reading my mail off Gnus at the time. You could use Emacspeak to read your mail and all of that stuff. You find all these ways to cram information into your brain. I would be up for more podcasts. I see people are coming out with books as well. There’s the Org mode book. That might be another way for you to do it, right? You write your documentation and you say, here’s a book that you can buy. But then it’s very speculative work, I suppose.</p>
<h3>Back to earning</h3>
<p>S: Speaking of other things that integrate into Emacs… Thank you for writing Ledger, by the way, because I still run all my finances with it. I have no idea where I’m going to find an accountant who understands Ledger…</p>
<p>J: Our biggest problem right now.</p>
<p>S: Either we put together a Kickstarter so that you end up writing a manual and accountants all over the world will be like, “This is awesome!”. Or I just learn how to use Quickbooks.</p>
<p>J: Ledger does have a manual. That was one I wrote the manual for. It’s also not GPLed.</p>
<p>S: There you go. There are ways to work around that… So your ideal is figure out how people can pay you for documentation because all the code is GPLed anyway. Are there other models that seem to be working for other people, other ways to make the awesome hackers that work on this stuff happy so that people can keep working on this cool stuff?</p>
<p>J: Not with Emacs hacking. I’ve been paid one time now to do a course on Emacs because my company does training, and Emacs training is one of things that we do offer.</p>
<p>S: You should definitely explore that remote training aspect.</p>
<p>J: We’re looking into that. I believe that is the only time in my life that I have earned money just because of Emacs. So it hasn’t paid for itself monetarily, but it’s paid for itself in other ways.</p>
<p>S: In terms of efficiency, being able to do all these things and fly through that. Anyway, that might be an interesting challenge for us also, figuring out how we can get more Emacs geeks to be rich and famous.</p>
<p>J: That’ll be the day.</p>
<p>S: Imagine if we had an Emacs app marketplace?</p>
<p>J: Yeah, seriously… Wow. Just propose that idea on the mailing list and see what a flamewar that would begin.</p>
<h3>The developer community</h3>
<p>S: But it is very nice to be able to play around with all these packages, and there are thousands… A lot of them will go and look for ways to integrate with each other, like the way BBDB integrates with Gnus.</p>
<p>J: That’s another one that I use. And there’s always new stuff coming out, and authors are very good about interacting with each other. The author of helm just recently incorporated using my async module that I wrote. He did that just in a matter of a few days. Since helm is something I rely upon on all the time, I’m very happy to see that.</p>
<p>S: That’s actually one of the challenges I came across when it came to writing documentation or writing a book about Emacs, especially the modules that people are working on. The packages, right? You share an idea, and the maintainers would be, like, “That’s an excellent idea!” and they would fold it in. So I kept running out of book topics! That’s a good thing about the community. It moves so fast.</p>
<p>J: If people are looking to know Emacs better, they should also stop by the IRC channel. I’m there every day, and a lot of people there can give good help if you have questions.</p>
<p>S: Yeah. It only looks off-topic from time to time, but if people show up with Emacs questions…</p>
<p>J: It also depends on the time of day, too.</p>
<p>S: Do evenings tend to work for you? When do people usually hang out there?</p>
<p>J: I’m a night coder, so that’s when I’m there, but people are there all around the clock.</p>
<p>S: I tend to drop by in the evenings too, when I remember to do that. ERC makes it so easy because it’s just there.</p>
<p>J: Yeah, I haven’t seen you there that often. You should come by more.</p>
<p>S: I know.</p>
<p>J: I always see you at the very end of my night, what would be dawn for most people. That’s when you usually come in.</p>
<p>S: That’s funny. I’ve got to work on my timing. One of the things I want to do is figure out if we can have a regular Google Hangout or whatever, right… It’s easy to do screen-sharing through that and you can have multiple people, so, if we just get people together and say, “What have you learned about Emacs lately?” then it’s slightly more visual than IRC.</p>
<p>J: There’s also Twitter. A lot of people use that to talk about new stuff they’ve found in Emacs.</p>
<p>S: Yeah, I’ve seen a couple of people tweeting really short Emacs tips, and it’s great to see that kind of stuff going on. I remember people used to have Emacs tips in their e-mail signatures as well. All these little ways to increase randomness. Emacs is so huge that if you just find little ways to say, “Oh, hey, there’s this new feature” or “There’s this interesting command over here,” who knows what it’ll spark?</p>
<p>J: There’s too much good stuff.</p>
<h3>More tips for new people</h3>
<p>S: So you recommend that if people are new, they should check out the IRC channel, EmacsWiki…</p>
<p>J: Go through the Emacs tutorial first. Then stop by the channel, read the Emacs manual, pick something you want to accomplish with Emacs and focus your learning around making that happen, rather than taking on the task of trying to swallow the whole thing right up front.</p>
<p>S: People will easily divide into… You want to do programming, check out the EmacsWiki pages on the respective languages. If you want to do text editing or the subspecies of research paper editing or whatever else, then there are pages for that too.</p>
<p>J: There’s always more stuff out there than you’re aware of. I’ve been trying to make myself aware of everything that’s out there, and I keep running into new stuff on a daily basis. Just yesterday I found swank-js, which lets you interact with the Javascript interpreter inside your browser as a REPL. You can connect to Firefox and be manipulating the webpage through an Emacs REPL using Javascript. Isn’t that crazy? If I were doing web development, I could see that that would just be invaluable.</p>
<p>S: I will go have to check that out. You’ve also mentioned a couple of other Emacs blogs, like Mastering Emacs… Is that one syndicated on Planet Emacsen yet?</p>
<p>J: I don’t know. I’m not sure if I have… I aggregate all of my feeds in Gnus into a virtual group, so I’m never aware of the actual source of any feed, I just get presented with one group that has all the current happenings in Emacs.</p>
<h3>Emacs blogs and reading with Gnus + Gwene</h3>
<p>S: Someday we should totally get your OPML and cross-reference it with everything that’s syndicated there.</p>
<p>J: That’s true. That wouldn’t be a bad project, maintain an OPML file of all the Emacs feeds out there on the Net, because I would love to keep my list updated. I went through and did a search through Gwene to see all the feeds that it had syndicated, which is of course not all the feeds that are out there. I did that two years ago, so there have been new feeds since.</p>
<p>S: I’ll take that away as a TODO and see if Planet Emacsen will have all these things… Who was that in charge of it? Edward, Edward O’Connor.</p>
<p>J: Yeah, that’s right. So any time you find a new feed, add it to Gwene. That way, anyone who goes to the Gwene server with Gnus can just do a search for all groups matching to Emacs and subscribe to them all.</p>
<p>S: With Gwene, when you reply, does it get posted as a comment too?</p>
<p>J: I’ve never replied to anything on a Gwene server, so I have no idea what it does.</p>
<p>S: Yeah, it would be tricky to make it that smart. It would be cool, but it would be tricky.</p>
<p>J: There are so many blogging platforms and some require authorization and some have CAPTCHAs… It would be tough. I really thank Lars for setting that server up, because it allows me to digest a lot of news about Emacs in a very short period of time each day.</p>
<h3>Dealing with data overload</h3>
<p>S: What are some of your other massive-amounts-of-information-how-do-I-deal-with-this tips?</p>
<p>J: You mean just coping with data overload?</p>
<p>S: Whether it’s programming, news, mail… How do you filter?</p>
<p>J: I use virtual groups a lot to aggregate so that I’m not overwhelmed by a huge number of groups that have lots of unread messages. I’d rather have fewer groups with more messages in them. Then I use Gnus’ very handy adaptive scoring with Gwene. In my .emacs repository, there’s a file called my-gnus-score. I’ve codified everything related to my scoring configuration in that file, so if you want to use the system that I use, that’s the file to get. Adaptive scoring basically allows me to go into a group and then if I see a thread there that’s not interesting to me and I don’t read it, I will never see that thread again. All of my groups only ever show me threads I’m currently reading, or new threads. I don’t have to wait through stuff I’m not interested in any more. It’s not that it just downscores it, it doesn’t appear at all. That’s a good way for me to cope with the thousands of articles per day that get downloaded to my machine, because I’m only reading maybe forty of them at best. That’s one good way to cope with the data over load.</p>
<p>S: I’ve never found anything that had the kind of scoring that Gnus has. I want it with everything. I want it with Gmail, I want it with all that stuff… C’mon, get with the times!</p>
<p>J: Even though I receive my e-mail at Gmail, I suck it down to my machine with fetchmail and I put it into a local dovecot server so that Gnus will hold sway over it. The other thing that’s valuable in coping with data overload is just structure.</p>
<p>Structure is really the key to everything. And when structure gets too big, then you just need metastructure. As long as you have some way to get to the thing that you need to know when you need to know it, but your top-level view – the thing that you’re thinking about in your mind – is always small, then it doesn’t matter how much information you have.</p>
<p>I stopped deleting things that I downloaded a few years ago. I started having enough disk space that I just keep everything. You never know when you’re going to want it again. You never know when that version you had isn’t going to be on the Internet any more, etc. I have a giant file server that I built that just accumulates lots of information. There’s a directory in my home directory called archives, and archives now has about 400GB of files in it across millions of files. There are files within files. It’s just an enormous amount of information.</p>
<p>But the way that I manage that data overload is just by structure. I developed a taxonomy to put things into places by category and by topic. Whenever I have a file or whenever I’m looking for a file, I can know within seconds what the path name leading to that file or group of files is going to be, because I adhere to the taxonomy rigidly. I have an inbox where new stuff comes in, and then I sort the stuff out from the inbox using Dired into the parts of the taxonomy that it needs to go in.</p>
<p>The key there is that even though I have all this data – which is way more data than Spotlight or systems like that are ever going to help me search through – by having the right structure, the data is easy to find.</p>
<p>I use Org mode as a sort of meta-structure so that if there are parts of that structure that I often refer to, I’ll put a link to them in Org mode. In Org mode, I’ll have a hot list, and the hot list are the things I care most about right now. The hot list will just branch to other lists or to other areas on the machine or other parts of the Web. You want to keep the hot list down to a reasonable small amount, so like ten to twenty items. That should branch out into everything else. Everything should ultimately go down to the leaves of everything that you have. If you have anything unowned by your hierarchy, it will get lost or it will just become forgotten. I believe that hierarchy is the solution to any problem in terms of data overload.</p>
<p>S: I was just thinking about how I can organize my ever-growing Org files and I’ve been trying to create categorical indexes, going through all these things, creating links to my blog (external information and all of that)… but it’s fascinating to see how people have been organizing, especially since you’ve been using it for a while, and you have tons of information in it. Lists of lists.</p>
<p>J: And also information I keep needing to refer to, even years later. I’ll remember… I knew at one point how to disable the Spotlight index, for example, but I can’t remember the command. That command is no longer in my Zsh history file. How am I going to know that information? If I search for it, I might find it, but there are some things you just can’t search Google for because it’s too abstract. I’ll write it down in my Org mode file and even though it’s in the archive file, it’s still searchable, it’s still indexable. I can ask my whole system, what do you know about Spotlight? I’ll get a list back of all the things I ever thought were valuable to know about Spotlight, and in that list will be indexing, disabling, etc.</p>
<p>S: That is an excellent use of Org mode. I remember you showed me a glimpse of your Emacs org file where you were listing all these things you were learning about Emacs, and that file looked really long.</p>
<h3>Maintaining your information</h3>
<p>J: It does require some investment, though. Maintaining structure like this requires always weeding and pruning, combing and going through the data. My wife and I have a word for it. She’s Persian, and the Persian word for putting things in order is monazem(?). She’ll ask me—I’l l be at my computer, playing around with it—and she’ll say, “Are you monazeming?” All that I’m doing is just moving stuff around, I’m renaming things, I’m building index links… That might not be a fun task for everyone. Maybe part of me always wanted to be a librarian when I grew up. I actually get a lot of pleasure out of that. I find it relaxing. I find that imposing order on the chaos of my machine gives me a greater feeling of order in my own life, and that makes me better able to handle the new information that’s going to come in the next day.</p>
<p>S: It also helps you remember what’s in your file, so you know what you can search for.</p>
<p>J: That’s very important. Our memory, it’s not ever going to be good enough to just keep our eyes on the thousand things we might have in our configuration or the million things we might have in our machines these days. That doesn’t even include all the things we’ve seen on the Internet, thought were cool, but haven’t noted down anywhere. We just remember that it’s there, but we’re losing those all the time and we’re not aware that we’re losing them.</p>
<p>S: At least until you plug your browser history into an Org thingy that automatically captures all of that stuff. People used to have browser plugins that did that…</p>
<p>J: That’s a neat idea, actually. Hmm…. I like that idea. I used to not have any cap on my history in the browser, but ultimately it makes the browser too slow. But it would be nice to queue it out to a log file or a database where it just gives the link, a title, and a synopsis of the contents. That would be kinda nice. You’re giving me ideas, Sacha.</p>
<h3>Wrapping up</h3>
<p>S: So, we’ll see it next week, then? Okay. Lots of tips on all these different things you can do with Emacs, where to get started, how to organize a huge archive of information (lists of lists and breaking things down)… Any parting words before I line up other people to bring on to this “Let’s Talk about Emacs” thing?</p>
<p>J: Just that Emacs is fun. All of this technical stuff, all of these features… the reason I use it is because it’s fun.</p>
<p>S: It is. It’s a lot of fun. It’s even more fun because… Well, I get to bump into people like you, and the Emacs community is so awesome!</p>
<p>J: I got to know you through it as well! That’s been a great thing.</p>
<p>S: When you made me the maintainer of Planner, I was, like, “Oh my gosh, I’ve never maintained anything before.” I was a university student, and it was an excellent experience.</p>
<p>J: I always appreciated the little cards that you sent me from time to time through the years, mentioning your uses of Planner…</p>
<p>S: I should send cards to Carsten too. Bastien is the new maintainer, isn’t he? Emacs appreciation cards.</p>
<p>J: That’s right. I think that’s a great thing you did. Thanks, Sacha!</p>
<p>S: Thank you so much. Nice talking to you, and I’ll catch you again sometime.</p>
<p>J: Have a good night!</p>
<p>(Transcription took me 2:35 for 0:44 of audio.)</p>
<div class="powerpress_player" id="powerpress_player_5956"><script>document.createElement('audio');</script>
<audio class="wp-audio-shortcode" id="audio-23536-1" preload="none" style="width: 100%;" controls="controls"><source type="audio/mpeg" src="http://archive.org/download/20120612EmacsChatJohnWiegley/2012-06-12-Emacs-Chat-John-Wiegley.mp3?_=1"><a href="http://archive.org/download/20120612EmacsChatJohnWiegley/2012-06-12-Emacs-Chat-John-Wiegley.mp3">http://archive.org/download/20120612EmacsChatJohnWiegley/2012-06-12-Emacs-Chat-John-Wiegley.mp3</a></audio></div><p class="powerpress_links powerpress_links_mp3">Podcast: <a href="http://archive.org/download/20120612EmacsChatJohnWiegley/2012-06-12-Emacs-Chat-John-Wiegley.mp3" class="powerpress_link_pinw" target="_blank" title="Play in new window" onclick="return powerpress_pinw('https://sachachua.com/blog/?powerpress_pinw=23536-podcast');" rel="nofollow">Play in new window</a> | <a href="http://archive.org/download/20120612EmacsChatJohnWiegley/2012-06-12-Emacs-Chat-John-Wiegley.mp3" class="powerpress_link_d" title="Download" rel="nofollow" download="2012-06-12-Emacs-Chat-John-Wiegley.mp3">Download</a></p><p class="powerpress_links powerpress_subscribe_links">Subscribe: <a href="https://sachachua.com/blog/feed/podcast/" class="powerpress_link_subscribe powerpress_link_subscribe_rss" title="Subscribe via RSS" rel="nofollow">RSS</a></p>
<p>You can <a href="https://sachachua.com/blog/2012/07/transcript-emacs-chat-john-wiegley/#comment">view 12 comments</a> or <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2012%2F07%2Ftranscript-emacs-chat-john-wiegley%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item>
	</channel>
</rss>