<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/assets/atom.xsl" type="text/xsl"?><feed
	xmlns="http://www.w3.org/2005/Atom"
	xmlns:thr="http://purl.org/syndication/thread/1.0"
	xml:lang="en-US"
	><title>Sacha Chua - category - emacs-chat</title>
	<subtitle>Emacs, sketches, and life</subtitle>
	<link rel="self" type="application/atom+xml" href="https://sachachua.com/blog/category/emacs-chat/feed/atom/index.xml" />
  <link rel="alternate" type="text/html" href="https://sachachua.com/blog/category/emacs-chat" />
  <id>https://sachachua.com/blog/category/emacs-chat/feed/atom/index.xml</id>
  <generator uri="https://11ty.dev">11ty</generator>
	<updated>2026-05-29T22:02:50Z</updated>
<entry>
		<title type="html">Emacs Chat 24: Omar Antolin Camarena</title>
		<link rel="alternate" type="text/html" href="https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/"/>
		<author><name><![CDATA[Sacha Chua]]></name></author>
		<updated>2026-05-31T22:36:02Z</updated>
    <published>2026-05-29T22:02:50Z</published>
    <category term="emacs" />
<category term="emacs-chat-podcast" />
<category term="emacs-chat" />
		<id>https://sachachua.com/blog/2026/05/may-29-emacs-chat-with-omar-antolin-camarena/</id>
		<content type="html"><![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/atom/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/atom/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/atom/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/atom/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>]]></content>
		</entry><entry>
		<title type="html">Emacs Chat 23: Emacs Chat with Raymond Zeitler</title>
		<link rel="alternate" type="text/html" href="https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/"/>
		<author><name><![CDATA[Sacha Chua]]></name></author>
		<updated>2026-05-25T12:10:55Z</updated>
    <published>2026-05-21T14:30:32Z</published>
    <category term="emacs" />
<category term="emacs-chat-podcast" />
<category term="emacs-chat" />
		<id>https://sachachua.com/blog/2026/05/emacs-chat-with-raymond-zeitler/</id>
		<content type="html"><![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/atom/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/atom/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/atom/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>]]></content>
		</entry><entry>
		<title type="html">Emacs Chat 22: Shae Erisson</title>
		<link rel="alternate" type="text/html" href="https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/"/>
		<author><name><![CDATA[Sacha Chua]]></name></author>
		<updated>2026-05-08T19:06:24Z</updated>
    <published>2026-05-07T18:55:38Z</published>
    <category term="emacs" />
<category term="emacs-chat-podcast" />
<category term="emacs-chat" />
		<id>https://sachachua.com/blog/2026/05/may-7-emacs-chat-with-shae-erisson/</id>
		<content type="html"><![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/atom/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/atom/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/atom/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/atom/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>]]></content>
		</entry><entry>
		<title type="html">Emacs Chat 21: Amin Bandali</title>
		<link rel="alternate" type="text/html" href="https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/"/>
		<author><name><![CDATA[Sacha Chua]]></name></author>
		<updated>2026-05-09T03:02:00Z</updated>
    <published>2026-05-04T18:28:11Z</published>
    <category term="emacs" />
<category term="emacs-chat-podcast" />
<category term="emacs-chat" />
		<id>https://sachachua.com/blog/2026/05/emacs-chat-with-amin-bandali/</id>
		<content type="html"><![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/atom/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/atom/index.xml#current-notes-for-next-time-emacs-chat-21-amin-bandali-transcript">Transcript</a></li>
<li><a href="https://sachachua.com/blog/feed/atom/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/atom/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/atom/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/atom/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/atom/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/atom/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>]]></content>
		</entry><entry>
		<title type="html">June 18: Emacs Chat with Ross A. Baker</title>
		<link rel="alternate" type="text/html" href="https://sachachua.com/blog/2026/04/june-18-emacs-chat-with-ross-a-baker/"/>
		<author><name><![CDATA[Sacha Chua]]></name></author>
		<updated>2026-04-22T18:28:45Z</updated>
    <published>2026-04-22T18:28:45Z</published>
    <category term="emacs" />
<category term="emacs-chat-podcast" />
<category term="emacs-chat" />
		<id>https://sachachua.com/blog/2026/04/june-18-emacs-chat-with-ross-a-baker/</id>
		<content type="html"><![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>]]></content>
		</entry><entry>
		<title type="html">2015-12-10 Emacs Chat: John Wiegley on maintaining Emacs and how you can help</title>
		<link rel="alternate" type="text/html" href="https://sachachua.com/blog/2015/12/2015-12-10-emacs-chat-john-wiegley-maintaining-emacs-can-help/"/>
		<author><name><![CDATA[Sacha Chua]]></name></author>
		<updated>2015-12-25T22:47:27Z</updated>
    <published>2015-12-10T23:20:00Z</published>
    <category term="emacs" />
<category term="emacs-chat" />
		<id>https://sachachua.com/blog/?p=28511</id>
		<content type="html"><![CDATA[<div class="update>2015-12-25: <a href=" https:="" debbugs.gnu.org="" cgi="" pkgreport.cgi?bug-rev="on;include=subject:easy;package=emacs&quot;">These are the bugs that have the &#8220;easy&#8221; keyword. Note that some of them are because of the package or mode name. =)</div>
<p>John Wiegley shared how he uses Gnus and Org to help him with the volume of Emacs-related information, and how people can get started with Emacs development.</p>
<p><iframe loading="lazy" src="https://www.youtube.com/embed/nUjgKoOYxos" width="640" height="360" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h02m0s">0:02</a> Gnus for mail and news</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h04m0s">0:04</a> Organizing groups by topic</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h05m0s">0:05</a> Adaptive scoring and prioritization</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h09m0s">0:09</a> Setup for mail: Gmail, Fetchmail, Dovecot, Gnus</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h11m0s">0:11</a> Time: 1-2 hours a day</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h13m0s">0:13</a> Community-building</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h15m0s">0:15</a> Using Org to keep track of initiatives</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h19m0s">0:19</a> Reading bug reports in Gnus</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h22m0s">0:22</a> How people can help: tests, documentation, reviewing bugs</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h24m0s">0:24</a> Coverage</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h33m0s">0:33</a> Efficiency, benchmarks</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h40m0s">0:40</a> Magit, Projectile, Flycheck</li>
<li><a href="https://www.youtube.com/watch?v=nUjgKoOYxos&amp;t=0h45m0s">0:45</a> Following up on emacs-devel topics: IDEs, APIs, lexical binding, Guile, etc.</li>
</ul>
<p>You can e-mail John Wiegley at <a href="mailto:johnw@gnu.org">johnw@gnu.org</a>. The emacs-devel mailing list is at <a href="https://lists.gnu.org/mailman/listinfo/emacs-devel">https://lists.gnu.org/mailman/listinfo/emacs-devel</a>.</p>
<p><a href="https://plus.google.com/b/108840863190686221561/events/c2l1cl3vdt3l9s282adb2a5cfps">Event page on Google+</a><br>
<a href="https://archive.org/download/20151210EmacsChatJohnWiegleyNUjgKoOYxos/2015-12-10-Emacs-Chat-John-Wiegley-nUjgKoOYxos.ogg">Ogg Vorbis (audio only)</a><br>
<a href="https://archive.org/download/20151210EmacsChatJohnWiegleyNUjgKoOYxos/2015-12-10-Emacs-Chat-John-Wiegley-nUjgKoOYxos.mp3">MP3 (audio only)</a></p>
<p>View the <a href="https://sachachua.com/blog/2015/12/2015-12-10-emacs-chat-john-wiegley-maintaining-emacs-can-help/">full blog post</a> for the transcript. Thanks to Phil Hudson for volunteering to transcribe this!</p>
<p></p>
<p>s: Hello, everyone! Hi, I&#8217;m Sacha Chua, and this is another Emacs Chat. It is December 10, 2015. I&#8217;m here with John Wiegley who has, since the last time we talked to him, become the Emacs maintainer, among other things. So we&#8217;re here today to chat about how he&#8217;s dealing with the increased workload and other cool things! John, over to you.</p>
<p>j: Thank you, Sacha. I&#8217;m glad to have this opportunity for us to talk again. It&#8217;s been a few months.</p>
<p>s: By the way, if you have questions, you can submit questions by commenting on the Event page where you found this, ????? etc etc, or using the Q&amp;A app that shows up, or you can pop into IRC on the Freenode network and look in the #emacs channel and pose questions there. I&#8217;ll try to remember to sneak questions in at the appropriate moment. But I want to kick things off with some questions about your new workflow now that you&#8217;re dealing with the increased workload of a high-volume mailing list/newsgroup, called emacs-devel, and other things you deal with as Emacs maintainer. So, what do you do?</p>
<p>j: Well, certainly the emacs-devel mailing list is quite high-volume. My technique for approaching that has been to customize gnus until it makes it a more manageable source of information. I&#8217;ve had to tweak the scoring setup that I use. Gnus has a feature called &#8220;adaptive scoring&#8221; where it will observe what you read and what you don&#8217;t read and it will try to change the ordering and the presentation of the things you see in the <code>*Summary*</code> buffer when you go in to the newsgroup, based on your reading preferences, by observing your reading habits. That has been extremely helpful. That way, if a conversation has gotten very, very long and I realize that there&#8217;s nothing more for me to contribute on there, I can hit a key and never see that conversation ever again, unless somebody uses some sort of keyword that I have a flag for that will pop that thread back up for me. Meanwhile the threads that I&#8217;m most interested in, or the ones I&#8217;ve been replying to, they will go to the top of the buffers, so they&#8217;ll be the ones that I read first upon re-entering the group.</p>
<p>s: So you have something that automatically prioritizes the threads for you, based on whether you&#8217;ve replied to something or whether you&#8217;ve decided this is going way off tangent until it goes back on-topic. Not that I should be asking you which keywords should bring things back to your attention…</p>
<p>j: Right now, it&#8217;s &#8220;John?&#8221; (with a question mark): that&#8217;s the one that will pop any thread back up.</p>
<p>s: Alright, you heard it here, folks, if you need to get his attention, just say &#8220;John?&#8221; and John Wiegley will appear–himself–to deal with whatever&#8217;s going on. Actually, since you can share your screen through this videocast, is that something that you want to quickly demonstrate? Like, how this works. Not sure if that works live, because you may have to read things [out].</p>
<p>j: As I click on the screen-sharing button, it&#8217;s not having the [?????]</p>
<p>s: Hah! Technology. OK, well, you keep trying that. I&#8217;ll try to fill in this space…</p>
<p>j: Why would it not be there…</p>
<p>s: Hmm. OK, we&#8217;ll demonstrate with some hand-waving… OK, actually, one thing you can try–this may not break the system: if you refresh your browser, you might get dropped back into this conversation and that thing might work again. Let&#8217;s give that a shot. … OK, so while he&#8217;s coming back, and I hope this works, because otherwise: awkward! Gnus is a mail- and news-reader for Emacs…</p>
<p>j: Yes, that did work!</p>
<p>s: Perfect! All right. I was just telling people what Gnus is. If you would like to go ahead and demonstrate how this helps you with the prioritization… fantastic!</p>
<p>j: Are you seeing my Emacs screen?</p>
<p>s: I see your screen.</p>
<p>j: OK, so, with the key that I have bound, I will jump into Gnus. One thing you see here is that Gnus has the ability to create topics and to place groups under those topics. Though I actually have quite a number of topics, as you can see.</p>
<p>s: Wow. I did not expect that.</p>
<p>j: Yes. Normally a topic that has no unread groups in it is displayed, and there&#8217;s a key-binding that toggles these things. So we see that emacs-devel has gotten two emails since this livecast began. So if I hit return on those… I have the display customized right now so the number on the farthest left is the score that has been assigned to that article, just because I have been trying to fine-tune my adaptive scoring rules, so I want to be aware what effect my actions are having on the scores. I have another key to reveal all the threads. If I go back out and I grab the last 100 messages for example, then I can see that there are some very lengthy threads. I have a number here in this column [highlights fifth column – how do you do that?] that shows me how many messages are hidden underneath the thread. Normally I start and I just see this view, where the thread with the aggregate highest score goes to the top.</p>
<p>s: Wow. So this is a thread with a 90 score and 42 messages under it?</p>
<p>j: Well, 90 was the score of the top message in the thread, or it might have been the aggregate score. I can hit a key to see what the score of the thread itself was. So 90 was the aggregate score, and the score of the article itself was 30. It would have gotten the score of 30 because it would have noticed me reading a message from this thread in the past. Every time I read a message in the thread, the subject of that thread gets a bump of 1. I must have read 30 messages within this thread already, to have a score of 30.</p>
<p>s: So folks, write good subject-line headers so John takes a look at your message.</p>
<p>j: Subject lines are important. Gnus is very handy for example when we have a really long thread like this and someone wants to bring up a side point. We instituted a policy of changing the subject line when you do that. When you change the subject line, Gnus has a way of making that appear as if it&#8217;s a new thread. You see this &#8220;Casting as wide a net as possible&#8221; thread? This actually was a part of the &#8220;First draft of the Emacs website&#8221; thread, but because the poster, John [Yates] here, chose a different subject line, Gnus presents that to me as if it were an independent thread.</p>
<p>s: And that also allows you to track your interest through adaptive scoring, for that particular subtopic.</p>
<p>j: Right, right. It all plugs into adaptive scoring quite nicely. As a result, even though there are days when the number of unread messages in the emacs-devel group will easily reach 200 by the end of the day, it&#8217;s not that difficult to get through them because Gnus presents them to me in roughly the order I ought to read them. If I start seeing that a thread does not really need my involvement, I can start scanning quickly, or just tell gnus I don&#8217;t want to participate in this thread from this point onward – unless, of course, someone asks for me.</p>
<p>s: You&#8217;re getting quite a few people more interested in Gnus, according to the #emacs channel.</p>
<p>j: Gnus is incredibly wonderful. Let me tell you, Gnus and Org both, they&#8217;re my mainstays in Emacs. They&#8217;re the two applications that I always have running. Gnus is somewhat like Emacs itself. There is a learning investment to be made, but I do believe it pays itself off, many times over. Further, Lars has done a brilliant job with the gnus manual. It is not only highly informative, it is very funny. It&#8217;s worth reading from front to end, more so than any other technical manual I have read. I get quite a kick out of many of the paragraphs in the Gnus manual as I go to read about different things.</p>
<p>s: Was it you who also pointed out that the Calc manual was also very interesting reading? So it turns out that the Info manuals for Emacs packages tend to be quite interesting reading and very useful reading too.</p>
<p>j: Oh yeah. I would recommend to anyone who wants to get started with Gnus to first acquire a brave heart. It&#8217;s not going to be an easy task, but… Go through the setup instructions. Get it connected to your mail source by either reading the mail from a directory or using it over IMAP. You will find that using Gnus over IMAP is very slow. This puts a lot of people off. What I do is, I have all of my emails get to delivered to GMail, because they have excellent spam-filtering services. I use fetchmail to pull the mail from GMail down to my local machine, where it gets queued into a Dovecot server that I run locally. Then Gnus talks to the Dovecot server over IMAP, and that is a very fast connection. And it lets me do local searches of emails, so that even if I don&#8217;t have Internet connectivity, I can always search all of the email I have. That&#8217;s quite a lot of email. In my dovecot, there&#8217;s probably close to a million email messages in there.</p>
<p>s: A million! One of the things that I want to mention is that a large part of that million is the entire emacs-devel archive, right?</p>
<p>j: Well, it&#8217;s the emacs-devel archive, the emacs-bugs archive, the emacs-help archive, the sources archive… Usually, if I actively participate in a mailing list, I like to go download all of its past email, so that if people make reference to previous discussions, I can see those discussions without having necessarily to be online.</p>
<p>s: And that takes advantage of Gnus&#8217; ability to show you all of the messages within a given thread. It knows about them.</p>
<p>j: Right. Let&#8217;s say I&#8217;m on this message here, which is a response to this thread called &#8220;New update of the Emacs website&#8221;, and I want to see the context. I can hit a key, and now all of the members of this part of that thread come into my buffer. So you&#8217;ll see the lines of blue here, the ones that are now inserted… I&#8217;ll do that again, so you can see what happened. Let&#8217;s go in here [emacs-devel summary buffer] So we see that there are three lines in the summary buffer. I hit <code>A T</code>, and now there are 25 lines in that buffer. So I get to see the message I&#8217;m reading now in the full context of the thread in which it appeared.</p>
<p>s: Right. So Eric has a question, which he submitted through the Q&amp;A thing. This seems like a lot of reading. How many hours a week do you spend on Emacs maintainer stuff?</p>
<p>j: I would say that in reading the emacs-devel mailing list, it&#8217;s between one to two hours a day, probably (and responding to them).</p>
<p>I do not spend as much time fixing bugs or writing code as other contributors to this project do. So for example, Eli Zaretskii spends a very large amount of time addressing bugs and taking care of the stability of Emacs. I rely upon him a lot for his technical expertise.</p>
<p>I spend more time reading the messages, trying to see which people issues there are, what things need to be changed in our organization, in our structure, so that all of these resources that we have in the community can be effective and can smoothly head us toward the next release. We have a lot of excellent people, excellent developers and volunteers and contributors. It doesn&#8217;t necessarily need me to do all this work. We have excellent people to do that. I just want to make sure they have what they need to get their jobs done.</p>
<p>s: That&#8217;s an interesting approach to take in terms of maintaining an open-source project. It&#8217;s less about making all the technical contributions yourself and more about unlocking the awesomeness in the community, coordinating people&#8217;s efforts, reaching out to people and pulling them in.</p>
<p>j: Right. And specifically I want to emphasize or focus on that at this point in time, because I feel like we do have a much better community than we&#8217;re taking advantage of for core Emacs development. There are the Emacs developers, who at the moment are fewer in number and maybe even a little bit overworked. Then outside of that core community, we have a much larger community of people doing excellent work on external projects that are not part of core Emacs or are not in ELPA. They might be, for example, in the MELPA repository. If I can bring some of those people and attract some of those outside people into the core development, then our job gets a lot easier. That&#8217;s going to be much more effective than just me becoming another programmer within the Emacs project. If I can get five other of those people to come in, that&#8217;s going to be five times what I could have contributed, for example.</p>
<p>s: That&#8217;s awesome. So I guess some of these people might be hiding out in emacs-devel, but where are you keeping an eye out for these people you can recruit basically and bring into core?</p>
<p>j: In IRC, in Twitter, there are people that I know personally who are for whatever reason on the outskirts of emacs-devel. Apparently–they&#8217;ve told me–there have been past issues with things not staying on-topic, or things getting a little out of hand, or patches dying as they get submitted and then ignored. I want to make sure that their concerns are met and we resolve those problems, which are really more human-scale problems than technical problems. If we can do that, then these people I think will come back. That will just make it easier for all of us to do our jobs.</p>
<p>s: I can see how like the mailing-list interface with threads and things like that… if you think about it, there&#8217;s the mailing list, and then there&#8217;s the bug tracker, where you&#8217;ve got like &#8220;This is broken&#8221;, &#8220;Maybe there&#8217;s a patch needed for this&#8221;, but there isn&#8217;t really that trackable middle ground that says &#8220;Here&#8217;s an idea that I&#8217;ve been thinking about,&#8221; and maybe that&#8217;s why some of these ideas are getting dropped. Can you share a little bit about how you&#8217;re starting to keep track of the different balls that are in the air, the different things that you have on the go, to make sure that those things aren&#8217;t falling through the cracks?</p>
<p>j: That&#8217;s an excellent question. I guess you might say that one of my tasks as maintainer is to keep an eye on these more inchoate or intangible things that people request or ask for that aren&#8217;t necessarily bugs, so they don&#8217;t necessarily belong in the bug database. They are ideas that get discussed on the mailing list, but as you say, when the thread gets cold, the idea might get lost.</p>
<p>So what I do is: when these come up, I have an Org-mode file that I try to track all of the ideas or the things people have suggested or expressed concerns about to make sure that something gets done. Either they get addressed or they get knowledgeably closed–to say &#8220;No, leave it. We considered it but we&#8217;re not going to do it.&#8221;</p>
<p>You&#8217;ll see that in my Org file here I have many top-level categories. There are things here, issues pertaining to the community; initiatives – things that I might want to begin but are not being done now; analysis is a little sub-project within Emacs to become more aware about potential bugs or performance problems that we might have, things that aren&#8217;t in the bug tracker.</p>
<p>And under each of these, I have several keywords that are labeled as &#8220;Project&#8221;. I have a project here for making improvements within our community. One of the things I did, for example, was ask you to be our ambassador and keep us all aware of things outside of core development. Making sure responsibility for more aspects of Emacs development is distributed more evenly among the contributors so we don&#8217;t get burn-out. ELPA and changing the way we use ELPA… I&#8217;d like us to rely more on ELPA, have it be an easier and more facile way for people to get code into Emacs. And of course also the release schedule.</p>
<p>Under these projects, then, I have various TODOs. Often–especially if they have a name here in parentheses–it means it links directly to a mailing-list article. If I hit a key to visit the link, it will pop me over to the emacs-devel mailing list and then show me that message in the context of its discussion. Or I could also then again press <code>A T</code> and then see it. (Although that didn&#8217;t work because I only have <code>A T</code> configured to work in the current group. Anyway.) But that gets me back to the original discussion about why I created that task.</p>
<p>s: So I can see how this gives you an overview of the different initiatives that are going on, and lets you review this to follow up with the things that might be falling between the cracks.</p>
<p>j: Right. The first line of activity I do is to follow the mailing list and anything that needs to be responded to there. I also like to read through the diffs log and see what changes have been made to Emacs, to see if there&#8217;s anything that needs more attention. I subscribe to the bug tracker so I see every bug that comes in, and I try to make sure that at least some response is made to every bug although I don&#8217;t always have the time for that. Then the last thing, of course, is these other things, these other non-bug-type tasks and tracking those. I&#8217;ve not been as good lately at keeping on top of this list as I have at keeping on top of the mailing list, mainly because these holidays that we&#8217;ve had with Thanksgiving in the United States and some work trips have put me a bit behind. But I do want to get back to this Org file and close these things out because people deserve to be responded to. Everything in this file represents something I felt was a legitimate concern. When people feel that they are being responded to, I think then they will be more encouraged to take part in the core Emacs development process.</p>
<p>s: Is this a file that you&#8217;re publicly sharing, or can you be convinced to share this to give people the same overview that you have?</p>
<p>j: No, but of course I would like to maybe do something semi-regularly to capture the state of Emacs development. Have not yet, but that&#8217;s something I&#8217;ve considered doing.</p>
<p>s: That&#8217;s cool. So you&#8217;ve got this Org file that you create as you read through emacs-devel messages, bugs and things like that, and you can jump from this Org file back to the original messages. You mentioned on IRC before you also use Gnus to read the bug reports. I think you mentioned that Gnus can show the bug reports for a specific bug or the conversation for a specific bug easily. Is that something you can quickly demonstrate?</p>
<p>j: Sure. So here we have for example bug #19547. I want to see the context of that bug. So there is a command called <code>gnus-read-ephemeral-emacs-bug-group</code>. So now I can put in here [entering text in the minibuffer] 19547. That will contact the debbugs server for the Emacs project and show me the whole conversation history of that bug as an ephemeral group, which means a group that gnus has created on the fly. That will disappear once I have left that group. This way, I can then read through the exact conversation history that has occurred in that bug.</p>
<p>s: I see. So it lets you see the entire context of it, and then you can add links to more information in your Org file as well.</p>
<p>j: Right. So if I&#8217;m in here and I hit a key, what it will do is create a capture buffer that links back to that email instantly. And then I just have to hit <code>C-c C-c</code> and then this will be added. Or I hit <code>C-c C-w</code> and then I am prompted for where in the Emacs [Org] file I want to put this issue.</p>
<p>s: <code>org-refile</code> is so powerful that way. So Gnus and Org help you deal with the volume that&#8217;s coming in and keep track of what&#8217;s going on. Are there things that you think either future maintainers of Emacs or maintainers of packages that are within Emacs, any tips that they would find useful?</p>
<p>j: You mean in the use of Gnus and Org?</p>
<p>s: Or other little scripts or tools that you&#8217;ve found helpful.</p>
<p>j: Nothing in particular. I think every maintainer has his own way of doing things and his own areas of interest, so everybody should pick whatever tool works for them.</p>
<p>s: Let&#8217;s see, just a quick check for people&#8217;s questions… You&#8217;ve let people know about Emacs-tangents, which is a fairly new mailing list. Some people didn&#8217;t know about that yet, so that&#8217;s cool.</p>
<p>One of the things we wanted to talk about was your workflow for dealing with Emacs, and also some of the ideas you had for improving the community and taking it forward. You&#8217;ve shared some of it in terms of making emacs-devel friendlier, bringing in people who are not core maintainers… Are there particular areas you want to encourage people to try contributing to or any resources you think might help them get started?</p>
<p>j: Sure. I think there are three areas in particular where I would really appreciate help.</p>
<p>The first would be: writing more tests. We&#8217;ve started creating headless tests that run as part of the Emacs build when you do <code>make check</code> using the ERT framework, which is an Elisp framework for writing tests. I know that you use it for lots of things, so you understand its value. We do not have coverage of many parts of Emacs, so people coming in who want to write new tests to address areas we&#8217;re not currently testing would be incredibly valuable.</p>
<p>Improving our documentation, especially with an eye to how it reads to someone who&#8217;s not familiar with a certain subject area would be very helpful.</p>
<p>And then going through our bug history and finding bugs that have just never been responded to, or that are no longer an issue, checking which ones are still reproducible and which aren&#8217;t, and if they are, making comments in the bug to say what you discovered in trying to reproduce the bug.</p>
<p>s: And maybe adding a test for that too.</p>
<p>j: Well that would be ideal! The ideal would be to find a bug, add a test, add something to the manual that&#8217;s appropriate for that bug. So these three areas: bugs, tests, and documentation, are the ones I would like to see addressed the most.</p>
<p>Emacs core is really a foundation upon which a lot of things are built that are not part of Emacs core. The thing I want most for Emacs core is not necessarily to add in more features and functionality, I would like it to be a more stable foundation, so the more complex applications like Org and Gnus that are built upon Emacs, there&#8217;s less of a moving target. It&#8217;s very efficient, it&#8217;s very well-performing, there are no crash bugs, those types of things. That&#8217;s why I&#8217;m placing an emphasis for volunteers to contribute on bugs, tests and documentation, because it will help give us that stable foundation to build other applications on.</p>
<p>s: I don&#8217;t suppose there&#8217;s any pretty coverage report for Emacs that people can just look at and say, OK, this file was not covered yet, so people can easily see what needs testing.</p>
<p>j: Phillip Lord recently rearranged our tests so that they mirror the files that they&#8217;re testing against in the various source directories. You can see from that which files in the source directory have no corresponding tests at all. If you pick a file that relates to a feature you care about, see that no test file for it exists, then you can be the first person to make that file and create the first test. Every test is valuable. I&#8217;m not asking people to commit only if they&#8217;re willing to write hundreds of tests. If you want to come into the Emacs project, get familiar with development, building the current version of the sources on your own machine, and just write one or two tests, I&#8217;d be happy with anything.</p>
<p>s: Maybe one way to make this process a little less intimidating would be, can you walk us through what a super-simple Emacs core test looks like, how to run it and see how that all works?</p>
<p>j: [????] just getting the community stuff up and running. This is not something I&#8217;ve been doing myself.</p>
<p>s: We&#8217;ll find somebody else to corner into doing a quick demo.</p>
<p>j: This is my checkout of the Emacs source tree.</p>
<p>s: Do you want to share your screen?</p>
<p>j: Oh, sorry, I forgot. OK, do you see this? So I have a clone here of the Emacs development tree, which I tend to build from day to day, just to make sure everything is going sanely. We have a &#8216;test&#8217; directory in this [????], and there you&#8217;ll see we have an &#8216;automated&#8217; directory, which is where Phil Lord put all of our automated testing. Inside it here, we have all kinds of automated tests. For example, here are some eshell tests. They require in <code>ert</code> and <code>eshell</code>. And then <code>ert-deftest</code> is the command to execute [well, define] a test. So I say that the result of evaluating this [highlighted] form should be equal to 3. And that way, when I do &#8216;make check&#8217;, it will run this code and ensure that [????] is 3.</p>
<p>s: So as we can see, the tests are really easy. They can be pretty short. They can be really simple. You don&#8217;t have to get in deep with lots of C or whatever else to write them. You can just use this to get started. And it&#8217;s all in Emacs Lisp!</p>
<p>j: I haven&#8217;t pulled in a little while. Let&#8217;s see…</p>
<p>s: Probably not a good idea to mess up your git checkout…</p>
<p>j: Oh, I can&#8217;t pull because my smartcard authenticates my SSH logins and I don&#8217;t have that card plugged into this machine.</p>
<p>s: That&#8217;s cool. So there&#8217;s a lot of code in Emacs. Much of it is not yet tested. It&#8217;s great for people to contribute tests. But Eric has another question: &#8220;Are you considering moving stuff out of core to have that smaller, simpler, better-tested core, and more things in packages?&#8221;</p>
<p>j: Yes. Yes, we are. So right now we have a few areas. We have core Emacs. What we would like to have is a concept within ELPA of &#8220;core ELPA&#8221;. Core ELPA are packages within ELPA that core Emacs code is able to rely upon. That will happen by a process where core ELPA packages will be copied into the Emacs source tree from time to time, so that core Emacs can directly depend upon them.</p>
<p>Then on top of core ELPA, there will be &#8220;tarball ELPA&#8221;. These will be packages that are within ELPA that are not copied to core Emacs, but which are made part of the release tarball before it goes out.</p>
<p>Then finally we will have regular ELPA, which will be packages that are installable through the <code>M-x list-packages</code> interface but that will not be in the tarball distribution.</p>
<p>Right now, core Emacs has a lot of very large things in it and a lot of packages in it that don&#8217;t really necessarily belong there, because they&#8217;re not part of the foundational API that I really think core Emacs represents. We want to take a lot of these packages and split them out into one of these ELPA categories. Very likely, everything that is currently in core Emacs will be either in core ELPA or tarball ELPA. We won&#8217;t be moving it out of the distribution entirely, but doing this will make the core be smaller. When you look at git, and see what&#8217;s been changing lately, that surface area will be smaller, but it also gives contributors from the outside ways to get things into the tarball distribution without it having to go into core Emacs.</p>
<p>s: I can see how that would also simplify the update process for those packages.</p>
<p>j: And it gives people a way to receive, to subscribe to a channel where that package will be updated frequently, even though Emacs releases might be [????]</p>
<p>s: Right. Cool. Simpler core, better tested, stabler core, and then this kind of split between important things that are in ELPA that core relies on, and things that are optional–used to be there, so you don&#8217;t want to break anyone&#8217;s expectations, and so they&#8217;ll be within the tarball–and of course your regular ELPA and MELPA and the other package archives as well, this universe of packages to choose from.</p>
<p>j: Right. I think ultimately the destination we&#8217;d like to end up at is that there&#8217;s a core set of functionality without which Emacs cannot even be Emacs, can&#8217;t even edit files, and that defines a sort of fundamental minimum. Then anything that that fundamental minimum depends on is by definition a package that has to be in the core. That network of dependencies among this minimum will be what has to be in core, and then as much as possible that does not fit that description will go into tarball ELPA.</p>
<p>For example, tetris. tetris is a neat module that is great to have on any machine just to demo how cool Emacs is, but the core foundational API that Emacs core represents doesn&#8217;t really need tetris to be there. So that can be moved to tarball ELPA very easily.</p>
<p>s: Well, I&#8217;ll come up with an objection about how essential tetris is to Emacs&#8217; programming, but that is a very good example, yes.</p>
<p>j: I think it&#8217;s a good thing to always have be present in an Emacs installation. It&#8217;s just… we want the core developers to focus on the set that really matters in terms of defining the foundational API. Also, what&#8217;s in core should always be documented, should always be tested, as part of the automated tests. Not every package that we have in core Emacs today really needs that level of rigor. Tetris does not need automated tests, does not need a lot of documentation. So it&#8217;s a perfect candidate for being in tarball ELPA.</p>
<p>s: There is some outrage in the #emacs channel over your dissing of tetris.</p>
<p>j: I love the tetris module! Didn&#8217;t people hear me? I just said it always should be present in any machine that has Emacs on it.</p>
<p>s: I&#8217;m not sure if auto-tetris counts as automated testing for tetris, but there is a thing that automates it.</p>
<p>j: Cool.</p>
<p>s: So people can contribute by writing tests. Tests will help all that stuff happen better. Maybe at some point we can have this nice graphic that shows which files are getting how much percentage coverage. All these lovely motivating graphs, things like that. Then, of course, as you mentioned, there&#8217;s documentation to write and bugs to see if you can reproduce.</p>
<p>j: Then there&#8217;s one more category that I&#8217;m personally quite interested in, which is someone to focus on and sort of take ownership of efficiency and speed of Emacs. That would require writing another… not test suite, but benchmarking suite, that if I run it will give me a table of numbers to say how fast certain Lisp operations are, how fast buffer manipulation operations are, how fast starting up a graphical Emacs and creating a whole ton of frames and closing them all, how fast that is, and then to have a way of, against two builds of the benchmarking suite, [????] the delta, and then designate a build machine that somebody will volunteer time on, where they are willing to run the benchmarking suite against the current development branch every single day, and maintain the running delta as some sort of graph that shows us are we getting slower or are we getting faster in certain areas, and where are the areas that are currently the worst. Today, a thread came up on emacs-devel saying that playing back keyboard macros that involve very, very long lines–like lines that are 11000 characters long–is a very slow thing. And you think, well, that&#8217;s not entirely terrible, because how often do people do this? But it would be nice to know where these current limitations of Emacs are, and which are the ones we want to address.</p>
<p>s: Right. And if someone has just committed something that makes something drastically slower, or drastically faster…</p>
<p>j: Yes. I&#8217;ve noticed that 25.1, the release candidate, even when I build it with full optimization on, takes exactly twice as long to start up my Emacs as 24.5 does. So it&#8217;s a difference of 4.3 seconds versus 8.6 seconds. And I would like to know why is that, and when did that happen? I don&#8217;t have right now a benchmarking suite that I could just use <code>git bisect</code> to just take me back to the day when it got slower, so I&#8217;ll have to do a specific profiling analysis to find out what made it slower. But if we had a benchmarking suite in place, I think we&#8217;d have a lot more consciousness of the ways Emacs is evolving in terms of performance and efficiency.</p>
<p>s: I&#8217;m hearing that as part of a general improvement of the build tools that Emacs is using is the idea of having these continuous integration and efficiency metrics and things like that happen, so that people don&#8217;t have to keep building these little tools themselves to mess with that.</p>
<p>j: There are plenty of great tools out there for making this happen. I think what we need right now is we need a volunteer willing to devote themselves to seeing this happen and keeping it going.</p>
<p>s: It is a fair bit of heavy lifting to get started, but once it&#8217;s in place and keeps running, we hope…</p>
<p>j: Right. Anybody out there who loves both Emacs and performance, get in touch with me and let&#8217;s start that going.</p>
<p>s: Yeah. In terms of talking about Emacs startup times, I remember in our conversation about use-package, that was one of your key motivations for being able to find your own autoloads and load only the packages that you were actually using. A faster Emacs… Schools of thought are divided on this: some people do start Emacs all the time, and some people just leave it running. But everyone benefits from having things work faster.</p>
<p>j: Right. When I&#8217;m not working on Emacs modules, I tend to just start Emacs once in the day. But if I am working on a module, I want to make sure that I&#8217;m always testing my changes against a clean environment, I will exit and restart many, many times during the day. That&#8217;s what led to my desire for faster startup.</p>
<p>s: Then in terms of other build tools or development-related initiatives, there&#8217;s definitely the good news it&#8217;s already happening. I think you mentioned–you vaguely mentioned looking into Github and pull requests, something along the lines of making it easier for people to contribute?</p>
<p>j: This would not be something that is officially endorsed by the FSF. I have a mirror of the Emacs development tree on Github. If people want to make pull requests against it, I will copy those over into the proper channels by hand. But that is not an official portal for either receiving bug requests or pull requests.</p>
<p>s: OK. It&#8217;s good to play around with different ways, different channels of bringing things in, so thank you for doing that work by hand, if anyone wants to take advantage of this completely unofficial, not at all sanctioned way of submitting changes.</p>
<p>In terms of people getting started with Emacs development and Emacs contribution, documentation is probably the easiest for people to get started with, testing with a little bit of Emacs Lisp, digging in to bugs and making that better, and of course if you&#8217;re interested in performance and efficiency, actually building the infrastructure to make all that testing easier, some of the ways people can contribute.</p>
<p>What are some of the other things you would like to encourage people to look at and contribute to in terms of the community or reaching out? It&#8217;s interesting because there are a lot of people coming into Emacs but there&#8217;s also a continued perception that this is hard, this is difficult to learn, and there&#8217;s 20 weeks of configuring before you can get somewhere. Do you have any particular thoughts on making it easier at that end as well?</p>
<p>j: Not necessarily. I think some people out there have been doing good work towards making some starter kits and tutorials and your own videocasts, Sacha, have been helpful to a lot of people, &#8220;Emacs Rocks&#8221;… There&#8217;s different venues for creating information to attract people or interest people in Emacs. The Spacemacs project has been making Emacs a more comfortable environment for Vim users, for example. So there are things going on in the larger community. That&#8217;s something I want to see happen, but it&#8217;s not something I can have as an area of focus, since it&#8217;s really getting the core foundation stable that is the responsibility, I think. But part of me wanting you to act as our community ambassador was to help keep an eye on those needs in the greater outside community, and if there&#8217;s anything core developers can do to help support that.</p>
<p>s: I should remember whenever I come across interesting stories, to fold them into the EmacsWiki, which seems to be on its way back up again. People are adding to it and referring to it, which is good.</p>
<p>j: It&#8217;s a fantastic resource. I really recommend it to anybody. I continue to discover nuggets within it from time to time.</p>
<p>s: Just randomly browsing?</p>
<p>j: I often randomly browse, yes. After I&#8217;ve worked for an hour, I&#8217;ll sometimes just wander and stumble through the page links.</p>
<p>s: Cool. So, let&#8217;s see what other things people want to pick your brain on in terms of Emacs and development. Last time we talked, we were sharing Emacs development tips. You shared quite a few with <code>redshank</code> and <code>elrefactor</code> and all of that. Are there other tools you&#8217;ve found to be particularly helpful now that you&#8217;re reading a lot more code, I guess?</p>
<p>j: Well, I rely very very heavily on Magit. Anybody that uses git should definitely look into that. It&#8217;s also an application that I&#8217;m almost constantly in as my dashboard while working on a project. Projectile is another thing I&#8217;ve also greatly enjoyed, as a means for jumping to files in a project or grep&#8217;ing across files in an entire project. Flycheck is another excellent project, helping me keep an eye on errors I&#8217;m making in the buffer as I&#8217;m typing them.</p>
<p>s: Cool. Yeah, they&#8217;re all very well-reviewed, and people are very happy with those packages for sure.</p>
<p>j: Are there any more questions coming in to you from your various sources?</p>
<p>s: Hang on a second… oh, OK, so there&#8217;s a question from [????] on whether bootstrapping Emacs Lisp in Emacs Lisp is a long-term goal so that you get rid of the divide, making the C core as small as possible and doing as much as possible in Emacs Lisp, so that people can contribute more, even if they only know Emacs Lisp?</p>
<p>j: The answer to that is yes. When it will happen, how it will happen, I don&#8217;t have the answer to that today, but we would love to have the Emacs Lisp part of the whole Emacs equation be as large as feasibly possible.</p>
<p>s: And then of course every so often people are curious about having other extension languages and other capabilities.</p>
<p>j: Of course.</p>
<p>s: I haven&#8217;t been keeping track of Emacs-devel conversations about that though. Do you have any idea of where things are in terms of the big questions that people have like Guile Emacs or multithreading or this lexical-binding that&#8217;s starting to show up in the cookies in Emacs Lisp files?</p>
<p>j: Well, so those are several different questions. Guile Emacs is of course always progressing and I&#8217;m curious to see what will become of it. It&#8217;s not quite at the position right now where it&#8217;s something we seriously need to consider integrating but I am very curious to see where it goes and how it evolves, so I keep an eye on that.</p>
<p>Lexical binding is something that I hope will become more and more used and prevalent because it promises to resolve certain performance issues we have right now with dynamic binding and the need to look up a symbol within the most global possible scope every time there&#8217;s a variable reference. So you will see that being used more and more.</p>
<p>Otherwise, what we have today, the C core works pretty well for us as a base foundation language. Emacs Lisp is working pretty well for us. I mean, nothing that we&#8217;re doing now is preventing anyone from writing great stuff on top of Emacs. So, yes, little advantages could be made here and there by making certain changes, but we have to assess those and what value they offer as they come up. If people have particular ideas, of course, emacs-devel is the place to bring them up.</p>
<p>s: OK. Things are happening, and go ask on emacs-devel if you have further questions.</p>
<p>j: Yes. And I encourage anybody who has a deep concern about the future of Emacs to join emacs-devel and be part of the conversation.</p>
<p>s: You&#8217;ve started summarizing some of the longer and more involved conversations in emacs-devel proposals on EmacsWiki, right?</p>
<p>j: Yes, we created a Proposals page so we can distill the final result of very very long and large threads in a way that other people can review them and see what the final proposal being made is.</p>
<p>s: One of those long discussions happened around the time that you were also discussing your maintainership, was Emacs vs IDEs, the features that were missing, the integration of all of that together. What&#8217;s happening with this modernization of Emacs&#8217; feature set? Additional more IDE-like features? Is that a thing?</p>
<p>j: Yes. We would like at the core level to have a better API and certain more general APIs for features that have become common to people in other editing environments. So the notion of what is a project, what is the membership of a project, how do you navigate within a project. We&#8217;re at the point where there are a lot of disparate features we&#8217;ve got out there in the Emacs ecosystem for getting completion lists, for auto-filling or providing automatic documentation for the thing that&#8217;s around point. Everybody is solving it in different ways because there aren&#8217;t always necessarily good APIs existing currently within core. We&#8217;d like to have those APIs in core so that people don&#8217;t have to reinvent and recreate the same back-ends for looking up symbols within projects over and over again for the various languages.</p>
<p>s: That makes sense. Once it&#8217;s moved into core, then it becomes something all these packages can rely on, instead of having them depend on something, but then somebody else wants to depend on a different package for very similar functionality.</p>
<p>j: Right. What it will look like in the end to use such an IDE-empowered Emacs, I don&#8217;t know yet. But I think right now the first question to ask is, what are those APIs? And what should they be? To enable package authors to take the best advantage of the information that&#8217;s available within the environment.</p>
<p>s: So I guess part of that is taking a look at the common packages that people are using for this and then trying to abstract what they&#8217;re doing in a way that then allows them build on top of that common ground.</p>
<p>j: Exactly. And the ultimate hope for that is that if we have, for example, an underlying API that company-mode as a completion API could rely upon, then the back-ends that you write to provide the information to company-mode could be used by all the other modes that want to glean that information about the symbols that are relevant to point within a project. So then auto-complete could use that, and helm could use it, yasnippet or dynamic-abbrev or hippie-expand or whatever, they could all use it. Now I have myself re-coded the same back-end with very subtle little changes many times just because I wanted to have that functionality available to several packages. Similar but not exactly the same.</p>
<p>s: Refactoring is hard. There&#8217;s always little subtleties about how you want to do something that other packages don&#8217;t quite do.</p>
<p>j: Right. And I think that core Emacs can better support those package authors in that way by creating a standard, a standard framework within which to capture and ask for this information.</p>
<p>s: That makes sense. Alright, we&#8217;ll get the core stable, and then we&#8217;ll start moving more things into core, and by that, it&#8217;s like you know, out of the C core and into Emacs Lisp, and out of packages into Emacs Lisp where it makes sense, but some things will be moved out of core and into ELPA core and ELPA tarball so that it&#8217;s easier to have this well-tested, stable core.</p>
<p>j: With the end goal being: make it an easier job for the core developers who are currently there, and make it easier for new people to join, because it won&#8217;t be such a huge body of code for them to approach.</p>
<p>s: I wonder, are there other open-source projects that are also working on expanding their core developer community, and they do that by things like hackathons or [????] this pre-reviewed list of bugs that are super-easy and simple to fix and maybe even have mentors attached to them. I can&#8217;t remember if Emacs has one of these things already. I vaguely remember browsing through debbugs and seeing some of them were tagged with &#8220;newbie&#8221; or &#8220;documentation&#8221; or whatever, but… do we have anything like that? To guide people into specific small non-intimidating areas where they can start making those contributions?</p>
<p>j: I seem to recall hearing about a keyword we had that was similar to this, but as far as having a hackathon with a bug bounty list, I haven&#8217;t seen that yet, and I would love to see that. That would be an excellent way for people to know right where to jump in.</p>
<p>s: Maybe that&#8217;s yet another way for people to contribute: where you can just triage the bugs and say, you know, this is a super-easy bug to fix, go ahead and try it out, if you get stuck, talk to me, I promise not to bite. We&#8217;ll see where it goes with hackathons and the IRC channel and all these other ways that people can coordinate.</p>
<p>Awesome! We&#8217;ve covered a lot of ground today.We&#8217;ve talked about the tools you are using to keep up with all the volume and keeping that overview. So, Gnus is awesome, and Org is awesome, all those things together are even awesomer; in terms of the community, how people can contribute; really, Emacs-devel… I remember dropping into it every now and then before, massive threads, hard to keep track of, and now that things are getting split up into different subject lines, that&#8217;s so much easier. So emacs-devel and various other places are becoming friendlier places, easier to keep track of. And then of course this overall movement of Emacs source code to be smaller core, more stable, more tests and all that stuff, and then all these packages to go. I&#8217;m going to wrap up here, because my throat is starting to give out. Thank you so much for sharing your thoughts and your tips for using all these tools you use to keep track of what&#8217;s going on. And thanks again for doing such a wonderful job as maintainer. I look forward to seeing what Emacs will turn into!</p>
<p>j: I also lastly wanted to say that if anyone out there is having difficulties contributing to Emacs, or they have found a stumbling block or a reason for them to have become disaffected or leave the community, to approach me directly about those things, because solving those problems is to me right now more important than solving specific technical issues. So my email address is <a href="mailto:johnw@gnu.org">johnw@gnu.org</a> and it&#8217;s always open to people who have concerns about Emacs and where it&#8217;s going.</p>
<p>s: And I can vouch for you being an awesome person who definitely helped me get into Emacs development stuff when I got started in 2000-whatever so I can&#8217;t wait to see who else you bring into the community from there. As mentioned you can find John at johnw@gnu.org; are there other places people should go and find you, just in case you&#8217;re interested in finding out more?</p>
<p>j: On Freenode, I&#8217;m usually in the <a href="http://www.emacswiki.org/emacs?EmacsChannel">#emacs channel</a> there.</p>
<p>s: And on Twitter?</p>
<p>j: I&#8217;m on Twitter as well, as <a href="http://twitter.com/jwiegley">@jwiegley</a>. And of course the <a href="https://lists.gnu.org/mailman/listinfo/emacs-devel">Emacs-devel</a> mailing list. Love to see you there!</p>
<p>s: Alright then. I&#8217;m going to wrap up here. The recording will be available from the same place on Google+ and I&#8217;ll post it in all the usual places as well. Thanks again for joining us for the broadcast here and thanks everyon for listening.</p>
<p>j: Thank you, Sacha.</p>
<p><em>Thanks again to <a href="https://twitter.com/UWascalWabbit">Phil Hudson</a> for the transcript! =D</em></p>
<div class="powerpress_player" id="powerpress_player_3925"><audio class="wp-audio-shortcode" id="audio-28511-5" preload="none" style="width: 100%;" controls="controls"><source type="audio/mpeg" src="https://archive.org/download/20151210EmacsChatJohnWiegleyNUjgKoOYxos/2015-12-10-Emacs-Chat-John-Wiegley-nUjgKoOYxos.mp3?_=5"><a href="https://archive.org/download/20151210EmacsChatJohnWiegleyNUjgKoOYxos/2015-12-10-Emacs-Chat-John-Wiegley-nUjgKoOYxos.mp3">https://archive.org/download/20151210EmacsChatJohnWiegleyNUjgKoOYxos/2015-12-10-Emacs-Chat-John-Wiegley-nUjgKoOYxos.mp3</a></audio></div><p class="powerpress_links powerpress_links_mp3">Podcast: <a href="https://archive.org/download/20151210EmacsChatJohnWiegleyNUjgKoOYxos/2015-12-10-Emacs-Chat-John-Wiegley-nUjgKoOYxos.mp3" class="powerpress_link_pinw" target="_blank" title="Play in new window" onclick="return powerpress_pinw('https://sachachua.com/blog/?powerpress_pinw=28511-podcast');" rel="nofollow">Play in new window</a> | <a href="https://archive.org/download/20151210EmacsChatJohnWiegleyNUjgKoOYxos/2015-12-10-Emacs-Chat-John-Wiegley-nUjgKoOYxos.mp3" class="powerpress_link_d" title="Download" rel="nofollow" download="2015-12-10-Emacs-Chat-John-Wiegley-nUjgKoOYxos.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/2015/12/2015-12-10-emacs-chat-john-wiegley-maintaining-emacs-can-help/#comment">view 7 comments</a> or <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2015%2F12%2F2015-12-10-emacs-chat-john-wiegley-maintaining-emacs-can-help%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>]]></content>
		</entry><entry>
		<title type="html">2015-04-08 Emacs Lisp Development Tips with John Wiegley</title>
		<link rel="alternate" type="text/html" href="https://sachachua.com/blog/2015/04/2015-04-08-emacs-lisp-development-tips-with-john-wiegley/"/>
		<author><name><![CDATA[Sacha Chua]]></name></author>
		<updated>2015-11-07T21:30:50Z</updated>
    <published>2015-04-08T21:09:00Z</published>
    <category term="emacs" />
<category term="emacs-chat" />
<category term="podcast" />
		<id>https://sachachua.com/blog/?p=28075</id>
		<content type="html"><![CDATA[<p><iframe loading="lazy" src="https://www.youtube.com/embed/QRBcm6jFJ3Q" width="640" height="360" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>You can find John Wiegley on Twitter (<a href="http://twitter.com/jwiegley">@jwiegley</a>) or at <a href="http://newartisans.com/">http://newartisans.com/</a>.</p>
<table border="2" frame="hsides" rules="groups" cellspacing="0" cellpadding="6">
<colgroup>
<col class="left">
<col class="left"> </colgroup>
<tbody>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h00m00s">0:00:00</a></td>
<td class="left">Paredit mode. Start with it from day 1! Matching pairs of parentheses, won&#8217;t let you delete one without the other. Inserts appropriate newlines, too</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h03m56s">0:03:56</a></td>
<td class="left">Emacs as a Lisp environment. (Also, Helm is what&#8217;s responsible for the display.) Evaluating a function makes it available in the global scope, which has all these functions and commands you can do. This makes it easy to iteratively develop your functions, because you can just execute things directly.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h05m08s">0:05:08</a></td>
<td class="left">Without (interactive), you can&#8217;t call functions with <code>M-x</code>. You can use <code>M-:</code> or put the call in your <b>scratch</b> buffer.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h06m00s">0:06:00</a></td>
<td class="left">command-log-mode</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h06m47s">0:06:47</a></td>
<td class="left">pp-eval-last-sexp. Check out <a href="http://github.com/jwiegley/dot-emacs">http://github.com/jwiegley/dot-emacs</a> for other config things</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h07m14s">0:07:14</a></td>
<td class="left">debugging. <code>e</code> to evaluate within the current context. Also, stepping, quit.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h08m09s">0:08:09</a></td>
<td class="left">Edebug with <code>C-u C-M-x</code>. Interactive debugging. <code>SPC</code> moves you forward, one Lisp form at a time. It shows you results in the minibuffer. You can descend into Lisp forms or go into functions. <code>?</code> shows keybindings. Check out the Emacs Lisp chapter on EDebug, highly recommendeg.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h09m25s">0:09:25</a></td>
<td class="left">You can also use the (debug) form to go to the debugger.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h10m26s">0:10:26</a></td>
<td class="left"><b>eldoc</b>: Seeing arguments in the minibuffer as you type, because no one remembers all the arguments anyway. <code>eldoc-mode</code>, or add <code>(turn-on-eldoc-mode)</code> to your config.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h11m30s">0:11:30</a></td>
<td class="left">What functions should you call in the first place? What concepts? Emacs predates many standard terms, so that&#8217;s why things are a little confusing. Ex: &#8220;frames&#8221; and &#8220;windows&#8221; are not what you might think they are. OS window = frame. Area within Emacs = window. Opposite of HTML. Use the Emacs tutorial <code>C-h t</code>.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h13m04s">0:13:04</a></td>
<td class="left">Read the Emacs Lisp intro, which you can get to with <code>C-h i</code> (which lists the manuals that are available). Read the Emacs Lisp manual too.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h14m03s">0:14:03</a></td>
<td class="left">Other weird terms: point, mark, marker. <code>(point)</code> vs <code>(point-marker)</code>.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h15m35s">0:15:35</a></td>
<td class="left"><code>C-h f</code> (<code>describe-function</code>) shows the help for the function. Nearly all functions you&#8217;ll probably call are documented well. Lots of options. Check out <code>C-h f</code> for <code>interactive</code>, for example.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h17m17s">0:17:17</a></td>
<td class="left"><code>C-h v</code> (<code>describe-variable</code>).</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h17m46s">0:17:46</a></td>
<td class="left">More in-depth documentation: <code>C-h i</code>, go to the Emacs Lisp manual, then use <code>i</code> to view the index.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h18m22s">0:18:22</a></td>
<td class="left">info-lookmore shows you the Info documentation for the symbol under point. Works for other Lisps too (ex: Common Lisp)</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h19m46s">0:19:46</a></td>
<td class="left">Sanity-checking paired parentheses with <code>M-x check-parens</code>. Handy for adding to your <code>after-save-hook</code> in Emacs Lisp mode.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h20m40s">0:20:40</a></td>
<td class="left">Paredit editing capabilities. Ex: <code>C-k</code> kills the current sexp. <code>paredit-raise-sexp</code> replaces the parent sexp with the following sexp. slurping and barfing. Barfing &#8211; spitting out an element from the list form. <code>C-{</code> or <code>C-}</code> (with suggested keybindings). <code>C-(</code> and <code>C-)</code> are slurping, which pulls forms in. Works for strings, too.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h22m38s">0:22:38</a></td>
<td class="left">Maximum barfage and slurpage. Useful for slurping everything in, for example. paredit-slurp-all-the-way-forward.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h24m13s">0:24:13</a></td>
<td class="left">redshank (companion to paredit) for refactoring. Ex: <code>redshank-condify-form</code> converts an <code>if</code> to a <code>cond</code> for when you realize you&#8217;ve got more than two conditions.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h25m05s">0:25:05</a></td>
<td class="left"><code>M-1 M-(</code> surround the next one thing with parens</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h25m25s">0:25:25</a></td>
<td class="left">redshank: wrap a let, change if to a when, etc.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h25m52s">0:25:52</a></td>
<td class="left"><code>C-h k</code> (<code>describe-key</code>) shows what a keyboard shortcut or menu item will do.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h27m26s">0:27:26</a></td>
<td class="left">Took a while to get used to paredit, but you eventually get into the zen of paredit.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h27m54s">0:27:54</a></td>
<td class="left">Linter &#8211; <code>M-x elint-current-buffer</code>. Loads every module that your code depends on (so the first time is slow), and then shows you style notes.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h28m50s">0:28:50</a></td>
<td class="left"><code>C-q</code> for manually inserting parentheses</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h29m10s">0:29:10</a></td>
<td class="left">Helm, which shows you all the other stuff that matches your query. Lets you select by regex, multiple patterns, etc. Much nicer and more interactive.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h30m29s">0:30:29</a></td>
<td class="left">Profiler <code>M-x elp-instrument-function</code>, then call the function, then <code>elp-results</code> will show you the time it took to execute. Results aggregate, and are reset when you call <code>elp-results</code>.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h32m30s">0:32:30</a></td>
<td class="left">Measuring memory consumption. Also, internal representation of lists. <code>reverse</code> vs. <code>nreverse</code>. Like <code>nconc</code>, <code>nreverse</code>, <code>setcar</code>, <code>setcdr</code>. This can greatly speed up your code, if you can avoid using the garbage collector. EmacsWiki &#8211; <code>memory-use-counts</code>, but not particularly helpful? Another package that extends the Emacs Lisp profiler? Avoid premature optimization.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h38m55s">0:38:55</a></td>
<td class="left">elint and flycheck? flycheck&#8217;s designed for external processes, so that might be a challenge. Possibility: use <code>async</code> to spawn another Emacs? Doesn&#8217;t seem to be available yet.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h40m40s">0:40:40</a></td>
<td class="left">ert</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h48m11s">0:48:11</a></td>
<td class="left">testcover, coveralls.io, undercover.el</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h48m13s">0:48:13</a></td>
<td class="left">Read Emacs Lisp manual, etc.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h48m20s">0:48:20</a></td>
<td class="left">Creating a mode. You don&#8217;t have to make it from scartch &#8211; start by copying someone else, and then strip away everything you don&#8217;t want.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h49m58s">0:49:58</a></td>
<td class="left">checkdoc &#8211; checks the style of your documentation strings.</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h51m30s">0:51:30</a></td>
<td class="left">defining a minor mode</td>
</tr>
<tr>
<td class="left"><a href="https://www.youtube.com/watch?v=QRBcm6jFJ3Q&amp;t=0h56m08s">0:56:08</a></td>
<td class="left">when to define a major mode &#8211; structure of your buffer</td>
</tr>
</tbody>
</table>
<div class="powerpress_player" id="powerpress_player_2647"><audio class="wp-audio-shortcode" id="audio-28075-5" preload="none" style="width: 100%;" controls="controls"><source type="audio/mpeg" src="http://archive.org/download/20150408EmacsLispDevelopmentTipsWithJohnWiegley/2015-04-08-Emacs-Lisp-Development-Tips-with-John-Wiegley.mp3?_=5"><a href="http://archive.org/download/20150408EmacsLispDevelopmentTipsWithJohnWiegley/2015-04-08-Emacs-Lisp-Development-Tips-with-John-Wiegley.mp3">http://archive.org/download/20150408EmacsLispDevelopmentTipsWithJohnWiegley/2015-04-08-Emacs-Lisp-Development-Tips-with-John-Wiegley.mp3</a></audio></div><p class="powerpress_links powerpress_links_mp3">Podcast: <a href="http://archive.org/download/20150408EmacsLispDevelopmentTipsWithJohnWiegley/2015-04-08-Emacs-Lisp-Development-Tips-with-John-Wiegley.mp3" class="powerpress_link_pinw" target="_blank" title="Play in new window" onclick="return powerpress_pinw('https://sachachua.com/blog/?powerpress_pinw=28075-podcast');" rel="nofollow">Play in new window</a> | <a href="http://archive.org/download/20150408EmacsLispDevelopmentTipsWithJohnWiegley/2015-04-08-Emacs-Lisp-Development-Tips-with-John-Wiegley.mp3" class="powerpress_link_d" title="Download" rel="nofollow" download="2015-04-08-Emacs-Lisp-Development-Tips-with-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/2015/04/2015-04-08-emacs-lisp-development-tips-with-john-wiegley/#comment">view 3 comments</a> or <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2015%2F04%2F2015-04-08-emacs-lisp-development-tips-with-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>]]></content>
		</entry>
</feed>