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

>
<channel>
	<title>Sacha Chua - category - emacs</title>
	<atom:link href="https://sachachua.com/blog/category/emacs/feed/index.xml" rel="self" type="application/rss+xml" />
	<atom:link href="https://sachachua.com/blog/category/emacs" rel="alternate" type="text/html" />
	<link>https://sachachua.com/blog/category/emacs/feed/index.xml</link>
	<description>Emacs, sketches, and life</description>
  
	<lastBuildDate>Wed, 24 Jun 2026 14:55:30 GMT</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>11ty</generator>
  <item>
		<title>2026-06-22 Emacs news</title>
		<link>https://sachachua.com/blog/2026/06/2026-06-22-emacs-news/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Tue, 23 Jun 2026 02:30:26 GMT</pubDate>
    <category>emacs</category>
<category>emacs-news</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/06/2026-06-22-emacs-news/</guid>
		<description><![CDATA[<p>
There was lots of discussion around Rahul's post on Emacs 31. It's the
first link in the list below, so I won't repeat the links here. Also,
I like visualizations, so I thought these <a href="https://github.com/elij/grove-extra">force-directed graphs</a>
(<a href="https://www.reddit.com/r/emacs/comments/1u9vvt3/emacs_svg_rendering_in_force_directed_graph_sims/">Reddit</a>) and <a href="https://github.com/krvkir/org-mindmap">text-based mindmaps</a> (<a href="https://www.reddit.com/r/emacs/comments/1u82429/orgmindmap_v030/">Reddit</a>, <a href="https://lobste.rs/s/sqiyga/org_mindmap_editable_mindmaps_for_org">lobste.rs</a>) were pretty cool.
Enjoy!
</p>

<ul class="org-ul">
<li>Emacs 31:
<ul class="org-ul">
<li><a href="https://www.rahuljuliato.com/posts/emacs-31-around-the-corner">Emacs 31 Is Around the Corner: The Changes I'm Already Daily Driving</a> (<a href="https://www.reddit.com/r/emacs/comments/1u8vr3e/emacs_31_is_around_the_corner_the_changes_im/">Reddit</a>, <a href="https://news.ycombinator.com/item?id=48584135">HN</a>, <a href="https://lobste.rs/s/b0mp2e/changes_emacs_31_i_m_already_daily_driving">lobste.rs</a>, <a href="https://irreal.org/blog/?p=13889">Irreal</a>)</li>
</ul></li>
<li>Upcoming events (<a href="https://emacslife.com/calendar/emacs-calendar.ics">iCal file</a>, <a href="https://emacslife.com/calendar/">Org</a>):
<ul class="org-ul">
<li>Emacs Berlin: Emacs-Berlin Hybrid Meetup <a href="https://emacs-berlin.org/">https://emacs-berlin.org/</a> Wed Jun 24 1000 America/Vancouver - 1200 America/Chicago - 1300 America/Toronto - 1700 Etc/GMT - 1900 Europe/Berlin - 2230 Asia/Kolkata &ndash; Thu Jun 25 0100 Asia/Singapore</li>
<li>Emacs APAC: Emacs APAC meetup (virtual) <a href="https://emacs-apac.gitlab.io/announcements/">https://emacs-apac.gitlab.io/announcements/</a> Sat Jun 27 0130 America/Vancouver - 0330 America/Chicago - 0430 America/Toronto - 0830 Etc/GMT - 1030 Europe/Berlin - 1400 Asia/Kolkata - 1630 Asia/Singapore</li>
<li>EmacsATX: Emacs Social <a href="https://www.meetup.com/emacsatx/events/315091677/">https://www.meetup.com/emacsatx/events/315091677/</a> Thu Jul 2 1600 America/Vancouver - 1800 America/Chicago - 1900 America/Toronto - 2300 Etc/GMT &ndash; Fri Jul 3 0100 Europe/Berlin - 0430 Asia/Kolkata - 0700 Asia/Singapore</li>
<li>M-x Research: TBA <a href="https://m-x-research.github.io/">https://m-x-research.github.io/</a> Fri Jul 3 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1500 Etc/GMT - 1700 Europe/Berlin - 2030 Asia/Kolkata - 2300 Asia/Singapore</li>
<li>Emacs.si (in person): Emacs.si meetup #7 2026 (v #živo) <a href="https://dogodki.kompot.si/events/88d59360-d89a-42cc-b567-ed39ac5186fb">https://dogodki.kompot.si/events/88d59360-d89a-42cc-b567-ed39ac5186fb</a> Mon Jul 6 1900 CET</li>
</ul></li>
<li>Beginner:
<ul class="org-ul">
<li><a href="https://www.chiply.dev/post-ask-emacs">Emacs Teaches Emacs: The Missing README</a> (<a href="https://www.youtube.com/watch?v=5ZZvQA0Ceb4">YouTube</a> 13:57, <a href="https://www.reddit.com/r/emacs/comments/1u9k3td/emacs_teaches_emacs_the_missing_readme/">Reddit</a>, <a href="https://irreal.org/blog/?p=13891">Irreal</a>, <a href="https://fosstodon.org/@chiply/116773411167976275">@chiply@fosstodon.org</a>)</li>
<li><a href="https://www.chiply.dev/post-june-emacs-carnival">Charlie Holland: Juneau Something? Emacs Teaches You How to Fish!</a> (<a href="https://www.youtube.com/watch?v=vnJhd-AgOBE">YouTube</a> 01:13:19, <a href="https://www.reddit.com/r/emacs/comments/1u8b0we/juneau_something_emacs_teaches_you_how_to_fish/">Reddit</a>, <a href="https://irreal.org/blog/?p=13884">Irreal</a>, <a href="https://fosstodon.org/@chiply/116766579307318213">@chiply@fosstodon.org</a>)</li>
</ul></li>
<li>Emacs configuration:
<ul class="org-ul">
<li><a href="https://mbork.pl/2026-06-22_Disabling_minor_modes_with_local_variables">Marcin Borkowski: Disabling minor modes with local variables</a></li>
<li><a href="https://github.com/alberti42/straight-overview">For straight.el people: an overview of outdated packages, and control over what gets updated</a> (<a href="https://www.reddit.com/r/emacs/comments/1u9unvy/for_straightel_people_an_overview_of_outdated/">Reddit</a>)</li>
<li><a href="https://github.com/Borderliner/Chadmacs">Updated Chadmacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1u9sbki/updated_chadmacs/">Reddit</a>)</li>
<li><a href="https://github.com/66-firebat/emacs">Firemacs Review</a> (<a href="https://www.reddit.com/r/emacs/comments/1uctzm3/firemacs_review/">Reddit</a>)</li>
</ul></li>
<li>Emacs Lisp:
<ul class="org-ul">
<li><a href="https://fosstodon.org/@lucashtns/116796404126391963">Tip: debug-on-variable-change (@lucashtns)</a></li>
<li><a href="https://www.youtube.com/watch?v=WO00BWgvWro">Xah Talk Show Ep795. emacs lisp. add width height to html image thumbnails. part 2</a> (01:01:50), <a href="https://www.youtube.com/watch?v=-PpAGJ5_IsY">part 3</a> (02:19:51)</li>
<li><a href="https://www.youtube.com/watch?v=MjO74sC_10Q">Construindo um pacote do Emacs como um asteca</a> (01:33:45)</li>
</ul></li>
<li>Appearance:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1ubltvy/ghosting_cursor_effect/">Ghosting cursor effect</a></li>
<li><a href="https://github.com/barrulus/forge-cursor">Some cursor flare</a> (<a href="https://www.reddit.com/r/emacs/comments/1uavdc5/some_cursor_flare/">Reddit</a>)</li>
<li><a href="https://blog.davep.org/2026/06/15/more-mode-line-tweaking.html">Dave Pearson: More mode line tweaking</a></li>
<li><a href="https://www.reddit.com/gallery/1u9867g">Modus Nordic (Mid-)Night: high-contrast themes using the Nord color palette using Modus Themes as the base</a></li>
<li><a href="https://protesilaos.com/codelog/2026-06-17-emacs-testing-doric-themes-common-colour-values/">Protesilaos: Emacs: testing common colour values with the doric-themes</a></li>
<li><a href="https://protesilaos.com/codelog/2026-06-21-emacs-ef-themes-2-2-0/">Protesilaos: Emacs: ef-themes version 2.2.0</a></li>
<li><a href="https://protesilaos.com/codelog/2026-06-21-emacs-modus-themes-5-3-0/">Protesilaos: Emacs: modus-themes version 5.3.0</a></li>
</ul></li>
<li>Navigation:
<ul class="org-ul">
<li><a href="https://emacsredux.com/blog/2026/06/20/essential-structured-navigation-and-editing-commands/">Emacs Redux: Essential Structured Navigation and Editing Commands</a> (<a href="https://irreal.org/blog/?p=13893">Irreal</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1uafbsn/underappreciated_emacs_builtins_hideshow_60/">Underappreciated Emacs built-ins: hideshow 6.0</a></li>
<li><a href="https://www.youtube.com/watch?v=ITR_gXnV9wo">Emacs HideShow Minor Mode For Folding And Unfolding 2026_06_21_03:01:51</a> (07:02)</li>
<li><a href="https://github.com/dalanicolai/jerboa">Amazing bookmarks (or quick keymaps)</a> (<a href="https://www.reddit.com/r/emacs/comments/1uc9a9i/amazing_bookmarks_or_quick_keymaps/">Reddit</a>)</li>
<li><a href="https://mbork.pl/2026-06-15_Scrolling_pdfs_in_other_windows">Marcin Borkowski: Scrolling pdfs in other windows</a> (<a href="https://irreal.org/blog/?p=13880">Irreal</a>)</li>
<li><a href="https://www.youtube.com/watch?v=-u0xfy5JMdU">How to Split the Screen in Emacs</a> (02:02)</li>
</ul></li>
<li>Dired:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1u9nbbg/dired_global_script_runner_a_yaziinspired_global/">Dired Global Script Runner: A Yazi-inspired global file marking system for Dired</a></li>
</ul></li>
<li>Writing:
<ul class="org-ul">
<li><a href="https://github.com/luqtas/log-mode">luqtas/log-mode: cheap copy of Logseq with some extra goods · GitHub</a></li>
</ul></li>
<li>Org Mode:
<ul class="org-ul">
<li>RFC: <a href="https://i.redd.it/p05xlhzi9i7h1.png">Ideas for clearer Org clock idle resolution prompts?</a> (<a href="https://www.reddit.com/r/orgmode/comments/1u6sewx/ideas_for_clearer_org_clock_idle_resolution/">Reddit</a>)</li>
<li><a href="https://list.orgmode.org/CH3PR84MB3424DDF3E642AB403B70D177C50F2@CH3PR84MB3424.NAMPRD84.PROD.OUTLOOK.COM">[RFC] org-agenda log-mode is very confusing - Morgan Smith</a> (<a href="https://www.reddit.com/r/orgmode/comments/1u6sewx/ideas_for_clearer_org_clock_idle_resolution/">Reddit</a>)</li>
<li><a href="https://list.orgmode.org/CAL1eYuJMqwZNPxnoGhWGSp63=Gg1iToHzKrcgVdpJfWhiS83kg@mail.gmail.com">[FR] add :company-doc-buffer, :company-kind etc properties for pcomplete in org-mode - stardiviner</a></li>
<li><a href="https://github.com/kpassapk/devops.el">devops.el - Infrastructure as an org file</a> (<a href="https://www.reddit.com/r/emacs/comments/1ucu6xp/devopsel_infrastructure_as_an_org_file/">Reddit</a>)</li>
<li><a href="https://github.com/kickingvegas/anju/discussions/156">v1.6.0 · kickingvegas/anju · context menu support for Org agenda</a> (<a href="https://sfba.social/@kickingvegas/116767945517592307">@kickingvegas@sfba.social</a>)</li>
<li><a href="https://ray-on-emacs.blogspot.com/2026/06/emacs-carnival-diary-part-2.html">Raymond Zeitler: Emacs Carnival: diary, Part 2</a> (<a href="https://irreal.org/blog/?p=13882">Irreal</a>)</li>
<li><a href="https://github.com/krvkir/org-mindmap">org-mindmap v0.3.0</a> (<a href="https://www.reddit.com/r/emacs/comments/1u82429/orgmindmap_v030/">Reddit</a>, <a href="https://lobste.rs/s/sqiyga/org_mindmap_editable_mindmaps_for_org">lobste.rs</a>)</li>
<li><a href="https://www.macs.hw.ac.uk/~rs46/posts/2026-06-12-eisvogel-org-export-pdf.html">Exporting org files to PDF with the Eisvogel latex template</a> (<a href="https://www.reddit.com/r/emacs/comments/1u7eq0g/exporting_org_files_to_pdf_with_the_eisvogel/">Reddit</a>)</li>
<li><a href="https://list.orgmode.org/87zf0me6so.fsf@gmail.com">Org Mode requests: [FR] Exporter for ltx-talk</a></li>
<li><a href="https://list.orgmode.org/8733ygi64t.fsf@localhost/T/#u">Notes on recent OrgDevMeetup</a> (<a href="https://www.reddit.com/r/orgmode/comments/1u7nntz/new_orgdevmeetup_on_saturday_lets_contribute_to/">Reddit</a>)</li>
<li>Org development: <a href="https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/etc/ORG-NEWS?id=07c6db9bc8f4626e21e3c6a275b1640f6202cf14">org-colview: Add quick help for column view</a></li>
</ul></li>
<li>Completion:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1ub7h89/underappreciated_emacs_builtins/">Underappreciated Emacs built-ins: completion-preview-mode</a></li>
</ul></li>
<li>Coding:
<ul class="org-ul">
<li><a href="https://metaredux.com/posts/2026/06/16/cider-1-22.html">Meta Redux: CIDER 1.22 (“São Miguel”)</a></li>
<li><a href="http://box.matto.nl/start-guile-shell-script-that-listens-on-a-port-for-repl-client.html">Start Guile shell script that listens on a port for REPL client - box.matto.nl</a> (<a href="https://snac.lab8.cz/mattof/p/1781641221.269522">@mattof@snac.lab8.cz</a>)</li>
<li><a href="https://codeberg.org/hgrsd/ztags">hgrsd/ztags: Generate ctags-based tags for your Zig project, including Zig sources and stdlib.</a> (<a href="https://hachyderm.io/@hgrsd/116798677831846923">@hgrsd@hachyderm.io</a>) - now supports etags output</li>
<li><a href="https://git.sr.ht/~shoshin/ruby-khipu">~shoshin/ruby-khipu - Implementation of the Inka Khipu as a data structure in Ruby. - sourcehut git</a> (<a href="https://buzz.cicadas.surf/@shoshin/116757888253657531">@shoshin@buzz.cicadas.surf</a>) - literate programming</li>
</ul></li>
<li>Shells:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1u9l3fp/ghostel_is_fantastic/">Ghostel is Fantastic</a> (<a href="https://github.com/dakra/ghostel">Github</a>)</li>
<li><a href="https://github.com/csheaff/tmux-control">tmux-control : control-mode client for tmux</a> (<a href="https://www.reddit.com/r/emacs/comments/1u7wgfz/tmuxcontrol_controlmode_client_for_tmux/">Reddit</a>)</li>
<li><a href="https://cashmere.rs/blog/kitty-graphicsel-v100-document-zoom-pan-and-doctor/">kitty-graphics.el 1.0.0: images, video, and documents in terminal Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1u7f5lw/kittygraphicsel_100_images_video_and_documents_in/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1u78ufn/eatserial_an_eat_term_based_serial_terminal/">eat-serial: An eat term based serial terminal</a></li>
</ul></li>
<li>Web:
<ul class="org-ul">
<li><a href="https://ohyecloudy.com/emacsian/2024/05/11/web-archive/">URL로부터 Title을 가져오고 Web Archive 링크를 생성하는 Emacs 함수 - (emacsian ohyecloudy)</a></li>
</ul></li>
<li>Mail, news, and chat:
<ul class="org-ul">
<li><a href="https://github.com/parenworks/clatter.el">Clatter: An IRCv3-compliant IRC client</a> (<a href="https://www.reddit.com/r/emacs/comments/1ucq5vy/clatter_an_ircv3compliant_irc_client/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=HlEuXpG992A">Elfeed 4 0 0 使用分享</a> (49:47)</li>
</ul></li>
<li>Evil mode:
<ul class="org-ul">
<li><a href="https://fosstodon.org/@rogerfarrell/116772158102613873">evil-mode tip: make \ allow one-off normal state execution (@rogerfarrell)</a></li>
</ul></li>
<li>Multimedia:
<ul class="org-ul">
<li><a href="https://en.andros.dev/blog/4b707a03/how-i-built-a-gpu-backend-for-emacs/">How I built a GPU backend for Emacs | Andros Fenollosa</a> (<a href="https://activity.andros.dev/@andros/statuses/01KVSY47V3RWJRE42MJWA6214E">@andros@activity.andros.dev</a>)
<ul class="org-ul">
<li><a href="https://andros.dev/blog/ea7a1527/como-construi-un-backend-de-gpu-para-emacs/">Cómo construí un backend de GPU para Emacs | Andros Fenollosa</a></li>
</ul></li>
<li><a href="https://github.com/elij/grove-extra">Emacs SVG rendering in force directed graph sims revisited</a> (<a href="https://www.reddit.com/r/emacs/comments/1u9vvt3/emacs_svg_rendering_in_force_directed_graph_sims/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=Btrw8g8GTjQ">Speech to text with Whisper-cpp Emacs and whisper.el</a> (55:56)</li>
<li><a href="https://xenodium.com/ytr-youtube-radio-for-emacs">Alvaro Ramirez: ytr: YouTube radio for Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1ucwbi8/ytr_youtube_radio_for_emacs/">Reddit</a>, <a href="https://news.ycombinator.com/item?id=48636380">HN</a>)</li>
</ul></li>
<li>AI:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=7fdHeUoRRgg">Bending Emacs Episode 14: Prototyping iOS apps with agent-shell, artist-mode, and Claude Skills</a> (<a href="https://www.youtube.com/watch?v=7fdHeUoRRgg">YouTube</a> 26:39, <a href="https://www.reddit.com/r/emacs/comments/1u9eage/bending_emacs_episode_14_prototyping_ios_apps/">Reddit</a>)</li>
</ul></li>
<li>Community:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1u71nm1/fortnightly_tips_tricks_and_questions_20260616/">Fortnightly Tips, Tricks, and Questions — 2026-06-16 / week 24</a></li>
<li><a href="https://blogsystem5.substack.com/p/is-anyone-still-using-emacs">Is anyone still using Emacs? - by Julio Merino</a>  (<a href="https://lobste.rs/s/s1ep1w/is_anyone_still_using_emacs">lobste.rs</a>, <a href="https://news.ycombinator.com/item?id=48615739">HN</a>, <a href="https://news.ycombinator.com/item?id=48615739">HN</a>)</li>
<li><a href="https://xvw.lol/en/articles/emacs-start.html">xvw.lol - Emacs, how it all started (for me)</a> (<a href="https://news.ycombinator.com/item?id=48542784">HN</a>, <a href="https://merveilles.town/@xvw/116754855899834357">@xvw@merveilles.town</a>)
<ul class="org-ul">
<li><a href="https://xvw.lol/pages/emacs-start.html">xvw.lol - Emacs, comment tout a démarré (pour moi)</a></li>
</ul></li>
<li><a href="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/">Sacha Chua: Emacs Chat 26: Ross A. Baker</a> (<a href="https://www.youtube.com/watch?v=_tEcqbi_2o8">YouTube</a> 01:02:45)</li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="https://ray-on-emacs.blogspot.com/2026/06/emacs-carnival-diary-part-1.html">Raymond Zeitler: Emacs Carnival: diary, Part 1</a></li>
<li><a href="https://blog.davep.org/2026/06/16/become-el-v1-4-0.html">Dave Pearson: become.el v1.4.0</a> - tidying files before saving</li>
<li><a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Document-View.html">Document View (GNU Emacs Manual)</a> (<a href="https://mathstodon.xyz/@annamalai/116758228616242732">@annamalai@mathstodon.xyz</a>) - can open PDFs as plain text</li>
<li><a href="https://monadicsheep.org/blog/hello.html">Monadic Sheep: Hello there!</a> - Emacs Reader, PALE (picture and animation), canvas patch, Insidious YouTube client</li>
<li><a href="https://masutaka.net/en/2026-06-21-1/">Switching from the Mac port Build of Emacs to the Standard NS Build | Masutaka's ChangeLog Memo</a>
<ul class="org-ul">
<li><a href="https://masutaka.net/2026-06-21-1/">Mac port 版 Emacs から、標準の NS 版に乗り換えられた | マスタカの ChangeLog メモ</a></li>
</ul></li>
</ul></li>
<li>Emacs development:
<ul class="org-ul">
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=c7b156dce38a51aff3096fb34a8fbfccfb6c077c">gv.el: Allow use of `ignore` as a place (bug#81217)</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=e13fb667a2179548a1b57bf1e345b5a1dc00bb24">Support OSC 8 hyperlinks in man pages</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=3e0915c68825ca88244ddf1f670f6dd62dcd131c">; * etc/NEWS: Document 'newsticker-treeview-copy-url' (bug#81013).</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=08f02cbae08ccd945fc09d48c3ee02dce628bee8">VC-Dir shows key binding hints</a></li>
</ul></li>
<li>New packages:
<ul class="org-ul">
<li><a target="_blank" href="https://melpa.org/#/clatter">clatter</a>: An IRCv3-compliant IRC client (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/countdown-modeline">countdown-modeline</a>: Display a color-coded countdown in the modeline (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/leadkey">leadkey</a>: Translate leader keys to key sequences (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/notmuch-multi">notmuch-multi</a>: Prettified Notmuch UI For Multiple Accounts (MELPA)</li>
</ul></li>
</ul>

<p>
Links from <a href="https://www.reddit.com/r/emacs">reddit.com/r/emacs</a>, <a href="https://www.reddit.com/r/orgmode">r/orgmode</a>, <a href="https://www.reddit.com/r/spacemacs">r/spacemacs</a>, <a href="https://mastodon.social/tags/emacs">Mastodon #emacs</a>, <a href="https://bsky.app/hashtag/emacs">Bluesky #emacs</a>, <a href="https://hn.algolia.com/?query=emacs&amp;sort=byDate&amp;prefix&amp;page=0&amp;dateRange=all&amp;type=story">Hacker News</a>, <a href="https://lobste.rs/search?q=emacs&amp;what=stories&amp;order=newest">lobste.rs</a>, <a href="https://programming.dev/c/emacs?dataType=Post&amp;page=1&amp;sort=New">programming.dev</a>, <a href="https://lemmy.world/c/emacs">lemmy.world</a>, <a href="https://lemmy.ml/c/emacs?dataType=Post&amp;page=1&amp;sort=New">lemmy.ml</a>, <a href="https://planet.emacslife.com">planet.emacslife.com</a>, <a href="https://www.youtube.com/playlist?list=PL4th0AZixyREOtvxDpdxC9oMuX7Ar7Sdt">YouTube</a>, <a href="http://git.savannah.gnu.org/cgit/emacs.git/log/etc/NEWS">the Emacs NEWS file</a>, <a href="https://emacslife.com/calendar/">Emacs Calendar</a>, and <a href="https://lists.gnu.org/archive/html/emacs-devel/2026-06">emacs-devel</a>. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at <a href="mailto:sacha@sachachua.com">sacha@sachachua.com</a>. Thank you!
</p>
<div><a href="https://sachachua.com/blog/2026/06/2026-06-22-emacs-news/index.org">View Org source for this post</a></div>
<p>You can <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2026%2F06%2F2026-06-22-emacs-news%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>Emacs Chat 26: Ross A. Baker</title>
		<link>https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Thu, 18 Jun 2026 18:28:45 GMT</pubDate>
    <category>emacs</category>
<category>emacs-chat-podcast</category>
<category>emacs-chat</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/</guid>
		<description><![CDATA[<div class="update" id="org74dd95d">
<p>
<span class="timestamp-wrapper"><time class="timestamp" datetime="2026-06-19">[2026-06-19 Fri]</time></span>: Added transcript.
</p>

</div>

<p>
I chatted with <a href="https://rossabaker.com/">Ross Baker</a> about Emacs (including running Emacs 28), his Emacs config, and life.
<video preload="none" controls="1" src="https://archive.org/download/emacs-chat-26-ross-a-baker/emacs-chat-26-ross-a-baker.mp4" poster="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/2026-04-22-14-14-12%20emacs-chat-ross-a-baker.png" type="video/mp4"><track kind="subtitles" label="Captions" src="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker.vtt" srclang="en" default=""><span>Video not supported. Thumbnail:<br><img src="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/2026-04-22-14-14-12%20emacs-chat-ross-a-baker.png" alt="Thumbnail"></span></video>
</p>

<p>
<a href="https://archive.org/details/emacs-chat-26-ross-a-baker/">View in the Internet Archive</a>, <a href="https://youtube.com/live/_tEcqbi_2o8">watch or comment on YouTube</a>, <a href="https://sachachua.com/blog/feed/index.xml#ID-emacs-chat-26-ross-a-baker-transcript">read the transcript online</a>, <a href="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker.vtt">download 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://rossabaker.com/blog/">Blog</a>
<ul class="org-ul">
<li><a href="https://rossabaker.com/tags/emacs/">Posts tagged #emacs</a></li>
<li><a href="https://rossabaker.com/blog/take-two-coming-home-to-emacs/">Ross A. Baker: Take Two: Coming Home to 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>
<li><a href="https://github.com/matthewbauer/bauer">matthewbauer/bauer: An Emacs+Nix IDE · GitHub</a></li>
<li><a href="https://rossabaker.com/blog/multilingualism_in_a_global_web/">Ross A. Baker: Multilingualism in a Global Web</a> (<a href="https://rossabaker.com/blog/multilingualism_in_a_global_web/">DE</a>, <a href="https://es.rossabaker.com/blog/multiling%C3%BCismo_en_una_web_global/">ES</a>)</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 id="outline-container-emacs-chat-26-ross-a-baker-chapters" class="outline-3">
<h3 id="emacs-chat-26-ross-a-baker-chapters"><a href="https://sachachua.com/blog/feed/index.xml#emacs-chat-26-ross-a-baker-chapters">Chapters</a></h3>
<div class="outline-text-3" id="text-emacs-chat-26-ross-a-baker-chapters">
<p>
</p><ul class="org-ul">
<li><span class="audio-time" data-start="0.588" data-stop="12.608">0:00</span> Opening</li>
<li><span class="audio-time" data-start="46.369" data-stop="48.513">0:46</span> What Ross does</li>
<li><span class="audio-time" data-start="126.593" data-stop="130.518">2:06</span> How Ross got into Emacs, used other editors, and then came back to Emacs</li>
<li><span class="audio-time" data-start="298.280" data-stop="304.213">4:58</span> Config focusing on built-ins</li>
<li><span class="audio-time" data-start="612.276" data-stop="614.479">10:12</span> simple-orderless</li>

<li><span class="audio-time" data-start="869.245" data-stop="870.967">14:29</span> Size indicator</li>
<li><span class="audio-time" data-start="1000.719" data-stop="1004.344">16:40</span> Graceful degradation</li>
<li><span class="audio-time" data-start="1068.860" data-stop="1071.006">17:48</span> emacs-lock-mode</li>

<li><span class="audio-time" data-start="1192.334" data-stop="1194.177">19:52</span> exiting Emacs: yes-or-no-p</li>
<li><span class="audio-time" data-start="1246.791" data-stop="1248.072">20:46</span> yes-or-no-p</li>
<li><span class="audio-time" data-start="1305.548" data-stop="1307.451">21:45</span> Processes</li>
<li><span class="audio-time" data-start="1338.359" data-stop="1341.264">22:18</span> Moving keymaps</li>
<li><span class="audio-time" data-start="1463.726" data-stop="1467.313">24:23</span> Writing in Org Mode and Markdown</li>
<li><span class="audio-time" data-start="1669.170" data-stop="1672.596">27:49</span> Ethersync?</li>
<li><span class="audio-time" data-start="1756.171" data-stop="1759.435">29:16</span> Managing Github with Forge</li>

<li><span class="audio-time" data-start="2149.501" data-stop="2152.185">35:49</span> Committing with work addresses vs personal</li>
<li><span class="audio-time" data-start="2233.533" data-stop="2235.496">37:13</span> Emacs tinkering as stress relief</li>
<li><span class="audio-time" data-start="2466.157" data-stop="2468.303">41:06</span> Under-appreciated Emacs built-ins</li>
<li><span class="audio-time" data-start="2540.502" data-stop="2543.907">42:20</span> gptel</li>
<li><span class="audio-time" data-start="2764.997" data-stop="2767.179">46:04</span> Getting older</li>
<li><span class="audio-time" data-start="2806.799" data-stop="2810.423">46:46</span> Lindy's Law and tool longevity</li>
<li><span class="audio-time" data-start="2991.000" data-stop="2994.726">49:51</span> Nix is good at managing package versions and customizing them; Matthew Bauer (Bauer IDE)</li>

<li><span class="audio-time" data-start="3205.336" data-stop="3207.501">53:25</span> Custom fonts</li>
<li><span class="audio-time" data-start="3270.913" data-stop="3272.037">54:30</span> Starter kits versus configs</li>
<li><span class="audio-time" data-start="3334.711" data-stop="3335.912">55:34</span> Nix vs Guix; Mac</li>
<li><span class="audio-time" data-start="3386.894" data-stop="3390.137">56:26</span> Non-work interests: Org for documenting; ox-hugo and multiple languages</li>
</ul>

<p></p>
</div>
</div>
<div id="outline-container-emacs-chat-26-ross-a-baker-transcript-section" class="outline-3">
<h3 id="emacs-chat-26-ross-a-baker-transcript-section"><a href="https://sachachua.com/blog/feed/index.xml#emacs-chat-26-ross-a-baker-transcript-section">Transcript</a></h3>
<div class="outline-text-3" id="text-emacs-chat-26-ross-a-baker-transcript-section">
<details class="code-details"><a name="ID-emacs-chat-26-ross-a-baker-transcript"></a><summary>Expand this to read the transcript</summary>
<p>
</p><div class="full-transcript"><p></p><div class="transcript-heading"><span class="audio-time" data-start="0.000000">0:00</span> <strong>Opening</strong></div><p></p><span class="audio-time caption" data-speaker="" data-start="0.588000" data-stop="12.608000">[opening stuff]</span> <span class="audio-time caption" data-speaker="" data-start="14.070000" data-stop="16.835000">Emacs Chat 26 is Ross A. Baker.</span> <span class="audio-time caption" data-speaker="" data-start="17.616000" data-stop="20.181000">You can find him at rossabaker.com.</span> <span class="audio-time caption" data-speaker="" data-start="20.201000" data-stop="22.364000">Today, we've got a lot of interesting things</span> <span class="audio-time caption" data-speaker="" data-start="22.404000" data-stop="24.748000">to dig into, including his two-part Emacs</span> <span class="audio-time caption" data-speaker="" data-start="24.788000" data-stop="25.870000">configuration,</span> <span class="audio-time caption" data-speaker="" data-start="25.850000" data-stop="29.017000">plus of course, all the things that he does.</span> <span class="audio-time caption" data-speaker="" data-start="29.037000" data-stop="31.964000">The goal with Emacs Chat is to show some of</span> <span class="audio-time caption" data-speaker="" data-start="32.024000" data-stop="33.568000">the things that aren't obvious from the</span> <span class="audio-time caption" data-speaker="" data-start="33.628000" data-stop="35.533000">configuration, like how the different pieces</span> <span class="audio-time caption" data-speaker="" data-start="35.613000" data-stop="38.199000">actually work together or what the workflow feels like.</span> <span class="audio-time caption" data-speaker="" data-start="38.560000" data-stop="40.885000">But before we dive into that, Ross, can you tell</span> <span class="audio-time caption" data-speaker="" data-start="40.925000" data-stop="42.549000">us a little bit about your background?</span> <span class="audio-time caption" data-speaker="" data-start="42.569000" data-stop="43.391000">What's the context here?</span> <span class="audio-time caption" data-speaker="" data-start="43.411000" data-stop="44.213000">What do you like to do?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="45.307000" data-stop="45.788000"><strong class="speaker-name">Ross:</strong>  Oh, sure.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="46.000000">0:46</span> <strong>What Ross does</strong></div><p></p><span class="audio-time caption" data-speaker="Ross" data-start="46.369000" data-stop="48.513000"><strong class="speaker-name">Ross:</strong> So for work, I'm a backend engineer.</span> <span class="audio-time caption" data-speaker="Ross" data-start="48.814000" data-stop="51.679000">I'm somewhat well known in the Scala community.</span> <span class="audio-time caption" data-speaker="Ross" data-start="51.699000" data-stop="54.504000">I've done that for a long time on an open-source basis.</span> <span class="audio-time caption" data-speaker="Ross" data-start="54.524000" data-stop="56.709000">I've taken an interest in Rust here recently.</span> <span class="audio-time caption" data-speaker="Ross" data-start="56.769000" data-stop="59.915000">Those are the two primary languages I work in.</span> <span class="audio-time caption" data-speaker="Ross" data-start="59.935000" data-stop="62.940000">I work for a financial company.</span> <span class="audio-time caption" data-speaker="Ross" data-start="63.001000" data-stop="65.866000">We maintain the apps for small- and regional-sized</span> <span class="audio-time caption" data-speaker="Ross" data-start="65.906000" data-stop="67.990000">banks in the United States.</span> <span class="audio-time caption" data-speaker="Ross" data-start="67.970000" data-stop="69.391000">Fairly fun work there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="69.412000" data-stop="71.994000">It's kept me quite busy here lately.</span> <span class="audio-time caption" data-speaker="Ross" data-start="72.234000" data-stop="74.217000">For other things I like to do for fun, like to go</span> <span class="audio-time caption" data-speaker="Ross" data-start="74.277000" data-stop="76.118000">for a jog, like to push away from the computer</span> <span class="audio-time caption" data-speaker="Ross" data-start="76.179000" data-stop="76.699000">now and then.</span> <span class="audio-time caption" data-speaker="Ross" data-start="76.839000" data-stop="79.002000">So I go jogging every day, try to run about nine</span> <span class="audio-time caption" data-speaker="Ross" data-start="79.042000" data-stop="79.882000">miles every day.</span> <span class="audio-time caption" data-speaker="Ross" data-start="82.745000" data-stop="87.911000">My two big de-stressors are the running</span> <span class="audio-time caption" data-speaker="Ross" data-start="88.091000" data-stop="90.373000">and the fiddling with my Emacs configuration,</span> <span class="audio-time caption" data-speaker="Ross" data-start="90.574000" data-stop="92.115000">kind of opposite sides of the coin.</span> <span class="audio-time caption" data-speaker="Ross" data-start="92.135000" data-stop="94.838000">But I need them both to stay happy, I think.</span> <span class="audio-time caption" data-speaker="Ross" data-start="95.847000" data-stop="97.029000">That makes sense.</span> <span class="audio-time caption" data-speaker="Ross" data-start="97.649000" data-stop="99.171000">Also a soccer coach.</span> <span class="audio-time caption" data-speaker="Ross" data-start="99.452000" data-stop="101.274000">My kid is in high school and coached his</span> <span class="audio-time caption" data-speaker="Ross" data-start="101.314000" data-stop="102.336000">recreational team.</span> <span class="audio-time caption" data-speaker="Ross" data-start="102.676000" data-stop="104.118000">They have a lot of fun with that as well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="105.139000" data-stop="105.840000"><strong class="speaker-name">Sacha:</strong>  Yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="105.900000" data-stop="107.603000">One of your blog posts mentions that you've been</span> <span class="audio-time caption" data-speaker="Sacha" data-start="107.623000" data-stop="110.967000">publishing your youth soccer webpage in ox-hugo.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="112.029000" data-stop="112.469000"><strong class="speaker-name">Ross:</strong>  That's right.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="113.310000" data-stop="114.472000"><strong class="speaker-name">Sacha:</strong>  Emacs can be used for everything.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="115.413000" data-stop="116.054000"><strong class="speaker-name">Ross:</strong>  It can, yeah.</span> <span class="audio-time caption" data-speaker="Ross" data-start="116.254000" data-stop="117.636000">That's right.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="117.903000" data-stop="121.708000"><strong class="speaker-name">Sacha:</strong>  We're also very curious about how</span> <span class="audio-time caption" data-speaker="Sacha" data-start="121.768000" data-stop="124.491000">people get into Emacs and what makes them stick</span> <span class="audio-time caption" data-speaker="Sacha" data-start="124.531000" data-stop="125.192000">with Emacs.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="126.000000">2:06</span> <strong>How Ross got into Emacs, used other editors, and then came back to Emacs</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="126.593000" data-stop="130.518000"><strong class="speaker-name">Sacha:</strong> In your story for the Emacs Carnival in Take 2,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="130.878000" data-stop="132.681000">you shared how you got into Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="132.741000" data-stop="136.425000">Well, you were introduced to Emacs in 1997, but</span> <span class="audio-time caption" data-speaker="Sacha" data-start="136.465000" data-stop="137.366000">you actually left.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="137.567000" data-stop="140.350000">You used other editors for a while because of work,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="140.718000" data-stop="142.440000">and then you came back to Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="142.460000" data-stop="145.244000">Was it primarily for Haskell and Clojure, or were</span> <span class="audio-time caption" data-speaker="Sacha" data-start="145.284000" data-stop="150.411000">there other reasons that got you interested in it?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="150.431000" data-stop="153.039000"><strong class="speaker-name">Ross:</strong>  Yeah, when I was at the Haskell shop,</span> <span class="audio-time caption" data-speaker="Ross" data-start="153.040000" data-stop="155.477000">it was something that a lot... When</span> <span class="audio-time caption" data-speaker="Ross" data-start="155.497000" data-stop="157.360000">you get out into the workplace, there's very few</span> <span class="audio-time caption" data-speaker="Ross" data-start="157.500000" data-stop="159.763000">Emacs users, relatively speaking, in most</span> <span class="audio-time caption" data-speaker="Ross" data-start="159.783000" data-stop="160.344000">workplaces.</span> <span class="audio-time caption" data-speaker="Ross" data-start="160.364000" data-stop="161.746000">But when you're in a Haskell shop, that's what</span> <span class="audio-time caption" data-speaker="Ross" data-start="161.806000" data-stop="162.947000">almost everybody uses.</span> <span class="audio-time caption" data-speaker="Ross" data-start="162.967000" data-stop="165.531000">So being surrounded by that, that was a good</span> <span class="audio-time caption" data-speaker="Ross" data-start="165.851000" data-stop="167.113000">reason to get back into it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="167.173000" data-stop="168.694000">I'd been dabbling in it a little bit</span> <span class="audio-time caption" data-speaker="Ross" data-start="168.695000" data-stop="170.337000">before that, even.</span> <span class="audio-time caption" data-speaker="Ross" data-start="170.317000" data-stop="173.199000">I had a really good time with it originally.</span> <span class="audio-time caption" data-speaker="Ross" data-start="173.200000" data-stop="175.563000">I got into it like so many people did back then.</span> <span class="audio-time caption" data-speaker="Ross" data-start="175.583000" data-stop="177.506000">I got into it in college, showed up, and that's</span> <span class="audio-time caption" data-speaker="Ross" data-start="177.546000" data-stop="178.867000">what the professor was using.</span> <span class="audio-time caption" data-speaker="Ross" data-start="178.887000" data-stop="180.509000">The first language that we learned there was</span> <span class="audio-time caption" data-speaker="Ross" data-start="180.569000" data-stop="182.872000">Scheme, which is a Lisp dialect, so it's a</span> <span class="audio-time caption" data-speaker="Ross" data-start="182.932000" data-stop="183.933000">natural fit there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="184.734000" data-stop="187.938000">Back then Emacs and Vim were the two dominant</span> <span class="audio-time caption" data-speaker="Ross" data-start="188.018000" data-stop="189.881000">editors at that point, so it was pretty much one</span> <span class="audio-time caption" data-speaker="Ross" data-start="189.921000" data-stop="190.421000">or the other.</span> <span class="audio-time caption" data-speaker="Ross" data-start="190.441000" data-stop="192.083000">If you were learning a Lisp dialect in</span> <span class="audio-time caption" data-speaker="Ross" data-start="192.123000" data-stop="193.905000">school, the professor was going to guide you</span> <span class="audio-time caption" data-speaker="Ross" data-start="193.945000" data-stop="195.227000">toward Emacs.</span> <span class="audio-time caption" data-speaker="Ross" data-start="195.207000" data-stop="196.828000">I got that initial shove</span> <span class="audio-time caption" data-speaker="Ross" data-start="196.829000" data-stop="198.171000">and fell in love with it there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="198.351000" data-stop="200.134000">Then I got out into the workplace, and in the</span> <span class="audio-time caption" data-speaker="Ross" data-start="200.154000" data-stop="202.817000">workplace back then, it was very rigid.</span> <span class="audio-time caption" data-speaker="Ross" data-start="202.837000" data-stop="204.960000">You would have to use the commercial editor that</span> <span class="audio-time caption" data-speaker="Ross" data-start="205.000000" data-stop="207.363000">was integrated with all the IBM software,</span> <span class="audio-time caption" data-speaker="Ross" data-start="207.364000" data-stop="210.086000">so I had to use these specific things</span> <span class="audio-time caption" data-speaker="Ross" data-start="210.087000" data-stop="211.870000">and I couldn't use Emacs anymore.</span> <span class="audio-time caption" data-speaker="Ross" data-start="213.011000" data-stop="215.875000">I did dabble in Vim a little bit as well and I</span> <span class="audio-time caption" data-speaker="Ross" data-start="215.935000" data-stop="217.958000">liked the efficiency of editing</span> <span class="audio-time caption" data-speaker="Ross" data-start="217.938000" data-stop="220.081000">that came from both Emacs and Vim.</span> <span class="audio-time caption" data-speaker="Ross" data-start="220.221000" data-stop="222.204000">Vim was easier to emulate than these other</span> <span class="audio-time caption" data-speaker="Ross" data-start="222.265000" data-stop="223.426000">editors that I had to use.</span> <span class="audio-time caption" data-speaker="Ross" data-start="223.446000" data-stop="226.771000">That had me on a Vim path for a little while.</span> <span class="audio-time caption" data-speaker="Ross" data-start="226.791000" data-stop="228.895000">But then scripting it just wasn't as satisfying</span> <span class="audio-time caption" data-speaker="Ross" data-start="228.955000" data-stop="229.896000">as Emacs.</span> <span class="audio-time caption" data-speaker="Ross" data-start="231.198000" data-stop="232.620000">It was always really calling to me.</span> <span class="audio-time caption" data-speaker="Ross" data-start="232.680000" data-stop="235.445000">I felt like I was in exile while I was outside of</span> <span class="audio-time caption" data-speaker="Ross" data-start="235.525000" data-stop="235.965000">Emacs.</span> <span class="audio-time caption" data-speaker="Ross" data-start="235.985000" data-stop="237.668000">Then, when I had a chance to start picking my</span> <span class="audio-time caption" data-speaker="Ross" data-start="237.728000" data-stop="239.971000">own editor and customizing things again and</span> <span class="audio-time caption" data-speaker="Ross" data-start="240.072000" data-stop="241.794000">getting up to speed with other people who were</span> <span class="audio-time caption" data-speaker="Ross" data-start="241.874000" data-stop="244.017000">using Emacs, it was just natural to come home,</span> <span class="audio-time caption" data-speaker="Ross" data-start="244.078000" data-stop="245.700000">and here I am again.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="246.440000" data-stop="247.081000"><strong class="speaker-name">Sacha:</strong>  Nice.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="248.623000" data-stop="251.687000">Many people haven't had the experience of working</span> <span class="audio-time caption" data-speaker="Sacha" data-start="251.747000" data-stop="254.291000">with other Emacs users in the same company.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="254.391000" data-stop="255.613000">So what is it like?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="255.813000" data-stop="260.039000">Were you swapping lots of config around, pair</span> <span class="audio-time caption" data-speaker="Sacha" data-start="260.079000" data-stop="261.380000">programming, that sort of thing?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="262.563000" data-stop="264.264000"><strong class="speaker-name">Ross:</strong>  Yeah, pair programming,</span> <span class="audio-time caption" data-speaker="Ross" data-start="264.265000" data-stop="265.567000">sharing config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="265.787000" data-stop="268.511000">I am fortunate at my current workplace, even</span> <span class="audio-time caption" data-speaker="Ross" data-start="268.571000" data-stop="270.334000">though it's a much smaller percentage than it's</span> <span class="audio-time caption" data-speaker="Ross" data-start="270.374000" data-stop="271.635000">been in some other workplaces.</span> <span class="audio-time caption" data-speaker="Ross" data-start="271.655000" data-stop="273.678000">It's also a large company, and we have an active</span> <span class="audio-time caption" data-speaker="Ross" data-start="273.758000" data-stop="276.362000">Emacs channel there within the company Slack.</span> <span class="audio-time caption" data-speaker="Ross" data-start="276.663000" data-stop="278.725000">A lot of people are interested in it there, so</span> <span class="audio-time caption" data-speaker="Ross" data-start="278.785000" data-stop="281.429000">I've got my little inside community in addition</span> <span class="audio-time caption" data-speaker="Ross" data-start="281.469000" data-stop="283.271000">to the outside Emacs community as well.</span> <span class="audio-time caption" data-speaker="Ross" data-start="284.572000" data-stop="286.555000">Fortunately, I still get that even to this day,</span> <span class="audio-time caption" data-speaker="Ross" data-start="286.735000" data-stop="287.856000">so that's pretty fun.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="288.757000" data-stop="289.677000"><strong class="speaker-name">Sacha:</strong>  You're the second person has described</span> <span class="audio-time caption" data-speaker="Sacha" data-start="289.678000" data-stop="293.181000">the wonders of having a company internet channel</span> <span class="audio-time caption" data-speaker="Sacha" data-start="293.182000" data-stop="297.928000">on Slack, just about Emacs. Yes. Very awesome.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="298.000000">4:58</span> <strong>Config focusing on built-ins</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="298.280000" data-stop="304.213000"><strong class="speaker-name">Sacha:</strong> I'm wondering, with your current company, is that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="304.233000" data-stop="308.862000">the reason why you have so many "gotta run with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="310.125000" data-stop="312.911000">just the built-ins", "gotta run even if you've got</span> <span class="audio-time caption" data-speaker="Sacha" data-start="313.011000" data-stop="315.557000">Emacs 28"... Is that the reason for those kinds of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="316.438000" data-stop="318.583000">considerations in your base config?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="319.559000" data-stop="321.382000"><strong class="speaker-name">Ross:</strong>  That was kind of a premature</span> <span class="audio-time caption" data-speaker="Ross" data-start="321.522000" data-stop="323.966000">optimization that worked out very well for me.</span> <span class="audio-time caption" data-speaker="Ross" data-start="323.986000" data-stop="327.613000">I used to run a very extensive config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="327.633000" data-stop="329.616000">I'd look at all the classic configs that would go</span> <span class="audio-time caption" data-speaker="Ross" data-start="329.676000" data-stop="332.320000">out there and install all the packages from MELPA.</span> <span class="audio-time caption" data-speaker="Ross" data-start="333.042000" data-stop="335.165000">I'd try them all out. I'd just accumulate</span> <span class="audio-time caption" data-speaker="Ross" data-start="335.205000" data-stop="336.768000">these things. I went through some Emacs</span> <span class="audio-time caption" data-speaker="Ross" data-start="336.808000" data-stop="337.990000">bankruptcies.</span> <span class="audio-time caption" data-speaker="Ross" data-start="337.970000" data-stop="339.693000">Then people in the community started talking</span> <span class="audio-time caption" data-speaker="Ross" data-start="339.753000" data-stop="343.138000">about, okay, Emacs 29, it added <code>use-package</code> out</span> <span class="audio-time caption" data-speaker="Ross" data-start="343.178000" data-stop="343.658000">of the box.</span> <span class="audio-time caption" data-speaker="Ross" data-start="343.758000" data-stop="347.544000">It added... I can't remember when project.el came</span> <span class="audio-time caption" data-speaker="Ross" data-start="347.604000" data-stop="350.228000">along, but it added these things that started...</span> <span class="audio-time caption" data-speaker="Ross" data-start="350.308000" data-stop="352.852000">You used to have to get them from outside, or you</span> <span class="audio-time caption" data-speaker="Ross" data-start="352.872000" data-stop="355.456000">used to have these other libraries, and Emacs got</span> <span class="audio-time caption" data-speaker="Ross" data-start="355.496000" data-stop="357.058000">a lot better out of the box.</span> <span class="audio-time caption" data-speaker="Ross" data-start="357.138000" data-stop="358.560000">I started to say, okay,</span> <span class="audio-time caption" data-speaker="Ross" data-start="358.540000" data-stop="360.043000">I'm going to do one more bankruptcy.</span> <span class="audio-time caption" data-speaker="Ross" data-start="360.083000" data-stop="361.967000">I'm going to see what I can do with built-ins.</span> <span class="audio-time caption" data-speaker="Ross" data-start="362.027000" data-stop="364.832000">I started experimenting down those lines, even</span> <span class="audio-time caption" data-speaker="Ross" data-start="364.853000" data-stop="367.137000">though I was always using that extended config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="367.157000" data-stop="369.241000">I was challenging myself. How much can I get from</span> <span class="audio-time caption" data-speaker="Ross" data-start="369.301000" data-stop="372.147000">a built-in config and then just have a little bit</span> <span class="audio-time caption" data-speaker="Ross" data-start="372.207000" data-stop="374.872000">of extra for those gaps? Because there are gaps.</span> <span class="audio-time caption" data-speaker="Ross" data-start="375.173000" data-stop="377.918000">I do love Emacs built-ins, but I am more</span> <span class="audio-time caption" data-speaker="Ross" data-start="377.979000" data-stop="379.722000">comfortable with the regular one.</span> <span class="audio-time caption" data-speaker="Ross" data-start="379.853000" data-stop="381.976000">But I challenge myself that way.</span> <span class="audio-time caption" data-speaker="Ross" data-start="382.256000" data-stop="384.199000">This month, I got put on a project where</span> <span class="audio-time caption" data-speaker="Ross" data-start="384.239000" data-stop="386.022000">I have to work in a sandbox environment.</span> <span class="audio-time caption" data-speaker="Ross" data-start="386.042000" data-stop="388.646000">So it's not regular operating procedure, but I</span> <span class="audio-time caption" data-speaker="Ross" data-start="388.686000" data-stop="390.709000">have to do all my work in the sandbox environment.</span> <span class="audio-time caption" data-speaker="Ross" data-start="390.729000" data-stop="392.531000">There's no network egress.</span> <span class="audio-time caption" data-speaker="Ross" data-start="392.551000" data-stop="396.116000">I have to say, okay, if I want packages in here,</span> <span class="audio-time caption" data-speaker="Ross" data-start="396.217000" data-stop="398.179000">I have to talk to the admins of that system and</span> <span class="audio-time caption" data-speaker="Ross" data-start="398.239000" data-stop="400.242000">say, I want these packages.</span> <span class="audio-time caption" data-speaker="Ross" data-start="400.262000" data-stop="401.644000">I lobbied for Emacs on it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="401.725000" data-stop="403.247000">They thought, well, that's kind of weird, but</span> <span class="audio-time caption" data-speaker="Ross" data-start="403.307000" data-stop="405.029000">it's just one more line of apt-get in the</span> <span class="audio-time caption" data-speaker="Ross" data-start="405.049000" data-stop="405.931000">Docker container,</span> <span class="audio-time caption" data-speaker="Ross" data-start="405.971000" data-stop="407.633000">so they're fine with it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="407.613000" data-stop="411.133000">It was an old version of Debian Bookworm.</span> <span class="audio-time caption" data-speaker="Ross" data-start="411.134000" data-stop="413.267000">I was running Emacs 28. I'm like,</span> <span class="audio-time caption" data-speaker="Ross" data-start="413.268000" data-stop="416.167000">okay, well, I've got this built-in configuration.</span> <span class="audio-time caption" data-speaker="Ross" data-start="416.168000" data-stop="417.567000">This is its moment to shine.</span> <span class="audio-time caption" data-speaker="Ross" data-start="417.568000" data-stop="419.967000">I tried to run it on there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="419.968000" data-stop="423.300000">I was able to copy the file up there. I tried</span> <span class="audio-time caption" data-speaker="Ross" data-start="423.301000" data-stop="425.200000">running it on there, and I run into things</span> <span class="audio-time caption" data-speaker="Ross" data-start="425.201000" data-stop="427.309000">I’ve been using <code>setopt</code>. I’ve been using</span> <span class="audio-time caption" data-speaker="Ross" data-start="427.289000" data-stop="431.876000">one of the XDG packages for setting your X desktop</span> <span class="audio-time caption" data-speaker="Ross" data-start="431.896000" data-stop="432.817000">group directories,</span> <span class="audio-time caption" data-speaker="Ross" data-start="432.837000" data-stop="435.922000">so to have a standard place to put your config</span> <span class="audio-time caption" data-speaker="Ross" data-start="435.982000" data-stop="437.743000">files versus your cache files</span> <span class="audio-time caption" data-speaker="Ross" data-start="437.744000" data-stop="439.527000">versus your state files.</span> <span class="audio-time caption" data-speaker="Ross" data-start="439.547000" data-stop="441.910000">In Emacs 28, they had most of those variables,</span> <span class="audio-time caption" data-speaker="Ross" data-start="441.950000" data-stop="444.134000">but one of those variables didn't exist yet.</span> <span class="audio-time caption" data-speaker="Ross" data-start="444.174000" data-stop="446.137000">So I felt a few paper cuts that way.</span> <span class="audio-time caption" data-speaker="Ross" data-start="446.777000" data-stop="449.121000">Up near the top of my config, I've got a</span> <span class="audio-time caption" data-speaker="Ross" data-start="449.161000" data-stop="450.563000">compatibility layer.</span> <span class="audio-time caption" data-speaker="Ross" data-start="451.015000" data-stop="452.978000">The compatibility layer, there's a nice</span> <span class="audio-time caption" data-speaker="Ross" data-start="453.018000" data-stop="454.339000">compat package out there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="454.379000" data-stop="454.960000">I can't remember.</span> <span class="audio-time caption" data-speaker="Ross" data-start="455.281000" data-stop="457.143000">I think Omar, who you interviewed recently, I</span> <span class="audio-time caption" data-speaker="Ross" data-start="457.263000" data-stop="459.246000">believe he's one of the people behind it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="459.266000" data-stop="461.669000">And tarsius, I think he's involved in that too.</span> <span class="audio-time caption" data-speaker="Ross" data-start="461.809000" data-stop="463.131000">I could be misquoting on that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="463.772000" data-stop="465.294000">Maybe I'm misattributing that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="465.414000" data-stop="467.697000">But anyway, there's this wonderful compat package</span> <span class="audio-time caption" data-speaker="Ross" data-start="467.777000" data-stop="468.138000">out there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="468.598000" data-stop="470.180000">If you're a package author and you want to have</span> <span class="audio-time caption" data-speaker="Ross" data-start="470.220000" data-stop="472.243000">your Emacs package running on older versions,</span> <span class="audio-time caption" data-speaker="Ross" data-start="472.824000" data-stop="473.665000">it's great for that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="473.645000" data-stop="475.869000">But the whole point of this is I don't have any</span> <span class="audio-time caption" data-speaker="Ross" data-start="475.929000" data-stop="476.951000">external packages.</span> <span class="audio-time caption" data-speaker="Ross" data-start="476.971000" data-stop="478.954000">So where I need this compatibility layer the</span> <span class="audio-time caption" data-speaker="Ross" data-start="478.994000" data-stop="481.799000">most, I can't use this lovely compat package out</span> <span class="audio-time caption" data-speaker="Ross" data-start="481.839000" data-stop="482.360000">of the box.</span> <span class="audio-time caption" data-speaker="Ross" data-start="482.840000" data-stop="485.705000">So I had to reinvent a few shims.</span> <span class="audio-time caption" data-speaker="Ross" data-start="485.725000" data-stop="487.068000">I think I could bring that up.</span> <span class="audio-time caption" data-speaker="Ross" data-start="487.088000" data-stop="488.250000">Am I sharing my screen?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="488.390000" data-stop="489.592000"><strong class="speaker-name">Sacha:</strong>  Yes, you're sharing your screen.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="490.473000" data-stop="492.677000">That was one of the things that immediately</span> <span class="audio-time caption" data-speaker="Sacha" data-start="492.717000" data-stop="494.099000">struck me about your config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="494.139000" data-stop="496.303000">You're so hardcore about not using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="496.323000" data-stop="498.066000">external packages that even your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="498.333000" data-stop="499.935000">adapting to older versions,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="499.955000" data-stop="503.299000">you're re-implementing things yourself in order</span> <span class="audio-time caption" data-speaker="Sacha" data-start="503.339000" data-stop="506.644000">to be able to stick with your constraints.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="506.664000" data-stop="508.326000">I think that's hilarious, by the way.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="508.366000" data-stop="510.268000">You started it off with it as a personal</span> <span class="audio-time caption" data-speaker="Sacha" data-start="510.328000" data-stop="512.211000">challenge because, of course, people are allowed</span> <span class="audio-time caption" data-speaker="Sacha" data-start="512.251000" data-stop="514.933000">to set arbitrary challenges for themselves,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="514.995000" data-stop="517.798000">and then it turned out to be surprisingly useful</span> <span class="audio-time caption" data-speaker="Sacha" data-start="517.857000" data-stop="520.542000">for you in this limited environment.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="520.802000" data-stop="522.164000"><strong class="speaker-name">Ross:</strong>  Yeah, that's one that really saved</span> <span class="audio-time caption" data-speaker="Ross" data-start="522.203000" data-stop="522.683000">my bacon.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="523.005000" data-stop="524.647000"><strong class="speaker-name">Sacha:</strong>  Yeah, this is great.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="524.667000" data-stop="526.990000">So even things like <code>setopt</code>… Then you have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="527.155000" data-stop="532.333000"><code>keymap-set</code>. You’ve got some replacements</span> <span class="audio-time caption" data-speaker="Sacha" data-start="532.334000" data-stop="535.633000">for these modern niceties to make it still work</span> <span class="audio-time caption" data-speaker="Sacha" data-start="535.634000" data-stop="538.233000">in Emacs 28.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="538.234000" data-stop="541.500000"><strong class="speaker-name">Ross:</strong>  Yeah, I leaned into the new keybindings.</span> <span class="audio-time caption" data-speaker="Ross" data-start="541.501000" data-stop="543.655000">There’s <code>keymap-set</code>, <code>keymap-global-set</code>,</span> <span class="audio-time caption" data-speaker="Ross" data-start="543.675000" data-stop="547.467000"><code>keymap-global-unset</code>. Those are roughly the same as</span> <span class="audio-time caption" data-speaker="Ross" data-start="547.468000" data-stop="549.367000">what you had in older Emacs versions</span> <span class="audio-time caption" data-speaker="Ross" data-start="549.368000" data-stop="551.667000">but you don't need to pass the keyboard macro</span> <span class="audio-time caption" data-speaker="Ross" data-start="551.668000" data-stop="554.648000">around all the things, so it's a little bit more concise.</span> <span class="audio-time caption" data-speaker="Ross" data-start="554.881000" data-stop="556.645000">There were a few more advantages to it and I'd</span> <span class="audio-time caption" data-speaker="Ross" data-start="556.685000" data-stop="559.029000">already been on Emacs 29 or Emacs 30</span> <span class="audio-time caption" data-speaker="Ross" data-start="559.030000" data-stop="559.993000">everywhere else.</span> <span class="audio-time caption" data-speaker="Ross" data-start="560.013000" data-stop="562.137000">I'd already leaned into those, and then I got</span> <span class="audio-time caption" data-speaker="Ross" data-start="562.198000" data-stop="563.039000">into this environment.</span> <span class="audio-time caption" data-speaker="Ross" data-start="564.342000" data-stop="566.307000">But as you can see, they're fairly easy.</span> <span class="audio-time caption" data-speaker="Ross" data-start="566.367000" data-stop="568.692000">This is not a 100% full fidelity.</span> <span class="audio-time caption" data-speaker="Ross" data-start="568.712000" data-stop="571.558000">There's a few nuances that get missed in doing this,</span> <span class="audio-time caption" data-speaker="Ross" data-start="571.559000" data-stop="573.463000">but for the most part, it works pretty well.</span> <span class="audio-time caption" data-speaker="Ross" data-start="575.536000" data-stop="577.199000">I'm not aiming for perfect here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="577.299000" data-stop="580.003000">I'm aiming for "this works well enough at Emacs 28</span> <span class="audio-time caption" data-speaker="Ross" data-start="580.264000" data-stop="582.066000">for the life of this project, which should last</span> <span class="audio-time caption" data-speaker="Ross" data-start="582.127000" data-stop="582.687000">about a month."</span> <span class="audio-time caption" data-speaker="Ross" data-start="582.788000" data-stop="585.592000">And otherwise, I've got the nice full glory Emacs</span> <span class="audio-time caption" data-speaker="Ross" data-start="585.652000" data-stop="586.714000">for my daily driver.</span> <span class="audio-time caption" data-speaker="Ross" data-start="587.535000" data-stop="590.239000">It's straddling that divide fairly well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="590.259000" data-stop="594.566000"><strong class="speaker-name">Sacha:</strong>  I just looked up when Emacs 28 was released.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="594.606000" data-stop="597.291000">This is 2022, so four years ago.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="597.912000" data-stop="598.172000"><strong class="speaker-name">Ross:</strong>  Yes.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="598.653000" data-stop="600.556000"><strong class="speaker-name">Sacha:</strong>  A lot of Emacs has changed since then.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="600.736000" data-stop="602.539000">But of course, Emacs being Emacs,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="603.363000" data-stop="605.747000">there's a lot of effort put into making sure the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="605.847000" data-stop="609.232000">old stuff keeps working, which is handy for these cases.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="609.993000" data-stop="610.574000">That's great.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="612.000000">10:12</span> <strong>simple-orderless
</strong></div><p></p><a href="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker-00-11-23-700.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker-00-11-23-700.jpg" alt="image from video 00:11:23.700" data-time="00:11:23.700"></a><span class="audio-time caption" data-speaker="Sacha" data-start="612.276000" data-stop="614.479000"><strong class="speaker-name">Sacha:</strong> So you have a lot of these shims,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="614.480000" data-stop="616.483000">and one of the things that you've ended up</span> <span class="audio-time caption" data-speaker="Sacha" data-start="616.843000" data-stop="621.530000">re-implementing along these ways is a version of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="621.650000" data-stop="623.894000">orderless that works without having to take the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="623.954000" data-stop="625.356000">entire orderless package in there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="625.676000" data-stop="627.639000">Can you tell us a little bit more about what you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="627.679000" data-stop="628.881000">like about your setup?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="630.447000" data-stop="633.912000"><strong class="speaker-name">Ross:</strong>  I wasn't happy with any of the</span> <span class="audio-time caption" data-speaker="Ross" data-start="634.513000" data-stop="636.496000">built-in completion styles.</span> <span class="audio-time caption" data-speaker="Ross" data-start="636.516000" data-stop="639.220000">Well, some of them are okay, but the overall...</span> <span class="audio-time caption" data-speaker="Ross" data-start="639.221000" data-stop="641.945000">I had used orderless in my more extensive config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="642.466000" data-stop="644.889000">Orderless, for people who don't know, is a way</span> <span class="audio-time caption" data-speaker="Ross" data-start="644.949000" data-stop="645.831000">of completing things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="645.931000" data-stop="647.153000">Let's see if I can show it off.</span> <span class="audio-time caption" data-speaker="Ross" data-start="647.293000" data-stop="655.286000">So I can do... If I do "file" and "find"...</span> <span class="audio-time caption" data-speaker="Ross" data-start="655.306000" data-stop="657.208000">Well, I thought it would work.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="657.829000" data-stop="658.851000"><strong class="speaker-name">Sacha:</strong>  Do you need a space?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="660.772000" data-stop="661.884000"><strong class="speaker-name">Ross:</strong>  Yeah, I don't know why the space</span> <span class="audio-time caption" data-speaker="Ross" data-start="661.925000" data-stop="662.734000">wasn't completing.</span> <span class="audio-time caption" data-speaker="Ross" data-start="662.754000" data-stop="664.453000">So I can do "file".</span> <span class="audio-time caption" data-speaker="Ross" data-start="664.720000" data-stop="665.922000">"find file".</span> <span class="audio-time caption" data-speaker="Ross" data-start="666.002000" data-stop="666.743000">I could do the space.</span> <span class="audio-time caption" data-speaker="Ross" data-start="666.823000" data-stop="669.026000">I could do it in any order as well.</span> <span class="audio-time caption" data-speaker="Ross" data-start="669.046000" data-stop="671.148000">Or I saw there was an "ido" in there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="671.228000" data-stop="673.151000">If I do it in reverse order, that's the idea of</span> <span class="audio-time caption" data-speaker="Ross" data-start="673.251000" data-stop="675.634000">orderless is if I'm using the space, I got thrown</span> <span class="audio-time caption" data-speaker="Ross" data-start="675.714000" data-stop="675.974000">off there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="676.015000" data-stop="678.117000">It was auto-completing a hyphen on me I didn't</span> <span class="audio-time caption" data-speaker="Ross" data-start="678.157000" data-stop="678.518000">expect.</span> <span class="audio-time caption" data-speaker="Ross" data-start="679.139000" data-stop="681.081000">Anyway, if I remember some tokens and things,</span> <span class="audio-time caption" data-speaker="Ross" data-start="681.101000" data-stop="683.664000">let’s say I’m looking for <code>ido-find-file</code>, but I</span> <span class="audio-time caption" data-speaker="Ross" data-start="683.704000" data-stop="685.266000">type "find" first and then I do...</span> <span class="audio-time caption" data-speaker="Ross" data-start="685.387000" data-stop="689.211000">What orderless does is it takes the input and it</span> <span class="audio-time caption" data-speaker="Ross" data-start="689.252000" data-stop="690.272000">splits it by space</span> <span class="audio-time caption" data-speaker="Ross" data-start="690.273000" data-stop="691.855000">and it will find them in any order.</span> <span class="audio-time caption" data-speaker="Ross" data-start="692.716000" data-stop="695.300000">It's a nicer completion style than I think any of</span> <span class="audio-time caption" data-speaker="Ross" data-start="695.340000" data-stop="696.743000">the ones that come out of the box are.</span> <span class="audio-time caption" data-speaker="Ross" data-start="696.903000" data-stop="698.325000">I got used to it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="698.345000" data-stop="700.167000">But if I'm in this lean config,</span> <span class="audio-time caption" data-speaker="Ross" data-start="700.168000" data-stop="701.210000">orderless is something...</span> <span class="audio-time caption" data-speaker="Ross" data-start="701.230000" data-stop="702.252000">It is not a built-in.</span> <span class="audio-time caption" data-speaker="Ross" data-start="702.292000" data-stop="704.095000">That's something that I was leaving behind.</span> <span class="audio-time caption" data-speaker="Ross" data-start="704.115000" data-stop="706.879000">That was one that was really starting to itch.</span> <span class="audio-time caption" data-speaker="Ross" data-start="706.899000" data-stop="709.363000">Then I found this blog post by James Dyer</span> <span class="audio-time caption" data-speaker="Ross" data-start="709.404000" data-stop="711.968000">where he'd implemented a very slimmed-down</span> <span class="audio-time caption" data-speaker="Ross" data-start="712.008000" data-stop="713.931000">version of orderless.</span> <span class="audio-time caption" data-speaker="Ross" data-start="713.911000" data-stop="715.912000">It wasn't the full features that you get,</span> <span class="audio-time caption" data-speaker="Ross" data-start="715.913000" data-stop="717.614000">but it was something that was good enough</span> <span class="audio-time caption" data-speaker="Ross" data-start="717.615000" data-stop="720.819000">that captured the basic principles of it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="720.839000" data-stop="721.560000">I took that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="721.620000" data-stop="722.841000">I found a few bugs in it,</span> <span class="audio-time caption" data-speaker="Ross" data-start="722.842000" data-stop="724.043000">and I found a few more things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="724.163000" data-stop="726.807000">It was a very, very simple version of orderless,</span> <span class="audio-time caption" data-speaker="Ross" data-start="726.827000" data-stop="728.649000">and I wanted a couple more bells and whistles.</span> <span class="audio-time caption" data-speaker="Ross" data-start="728.669000" data-stop="730.851000">The completions weren't quite right to my tastes.</span> <span class="audio-time caption" data-speaker="Ross" data-start="731.372000" data-stop="732.513000">I took that blog post.</span> <span class="audio-time caption" data-speaker="Ross" data-start="732.553000" data-stop="733.655000">I ended up with a middle ground.</span> <span class="audio-time caption" data-speaker="Ross" data-start="733.695000" data-stop="735.836000">It's not as good as the full orderless,</span> <span class="audio-time caption" data-speaker="Ross" data-start="735.837000" data-stop="737.438000">and it's a little bit more extensive</span> <span class="audio-time caption" data-speaker="Ross" data-start="737.439000" data-stop="739.682000">than the blog post that I found.</span> <span class="audio-time caption" data-speaker="Ross" data-start="739.662000" data-stop="741.324000">But I'm able to run that,</span> <span class="audio-time caption" data-speaker="Ross" data-start="741.325000" data-stop="742.867000">and I don't really miss</span> <span class="audio-time caption" data-speaker="Ross" data-start="742.868000" data-stop="744.851000">the full features of orderless that much.</span> <span class="audio-time caption" data-speaker="Ross" data-start="745.252000" data-stop="747.316000">There are all sorts of cool things that it does</span> <span class="audio-time caption" data-speaker="Ross" data-start="747.376000" data-stop="750.301000">where you can say, okay, these are regexp tokens.</span> <span class="audio-time caption" data-speaker="Ross" data-start="750.361000" data-stop="751.703000">These are literal tokens.</span> <span class="audio-time caption" data-speaker="Ross" data-start="751.804000" data-stop="754.028000">These are NOT filters.</span> <span class="audio-time caption" data-speaker="Ross" data-start="754.048000" data-stop="756.151000">You could do all sorts of combinatorial logic</span> <span class="audio-time caption" data-speaker="Ross" data-start="756.211000" data-stop="757.754000">with it with various syntax.</span> <span class="audio-time caption" data-speaker="Ross" data-start="757.774000" data-stop="759.898000">You can customize the syntax for it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="760.334000" data-stop="762.858000">It's all great, but I wasn't using those extended</span> <span class="audio-time caption" data-speaker="Ross" data-start="762.898000" data-stop="765.222000">features of that package that much. I am happy</span> <span class="audio-time caption" data-speaker="Ross" data-start="765.262000" data-stop="767.205000">with this lighter-weight version. That way</span> <span class="audio-time caption" data-speaker="Ross" data-start="767.245000" data-stop="769.789000">I'm able to use it even when I'm off here in the</span> <span class="audio-time caption" data-speaker="Ross" data-start="769.850000" data-stop="770.931000">security sandbox.</span> <span class="audio-time caption" data-speaker="Ross" data-start="770.971000" data-stop="772.233000">I'm able to do it there too.</span> <span class="audio-time caption" data-speaker="Ross" data-start="773.095000" data-stop="775.177000">It exposes the underlying tension</span> <span class="audio-time caption" data-speaker="Ross" data-start="775.178000" data-stop="776.841000">of this setup.</span> <span class="audio-time caption" data-speaker="Ross" data-start="777.023000" data-stop="779.366000">I would recommend 100% use orderless.</span> <span class="audio-time caption" data-speaker="Ross" data-start="779.426000" data-stop="780.367000">It's better maintained.</span> <span class="audio-time caption" data-speaker="Ross" data-start="780.387000" data-stop="781.949000">The maintainer is a lovely person.</span> <span class="audio-time caption" data-speaker="Ross" data-start="782.409000" data-stop="783.511000">It's more full-featured.</span> <span class="audio-time caption" data-speaker="Ross" data-start="783.531000" data-stop="784.712000">You can customize it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="784.732000" data-stop="786.593000">I ran into a little bit of a hiccup here</span> <span class="audio-time caption" data-speaker="Ross" data-start="786.594000" data-stop="787.836000">and it's my own config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="788.697000" data-stop="791.079000">This is something, it's going to be more</span> <span class="audio-time caption" data-speaker="Ross" data-start="791.119000" data-stop="792.481000">professionally maintained if you're using</span> <span class="audio-time caption" data-speaker="Ross" data-start="792.561000" data-stop="792.962000">orderless.</span> <span class="audio-time caption" data-speaker="Ross" data-start="792.982000" data-stop="794.322000">So if you're not adapting</span> <span class="audio-time caption" data-speaker="Ross" data-start="794.323000" data-stop="796.885000">to my built-ins only method,</span> <span class="audio-time caption" data-speaker="Ross" data-start="796.886000" data-stop="800.230000">I would 100% recommend using orderless instead.</span> <span class="audio-time caption" data-speaker="Ross" data-start="800.210000" data-stop="801.972000">But because I have this constraint,</span> <span class="audio-time caption" data-speaker="Ross" data-start="801.973000" data-stop="802.894000">I'm building this up.</span> <span class="audio-time caption" data-speaker="Ross" data-start="803.395000" data-stop="804.657000">What I built up is kind of nice.</span> <span class="audio-time caption" data-speaker="Ross" data-start="804.697000" data-stop="806.018000">It's one of the more interesting parts</span> <span class="audio-time caption" data-speaker="Ross" data-start="806.019000" data-stop="808.143000">of my package, or of my config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="808.303000" data-stop="810.125000">I could spin it off as its own package,</span> <span class="audio-time caption" data-speaker="Ross" data-start="810.126000" data-stop="812.008000">but if I spun it off as its own package,</span> <span class="audio-time caption" data-speaker="Ross" data-start="812.009000" data-stop="814.312000">it's just a strictly worse version of orderless</span> <span class="audio-time caption" data-speaker="Ross" data-start="814.313000" data-stop="817.338000">at that point, so what's the point?</span> <span class="audio-time caption" data-speaker="Ross" data-start="817.358000" data-stop="818.820000">That's one of the tensions that you have in these</span> <span class="audio-time caption" data-speaker="Ross" data-start="818.860000" data-stop="821.144000">built-ins, is anytime that you build something</span> <span class="audio-time caption" data-speaker="Ross" data-start="821.204000" data-stop="823.227000">that is really interesting, you want to spin it</span> <span class="audio-time caption" data-speaker="Ross" data-start="823.328000" data-stop="825.030000">off and share it, but at that point, you've</span> <span class="audio-time caption" data-speaker="Ross" data-start="825.070000" data-stop="827.314000">defeated the purpose of being built-ins only.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="829.117000" data-stop="834.905000"><strong class="speaker-name">Sacha:</strong>  I think the idea then of looking at</span> <span class="audio-time caption" data-speaker="Sacha" data-start="834.925000" data-stop="837.008000">the packages that you really like and if you find</span> <span class="audio-time caption" data-speaker="Sacha" data-start="837.048000" data-stop="838.570000">that you're only using a subset of their</span> <span class="audio-time caption" data-speaker="Sacha" data-start="838.590000" data-stop="841.534000">functionality, being able to strip it down or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="841.634000" data-stop="843.276000">take advantage of somebody else's work and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="843.316000" data-stop="845.740000">stripping it down to the subset that you use</span> <span class="audio-time caption" data-speaker="Sacha" data-start="846.240000" data-stop="848.403000">makes it a lot easier for you to put it all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="848.423000" data-stop="851.187000">together in your batteries included, built-in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="851.908000" data-stop="853.050000">only configuration.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="854.131000" data-stop="854.652000"><strong class="speaker-name">Ross:</strong>  Right.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="854.800000" data-stop="855.824000"><strong class="speaker-name">Sacha:</strong>  It's not super long.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="856.105000" data-stop="858.353000">It can be understood if you go through the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="858.393000" data-stop="858.774000">function.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="859.236000" data-stop="860.460000">So that's great.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="861.825000" data-stop="863.813000">Are there other things like that that you find</span> <span class="audio-time caption" data-speaker="Sacha" data-start="863.853000" data-stop="867.004000">yourself wanting to extract from other packages?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="869.000000">14:29</span> <strong>Size indicator</strong></div><p></p><span class="audio-time caption" data-speaker="Ross" data-start="869.245000" data-stop="870.967000"><strong class="speaker-name">Ross:</strong>  I did this really weird little</span> <span class="audio-time caption" data-speaker="Ross" data-start="871.028000" data-stop="873.171000">thing called size indicator mode.</span> <span class="audio-time caption" data-speaker="Ross" data-start="873.391000" data-stop="874.573000">I'd already spun that off.</span> <span class="audio-time caption" data-speaker="Ross" data-start="874.673000" data-stop="876.375000">I don't know if it was worthwhile or not.</span> <span class="audio-time caption" data-speaker="Ross" data-start="877.076000" data-stop="880.021000">One thing is all of your list commands, they run</span> <span class="audio-time caption" data-speaker="Ross" data-start="880.121000" data-stop="883.025000">things in binary bytes.</span> <span class="audio-time caption" data-speaker="Ross" data-start="883.185000" data-stop="885.569000">When we say a kilobyte, what does a kilobyte mean?</span> <span class="audio-time caption" data-speaker="Ross" data-start="885.589000" data-stop="889.775000">Does that mean 1,000 bytes or 1,024 bytes?</span> <span class="audio-time caption" data-speaker="Ross" data-start="889.895000" data-stop="891.577000">Most of the commands that you run, they're going</span> <span class="audio-time caption" data-speaker="Ross" data-start="891.617000" data-stop="895.523000">to be in these binary units.</span> <span class="audio-time caption" data-speaker="Ross" data-start="896.752000" data-stop="899.459000">What you get out of the box in Emacs is</span> <span class="audio-time caption" data-speaker="Ross" data-start="899.460000" data-stop="903.067000">the decimal unit. Their definition is 1000 instead</span> <span class="audio-time caption" data-speaker="Ross" data-start="903.068000" data-stop="906.700000">of 1024. I thought, well, that's kind of weird.</span> <span class="audio-time caption" data-speaker="Ross" data-start="906.701000" data-stop="909.667000">I built this size-indicator-mode where it goes</span> <span class="audio-time caption" data-speaker="Ross" data-start="909.668000" data-stop="912.300000">and it translates things so it's unified across</span> <span class="audio-time caption" data-speaker="Ross" data-start="912.301000" data-stop="915.133000">the way the coreutils work. It's the 1024 base</span> <span class="audio-time caption" data-speaker="Ross" data-start="915.134000" data-stop="916.400000">instead of the 1000 base.</span> <span class="audio-time caption" data-speaker="Ross" data-start="916.401000" data-stop="918.933000">Trivial little package, but it was a lot of fun</span> <span class="audio-time caption" data-speaker="Ross" data-start="918.934000" data-stop="920.767000">I threw it out there. It's up on my Codeberg</span> <span class="audio-time caption" data-speaker="Ross" data-start="920.768000" data-stop="922.422000">if anybody wants to pull that in.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="923.718000" data-stop="925.861000"><strong class="speaker-name">Sacha:</strong>  Yeah, so it just reduces the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="925.921000" data-stop="928.666000">friction of having to think, okay, is this in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="928.746000" data-stop="930.448000">this unit or is that unit?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="930.468000" data-stop="932.411000">It'll always be in the units that you like to use</span> <span class="audio-time caption" data-speaker="Sacha" data-start="932.451000" data-stop="934.595000">when you're talking about files.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="934.615000" data-stop="935.516000"><strong class="speaker-name">Ross:</strong>  Exactly, yeah.</span> <span class="audio-time caption" data-speaker="Ross" data-start="935.556000" data-stop="937.179000">It keeps things consistent that way.</span> <span class="audio-time caption" data-speaker="Ross" data-start="937.199000" data-stop="938.761000">That's a package that I spun off.</span> <span class="audio-time caption" data-speaker="Ross" data-start="938.821000" data-stop="939.822000">Is that something that...</span> <span class="audio-time caption" data-speaker="Ross" data-start="939.823000" data-stop="941.505000">It's a very lightweight configuration.</span> <span class="audio-time caption" data-speaker="Ross" data-start="941.525000" data-stop="942.846000">It probably could have stayed here</span> <span class="audio-time caption" data-speaker="Ross" data-start="942.847000" data-stop="943.669000">in my built-ins.</span> <span class="audio-time caption" data-speaker="Ross" data-start="944.129000" data-stop="945.751000">I doubt anybody else has that itch,</span> <span class="audio-time caption" data-speaker="Ross" data-start="945.752000" data-stop="946.512000">but I shared it out there</span> <span class="audio-time caption" data-speaker="Ross" data-start="946.513000" data-stop="947.975000">and a lot of people thought, ooh, neat.</span> <span class="audio-time caption" data-speaker="Ross" data-start="947.995000" data-stop="949.598000">I think a few people did install it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="949.618000" data-stop="951.801000">I'm glad I spun that one off, I suppose.</span> <span class="audio-time caption" data-speaker="Ross" data-start="952.253000" data-stop="953.756000">There's always that fuzzy line.</span> <span class="audio-time caption" data-speaker="Ross" data-start="953.797000" data-stop="955.460000">Where does it grow into something that you think</span> <span class="audio-time caption" data-speaker="Ross" data-start="955.521000" data-stop="957.686000">other people are going to be interested in, versus</span> <span class="audio-time caption" data-speaker="Ross" data-start="957.726000" data-stop="959.169000">what are the ones that you should just keep</span> <span class="audio-time caption" data-speaker="Ross" data-start="959.289000" data-stop="961.414000">in-house and they can always copy it out of your</span> <span class="audio-time caption" data-speaker="Ross" data-start="961.434000" data-stop="962.577000">config if they're interested?</span> <span class="audio-time caption" data-speaker="Ross" data-start="963.419000" data-stop="965.203000">It's a hard line to walk in this style.</span> <span class="audio-time caption" data-speaker="Ross" data-start="965.223000" data-stop="967.749000">I haven't exactly found the balance yet, I don't</span> <span class="audio-time caption" data-speaker="Ross" data-start="967.789000" data-stop="968.170000">think.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="968.892000" data-stop="970.614000"><strong class="speaker-name">Sacha:</strong>  A lot of your config isn't so much</span> <span class="audio-time caption" data-speaker="Sacha" data-start="972.256000" data-stop="974.517000">new functionality as it is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="974.518000" data-stop="975.919000">just filing off the corners</span> <span class="audio-time caption" data-speaker="Sacha" data-start="975.920000" data-stop="978.603000">or making something a little bit nicer to use.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="979.624000" data-stop="981.326000">For example, when I was going through your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="981.987000" data-stop="984.329000">config, both the base config as well as the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="984.369000" data-stop="986.131000">extended one where you have more packages and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="986.151000" data-stop="989.275000">things set up, I was like, oh yeah, okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="989.836000" data-stop="992.639000">You fiddle with your visual-bell, but you also,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="993.299000" data-stop="994.540000">in your extended config,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="994.541000" data-stop="996.163000">set it to mode-line-bell instead.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="996.323000" data-stop="998.375000">That sounds interesting.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="999.357000" data-stop="999.637000"><strong class="speaker-name">Ross:</strong>  Right.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1000.000000">16:40</span> <strong>Graceful degradation</strong></div><p></p><span class="audio-time caption" data-speaker="Ross" data-start="1000.719000" data-stop="1004.344000"><strong class="speaker-name">Ross:</strong> I go for graceful degradation. When I was doing</span> <span class="audio-time caption" data-speaker="Ross" data-start="1004.424000" data-stop="1007.128000">web pages as far back as the 90s,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1007.168000" data-stop="1008.408000">when I was first into Emacs,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1008.409000" data-stop="1010.191000">everything was about graceful degradation</span> <span class="audio-time caption" data-speaker="Ross" data-start="1010.192000" data-stop="1012.515000">as you had these new browser features.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1012.535000" data-stop="1014.758000">You're trying to use these new shiny things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1014.959000" data-stop="1015.459000">I'm old enough.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1015.499000" data-stop="1017.462000">I've been doing web pages since before there were</span> <span class="audio-time caption" data-speaker="Ross" data-start="1017.502000" data-stop="1018.744000">cascading style sheets.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1018.764000" data-stop="1021.167000">But anyway, as we were starting to do CSS and as</span> <span class="audio-time caption" data-speaker="Ross" data-start="1021.207000" data-stop="1022.810000">we were starting to do JavaScript, it was all</span> <span class="audio-time caption" data-speaker="Ross" data-start="1022.850000" data-stop="1024.531000">about progressive enhancement:</span> <span class="audio-time caption" data-speaker="Ross" data-start="1024.512000" data-stop="1026.616000">do the shiny things for the browsers that can</span> <span class="audio-time caption" data-speaker="Ross" data-start="1026.675000" data-stop="1029.320000">support it, but also have this nice baseline of</span> <span class="audio-time caption" data-speaker="Ross" data-start="1029.361000" data-stop="1031.965000">functionality for those that can't. I've tried</span> <span class="audio-time caption" data-speaker="Ross" data-start="1031.986000" data-stop="1035.292000">to do that with this base level config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1035.473000" data-stop="1037.958000">I've got the visual-bell that's built into Emacs</span> <span class="audio-time caption" data-speaker="Ross" data-start="1038.018000" data-stop="1039.681000">and it flashes the screen. It puts up this</span> <span class="audio-time caption" data-speaker="Ross" data-start="1039.800000" data-stop="1041.864000">annoying triangle sign.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1041.865000" data-stop="1043.568000">I don't like that that much.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1043.569000" data-stop="1046.875000">This one, if I can make the bell ring...</span> <span class="audio-time caption" data-speaker="Ross" data-start="1047.412000" data-stop="1048.574000">Oh, this would make the bell ring.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1049.496000" data-stop="1050.137000">Why is it not?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1050.498000" data-stop="1052.282000"><strong class="speaker-name">Sacha:</strong>  I guess <code>C-g</code> doesn’t just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1052.322000" data-stop="1053.384000">automatically make it...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1053.745000" data-stop="1056.150000">Oh, <code>C-g</code> works for me, so I don’t know.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1056.230000" data-stop="1058.234000"><strong class="speaker-name">Ross:</strong>  It usually works for me, too.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1058.314000" data-stop="1061.079000">I don't know why it's not triggering a bell here.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1063.284000" data-stop="1063.805000"><strong class="speaker-name">Sacha:</strong>  That's OK.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1064.807000" data-stop="1065.669000"><strong class="speaker-name">Ross:</strong>  Curse of the demo.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1066.130000" data-stop="1066.350000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1066.370000" data-stop="1067.833000">Anyone interested can go look it up.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1068.000000">17:48</span> <strong>emacs-lock-mode
</strong></div><p></p><a href="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker-00-19-01-733.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker-00-19-01-733.jpg" alt="image from video 00:19:01.733" data-time="00:19:01.733"></a><span class="audio-time caption" data-speaker="Sacha" data-start="1068.860000" data-stop="1071.006000"><strong class="speaker-name">Sacha:</strong> Then you have a couple of other things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1071.067000" data-stop="1074.256000">around, for example, making it easier to not kill</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1074.316000" data-stop="1077.565000">a buffer. I hadn't known about</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1077.566000" data-stop="1078.870000"><code>emacs-lock-mode</code> either.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1079.070000" data-stop="1080.996000"><strong class="speaker-name">Ross:</strong>  Oh yes, Emacs lock.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1085.785000" data-stop="1088.532000">Yeah, so there’s this <code>emacs-lock-mode</code></span> <span class="audio-time caption" data-speaker="Ross" data-start="1088.533000" data-stop="1089.557000">and it is not the same.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1089.657000" data-stop="1092.084000">It's easy to confuse this with the lock files.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1092.105000" data-stop="1095.395000">You know those files that you get the hash signs,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1095.415000" data-stop="1099.086000">like you get ".#name-of-the-file#".</span> <span class="audio-time caption" data-speaker="Ross" data-start="1099.353000" data-stop="1101.816000">That's something from when Emacs was used more on</span> <span class="audio-time caption" data-speaker="Ross" data-start="1101.896000" data-stop="1103.218000">multi-user environments.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1103.258000" data-stop="1106.202000">Whenever you had a modified file, it would create</span> <span class="audio-time caption" data-speaker="Ross" data-start="1106.242000" data-stop="1108.425000">these lock files, and it would prevent two users</span> <span class="audio-time caption" data-speaker="Ross" data-start="1108.465000" data-stop="1110.608000">who were editing the same file on their own Emacs</span> <span class="audio-time caption" data-speaker="Ross" data-start="1111.128000" data-stop="1112.350000">from stepping over each other.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1112.911000" data-stop="1114.994000">How often in modern times are we working on a</span> <span class="audio-time caption" data-speaker="Ross" data-start="1115.034000" data-stop="1116.055000">multi-user system?</span> <span class="audio-time caption" data-speaker="Ross" data-start="1116.075000" data-stop="1118.318000">If it is a multi-user system, are they both</span> <span class="audio-time caption" data-speaker="Ross" data-start="1118.418000" data-stop="1120.000000">using Emacs on the same file?</span> <span class="audio-time caption" data-speaker="Ross" data-start="1120.080000" data-stop="1122.063000">That's something that was very important in the</span> <span class="audio-time caption" data-speaker="Ross" data-start="1122.123000" data-stop="1124.466000">late 90s and is not very important now.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1124.868000" data-stop="1126.430000">This is not those file locks.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1126.510000" data-stop="1128.632000">This is a buffer locking,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1128.633000" data-stop="1130.376000">and with the scratch buffer...</span> <span class="audio-time caption" data-speaker="Ross" data-start="1130.636000" data-stop="1132.920000">I've got this turned on.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1132.940000" data-stop="1133.561000">Evaluate it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1133.841000" data-stop="1135.443000">Make sure it worked.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1135.463000" data-stop="1137.146000">Let's go to our scratch buffer.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1137.446000" data-stop="1138.628000">Here's my scratch buffer.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1138.708000" data-stop="1140.711000">I don't want to accidentally kill it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1140.731000" data-stop="1142.713000">If I try to kill it, it's going to say</span> <span class="audio-time caption" data-speaker="Ross" data-start="1142.714000" data-stop="1144.857000">"Buffer *scratch​* is locked and cannot be killed."</span> <span class="audio-time caption" data-speaker="Ross" data-start="1145.618000" data-stop="1149.103000">I'll use this for notes all over the place.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1150.771000" data-stop="1153.454000">I've accidentally killed things too many times.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1153.494000" data-stop="1156.176000">The scratch buffer is not typically backed by a</span> <span class="audio-time caption" data-speaker="Ross" data-start="1156.256000" data-stop="1158.999000">file, and I've lost too many things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1159.019000" data-stop="1162.122000">This way, I know this scratch buffer is always</span> <span class="audio-time caption" data-speaker="Ross" data-start="1162.182000" data-stop="1163.924000">going to be a persistent place.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1164.404000" data-stop="1165.365000">There are other approaches to it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1165.385000" data-stop="1167.147000">I think there’s a <code>persistent-scratch</code> package</span> <span class="audio-time caption" data-speaker="Ross" data-start="1167.167000" data-stop="1167.667000">that's out there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1167.687000" data-stop="1169.829000">But again, that gets me out of the built-in zone.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1169.949000" data-stop="1171.531000">That might be a progressive enhancement,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1171.551000" data-stop="1173.513000">something that takes your scratch buffer and</span> <span class="audio-time caption" data-speaker="Ross" data-start="1173.553000" data-stop="1174.514000">backs it with a file.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1174.534000" data-stop="1175.875000">That would probably be a good thing to do.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1175.975000" data-stop="1177.557000">So that's one of the packages I'll be looking at</span> <span class="audio-time caption" data-speaker="Ross" data-start="1177.657000" data-stop="1178.938000">adding in the other config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1179.121000" data-stop="1181.087000">But emacs-lock is built in.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1181.107000" data-stop="1182.793000">It's one of those things that's so obscure you</span> <span class="audio-time caption" data-speaker="Ross" data-start="1182.833000" data-stop="1184.699000">can't even find it in the Emacs manual.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1185.301000" data-stop="1186.064000">It's just out there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1186.084000" data-stop="1187.107000">I don't remember where I picked it up.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1187.127000" data-stop="1189.154000">I think just scanning somebody else's config I</span> <span class="audio-time caption" data-speaker="Ross" data-start="1189.174000" data-stop="1190.900000">picked it up somewhere, but I couldn't find it in</span> <span class="audio-time caption" data-speaker="Ross" data-start="1190.940000" data-stop="1191.983000">the manual at all.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1192.000000">19:52</span> <strong>exiting Emacs: yes-or-no-p</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1192.334000" data-stop="1194.177000"><strong class="speaker-name">Sacha:</strong>  I was going to ask you where you found it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1194.217000" data-stop="1196.381000">You occasionally read other people's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1196.441000" data-stop="1198.926000">configurations for interesting ideas.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1200.529000" data-stop="1205.177000">And then you have a bunch of niceties.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1206.279000" data-stop="1207.400000">Actually, before I go into that,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1207.401000" data-stop="1208.924000">@Ray-On-Emacs has a question.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1208.944000" data-stop="1210.447000">"How do you exit Emacs then?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1210.507000" data-stop="1214.293000">Or do you never exit Emacs?"</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1214.754000" data-stop="1216.317000"><strong class="speaker-name">Ross:</strong>  I almost never exit it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1216.803000" data-stop="1219.108000"><strong class="speaker-name">Sacha:</strong>  I think the <code>emacs-lock-mode</code> for the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1219.128000" data-stop="1222.135000">Scratch doesn't kick in if you're closing Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1222.376000" data-stop="1222.877000">as a whole?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1223.940000" data-stop="1224.721000"><strong class="speaker-name">Ross:</strong>  Correct.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1224.741000" data-stop="1226.145000"><strong class="speaker-name">Sacha:</strong>  If you're closing Emacs as a whole, it will</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1226.686000" data-stop="1229.312000">happily still discard your Scratch buffer, but as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1229.372000" data-stop="1232.820000">Ross says, you could also not exit Emacs.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1234.066000" data-stop="1237.352000"><strong class="speaker-name">Ross:</strong>  Yeah, I've got the flippant line in</span> <span class="audio-time caption" data-speaker="Ross" data-start="1237.392000" data-stop="1238.575000">here: ¨Exit Emacs?</span> <span class="audio-time caption" data-speaker="Ross" data-start="1238.595000" data-stop="1240.499000">Surely there's been a terrible misunderstanding,¨</span> <span class="audio-time caption" data-speaker="Ross" data-start="1240.519000" data-stop="1242.723000">But I do configure the way that I do it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1242.883000" data-stop="1245.689000">I want to make sure that the confirmation of it,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1245.749000" data-stop="1246.671000">it's the yes or no.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1246.000000">20:46</span> <strong>yes-or-no-p</strong></div><p></p><span class="audio-time caption" data-speaker="Ross" data-start="1246.791000" data-stop="1248.072000"><strong class="speaker-name">Ross:</strong> I don't want to accidentally hit that</span> <span class="audio-time caption" data-speaker="Ross" data-start="1248.073000" data-stop="1252.041000">key binding, so I will use the full fledged yes-or-no-p`.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1252.021000" data-stop="1254.164000">That's one area that I diverge from a lot of</span> <span class="audio-time caption" data-speaker="Ross" data-start="1254.204000" data-stop="1256.628000">people's common things. One of the very early</span> <span class="audio-time caption" data-speaker="Ross" data-start="1256.688000" data-stop="1258.551000">things a lot of people set in their config is</span> <span class="audio-time caption" data-speaker="Ross" data-start="1258.591000" data-stop="1260.773000">they’ll rebind this <code>yes-or-no-p</code></span> <span class="audio-time caption" data-speaker="Ross" data-start="1260.774000" data-stop="1264.079000">to the <code>y-or-n-p</code> so that way, they only have to type</span> <span class="audio-time caption" data-speaker="Ross" data-start="1264.119000" data-stop="1265.661000">the one character.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1265.681000" data-stop="1268.025000">Emacs is fairly thoughtful about which ones that</span> <span class="audio-time caption" data-speaker="Ross" data-start="1268.065000" data-stop="1270.969000">it makes you do "yes" or "no" versus the "y" or "n". The</span> <span class="audio-time caption" data-speaker="Ross" data-start="1271.009000" data-stop="1273.172000">things that are quick and inconsequential, those</span> <span class="audio-time caption" data-speaker="Ross" data-start="1273.213000" data-stop="1274.815000">are the ones where it gives you the prompt that</span> <span class="audio-time caption" data-speaker="Ross" data-start="1274.835000" data-stop="1276.898000">it's just a "y" or "n" answer.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1276.878000" data-stop="1278.540000">The ones that are going to be more</span> <span class="audio-time caption" data-speaker="Ross" data-start="1278.600000" data-stop="1280.682000">destructive and you really want to stop and slow</span> <span class="audio-time caption" data-speaker="Ross" data-start="1280.722000" data-stop="1282.002000">down and think about, that's what the</span> <span class="audio-time caption" data-speaker="Ross" data-start="1282.003000" data-stop="1282.984000"><code>yes-or-no-p</code> is for.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1283.445000" data-stop="1285.767000">People stomp all over that in their configs,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1285.787000" data-stop="1287.589000">and I think that's one area where I'm a little</span> <span class="audio-time caption" data-speaker="Ross" data-start="1287.649000" data-stop="1289.151000">bit out of the mainstream.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1289.291000" data-stop="1291.333000">I like the defaults on Emacs there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1291.834000" data-stop="1293.676000">It is thoughtful about which ones it prompts you</span> <span class="audio-time caption" data-speaker="Ross" data-start="1293.716000" data-stop="1294.316000">for that on.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1294.897000" data-stop="1297.079000">But if I remember right, <code>confirm-kill-emacs</code> was</span> <span class="audio-time caption" data-speaker="Ross" data-start="1297.199000" data-stop="1299.181000">one that was just a "y" or "n". That's one of the</span> <span class="audio-time caption" data-speaker="Ross" data-start="1299.221000" data-stop="1300.743000">more dramatic ones that's out there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1301.484000" data-stop="1304.086000">So I did customize that to make sure, yes, I</span> <span class="audio-time caption" data-speaker="Ross" data-start="1304.147000" data-stop="1305.568000">really mean that.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1305.000000">21:45</span> <strong>Processes</strong></div><p></p><span class="audio-time caption" data-speaker="Ross" data-start="1305.548000" data-stop="1307.451000"><strong class="speaker-name">Ross:</strong> Then there's some annoyances where</span> <span class="audio-time caption" data-speaker="Ross" data-start="1307.452000" data-stop="1309.374000">if you've got a bunch of inferior processes</span> <span class="audio-time caption" data-speaker="Ross" data-start="1309.375000" data-stop="1310.857000">running after I've already confirmed</span> <span class="audio-time caption" data-speaker="Ross" data-start="1310.858000" data-stop="1312.040000">that I want to kill Emacs,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1312.060000" data-stop="1313.763000">well I just said I want to kill Emacs,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1313.764000" data-stop="1316.087000">so I didn't want to be prompted about the processes.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1316.088000" data-stop="1319.434000">I do quit Emacs enough I've customized how it shuts</span> <span class="audio-time caption" data-speaker="Ross" data-start="1319.495000" data-stop="1322.960000">down. I don't do it that often.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1322.961000" data-stop="1325.025000"><strong class="speaker-name">Sacha:</strong>  I imagine if you really want to stop yourself from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1325.377000" data-stop="1328.122000">closing Emacs, you might just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1329.003000" data-stop="1333.531000">change the key binding and make you M-x it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1334.052000" data-stop="1335.554000">instead in order to exit it,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1335.574000" data-stop="1337.858000">so you really absolutely don't run into that.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1338.000000">22:18</span> <strong>Moving keymaps</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1338.359000" data-stop="1341.264000"><strong class="speaker-name">Sacha:</strong> In fact, your config has some of these lambdas</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1341.364000" data-stop="1344.710000">where you are telling yourself, okay, this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1344.770000" data-stop="1346.473000">keyboard shortcut has changed.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1346.909000" data-stop="1349.115000">You have this thing in Magit, I think, where</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1349.156000" data-stop="1352.345000">you're like, I moved the key map and now</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1352.445000" data-stop="1354.411000">it's somewhere else.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1354.431000" data-stop="1355.554000">I thought that was interesting too.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1355.574000" data-stop="1359.265000"><strong class="speaker-name">Ross:</strong>  I'm trying to remember what that one was called.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1359.717000" data-stop="1361.440000"><strong class="speaker-name">Sacha:</strong>  There you go.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1362.201000" data-stop="1363.262000"><strong class="speaker-name">Ross:</strong>  Yeah, the <code>crab-juice&#45;&#45;moved-to</code>.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1363.503000" data-stop="1366.547000">I'll bind my old key map as I'm trying</span> <span class="audio-time caption" data-speaker="Ross" data-start="1366.647000" data-stop="1368.009000">to move things around.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1368.851000" data-stop="1371.094000">I used to use Spacemacs for a while.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1371.174000" data-stop="1372.797000">I used Doom Emacs for a while.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1372.837000" data-stop="1374.639000">I've looked at a lot of the other configs and</span> <span class="audio-time caption" data-speaker="Ross" data-start="1374.679000" data-stop="1377.343000">I've said, okay, this architecture makes a little</span> <span class="audio-time caption" data-speaker="Ross" data-start="1377.444000" data-stop="1378.024000">bit more sense.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1378.085000" data-stop="1381.049000">I want to rebind my prefixes that way, but still,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1381.169000" data-stop="1382.712000">for the ones that are deeply ingrained,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1382.932000" data-stop="1384.735000">it's sort of like a deprecation warning, except</span> <span class="audio-time caption" data-speaker="Ross" data-start="1384.775000" data-stop="1385.956000">for key bindings.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1388.202000" data-stop="1398.879000">It looks like I used to run on <code>C-c g</code>.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1398.979000" data-stop="1401.503000">So if I try to do that, it's going to say, nope,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1401.624000" data-stop="1402.665000">moved to <code>C-c v c</code>.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1402.886000" data-stop="1403.747000">And now I can do that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1403.927000" data-stop="1407.493000"><code>C-c v c</code>, and there’s my Magit command.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1408.368000" data-stop="1410.731000"><strong class="speaker-name">Sacha:</strong>  Yeah, I like that you actually</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1410.791000" data-stop="1413.114000">ended up mapping the whole keyboard shortcut</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1413.274000" data-stop="1415.697000">instead of just the <code>C-c g</code> one because, of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1415.737000" data-stop="1420.023000">course, your muscle memory is getting you to put</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1420.143000" data-stop="1423.127000">in the whole <code>C-c g</code> and then something.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1424.008000" data-stop="1429.835000">This one lets you have the full keyboard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1429.875000" data-stop="1432.138000">shortcut before it tells you the message.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1434.389000" data-stop="1435.991000"><strong class="speaker-name">Ross:</strong>  This is using user error.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1436.011000" data-stop="1437.633000">So I thought when I hit that one, I thought I</span> <span class="audio-time caption" data-speaker="Ross" data-start="1437.654000" data-stop="1439.396000">would flash my mode line, but the mode line is</span> <span class="audio-time caption" data-speaker="Ross" data-start="1439.436000" data-stop="1440.117000">not flashing.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1440.217000" data-stop="1441.999000">I know it flashes on my other machine.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1442.881000" data-stop="1444.062000">It flashes on my work machine.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1444.082000" data-stop="1445.364000">It doesn't flash on this one.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1447.908000" data-stop="1449.330000"><strong class="speaker-name">Sacha:</strong>  The challenge is getting a config</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1449.370000" data-stop="1451.292000">to work in many different environments.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1451.352000" data-stop="1452.774000">You've got your work machine, you've got this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1452.814000" data-stop="1455.899000">personal machine, and then you've got the sandbox</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1456.039000" data-stop="1458.542000">one that's got a really old version of Emacs on it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1459.617000" data-stop="1461.721000">Okay, so a couple of other things that you've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1461.782000" data-stop="1462.303000">mentioned.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1463.000000">24:23</span> <strong>Writing in Org Mode and Markdown</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1463.726000" data-stop="1467.313000"><strong class="speaker-name">Sacha:</strong> You do a lot of writing in Org Mode as well, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1467.353000" data-stop="1469.197000">You've mentioned using the literal programming</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1469.237000" data-stop="1470.901000">part of it a lot.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1470.921000" data-stop="1472.524000">You do a lot of work with Markdown.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1473.547000" data-stop="1475.812000">Do you have any interesting workflow tips for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1475.872000" data-stop="1477.816000">people who are finding themselves writing with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1477.896000" data-stop="1479.820000">either Org Mode or Markdown in a work environment?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1481.588000" data-stop="1484.092000"><strong class="speaker-name">Ross:</strong>  That's always a tension as well.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1484.212000" data-stop="1486.296000">I would rather be in Org Mode.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1486.356000" data-stop="1488.279000">Org Mode has more bells and whistles.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1488.359000" data-stop="1490.963000">You can program more things in it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1491.905000" data-stop="1494.709000">It's a programmable Markdown in a sense.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1495.891000" data-stop="1497.794000">I'm much more comfortable in Org Mode in general.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1497.934000" data-stop="1501.139000">Now, I don't use Org as a personal organizer as much.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1501.220000" data-stop="1501.881000">I would like to.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1501.981000" data-stop="1503.343000">I've dabbled in it a little bit.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1503.323000" data-stop="1505.046000">I've seen some of your previous interviews and</span> <span class="audio-time caption" data-speaker="Ross" data-start="1505.066000" data-stop="1506.750000">people doing mind-blowing things with that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1506.790000" data-stop="1507.992000">I'm jealous of what they're doing.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1508.012000" data-stop="1509.455000">I would love to get to that level.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1509.956000" data-stop="1512.721000">I'm still a relative newcomer to Org versus how</span> <span class="audio-time caption" data-speaker="Ross" data-start="1513.583000" data-stop="1514.705000">old I am at Emacs.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1514.745000" data-stop="1516.429000">I'm a relative newcomer to Org.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1516.869000" data-stop="1518.913000">So I haven't embraced that yet, but I do use it</span> <span class="audio-time caption" data-speaker="Ross" data-start="1518.974000" data-stop="1521.318000">as my general, if I'm writing a document by</span> <span class="audio-time caption" data-speaker="Ross" data-start="1521.378000" data-stop="1523.863000">myself, it will 100% be in Org.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1523.843000" data-stop="1526.586000">This document that we're in, it's my entire website.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1526.606000" data-stop="1528.488000">My Emacs config is in here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1528.688000" data-stop="1531.471000">My Nix configuration for how my systems work is</span> <span class="audio-time caption" data-speaker="Ross" data-start="1531.571000" data-stop="1531.992000">in here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1532.733000" data-stop="1534.074000">I like to do barbecue.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1534.114000" data-stop="1536.317000">Some of my barbecue recipes are in here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1536.997000" data-stop="1538.979000">Just general blog posts about things that have</span> <span class="audio-time caption" data-speaker="Ross" data-start="1539.040000" data-stop="1541.282000">nothing to do with technology are in here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1542.043000" data-stop="1543.805000">It's all one big Org file.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1544.145000" data-stop="1545.967000">That style is emphasized.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1546.047000" data-stop="1549.351000">I'm using ox-hugo to take this document and export</span> <span class="audio-time caption" data-speaker="Ross" data-start="1549.391000" data-stop="1550.492000">it to the website.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1550.860000" data-stop="1554.826000">They encourage having one big large file for that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1554.906000" data-stop="1556.388000">I followed suit on that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1556.428000" data-stop="1559.893000">That's why I have just this one giant document.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1560.033000" data-stop="1562.717000">In the work context, if I'm starting a small</span> <span class="audio-time caption" data-speaker="Ross" data-start="1562.777000" data-stop="1564.540000">document, I'll start it in Org Mode.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1564.600000" data-stop="1566.583000">But then when I started in Org Mode, if other</span> <span class="audio-time caption" data-speaker="Ross" data-start="1566.623000" data-stop="1569.147000">people want to edit it, we got a small Emacs community,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1569.167000" data-stop="1571.430000">so depending who I'm sharing it with, that might be fine.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1571.470000" data-stop="1573.393000">There's a couple people I can pair with on that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1573.433000" data-stop="1575.255000">If I'm working with them, everything is great.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1575.356000" data-stop="1577.779000">But that's not something...</span> <span class="audio-time caption" data-speaker="Ross" data-start="1577.928000" data-stop="1580.451000">There are Org implementations that work in other</span> <span class="audio-time caption" data-speaker="Ross" data-start="1580.531000" data-stop="1582.895000">editors, but it isn't as good anywhere else as it</span> <span class="audio-time caption" data-speaker="Ross" data-start="1582.975000" data-stop="1584.056000">is in Emacs.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1584.116000" data-stop="1586.439000">That's what everybody's going to typically use.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1586.459000" data-stop="1588.202000">And if they're not using Emacs, they're not going</span> <span class="audio-time caption" data-speaker="Ross" data-start="1588.222000" data-stop="1590.605000">to be that warm to Org.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1590.905000" data-stop="1593.669000">I hate to say the dreaded two-letter acronym, but</span> <span class="audio-time caption" data-speaker="Ross" data-start="1593.709000" data-stop="1595.992000">with AI, you're seeing a lot more Markdown.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1596.132000" data-stop="1597.954000">People are starting to program in Markdown.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1597.994000" data-stop="1599.897000">Markdown is bigger than it's ever been before.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1599.977000" data-stop="1602.180000">It's just unavoidable at this point.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1602.160000" data-stop="1604.542000">So what I'll do is I'll start a document in Org</span> <span class="audio-time caption" data-speaker="Ross" data-start="1604.622000" data-stop="1606.564000">and then I can export the Org document to</span> <span class="audio-time caption" data-speaker="Ross" data-start="1606.604000" data-stop="1609.767000">Markdown if I'm going to put it into GitHub or</span> <span class="audio-time caption" data-speaker="Ross" data-start="1610.008000" data-stop="1611.189000">sometimes I'll just use Google.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1611.289000" data-stop="1613.551000">It really depends on how the collaboration model is.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1613.591000" data-stop="1615.213000">If I'm going to be collaborating with a lot of</span> <span class="audio-time caption" data-speaker="Ross" data-start="1615.253000" data-stop="1617.093000">people up front and iterating real quickly,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1617.094000" data-stop="1619.817000">I'll do that in a Google Doc and I'll export that to Markdown.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1620.077000" data-stop="1621.798000">If I'm writing it myself as a first draft,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1621.799000" data-stop="1623.801000">I'll start it in Org and export that to Markdown.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1624.221000" data-stop="1626.063000">Markdown ends up being the target in the</span> <span class="audio-time caption" data-speaker="Ross" data-start="1626.083000" data-stop="1628.185000">workplace for anything that's permanent though.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1628.317000" data-stop="1628.958000">I don't love it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1629.038000" data-stop="1631.724000">I wish Org had won. All my personal projects,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1631.744000" data-stop="1633.647000">they'll have a README.org on them rather than</span> <span class="audio-time caption" data-speaker="Ross" data-start="1633.687000" data-stop="1636.633000">README.md, but it is what it is and you've got to</span> <span class="audio-time caption" data-speaker="Ross" data-start="1636.653000" data-stop="1638.056000">play nice with your co-workers too.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1639.298000" data-stop="1641.142000"><strong class="speaker-name">Sacha:</strong>  Yeah, I find myself having a hard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1641.182000" data-stop="1643.385000">time remembering to switch the link syntax.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1643.386000" data-stop="1647.213000">I have a "do what I mean", just insert the link.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1647.214000" data-stop="1648.415000">I don't care what syntax it's in,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1648.416000" data-stop="1649.017000">just make it work.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1650.019000" data-stop="1650.460000"><strong class="speaker-name">Ross:</strong>  Nice.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1652.245000" data-stop="1654.088000"><strong class="speaker-name">Sacha:</strong>  You mentioned sometimes</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1654.188000" data-stop="1656.952000">in your Zoom calls when you need to exchange</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1657.032000" data-stop="1658.775000">notes with people faster, then you have to use</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1658.815000" data-stop="1660.297000">Google Docs for that one because that's what</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1660.317000" data-stop="1661.138000">they're familiar with.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1661.659000" data-stop="1664.023000">But there might be some easy ways for you to ship</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1664.063000" data-stop="1669.010000">that back and forth between Org and Google Docs.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1669.000000">27:49</span> <strong>Ethersync?</strong></div><p></p><span class="audio-time caption" data-speaker="Ross" data-start="1669.170000" data-stop="1672.596000"><strong class="speaker-name">Ross:</strong>  One thing I'm really looking</span> <span class="audio-time caption" data-speaker="Ross" data-start="1672.676000" data-stop="1674.959000">forward to is there's this project.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1674.979000" data-stop="1676.261000">I can't remember what it's called.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1676.341000" data-stop="1679.586000">Ethersync. Yes, thank you.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1680.460000" data-stop="1682.683000">I've seen some various attempts at that and</span> <span class="audio-time caption" data-speaker="Ross" data-start="1682.723000" data-stop="1684.406000">I had a little bit of success with them, but none</span> <span class="audio-time caption" data-speaker="Ross" data-start="1684.426000" data-stop="1685.227000">of them have lasted.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1685.267000" data-stop="1686.609000">I'm really rooting for that team.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1687.129000" data-stop="1688.972000">I feel like Emacs got rejuvenated.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1688.992000" data-stop="1691.456000">It used to be, okay, it was hard to use Emacs</span> <span class="audio-time caption" data-speaker="Ross" data-start="1691.496000" data-stop="1693.478000">because if you're in a niche language and you're</span> <span class="audio-time caption" data-speaker="Ross" data-start="1693.538000" data-stop="1695.822000">using a niche editor, you had to find a community</span> <span class="audio-time caption" data-speaker="Ross" data-start="1695.862000" data-stop="1698.165000">that used both of those to have decent support.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1698.145000" data-stop="1699.688000">Then LSP came along.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1699.708000" data-stop="1700.990000">You have your language servers.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1701.010000" data-stop="1703.475000">So now I can write in these niche languages that</span> <span class="audio-time caption" data-speaker="Ross" data-start="1703.515000" data-stop="1705.358000">not everybody's writing Emacs, but I still have a</span> <span class="audio-time caption" data-speaker="Ross" data-start="1705.398000" data-stop="1707.863000">good experience thanks to Eglot and thanks to the</span> <span class="audio-time caption" data-speaker="Ross" data-start="1707.923000" data-stop="1710.007000">language server provided by those communities.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1710.348000" data-stop="1713.093000">Emacs became viable again for doing a lot of</span> <span class="audio-time caption" data-speaker="Ross" data-start="1713.173000" data-stop="1714.315000">development.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1714.295000" data-stop="1718.201000">And I'm hoping that Ethersync kind of becomes</span> <span class="audio-time caption" data-speaker="Ross" data-start="1718.281000" data-stop="1720.844000">like the LSP of collaborative editing, where it's</span> <span class="audio-time caption" data-speaker="Ross" data-start="1720.925000" data-stop="1723.148000">not something where it's only Emacs users sharing</span> <span class="audio-time caption" data-speaker="Ross" data-start="1723.168000" data-stop="1725.571000">with each other, but it works across editors and</span> <span class="audio-time caption" data-speaker="Ross" data-start="1725.631000" data-stop="1727.494000">people can collaborate in real time that way.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1727.634000" data-stop="1730.098000">That would replace that Google Docs use case</span> <span class="audio-time caption" data-speaker="Ross" data-start="1730.178000" data-stop="1730.519000">I have.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1730.959000" data-stop="1732.742000">The only reason I use Google Docs is we can see</span> <span class="audio-time caption" data-speaker="Ross" data-start="1732.782000" data-stop="1734.825000">each other typing and edit things on the fly</span> <span class="audio-time caption" data-speaker="Ross" data-start="1734.865000" data-stop="1735.265000">together.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1735.386000" data-stop="1737.729000">So I'm very excited about that Ethersync project.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1737.789000" data-stop="1738.770000">I hope that takes off.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1739.632000" data-stop="1742.936000"><strong class="speaker-name">Sacha:</strong>  Yeah, I think that will probably be</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1742.997000" data-stop="1745.778000">more feasible than hoping people will switch to Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1745.779000" data-stop="1746.840000">and then use CRDT.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1751.586000" data-stop="1754.109000">There are other interesting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1754.309000" data-stop="1756.151000">collaboration things in your config.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1756.000000">29:16</span> <strong>Managing Github with Forge
</strong></div><p></p><a href="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker-00-30-35-700.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker-00-30-35-700.jpg" alt="image from video 00:30:35.700" data-time="00:30:35.700"></a><span class="audio-time caption" data-speaker="Sacha" data-start="1756.171000" data-stop="1759.435000"><strong class="speaker-name">Sacha:</strong> You've mentioned Forge. You have some things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1759.535000" data-stop="1761.878000">in here for cloning to different directories</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1761.958000" data-stop="1764.180000">depending on the repository, committing with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1764.200000" data-stop="1766.383000">different addresses, confirming before merging</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1766.483000" data-stop="1767.264000">pull requests.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1767.664000" data-stop="1769.346000">Can you tell us a little bit about these quality</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1769.366000" data-stop="1770.728000">of life improvements for you?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1771.552000" data-stop="1776.182000"><strong class="speaker-name">Ross:</strong>  Let me see if I can come up with an example here,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1776.242000" data-stop="1776.944000">first of all.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1778.367000" data-stop="1781.994000">So this is Forge for people who have not seen it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1782.014000" data-stop="1783.738000">Let's do...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1789.642000" data-stop="1790.803000"><strong class="speaker-name">Sacha:</strong>  So when you don't need something</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1790.863000" data-stop="1793.566000">like real-time collaboration, for the people who</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1793.606000" data-stop="1796.910000">are watching, Forge lets you manage your Git</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1796.950000" data-stop="1801.575000">repositories with the pull requests and other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1801.615000" data-stop="1802.957000">changes and things like that, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1803.337000" data-stop="1804.659000">I don't use it yet, so... Yes.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="1805.299000" data-stop="1807.902000"><strong class="speaker-name">Ross:</strong>  Yeah, so it's essentially a GitHub client.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1807.922000" data-stop="1811.786000">So I was looking... I'm here in my Forge test directory.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1812.167000" data-stop="1814.349000">I'm trying not to share any of my work repositories.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1814.389000" data-stop="1815.711000">I use this primarily at work.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1815.731000" data-stop="1818.754000">I just set it up on this machine last night.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1819.021000" data-stop="1821.183000">Still probably a couple of rough edges.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1821.203000" data-stop="1822.744000">I can list the topics.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1823.945000" data-stop="1826.387000">And if I list the topics, I can see I've got pull</span> <span class="audio-time caption" data-speaker="Ross" data-start="1826.407000" data-stop="1827.969000">request 20 open.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1828.549000" data-stop="1831.372000">I can hit enter on it and I can see, okay, it's open.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1831.412000" data-stop="1832.673000">It's in state pending.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1832.753000" data-stop="1833.934000">This is where it's going.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1834.134000" data-stop="1835.095000">These are the commits.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1835.696000" data-stop="1838.558000">I can look at the commit and see, okay, what is</span> <span class="audio-time caption" data-speaker="Ross" data-start="1838.638000" data-stop="1839.619000">this person doing?</span> <span class="audio-time caption" data-speaker="Ross" data-start="1839.799000" data-stop="1843.722000">Oh, they're trying to add another line to this file.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1844.323000" data-stop="1846.245000">And if I say, okay, that looks good.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1846.565000" data-stop="1848.927000">I can do, what is it?</span> <span class="audio-time caption" data-speaker="Ross" data-start="1853.513000" data-stop="1860.043000">I can look at this and I can say... This works</span> <span class="audio-time caption" data-speaker="Ross" data-start="1860.103000" data-stop="1863.107000">better if it is in a full screen editor.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1864.349000" data-stop="1867.554000">Let's do... I thought I was tracking this repo</span> <span class="audio-time caption" data-speaker="Ross" data-start="1867.634000" data-stop="1868.055000">already.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1871.640000" data-stop="1872.882000">I had this working last night.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1872.942000" data-stop="1874.164000">Curse of the demo again.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1874.945000" data-stop="1878.551000">Anyway, I'm able to approve pull requests from</span> <span class="audio-time caption" data-speaker="Ross" data-start="1878.591000" data-stop="1878.771000">this.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1878.831000" data-stop="1880.854000">I'm able to...</span> <span class="audio-time caption" data-speaker="Ross" data-start="1881.998000" data-stop="1883.000000">Reject pull requests.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1883.020000" data-stop="1884.763000">I'm able to comment on pull requests.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1884.823000" data-stop="1885.784000">I can look at the diffs.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1885.805000" data-stop="1889.731000">So all of my integration with GitHub is done</span> <span class="audio-time caption" data-speaker="Ross" data-start="1889.791000" data-stop="1891.154000">through this.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1891.174000" data-stop="1894.519000">I'm in an environment right now, I'm a staff engineer.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1894.660000" data-stop="1896.283000">I participate on a lot of teams.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1896.363000" data-stop="1898.847000">I get over a thousand GitHub notifications a day.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1899.127000" data-stop="1901.211000">The GitHub notifications that are built into</span> <span class="audio-time caption" data-speaker="Ross" data-start="1901.231000" data-stop="1902.994000">the browser are just not sufficient.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1903.295000" data-stop="1905.940000">That's something I was able to pull it in with</span> <span class="audio-time caption" data-speaker="Ross" data-start="1906.020000" data-stop="1908.585000">Forge. I'm able to tag things. I'm able to</span> <span class="audio-time caption" data-speaker="Ross" data-start="1908.685000" data-stop="1909.687000">mass mark the things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1909.787000" data-stop="1911.951000">I get a lot of infrastructure things that they're</span> <span class="audio-time caption" data-speaker="Ross" data-start="1911.991000" data-stop="1914.014000">important, but they're not important to me. I</span> <span class="audio-time caption" data-speaker="Ross" data-start="1914.054000" data-stop="1916.419000">get notified on them all the time through the</span> <span class="audio-time caption" data-speaker="Ross" data-start="1916.459000" data-stop="1918.162000">various automations. I'll get them.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1918.242000" data-stop="1920.947000">I'll get a hundred of those at a time and I can</span> <span class="audio-time caption" data-speaker="Ross" data-start="1920.987000" data-stop="1922.770000">just mark a region of those and knock out a</span> <span class="audio-time caption" data-speaker="Ross" data-start="1922.830000" data-stop="1925.455000">hundred and say, okay, that's off my plate.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1925.435000" data-stop="1928.798000">Moving it into Emacs, as awkward as this demo is,</span> <span class="audio-time caption" data-speaker="Ross" data-start="1929.139000" data-stop="1930.720000">it works great on my work machine.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1931.201000" data-stop="1933.243000">I'm able to keep up with things so much better</span> <span class="audio-time caption" data-speaker="Ross" data-start="1933.283000" data-stop="1935.465000">than I was before.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1935.485000" data-stop="1935.985000">Let's see.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1936.326000" data-stop="1938.908000">I should be able to, if I want to look a little</span> <span class="audio-time caption" data-speaker="Ross" data-start="1938.968000" data-stop="1941.190000">bit deeper and see things in the GitHub, at least</span> <span class="audio-time caption" data-speaker="Ross" data-start="1941.230000" data-stop="1941.751000">this works.</span> <p></p><a href="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker-00-32-21-833.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker-00-32-21-833.jpg" alt="image from video 00:32:21.833" data-time="00:32:21.833"></a><span class="audio-time caption" data-speaker="Ross" data-start="1941.811000" data-stop="1943.893000"><strong class="speaker-name">Ross:</strong> I can open it and see this directly.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1943.913000" data-stop="1945.795000">Then if I want to merge it from here, I can.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1946.616000" data-stop="1951.020000">Or I should be able to merge.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1951.777000" data-stop="1953.820000">Now I can do a regular merge or a squash</span> <span class="audio-time caption" data-speaker="Ross" data-start="1953.860000" data-stop="1956.084000">merge or a rebase just the same as I have this</span> <span class="audio-time caption" data-speaker="Ross" data-start="1956.144000" data-stop="1956.665000">button here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1956.705000" data-stop="1957.967000">That's all built in here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="1958.087000" data-stop="1967.543000">Let's go ahead and merge this pull request.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1967.563000" data-stop="1967.903000"><strong class="speaker-name">Sacha:</strong>  All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1967.923000" data-stop="1970.968000">That little detail about you dealing with like a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1971.088000" data-stop="1974.107000">thousand notifications a day?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1975.249000" data-stop="1979.195000">It makes the guardrails that you added to Forge</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1979.216000" data-stop="1981.499000">in your config even more interesting because you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1982.060000" data-stop="1984.585000">can stop yourself from accidentally automatically</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1984.665000" data-stop="1986.668000">merging in things that need more review or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1986.708000" data-stop="1989.473000">whatever, which of course is difficult to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1989.513000" data-stop="1991.095000">demonstrate at the moment because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1991.096000" data-stop="1993.680000">work stuff, private.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1993.660000" data-stop="1997.305000">But if other people are listening and thinking,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1997.345000" data-stop="1999.426000">they're dealing with a similar volume,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1999.427000" data-stop="2003.733000">you can modify Emacs to stop you from making mistakes</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2004.173000" data-stop="2004.614000">like that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2005.595000" data-stop="2008.499000">You can add just enough friction for the cases</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2008.559000" data-stop="2011.503000">where you need to pay more attention.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2011.523000" data-stop="2014.246000">And @PuercoPop, there's a gh-notify</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2014.286000" data-stop="2016.669000">package specifically for high-volume GitHub</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2016.750000" data-stop="2017.571000">notifications.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2018.332000" data-stop="2021.035000">I'm not sure... Have you come across that one yet?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2022.230000" data-stop="2024.758000"><strong class="speaker-name">Ross:</strong>  I'm curious what that looks.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2024.798000" data-stop="2029.753000">The term "notify" concerns me, like if</span> <span class="audio-time caption" data-speaker="Ross" data-start="2029.793000" data-stop="2032.079000">it's helping me manage notifications in bulk,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2032.080000" data-stop="2034.087000">I'm interested. If it's going to pop up something</span> <span class="audio-time caption" data-speaker="Ross" data-start="2034.147000" data-stop="2036.170000">every time I get a new notification,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2036.190000" data-stop="2037.372000">I'm very much disinterested.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2037.393000" data-stop="2040.177000">I don't know whether to be excited or horrified,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2040.197000" data-stop="2041.800000">but I'll take a look.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2041.820000" data-stop="2043.263000"><strong class="speaker-name">Sacha:</strong>  I think because @PuercoPop is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2043.343000" data-stop="2045.206000">recommending it specifically in the context of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2045.286000" data-stop="2048.172000">high-volume notifications, it might provide you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2048.212000" data-stop="2050.576000">that inboxing where you can filter.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2050.636000" data-stop="2054.322000">I haven't looked into it myself, but I'm getting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2054.422000" data-stop="2056.505000">the sense that this is a problem that many people</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2056.887000" data-stop="2058.028000">who use Emacs face</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2058.029000" data-stop="2060.353000">and who solve it a very Emacs-y way.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2061.210000" data-stop="2068.296000"><strong class="speaker-name">Ross:</strong>  Yes. Forge has all these nice things built into it already,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2068.297000" data-stop="2069.940000">but I wanted to customize the workflow a</span> <span class="audio-time caption" data-speaker="Ross" data-start="2069.980000" data-stop="2070.400000">little bit.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2070.760000" data-stop="2072.601000">It's right here in the comments, the things that</span> <span class="audio-time caption" data-speaker="Ross" data-start="2072.641000" data-stop="2072.882000">it does.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2072.942000" data-stop="2074.463000">It makes sure that it's mergeable,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2074.464000" data-stop="2076.445000">there's no merge conflicts,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2076.446000" data-stop="2078.546000">makes sure that all the status checks ran,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2078.547000" data-stop="2080.830000">makes sure that all the approval is done.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2081.070000" data-stop="2083.671000">One thing that the Forge does not do is</span> <span class="audio-time caption" data-speaker="Ross" data-start="2083.672000" data-stop="2087.877000">it does not show you comments on your pull request.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2088.667000" data-stop="2090.951000">There's a code-review package that's out there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2091.172000" data-stop="2092.875000">It's been through a lot of forks.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2093.014000" data-stop="2094.958000">I'm still integrating that into my workflow.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2094.978000" data-stop="2097.644000">I've got a fork of a fork of a fork that I have.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2098.125000" data-stop="2100.369000">This is life in Emacs, for better or for worse.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2100.790000" data-stop="2102.994000">I've got a fork of a fork of a fork of a fork so</span> <span class="audio-time caption" data-speaker="Ross" data-start="2103.034000" data-stop="2104.096000">I can see those comments.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2104.116000" data-stop="2105.919000">I haven't fully integrated it with Forge yet.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2105.939000" data-stop="2107.502000">That's a work in progress.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2107.718000" data-stop="2109.941000">But anyway, I didn't want to be merging these</span> <span class="audio-time caption" data-speaker="Ross" data-start="2110.001000" data-stop="2112.405000">things and ignoring if somebody's taking the time</span> <span class="audio-time caption" data-speaker="Ross" data-start="2112.425000" data-stop="2113.346000">to give me feedback.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2113.386000" data-stop="2115.048000">I don't want to merge things because sometimes</span> <span class="audio-time caption" data-speaker="Ross" data-start="2115.089000" data-stop="2116.991000">people will approve things, but they'll say, hey,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2117.031000" data-stop="2117.993000">just a little nit to pick.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2118.033000" data-stop="2119.034000">You got a typo here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2119.395000" data-stop="2121.257000">Don't want to slow down progress, but you might</span> <span class="audio-time caption" data-speaker="Ross" data-start="2121.297000" data-stop="2123.060000">want to take a look at this.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2123.080000" data-stop="2125.584000">If I'm just sitting here entirely inside of</span> <span class="audio-time caption" data-speaker="Ross" data-start="2125.604000" data-stop="2126.605000">this, I'll never see that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2126.625000" data-stop="2129.389000">So this also checks for unresolved threads.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2129.369000" data-stop="2131.753000">I've got some embedded GraphQL inside of here</span> <span class="audio-time caption" data-speaker="Ross" data-start="2131.793000" data-stop="2134.578000">that makes it all work and we grab that data from</span> <span class="audio-time caption" data-speaker="Ross" data-start="2134.638000" data-stop="2137.303000">the GraphQL and then I'm able to just do this</span> <span class="audio-time caption" data-speaker="Ross" data-start="2137.383000" data-stop="2139.807000">inside a list and prompt on these things and if</span> <span class="audio-time caption" data-speaker="Ross" data-start="2139.867000" data-stop="2141.570000">it finds there's anything that isn't right it</span> <span class="audio-time caption" data-speaker="Ross" data-start="2141.630000" data-stop="2144.936000">gives me these safety checks along the way and</span> <span class="audio-time caption" data-speaker="Ross" data-start="2144.956000" data-stop="2148.542000">yeah it's really nice.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2149.000000">35:49</span> <strong>Committing with work addresses vs personal</strong></div><p></p><span class="audio-time caption" data-speaker="Ross" data-start="2149.501000" data-stop="2152.185000"><strong class="speaker-name">Ross:</strong> One other issue that I had was we had this</span> <span class="audio-time caption" data-speaker="Ross" data-start="2152.245000" data-stop="2153.987000">requirement at work where we needed to start</span> <span class="audio-time caption" data-speaker="Ross" data-start="2154.448000" data-stop="2156.571000">committing with our work email addresses rather</span> <span class="audio-time caption" data-speaker="Ross" data-start="2156.611000" data-stop="2157.552000">than our personal addresses.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2157.592000" data-stop="2160.596000">I use my same GitHub account for work and personal.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2160.656000" data-stop="2162.178000">I needed to get that moved over.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2162.699000" data-stop="2165.423000">To do that with GitHub, you need to do those</span> <span class="audio-time caption" data-speaker="Ross" data-start="2165.483000" data-stop="2167.285000">merges via the API.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2167.305000" data-stop="2168.487000">I've got things configured.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2168.567000" data-stop="2170.750000">All of my work repositories are</span> <span class="audio-time caption" data-speaker="Ross" data-start="2170.730000" data-stop="2173.895000">partitioned off into their own subdirectory of my</span> <span class="audio-time caption" data-speaker="Ross" data-start="2173.935000" data-stop="2174.896000">projects directory.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2174.996000" data-stop="2177.320000">I've got a git config that sets my email address</span> <span class="audio-time caption" data-speaker="Ross" data-start="2177.340000" data-stop="2177.821000">to that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2177.881000" data-stop="2180.405000">So if I'm doing things locally, it works.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2180.425000" data-stop="2182.908000">But if I'm doing these API merges that are</span> <span class="audio-time caption" data-speaker="Ross" data-start="2182.989000" data-stop="2185.272000">necessary for certain repositories with certain</span> <span class="audio-time caption" data-speaker="Ross" data-start="2185.332000" data-stop="2188.657000">safety checks, I needed to be able to thread that along.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2188.697000" data-stop="2190.921000">I've got a bug fix in here for that, where I'm</span> <span class="audio-time caption" data-speaker="Ross" data-start="2190.961000" data-stop="2192.944000">threading along that email address that reads my</span> <span class="audio-time caption" data-speaker="Ross" data-start="2192.984000" data-stop="2195.808000">git config and passes that along to the API</span> <span class="audio-time caption" data-speaker="Ross" data-start="2195.968000" data-stop="2196.930000">endpoint.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2196.950000" data-stop="2199.133000">Otherwise, it was committed as the wrong identity.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2199.113000" data-stop="2200.514000">There's a few things here that I'd like to</span> <span class="audio-time caption" data-speaker="Ross" data-start="2200.574000" data-stop="2201.936000">contribute upstream to Forge.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2201.976000" data-stop="2203.777000">Some of it is very bespoke to me,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2203.778000" data-stop="2205.920000">and some of it I think would be useful to everybody.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2205.940000" data-stop="2209.363000">I need to tease that apart still.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2209.383000" data-stop="2211.866000"><strong class="speaker-name">Sacha:</strong>  I like your technique of separating</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2212.066000" data-stop="2214.288000">things into different subdirectories and so that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2214.909000" data-stop="2216.691000">all of your work stuff goes in the work directory</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2216.771000" data-stop="2219.033000">or all of your personal stuff goes into projects</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2219.093000" data-stop="2219.534000">or whatever.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2219.974000" data-stop="2221.936000">Then you can change your settings based on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2221.976000" data-stop="2223.838000">the location of the project.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2223.818000" data-stop="2227.644000">Even cloning a project will automatically pick</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2228.065000" data-stop="2229.787000">the right directory to put it in.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2229.807000" data-stop="2231.009000">I saw that in your config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2231.210000" data-stop="2232.612000">That's pretty clever.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2233.000000">37:13</span> <strong>Emacs tinkering as stress relief</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2233.533000" data-stop="2235.496000"><strong class="speaker-name">Sacha:</strong> I'm curious because a lot of people find it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2235.637000" data-stop="2239.923000">challenging to balance the workflow improvement I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2239.963000" data-stop="2242.047000">get to tinker with Emacs versus actually getting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2242.087000" data-stop="2244.330000">work done, the time balance between those two.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2244.370000" data-stop="2246.113000">It's a little hard to figure out sometimes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2246.093000" data-stop="2247.735000">What is this like for you when you're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2247.775000" data-stop="2249.498000">sitting down, you're doing some work, and you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2249.518000" data-stop="2251.801000">realize "There's probably something</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2251.821000" data-stop="2254.225000">that I can write to make this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2254.265000" data-stop="2255.826000">smoother?"</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2255.827000" data-stop="2257.770000"><strong class="speaker-name">Ross:</strong>  I've been doing Emacs off and on</span> <span class="audio-time caption" data-speaker="Ross" data-start="2257.830000" data-stop="2259.893000">for about 30 years now, and when I get that</span> <span class="audio-time caption" data-speaker="Ross" data-start="2259.953000" data-stop="2262.836000">balance right, I'll let you know.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2262.837000" data-stop="2264.760000">I don't have it right yet.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2265.668000" data-stop="2268.472000">I know I spend more time tweaking</span> <span class="audio-time caption" data-speaker="Ross" data-start="2268.572000" data-stop="2269.913000">things than I probably should.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2269.914000" data-stop="2272.698000">It's a stress reliever for me.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2272.718000" data-stop="2276.563000">I get tired of doing the other things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2276.983000" data-stop="2278.946000">I still love computers.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2278.986000" data-stop="2281.129000">I've loved computers since I was six years old.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2281.189000" data-stop="2284.033000">Got my first computer then.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2284.093000" data-stop="2286.597000">My aunt got me a book on programming when I was six.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2286.637000" data-stop="2288.900000">I started going through that book, and I was off</span> <span class="audio-time caption" data-speaker="Ross" data-start="2288.940000" data-stop="2290.562000">to the races on that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2290.542000" data-stop="2293.747000">I relax by doing computers. Some of</span> <span class="audio-time caption" data-speaker="Ross" data-start="2293.767000" data-stop="2296.451000">the open source chaos is a lot to deal with, and</span> <span class="audio-time caption" data-speaker="Ross" data-start="2296.772000" data-stop="2298.775000">using the same languages that I use at work that</span> <span class="audio-time caption" data-speaker="Ross" data-start="2298.835000" data-stop="2300.678000">feels too much like work, so being able to</span> <span class="audio-time caption" data-speaker="Ross" data-start="2300.718000" data-stop="2303.042000">withdraw and just tweak things... "Okay, this</span> <span class="audio-time caption" data-speaker="Ross" data-start="2303.162000" data-stop="2308.550000">irritated me." It's a combination... From a pure</span> <span class="audio-time caption" data-speaker="Ross" data-start="2308.590000" data-stop="2311.415000">productivity perspective, I overdo it for sure, but</span> <span class="audio-time caption" data-speaker="Ross" data-start="2311.695000" data-stop="2313.718000">I guess the stress relief if I would burn out</span> <span class="audio-time caption" data-speaker="Ross" data-start="2313.798000" data-stop="2316.102000">otherwise... Maybe I'm getting it right after</span> <span class="audio-time caption" data-speaker="Ross" data-start="2316.182000" data-stop="2317.444000">all. It's hard to say.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2318.403000" data-stop="2320.590000"><strong class="speaker-name">Sacha:</strong>  Besides, you might also be able</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2320.670000" data-stop="2323.900000">to say to yourself, well, I do have some Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2323.980000" data-stop="2327.431000">co-workers. I'm sure they can benefit from this too.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2327.451000" data-stop="2327.812000"><strong class="speaker-name">Ross:</strong>  I do.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2330.059000" data-stop="2331.222000"><strong class="speaker-name">Sacha:</strong>  You're helping them out too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2331.242000" data-stop="2334.370000">Okay, I want to dig into some of the things that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2334.410000" data-stop="2338.074000">you have around improving Emacs' capabilities as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2338.155000" data-stop="2339.436000">a self-documenting editor.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2339.456000" data-stop="2342.320000">You have some configuration snippets that make</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2342.380000" data-stop="2343.561000">getting help easier.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2344.202000" data-stop="2346.806000">I hadn't come across them before, so I wanted to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2347.266000" data-stop="2348.708000">make sure other people knew about them too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2349.108000" data-stop="2352.533000">Like your thing about making apropos look at all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2352.573000" data-stop="2354.936000">the things and sort by scores.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2355.396000" data-stop="2356.278000">It can sort by scores?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2356.378000" data-stop="2359.041000">What kind of scores are we talking about?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2359.021000" data-stop="2370.639000">How does this work?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2370.640000" data-stop="2372.080000"><strong class="speaker-name">Ross:</strong>  One thing that I have done,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2372.081000" data-stop="2374.565000">a little bit off-topic for the question that you've</span> <span class="audio-time caption" data-speaker="Ross" data-start="2374.825000" data-stop="2377.289000">asked, but I have linked everything very</span> <span class="audio-time caption" data-speaker="Ross" data-start="2377.329000" data-stop="2381.836000">aggressively to the info manual where I found things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2381.856000" data-stop="2385.602000">Sorry, I got caught in a recursive edit here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2386.932000" data-stop="2391.100000">So let's open this.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2393.044000" data-stop="2398.094000">What was that doing?</span> <span class="audio-time caption" data-speaker="Ross" data-start="2398.134000" data-stop="2401.099000">I'm also struggling because I've been very busy</span> <span class="audio-time caption" data-speaker="Ross" data-start="2401.140000" data-stop="2403.163000">at work lately. I'm used to the Mac key</span> <span class="audio-time caption" data-speaker="Ross" data-start="2403.204000" data-stop="2405.007000">bindings again. I'm back here on my Linux</span> <span class="audio-time caption" data-speaker="Ross" data-start="2405.047000" data-stop="2408.113000">machine. I haven't adapted to the Ctrl versus the Cmd.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2409.038000" data-stop="2411.561000">So yeah, all apropos commands will sort their</span> <span class="audio-time caption" data-speaker="Ross" data-start="2411.621000" data-stop="2413.904000">lists or results in alphabetical order.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2413.924000" data-stop="2416.186000">If sort by scores is non-null, they try to guess</span> <span class="audio-time caption" data-speaker="Ross" data-start="2416.226000" data-stop="2419.811000">the relevance of each result.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2419.831000" data-stop="2421.412000">My comment looks like it's a little bit obsolete</span> <span class="audio-time caption" data-speaker="Ross" data-start="2421.472000" data-stop="2423.695000">here because it looks like for the documentation,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2423.815000" data-stop="2426.538000">I do like the sorting by scores, but for regular</span> <span class="audio-time caption" data-speaker="Ross" data-start="2426.578000" data-stop="2427.860000">apropos, I did not.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2427.920000" data-stop="2430.643000">I think I tweaked something and didn't update</span> <span class="audio-time caption" data-speaker="Ross" data-start="2430.663000" data-stop="2431.584000">the documentation.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2431.604000" data-stop="2433.787000"><strong class="speaker-name">Sacha:</strong>  That's okay. I was just curious about it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2434.267000" data-stop="2438.252000">Then you also have some things like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2438.654000" data-stop="2443.584000">if it's an autoloaded symbol, then go ahead and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2443.624000" data-stop="2446.229000">load the library so that you can get help for it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2446.510000" data-stop="2449.415000">If there's a shortdoc example, include that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2449.475000" data-stop="2453.764000">as well in the documentation of a function.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2454.165000" data-stop="2457.391000">So if people are reading configs for ideas, I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2457.451000" data-stop="2459.315000">thought I would call attention to this part</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2459.335000" data-stop="2460.898000">because it sounds really handy.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2462.566000" data-stop="2463.449000"><strong class="speaker-name">Ross:</strong>  Yeah, I found these.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2463.569000" data-stop="2464.912000">I've just been going through...</span> <span class="audio-time caption" data-speaker="Ross" data-start="2464.913000" data-stop="2466.137000">Part of my relaxation...</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2466.000000">41:06</span> <strong>Under-appreciated Emacs built-ins</strong></div><p></p><span class="audio-time caption" data-speaker="Ross" data-start="2466.157000" data-stop="2468.303000"><strong class="speaker-name">Ross:</strong> This is such a dorky thing to say, but part of</span> <span class="audio-time caption" data-speaker="Ross" data-start="2468.343000" data-stop="2470.430000">the relaxation is I'll go through the Emacs</span> <span class="audio-time caption" data-speaker="Ross" data-start="2470.470000" data-stop="2471.774000">manual looking for things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2471.794000" data-stop="2474.362000">The overall structure of this document follows</span> <span class="audio-time caption" data-speaker="Ross" data-start="2474.422000" data-stop="2476.508000">the Emacs manual fairly closely, and that's</span> <span class="audio-time caption" data-speaker="Ross" data-start="2476.825000" data-stop="2478.087000">not by coincidence.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2478.147000" data-stop="2480.191000">I've just been going through chapter by chapter.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2480.311000" data-stop="2483.476000">Okay, well, I started with Emacs 19 or whatever.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2483.576000" data-stop="2485.600000">Emacs 31 is around the corner.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2485.620000" data-stop="2487.243000">I better at least catch up to all the goodies</span> <span class="audio-time caption" data-speaker="Ross" data-start="2487.263000" data-stop="2487.924000">that are in 30.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2488.024000" data-stop="2490.368000">I'll read the manual, and I'm</span> <span class="audio-time caption" data-speaker="Ross" data-start="2490.408000" data-stop="2491.690000">finding a lot of these things there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2491.730000" data-stop="2493.473000">That's why I have so many links back to the</span> <span class="audio-time caption" data-speaker="Ross" data-start="2493.533000" data-stop="2496.678000">manual inside of my code, just because I'm going</span> <span class="audio-time caption" data-speaker="Ross" data-start="2496.719000" data-stop="2497.320000">through that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2497.340000" data-stop="2499.964000">That's where you can find a lot of these hidden gems.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2500.180000" data-stop="2502.423000">I'm hosting the Emacs Carnival this month, and</span> <span class="audio-time caption" data-speaker="Ross" data-start="2502.463000" data-stop="2504.546000">it's the underappreciated Emacs built-ins.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2504.566000" data-stop="2506.649000">I said, if you want to find any of them, go</span> <span class="audio-time caption" data-speaker="Ross" data-start="2506.729000" data-stop="2507.530000">in the manual.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2507.570000" data-stop="2509.473000">They're there by the bushel.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2509.493000" data-stop="2513.098000"><strong class="speaker-name">Sacha:</strong>  It feels almost like a book club.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2513.118000" data-stop="2514.600000">We're going through the manual together and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2514.660000" data-stop="2518.846000">finding all these gems that I wouldn't have come</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2518.866000" data-stop="2520.929000">across otherwise, because Emacs source code is too</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2520.989000" data-stop="2522.071000">big and all that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2522.151000" data-stop="2525.035000">I've been really appreciating the Emacs Carnival</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2525.055000" data-stop="2526.357000">submissions thus far.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2527.585000" data-stop="2532.371000">Of course, there are lots of other things that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2532.452000" data-stop="2535.436000">are not in Emacs that you've also been exploring</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2536.176000" data-stop="2538.480000">and checking out.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2540.000000">42:20</span> <strong>gptel</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2540.502000" data-stop="2543.907000"><strong class="speaker-name">Sacha:</strong> Am I allowed to ask about the gptel stuff?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2544.808000" data-stop="2545.128000"><strong class="speaker-name">Ross:</strong>  Of course.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2545.169000" data-stop="2551.457000"><strong class="speaker-name">Sacha:</strong>  I was curious about how the quick lookup stuff</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2551.497000" data-stop="2552.518000">has been working out for you.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2552.538000" data-stop="2554.521000">What kinds of things do you like to use that for?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2556.290000" data-stop="2558.640000"><strong class="speaker-name">Ross:</strong>  That's one that it was pretty</span> <span class="audio-time caption" data-speaker="Ross" data-start="2558.680000" data-stop="2560.689000">exciting and I haven't really fully worked it</span> <span class="audio-time caption" data-speaker="Ross" data-start="2560.769000" data-stop="2561.954000">into my workflow yet.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2562.055000" data-stop="2563.842000">I tried it. I liked it. I haven't</span> <span class="audio-time caption" data-speaker="Ross" data-start="2563.902000" data-stop="2564.726000">internalized it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2564.746000" data-stop="2566.654000">I was trying that one night.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2567.562000" data-stop="2570.425000">what what is capable of is you can just highlight</span> <span class="audio-time caption" data-speaker="Ross" data-start="2570.485000" data-stop="2573.809000">something and do. It's almost like a quick</span> <span class="audio-time caption" data-speaker="Ross" data-start="2573.829000" data-stop="2575.711000">Google search, except it'll bounce it off the</span> <span class="audio-time caption" data-speaker="Ross" data-start="2575.751000" data-stop="2578.754000">model of your choice. It will pop up things a</span> <span class="audio-time caption" data-speaker="Ross" data-start="2578.794000" data-stop="2580.977000">little bit faster that way. For the most part, I'm</span> <span class="audio-time caption" data-speaker="Ross" data-start="2581.017000" data-stop="2583.520000">just using stock gptel, where I've just got the</span> <span class="audio-time caption" data-speaker="Ross" data-start="2583.540000" data-stop="2586.022000">chatbot window. I'll copy a region and I'll</span> <span class="audio-time caption" data-speaker="Ross" data-start="2586.042000" data-stop="2588.986000">put it into gptel. I'll run it off the model, say</span> <span class="audio-time caption" data-speaker="Ross" data-start="2589.026000" data-stop="2591.348000">hey, I got a question about this, help me with this</span> <span class="audio-time caption" data-speaker="Ross" data-start="2591.388000" data-stop="2594.671000">compile error, help me with that, and so forth.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2594.672000" data-stop="2595.713000">I don't...</span> <span class="audio-time caption" data-speaker="Ross" data-start="2597.110000" data-stop="2599.853000">Talking about AI is always difficult because it's</span> <span class="audio-time caption" data-speaker="Ross" data-start="2599.893000" data-stop="2603.236000">such a controversial thing and to use it at all,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2603.276000" data-stop="2604.457000">you offend a lot of people.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2604.598000" data-stop="2606.479000">I'll say, I don't really buy into the</span> <span class="audio-time caption" data-speaker="Ross" data-start="2606.539000" data-stop="2607.500000">agentic workflow.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2607.560000" data-stop="2609.723000">I'm happy just using things as a chatbot and</span> <span class="audio-time caption" data-speaker="Ross" data-start="2610.163000" data-stop="2611.945000">little snippets here and there where I'm still</span> <span class="audio-time caption" data-speaker="Ross" data-start="2612.005000" data-stop="2612.746000">firmly driving.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2612.786000" data-stop="2614.828000">So the people who are fully bought into it, they</span> <span class="audio-time caption" data-speaker="Ross" data-start="2614.888000" data-stop="2616.369000">don't think I'm using it right.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2616.890000" data-stop="2619.733000">Then there are a lot of ethical concerns that</span> <span class="audio-time caption" data-speaker="Ross" data-start="2619.793000" data-stop="2620.253000">I share.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2620.453000" data-stop="2622.055000">I don't have the gptel on this.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2622.355000" data-stop="2623.216000">I use it for work.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2623.276000" data-stop="2625.058000">I don't use it personally.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2625.038000" data-stop="2627.422000">That's just the way I've been able to</span> <span class="audio-time caption" data-speaker="Ross" data-start="2627.442000" data-stop="2629.465000">compartmentalize all my concerns with it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2629.565000" data-stop="2631.989000">But just being a technologist, being a principal</span> <span class="audio-time caption" data-speaker="Ross" data-start="2632.049000" data-stop="2634.192000">staff engineer, I do need to get up to speed with</span> <span class="audio-time caption" data-speaker="Ross" data-start="2634.212000" data-stop="2634.733000">these tools.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2634.753000" data-stop="2637.958000">So I have had to get used to them and keep up</span> <span class="audio-time caption" data-speaker="Ross" data-start="2637.978000" data-stop="2639.981000">with what they're capable of and what they're not.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2640.001000" data-stop="2643.626000">At least for my... Setting aside all the</span> <span class="audio-time caption" data-speaker="Ross" data-start="2643.706000" data-stop="2647.733000">concerns around environment and whatnot, all the</span> <span class="audio-time caption" data-speaker="Ross" data-start="2647.773000" data-stop="2649.375000">other concerns that we have with it
,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2649.355000" data-stop="2651.738000">I find that GPTel is that sweet spot where I've</span> <span class="audio-time caption" data-speaker="Ross" data-start="2651.758000" data-stop="2654.020000">just got this pair programmer where I can run</span> <span class="audio-time caption" data-speaker="Ross" data-start="2654.080000" data-stop="2656.804000">things off, bounce a few questions off it, get</span> <span class="audio-time caption" data-speaker="Ross" data-start="2656.864000" data-stop="2659.387000">things, but it's not getting write access to my</span> <span class="audio-time caption" data-speaker="Ross" data-start="2659.447000" data-stop="2660.268000">file system.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2660.828000" data-stop="2662.390000">I have a security background. Worked at a</span> <span class="audio-time caption" data-speaker="Ross" data-start="2662.410000" data-stop="2664.292000">security company for several years.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2664.572000" data-stop="2667.115000">Just the access that people are giving to these</span> <span class="audio-time caption" data-speaker="Ross" data-start="2667.236000" data-stop="2669.758000">agents, I find absolutely terrifying.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2669.778000" data-stop="2672.021000">There's a lot of work that goes into using that</span> <span class="audio-time caption" data-speaker="Ross" data-start="2672.081000" data-stop="2673.743000">properly, I think.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2673.723000" data-stop="2676.187000">I get most of the benefit. I feel like I'm</span> <span class="audio-time caption" data-speaker="Ross" data-start="2676.268000" data-stop="2679.133000">de-skilling myself a little bit less than I do</span> <span class="audio-time caption" data-speaker="Ross" data-start="2679.213000" data-stop="2681.577000">when I try the agentic workflows elsewhere.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2681.597000" data-stop="2683.019000">So I love gptel.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2683.861000" data-stop="2686.626000">Now gptel, it does have this interesting agent mode.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2686.666000" data-stop="2687.968000">I haven't tried it yet.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2688.489000" data-stop="2691.675000">Again, I have some security concerns around that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2691.695000" data-stop="2693.518000">I need to figure out how to make sure that</span> <span class="audio-time caption" data-speaker="Ross" data-start="2693.558000" data-stop="2695.782000">whatever I give it write access to...</span> <span class="audio-time caption" data-speaker="Ross" data-start="2695.762000" data-stop="2697.685000">It's not getting too much write access to</span> <span class="audio-time caption" data-speaker="Ross" data-start="2697.785000" data-stop="2700.009000">anything. But that is a project that's on my</span> <span class="audio-time caption" data-speaker="Ross" data-start="2700.049000" data-stop="2702.533000">radar as well, to try to do things that really do</span> <span class="audio-time caption" data-speaker="Ross" data-start="2702.593000" data-stop="2704.857000">benefit from this unattended work.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2705.658000" data-stop="2706.640000">I'll dabble in that as well.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2706.680000" data-stop="2708.543000">There's a whole gptel ecosystem.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2708.964000" data-stop="2713.511000">Karthik does an amazing job with that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2713.531000" data-stop="2715.434000"><strong class="speaker-name">Sacha:</strong>  I like that you have a very</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2715.474000" data-stop="2716.676000">considerate approach to it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2716.776000" data-stop="2719.281000">I also like the humor with which you describe</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2719.641000" data-stop="2722.005000">this and other things in your config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2723.892000" data-stop="2729.347000">You aren't buying into the hype. You're like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2729.407000" data-stop="2732.014000">this is your least unfavorite way</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2732.055000" data-stop="2732.957000">of doing things.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2733.494000" data-stop="2737.899000"><strong class="speaker-name">Ross:</strong>  Yes, exactly. There's some commentary</span> <span class="audio-time caption" data-speaker="Ross" data-start="2737.999000" data-stop="2740.843000">out on one of the nuclear test sites about "No</span> <span class="audio-time caption" data-speaker="Ross" data-start="2740.943000" data-stop="2743.045000">deed of honor is performed here." I've quoted</span> <span class="audio-time caption" data-speaker="Ross" data-start="2743.085000" data-stop="2744.826000">some of that in this part of the config too,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2744.827000" data-stop="2747.830000">just kind of my protest of doing this.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2747.831000" data-stop="2750.273000">I've got to do this and there are certain ways...</span> <span class="audio-time caption" data-speaker="Ross" data-start="2750.274000" data-stop="2754.558000">If I have to do this, these are the ways that work for me.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2754.559000" data-stop="2756.120000">I'm getting some benefits out of this,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2756.121000" data-stop="2759.383000">but also I don't entirely feel great about this either.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2759.384000" data-stop="2760.446000">That's kind of how I've</span> <span class="audio-time caption" data-speaker="Ross" data-start="2761.146000" data-stop="2762.488000">compartmentalized that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2763.295000" data-stop="2764.977000"><strong class="speaker-name">Sacha:</strong>  Yeah, that makes sense.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2764.000000">46:04</span> <strong>Getting older</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2764.997000" data-stop="2767.179000"><strong class="speaker-name">Sacha:</strong> One of the other things that you joke about a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2767.339000" data-stop="2769.681000">couple of times in your config is getting older.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2770.662000" data-stop="2772.864000">So with things like your <code>repeat-exit-timeout</code> and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2772.884000" data-stop="2774.806000">your <code>mode-line-bell-flash-time</code>, you’re like,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2774.826000" data-stop="2778.209000">okay, might change it to track my senescence.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2782.272000" data-stop="2783.454000">I appreciate your sense of humor.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2784.615000" data-stop="2786.016000">Are you finding that there are things that you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2786.036000" data-stop="2789.559000">like to tweak about Emacs in anticipation of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2789.799000" data-stop="2791.581000">change as you get older?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2792.776000" data-stop="2795.867000"><strong class="speaker-name">Ross:</strong>  Well, my font size is definitely bigger than it</span> <span class="audio-time caption" data-speaker="Ross" data-start="2795.987000" data-stop="2796.509000">used to be.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2796.650000" data-stop="2799.681000">I guess that's something that has changed over</span> <span class="audio-time caption" data-speaker="Ross" data-start="2799.701000" data-stop="2800.002000">the years.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2800.042000" data-stop="2802.109000">I used to be able to operate on a tiny font, no</span> <span class="audio-time caption" data-speaker="Ross" data-start="2802.149000" data-stop="2804.558000">longer on that.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2806.000000">46:46</span> <strong>Lindy's Law and tool longevity</strong></div><p></p><span class="audio-time caption" data-speaker="Ross" data-start="2806.799000" data-stop="2810.423000"><strong class="speaker-name">Ross:</strong> I guess Emacs and aging just feels like I made a</span> <span class="audio-time caption" data-speaker="Ross" data-start="2810.523000" data-stop="2812.665000">really good... I wish I'd stuck with it for the</span> <span class="audio-time caption" data-speaker="Ross" data-start="2812.725000" data-stop="2813.486000">full 30 years.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2813.506000" data-stop="2815.848000">I'd be fumbling around a little bit less in this demo.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2815.868000" data-stop="2817.650000">I'm not as smooth as somebody who'd been on it</span> <span class="audio-time caption" data-speaker="Ross" data-start="2817.690000" data-stop="2819.932000">for the full 30 years, so I regret that time.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2820.473000" data-stop="2822.795000">I've just seen so many editors come and go.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2822.815000" data-stop="2826.239000">And when I talk to junior developers, I do a lot</span> <span class="audio-time caption" data-speaker="Ross" data-start="2826.279000" data-stop="2826.999000">of mentoring.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2827.600000" data-stop="2829.802000">Like, I'm not necessarily going to say that you</span> <span class="audio-time caption" data-speaker="Ross" data-start="2829.842000" data-stop="2832.485000">should go down this road, but if you do go down</span> <span class="audio-time caption" data-speaker="Ross" data-start="2832.525000" data-stop="2834.427000">this road, it is something.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2834.778000" data-stop="2837.533000">that is probably going to be richly rewarding</span> <span class="audio-time caption" data-speaker="Ross" data-start="2837.534000" data-stop="2838.967000">for you for a long time.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2838.968000" data-stop="2840.800000">There's this thing... I think it's called</span> <span class="audio-time caption" data-speaker="Ross" data-start="2840.801000" data-stop="2843.833000">Lindy's Law. I'm sure I've quoted it here somewhere.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2843.834000" data-stop="2845.851000">The expected lifetime of something is</span> <span class="audio-time caption" data-speaker="Ross" data-start="2845.912000" data-stop="2848.720000">proportional to how long it's already existed.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2848.852000" data-stop="2851.433000">And with Emacs... Emacs has been around...</span> <span class="audio-time caption" data-speaker="Ross" data-start="2851.434000" data-stop="2854.167000">I'm very old. I'm 47. But Emacs is a little bit</span> <span class="audio-time caption" data-speaker="Ross" data-start="2854.168000" data-stop="2856.133000">older than I am, depending on how you start counting.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2856.134000" data-stop="2859.333000">Emacs has been around for a long time.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2859.334000" data-stop="2862.621000">It doesn't have the market share that it used to,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2862.741000" data-stop="2864.284000">but it's something that still has a viable</span> <span class="audio-time caption" data-speaker="Ross" data-start="2864.304000" data-stop="2865.527000">community.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2866.081000" data-stop="2867.463000">You do the Emacs News every week.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2867.523000" data-stop="2869.326000">You know probably better than anybody else how</span> <span class="audio-time caption" data-speaker="Ross" data-start="2869.386000" data-stop="2870.748000">viable the community is right now.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2870.808000" data-stop="2872.271000">It's still an exciting place to be.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2872.371000" data-stop="2875.095000">I don't see that changing anytime soon, whereas</span> <span class="audio-time caption" data-speaker="Ross" data-start="2875.135000" data-stop="2877.759000">I've seen so much hype over... Everybody wanted to</span> <span class="audio-time caption" data-speaker="Ross" data-start="2877.800000" data-stop="2881.065000">get on Atom, and now Atom is a basically dead editor.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2881.165000" data-stop="2883.589000">Sublime had this rise and fall.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2883.609000" data-stop="2884.650000">So many other editors.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2884.751000" data-stop="2887.515000">Now I see people... VS Code was dominant for a</span> <span class="audio-time caption" data-speaker="Ross" data-start="2887.575000" data-stop="2889.418000">while, and now I see a lot of people abandoning</span> <span class="audio-time caption" data-speaker="Ross" data-start="2889.478000" data-stop="2890.139000">VS Code.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2890.239000" data-stop="2892.082000">It's still the dominant editor, but you can start</span> <span class="audio-time caption" data-speaker="Ross" data-start="2892.122000" data-stop="2893.945000">to see people moving away from that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2893.925000" data-stop="2896.107000">Emacs is always going to be here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2896.127000" data-stop="2899.731000">So just as I've aged, I appreciate that Emacs,</span> <span class="audio-time caption" data-speaker="Ross" data-start="2900.312000" data-stop="2902.274000">that same thing that I was using back when I was</span> <span class="audio-time caption" data-speaker="Ross" data-start="2902.314000" data-stop="2904.696000">18, a freshman in college, it's still working for</span> <span class="audio-time caption" data-speaker="Ross" data-start="2904.736000" data-stop="2905.257000">me at 47.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2905.677000" data-stop="2908.160000">And by the time I hang up my keyboard, pretty</span> <span class="audio-time caption" data-speaker="Ross" data-start="2908.220000" data-stop="2910.162000">sure I'm still going to be using it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2910.402000" data-stop="2912.884000">It's done a remarkable job aging gracefully.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2913.305000" data-stop="2915.447000">Would I want to use the Emacs 19 today?</span> <span class="audio-time caption" data-speaker="Ross" data-start="2915.467000" data-stop="2916.448000">Absolutely not.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2916.808000" data-stop="2919.451000">Am I fully comfortable using Emacs 28 in the</span> <span class="audio-time caption" data-speaker="Ross" data-start="2919.511000" data-stop="2920.993000">sandbox environment?</span> <span class="audio-time caption" data-speaker="Ross" data-start="2921.013000" data-stop="2923.375000">Yeah, there's certain things that I miss.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2923.355000" data-stop="2925.297000">But yeah, Emacs 30 is great.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2925.377000" data-stop="2926.979000">Emacs 31 is around the corner.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2927.579000" data-stop="2929.261000">It's kept up with the times.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2929.622000" data-stop="2930.903000">We just talked about AI.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2931.423000" data-stop="2934.006000">Emacs and AI, for all my concerns about AI, Emacs</span> <span class="audio-time caption" data-speaker="Ross" data-start="2934.026000" data-stop="2936.068000">and AI are a great fit for each other because so</span> <span class="audio-time caption" data-speaker="Ross" data-start="2936.108000" data-stop="2937.810000">much of the AI stuff that we're doing is</span> <span class="audio-time caption" data-speaker="Ross" data-start="2937.870000" data-stop="2938.991000">text-based.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2939.031000" data-stop="2941.394000">Emacs is the best text processing platform that</span> <span class="audio-time caption" data-speaker="Ross" data-start="2941.414000" data-stop="2942.115000">there's ever been.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2942.155000" data-stop="2945.058000">They fit each other so well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2945.078000" data-stop="2945.478000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2945.498000" data-stop="2949.242000">And I find it very amusing that with you at 47</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2949.282000" data-stop="2952.045000">years old and I'm 43, assuming math is right,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2952.346000" data-stop="2955.738000">There are people in the Emacs community who would</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2955.778000" data-stop="2958.247000">consider us still young whippersnappers.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="2958.267000" data-stop="2959.572000"><strong class="speaker-name">Ross:</strong>  That's right, yes.</span> <span class="audio-time caption" data-speaker="Ross" data-start="2960.362000" data-stop="2962.464000">Different demographics around here, that's for sure.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2963.285000" data-stop="2965.408000"><strong class="speaker-name">Sacha:</strong>  As well as, of course, the other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2965.548000" data-stop="2968.592000">end where you have high school students and fresh</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2968.632000" data-stop="2971.215000">grads still enjoying it, still exploring it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2972.236000" data-stop="2975.199000">And so it's great that we can customize this with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2975.360000" data-stop="2977.903000">larger font sizes or different key bindings or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2978.383000" data-stop="2982.468000">other ways to catch us from making careless</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2982.508000" data-stop="2987.554000">mistakes to adapt to us and the things that we're</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2987.574000" data-stop="2988.495000">working on.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2989.218000" data-stop="2990.219000">So all this is very interesting.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2991.000000">49:51</span> <strong>Nix is good at managing package versions and customizing them; Matthew Bauer (Bauer IDE)
</strong></div><p></p><a href="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker-00-53-01-300.jpg"><img loading="lazy" target="_blank" src="https://sachachua.com/blog/2026/06/emacs-chat-with-ross-a-baker/emacs-chat-26-ross-a-baker-00-53-01-300.jpg" alt="image from video 00:53:01.300" data-time="00:53:01.300"></a><span class="audio-time caption" data-speaker="Sacha" data-start="2991.000000" data-stop="2994.726000"><strong class="speaker-name">Sacha:</strong> Oh, actually, on a different tangent, one of the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2994.746000" data-stop="2996.788000">things I was curious about is a lot of your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2996.849000" data-stop="2999.773000">configuration is set up to work well with Nix.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3000.534000" data-stop="3002.737000">Since a lot of people in Emacs are curious</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3002.777000" data-stop="3005.501000">about reproducible configurations and systems,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3005.521000" data-stop="3007.083000">could you tell us more about Nix and your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3007.123000" data-stop="3008.745000">experience with it in Emacs?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="3009.535000" data-stop="3013.423000"><strong class="speaker-name">Ross:</strong>  Yes, so I'm using that as some</span> <span class="audio-time caption" data-speaker="Ross" data-start="3013.463000" data-stop="3016.630000">people use straight.el to pin their packages.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3016.650000" data-stop="3018.434000">Some people, they don't bother pinning their</span> <span class="audio-time caption" data-speaker="Ross" data-start="3018.474000" data-stop="3019.616000">packages at all.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3019.636000" data-stop="3023.344000">I'm using Nix for people who are unfamiliar.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3023.384000" data-stop="3024.827000">Nix is...</span> <span class="audio-time caption" data-speaker="Ross" data-start="3025.820000" data-stop="3027.662000">Boy, the elevator pitch for Nix.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3029.203000" data-stop="3030.945000">It's a package manager, but it's more than an</span> <span class="audio-time caption" data-speaker="Ross" data-start="3031.065000" data-stop="3032.366000">Emacs package manager.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3032.526000" data-stop="3035.208000">It can manage all of your packages for you.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3035.228000" data-stop="3037.370000">So I'm building Emacs with Nix.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3037.450000" data-stop="3039.773000">I'm declaring all of my packages that way.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3039.973000" data-stop="3042.955000">Then that's specifying... I have a very</span> <span class="audio-time caption" data-speaker="Ross" data-start="3043.015000" data-stop="3046.459000">repeatable build of Emacs and it has this version</span> <span class="audio-time caption" data-speaker="Ross" data-start="3046.579000" data-stop="3048.000000">of these packages.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3048.020000" data-stop="3050.182000">One thing that Nix is very good at is it's very</span> <span class="audio-time caption" data-speaker="Ross" data-start="3050.242000" data-stop="3052.444000">good at customizing certain things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3052.464000" data-stop="3054.486000">So if you want to run a patched version of a</span> <span class="audio-time caption" data-speaker="Ross" data-start="3054.546000" data-stop="3055.827000">particular package,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3055.807000" data-stop="3059.473000">you're able to specify, okay, I want this</span> <span class="audio-time caption" data-speaker="Ross" data-start="3059.533000" data-stop="3062.137000">package, I want to use this package definition,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3062.177000" data-stop="3065.302000">but I want to overlay these files on top of it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3065.322000" data-stop="3066.343000">Nix excels at that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3066.424000" data-stop="3068.407000">I'm running a lot of customized versions of</span> <span class="audio-time caption" data-speaker="Ross" data-start="3068.447000" data-stop="3070.169000">various packages, things that I've tried to</span> <span class="audio-time caption" data-speaker="Ross" data-start="3070.209000" data-stop="3072.613000">submit upstream, and the Emacs package might be</span> <span class="audio-time caption" data-speaker="Ross" data-start="3072.653000" data-stop="3075.578000">abandoned, or they might be a slow maintainer.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3075.678000" data-stop="3078.022000">I need to use it today, and they'll get around to</span> <span class="audio-time caption" data-speaker="Ross" data-start="3078.062000" data-stop="3079.143000">it, and they'll merge it in a month.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3079.163000" data-stop="3081.046000">So on a temporary basis, I'll want to run a</span> <span class="audio-time caption" data-speaker="Ross" data-start="3081.086000" data-stop="3082.168000">patched version.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3082.300000" data-stop="3085.206000">Nix makes that workflow very smooth for me where</span> <span class="audio-time caption" data-speaker="Ross" data-start="3085.246000" data-stop="3087.330000">I'm able to run patched versions of certain</span> <span class="audio-time caption" data-speaker="Ross" data-start="3087.350000" data-stop="3089.234000">packages, like I'm running a patched version of</span> <span class="audio-time caption" data-speaker="Ross" data-start="3089.274000" data-stop="3090.838000">Forge like I showed off.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3090.858000" data-stop="3092.641000">Some of the things I want to contribute upstream,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3092.682000" data-stop="3093.664000">I've got those pulled out.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3093.724000" data-stop="3096.329000">I just need to sit down and actually submit them upstream.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3096.970000" data-stop="3099.175000">But I've got those ready to go and I'm able to</span> <span class="audio-time caption" data-speaker="Ross" data-start="3099.255000" data-stop="3101.800000">run those out of the box.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3101.801000" data-stop="3104.567000">It's able to run... It's not just managing Emacs.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3104.568000" data-stop="3106.067000">That's the real magic of it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3106.068000" data-stop="3109.833000">If I need certain binaries to support my Emacs config,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3109.834000" data-stop="3112.800000">I can declare those, and that all comes together</span> <span class="audio-time caption" data-speaker="Ross" data-start="3112.801000" data-stop="3115.067000">and if I pull down Emacs packages,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3115.068000" data-stop="3117.767000">those are all going to be there together.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3117.768000" data-stop="3120.883000">There's a really fantastic example of this.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3121.243000" data-stop="3124.187000">Matthew Bauer has something out there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3126.361000" data-stop="3128.023000">It's Bauer, I-D-E.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3128.364000" data-stop="3130.908000">B-A-U-E-R is his last name.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3131.128000" data-stop="3133.451000">He has one of the very inspiring configurations</span> <span class="audio-time caption" data-speaker="Ross" data-start="3133.511000" data-stop="3136.055000">to me where he builds everything in Nix and he</span> <span class="audio-time caption" data-speaker="Ross" data-start="3136.135000" data-stop="3138.759000">bundles all of his binaries that he needs in Nix</span> <span class="audio-time caption" data-speaker="Ross" data-start="3138.839000" data-stop="3142.504000">and then he configures his Emacs variables to</span> <span class="audio-time caption" data-speaker="Ross" data-start="3142.545000" data-stop="3144.868000">point, not at the git that happens to be on the</span> <span class="audio-time caption" data-speaker="Ross" data-start="3144.928000" data-stop="3147.652000">file system, but to the git that he installs via Nix.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3147.692000" data-stop="3151.117000">So he knows that the entire thing is</span> <span class="audio-time caption" data-speaker="Ross" data-start="3151.177000" data-stop="3151.958000">self-contained.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3152.098000" data-stop="3154.562000">That's something I've taken a lot of inspiration from.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3155.015000" data-stop="3159.502000">If I'm on a machine that has Nix, I'm able to run this.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3159.522000" data-stop="3162.487000">If I want to run my standalone config, I can run</span> <span class="audio-time caption" data-speaker="Ross" data-start="3162.527000" data-stop="3165.051000">this command and I can run this command on any</span> <span class="audio-time caption" data-speaker="Ross" data-start="3165.111000" data-stop="3166.873000">machine that I have Nix installed on.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3167.595000" data-stop="3169.658000">It will run very fast here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3170.239000" data-stop="3171.741000">Should run very fast here.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3172.835000" data-stop="3176.083000">and this popped up and this is my base config and</span> <span class="audio-time caption" data-speaker="Ross" data-start="3176.144000" data-stop="3180.836000">I could have run this on any machine or the my</span> <span class="audio-time caption" data-speaker="Ross" data-start="3181.277000" data-stop="3182.079000">packages are named.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3182.159000" data-stop="3184.967000">It's an old Simpsons joke when Homer is stuck in</span> <span class="audio-time caption" data-speaker="Ross" data-start="3185.027000" data-stop="3185.428000">New York.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3186.090000" data-stop="3188.937000">So that's the khlav kalash and crab juice.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3188.917000" data-stop="3190.581000">I think I've got a link to the YouTube video</span> <span class="audio-time caption" data-speaker="Ross" data-start="3190.621000" data-stop="3192.185000">somewhere in my config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3192.205000" data-stop="3194.390000">And there's the fully built in one.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3194.410000" data-stop="3196.716000">That's something I can get on a new machine.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3197.157000" data-stop="3198.019000">I install Nix.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3198.199000" data-stop="3199.843000">All of my dot files are there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3199.863000" data-stop="3202.068000">If I want to just run Emacs or if somebody</span> <span class="audio-time caption" data-speaker="Ross" data-start="3202.128000" data-stop="3204.213000">else wants to run my Emacs, anybody can take that</span> <span class="audio-time caption" data-speaker="Ross" data-start="3204.253000" data-stop="3205.356000">config and run it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3205.000000">53:25</span> <strong>Custom fonts</strong></div><p></p><span class="audio-time caption" data-speaker="Ross" data-start="3205.336000" data-stop="3207.501000"><strong class="speaker-name">Ross:</strong> Now if you do that, a word of warning.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3207.521000" data-stop="3210.146000">One thing that I've done is this font that you</span> <span class="audio-time caption" data-speaker="Ross" data-start="3210.186000" data-stop="3211.709000">see is a custom font.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3212.010000" data-stop="3215.918000">I took the Iosevka font and I customized a lot of</span> <span class="audio-time caption" data-speaker="Ross" data-start="3215.938000" data-stop="3216.720000">the glyphs on it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3216.820000" data-stop="3218.824000">When I do that, I build that in Nix as well.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3218.985000" data-stop="3220.628000">You can use Nix to build your fonts.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3220.608000" data-stop="3222.552000">That's part of my derivation.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3222.572000" data-stop="3225.558000">My Emacs config depends on my fonts.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3225.979000" data-stop="3228.304000">If you try to run these, you're going to have</span> <span class="audio-time caption" data-speaker="Ross" data-start="3228.324000" data-stop="3229.406000">to compile the fonts.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3229.427000" data-stop="3231.751000">I compile a lot of variants of these fonts.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3231.812000" data-stop="3233.635000">I compile a lot of alphabets.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3233.655000" data-stop="3235.058000">Linguistics is one of my hobbies.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3235.078000" data-stop="3237.183000">I love to work in these other alphabets and</span> <span class="audio-time caption" data-speaker="Ross" data-start="3237.243000" data-stop="3237.944000">things like that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3237.964000" data-stop="3240.169000">I'm very opinionated on these things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3240.149000" data-stop="3242.552000">Even in languages that I don't speak, I like the</span> <span class="audio-time caption" data-speaker="Ross" data-start="3242.732000" data-stop="3243.813000">text to look a certain way.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3243.853000" data-stop="3245.956000">Just one of the other ways I blow off steam.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3245.976000" data-stop="3248.459000">But anyway, I've got this custom font that I use</span> <span class="audio-time caption" data-speaker="Ross" data-start="3248.519000" data-stop="3248.819000">everywhere.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3248.839000" data-stop="3250.121000">It's the font on my website.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3250.161000" data-stop="3252.163000">It's the font that you see in my editor and my</span> <span class="audio-time caption" data-speaker="Ross" data-start="3252.203000" data-stop="3252.804000">terminal.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3253.345000" data-stop="3255.307000">If you pull this package, you'll get my font and</span> <span class="audio-time caption" data-speaker="Ross" data-start="3255.327000" data-stop="3257.270000">you'll have to compile that and you're going to</span> <span class="audio-time caption" data-speaker="Ross" data-start="3257.310000" data-stop="3259.532000">heat the room with your CPU for about 30 minutes</span> <span class="audio-time caption" data-speaker="Ross" data-start="3259.612000" data-stop="3260.353000">if you do so.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3260.373000" data-stop="3261.715000">So beware on that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3262.396000" data-stop="3264.799000">Otherwise, if you want to run my config, it's all</span> <span class="audio-time caption" data-speaker="Ross" data-start="3264.859000" data-stop="3266.781000">out there if you have Nix.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3267.824000" data-stop="3269.609000">I don't know how practical that is, but it makes</span> <span class="audio-time caption" data-speaker="Ross" data-start="3269.650000" data-stop="3270.191000">me feel good.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3270.000000">54:30</span> <strong>Starter kits versus configs</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3270.913000" data-stop="3272.037000"><strong class="speaker-name">Sacha:</strong>  Now I'm curious, have you heard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3272.077000" data-stop="3274.464000">from people using your base config or your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3274.524000" data-stop="3275.186000">extended one?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="3278.737000" data-stop="3280.382000"><strong class="speaker-name">Ross:</strong>  I've heard of people</span> <span class="audio-time caption" data-speaker="Ross" data-start="3280.666000" data-stop="3281.567000">copying out of it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3281.607000" data-stop="3283.149000">I haven't heard of people depending on it</span> <span class="audio-time caption" data-speaker="Ross" data-start="3283.189000" data-stop="3283.670000">directly.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3283.690000" data-stop="3285.112000">I would generally discourage people.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3285.232000" data-stop="3287.896000">That's kind of the difference between a starter kit and a config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3287.996000" data-stop="3292.442000">You did an excellent series here on starter kits recently.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3292.462000" data-stop="3294.785000">I don't see this necessarily as a starter kit.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3294.805000" data-stop="3297.049000">This is very opinionated to the way I do things.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3297.109000" data-stop="3298.030000">I hope people look at it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3298.090000" data-stop="3300.393000">I hope people draw inspiration from it, copy from it.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3300.513000" data-stop="3301.154000">Absolutely.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3301.635000" data-stop="3303.237000">But I'm going to change things on a whim.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3303.257000" data-stop="3305.100000">If you're using this as a base layer, you're</span> <span class="audio-time caption" data-speaker="Ross" data-start="3305.140000" data-stop="3307.122000">going to find my opinions thrust upon you.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3307.163000" data-stop="3308.985000">You're probably not going to like half of them.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3310.180000" data-stop="3312.543000"><strong class="speaker-name">Sacha:</strong>  Well, your config is very nicely</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3312.603000" data-stop="3315.106000">documented and rather enjoyable to read.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3315.206000" data-stop="3319.111000">So I can imagine people will get a lot by reading</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3319.191000" data-stop="3321.074000">it for the things they can copy and paste to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3321.094000" data-stop="3321.975000">their config.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3321.995000" data-stop="3323.997000">I also particularly like how even your code</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3324.017000" data-stop="3327.742000">snippets, you've customized it to include the license.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3328.263000" data-stop="3331.627000">So it's like every little bit of that is easy for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3331.687000" data-stop="3334.451000">people to copy from confidently.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3334.000000">55:34</span> <strong>Nix vs Guix; Mac</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3334.711000" data-stop="3335.912000"><strong class="speaker-name">Sacha:</strong> Trevok has a question.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3335.992000" data-stop="3338.095000">Hopefully without starting a philosophical war,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3338.155000" data-stop="3339.597000">why Nix over Guix?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="3340.943000" data-stop="3343.647000"><strong class="speaker-name">Ross:</strong>  I would love to run Guix, but I</span> <span class="audio-time caption" data-speaker="Ross" data-start="3343.727000" data-stop="3346.210000">have a Mac for work and Guix doesn't have a good</span> <span class="audio-time caption" data-speaker="Ross" data-start="3346.251000" data-stop="3348.434000">Mac story. I'm sharing a lot, not just my</span> <span class="audio-time caption" data-speaker="Ross" data-start="3348.574000" data-stop="3350.296000">Emacs configuration, but a lot of other</span> <span class="audio-time caption" data-speaker="Ross" data-start="3350.356000" data-stop="3354.042000">configurations, because Nix is more broadly scoped.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3354.122000" data-stop="3356.004000">I'm able to share a bunch of things between those</span> <span class="audio-time caption" data-speaker="Ross" data-start="3356.044000" data-stop="3357.727000">two operating systems.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3357.747000" data-stop="3360.090000">So the server that I run, the rossabaker.com,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3360.110000" data-stop="3361.272000">that runs on NixOS.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3361.352000" data-stop="3363.635000">This laptop that I'm on runs on NixOS, and then I</span> <span class="audio-time caption" data-speaker="Ross" data-start="3363.675000" data-stop="3364.977000">have the Darwin machine.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3364.957000" data-stop="3367.121000">There are certain things that are compatible</span> <span class="audio-time caption" data-speaker="Ross" data-start="3367.181000" data-stop="3367.962000">between Linux.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3367.982000" data-stop="3369.384000">There are certain things that are compatible</span> <span class="audio-time caption" data-speaker="Ross" data-start="3369.424000" data-stop="3370.807000">between the workstations.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3370.827000" data-stop="3372.810000">And then Darwin has its own weird area.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3373.211000" data-stop="3374.753000">I'm able to manage all of that with Nix.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3374.813000" data-stop="3376.516000">I couldn't do that with Guix.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3376.536000" data-stop="3378.780000">If Guix gets a good Darwin story, I will switch</span> <span class="audio-time caption" data-speaker="Ross" data-start="3378.840000" data-stop="3379.902000">tomorrow,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3379.922000" data-stop="3381.444000">because I would love to be configuring with</span> <span class="audio-time caption" data-speaker="Ross" data-start="3381.464000" data-stop="3381.805000">Scheme.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3382.887000" data-stop="3386.593000"><strong class="speaker-name">Sacha:</strong>  Totally different tangent yet again.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3386.000000">56:26</span> <strong>Non-work interests: Org for documenting; ox-hugo and multiple languages</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3386.894000" data-stop="3390.137000"><strong class="speaker-name">Sacha:</strong> Do you use Emacs for your other interests?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3390.177000" data-stop="3392.579000">You've mentioned things like you use it to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3392.659000" data-stop="3396.203000">publish your youth soccer homepage.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3396.923000" data-stop="3399.025000">What about for your aquarium or linguistics or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3399.105000" data-stop="3400.206000">other things you're interested in?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3402.108000" data-stop="3404.650000">Tell us about the non-work uses of Emacs in your life.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="3406.212000" data-stop="3407.373000"><strong class="speaker-name">Ross:</strong>  That would mostly be just</span> <span class="audio-time caption" data-speaker="Ross" data-start="3407.473000" data-stop="3410.275000">documenting things in Org Mode.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3410.916000" data-stop="3412.998000">Like I mentioned, it's a big Org doc, and if you</span> <span class="audio-time caption" data-speaker="Ross" data-start="3413.038000" data-stop="3414.699000">read this doc, you'll see that it's a very</span> <span class="audio-time caption" data-speaker="Ross" data-start="3414.760000" data-stop="3416.361000">sprawling thing.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3416.476000" data-stop="3421.203000">For the linguistics, one thing with ox-hugo is</span> <span class="audio-time caption" data-speaker="Ross" data-start="3421.243000" data-stop="3422.425000">that integrates nicely.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3422.505000" data-stop="3424.648000">I know you've been learning French.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3425.009000" data-stop="3426.812000">I think that's cool how you're doing that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3426.852000" data-stop="3428.574000">Spanish and German are my two hobbies.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3428.614000" data-stop="3430.197000">I've actually got a trilingual site.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3430.698000" data-stop="3433.262000">The English is way more populated than Spanish</span> <span class="audio-time caption" data-speaker="Ross" data-start="3433.302000" data-stop="3433.822000">and the German.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3433.842000" data-stop="3435.565000">Those are afterthoughts.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3435.764000" data-stop="3438.347000">I learned Spanish in college and I learned German</span> <span class="audio-time caption" data-speaker="Ross" data-start="3438.387000" data-stop="3440.389000">in high school. I just try to keep current</span> <span class="audio-time caption" data-speaker="Ross" data-start="3440.429000" data-stop="3442.531000">with that, but I'm not particularly fluent in</span> <span class="audio-time caption" data-speaker="Ross" data-start="3442.631000" data-stop="3443.692000">either.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3443.712000" data-stop="3446.035000">There was a wonderful IndieWeb Carnival that</span> <span class="audio-time caption" data-speaker="Ross" data-start="3446.075000" data-stop="3446.455000">came up.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3446.515000" data-stop="3448.798000">It was called Multilingualism on the Web and</span> <span class="audio-time caption" data-speaker="Ross" data-start="3448.818000" data-stop="3450.880000">that's when I sat down and I'm like, okay, I want</span> <span class="audio-time caption" data-speaker="Ross" data-start="3450.940000" data-stop="3452.061000">to do this.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3452.081000" data-stop="3454.044000">I'm going to write this article and I'm not just</span> <span class="audio-time caption" data-speaker="Ross" data-start="3454.084000" data-stop="3455.265000">going to write it in one language.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3455.285000" data-stop="3457.087000">I'm going to write it in all three languages that</span> <span class="audio-time caption" data-speaker="Ross" data-start="3457.147000" data-stop="3458.148000">I speak.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3458.168000" data-stop="3460.631000">Hugo has these facilities for taking the same</span> <span class="audio-time caption" data-speaker="Ross" data-start="3460.731000" data-stop="3463.233000">article and publishing them on all three sites</span> <span class="audio-time caption" data-speaker="Ross" data-start="3463.293000" data-stop="3464.775000">and linking them across each other.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3465.430000" data-stop="3468.974000">And ox-hugo, that passes through.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3468.994000" data-stop="3471.856000">ox-hugo uses Hugo as a compilation target.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3471.996000" data-stop="3476.061000">ox-hugo, I was able to set the metadata on there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3476.081000" data-stop="3478.462000">If you've noticed my file name in this editor...</span> <span class="audio-time caption" data-speaker="Ross" data-start="3478.463000" data-stop="3484.169000">I name everything after Simpsons puns: cromulent.en.org.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3484.189000" data-stop="3489.073000">And then I also have... I do have them separated by language.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3490.415000" data-stop="3492.737000">Here's my Spanish document and then,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3493.983000" data-stop="3496.507000">very predictably, here's my German document.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3497.007000" data-stop="3499.850000">By doing this in Org Mode with ox-hugo,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3499.851000" data-stop="3502.035000">I'm able to link together the posts that are</span> <span class="audio-time caption" data-speaker="Ross" data-start="3502.075000" data-stop="3504.378000">translated into multiple languages.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3504.398000" data-stop="3506.040000">And then those all appear, if you go out to the</span> <span class="audio-time caption" data-speaker="Ross" data-start="3506.101000" data-stop="3509.085000">Hugo site, like the rossabaker.com, you can go</span> <span class="audio-time caption" data-speaker="Ross" data-start="3509.165000" data-stop="3510.787000">there and anything that's available in multiple</span> <span class="audio-time caption" data-speaker="Ross" data-start="3510.827000" data-stop="3512.450000">languages, that'll show up.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3512.470000" data-stop="3514.052000">You can click through the Spanish or German</span> <span class="audio-time caption" data-speaker="Ross" data-start="3514.092000" data-stop="3515.434000">translation of those.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3515.617000" data-stop="3517.019000"><strong class="speaker-name">Sacha:</strong>  I didn't notice any shortcuts in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3517.039000" data-stop="3519.363000">your config for quickly switching to another,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3519.503000" data-stop="3522.407000">like the Org mode source in a different language</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3522.468000" data-stop="3523.309000">for the same post.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3523.389000" data-stop="3526.373000">Would you happen to have any conveniences like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3526.414000" data-stop="3526.614000">that,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3527.095000" data-stop="3529.078000">or do you just manually switch to the other file</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3529.138000" data-stop="3530.520000">and then find it?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="3530.540000" data-stop="3532.763000"><strong class="speaker-name">Ross:</strong>  I just manually switch to that, but</span> <span class="audio-time caption" data-speaker="Ross" data-start="3532.843000" data-stop="3533.965000">the data is all there.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3534.025000" data-stop="3538.933000">The file names have to line up, so that's</span> <span class="audio-time caption" data-speaker="Ross" data-start="3538.973000" data-stop="3540.195000">definitely a helper I could write.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3540.515000" data-stop="3542.518000">If I can find time to get back into this, that</span> <span class="audio-time caption" data-speaker="Ross" data-start="3542.558000" data-stop="3544.341000">would be an excellent. I love your idea.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3544.827000" data-stop="3545.989000"><strong class="speaker-name">Sacha:</strong>  Yeah, because I figured,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3546.029000" data-stop="3547.832000">if you're going to write something, you might</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3547.872000" data-stop="3549.775000">want to switch between languages very quickly.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3549.795000" data-stop="3552.860000">If you make an edit, okay, "I'm going to add this thought to it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3553.140000" data-stop="3554.162000">I want to switch to the other ones."</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="3554.422000" data-stop="3555.944000"><strong class="speaker-name">Ross:</strong>  Yeah, typically I'll just take care</span> <span class="audio-time caption" data-speaker="Ross" data-start="3555.984000" data-stop="3557.927000">of that with a split window and I'll have the two</span> <span class="audio-time caption" data-speaker="Ross" data-start="3557.988000" data-stop="3558.849000">up there that way.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3559.610000" data-stop="3561.513000">That way, I'm comparing them side by side.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3561.573000" data-stop="3563.777000">That's probably why I haven't had that yet,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3563.817000" data-stop="3566.200000">but it would still be nice to see, okay, "I do</span> <span class="audio-time caption" data-speaker="Ross" data-start="3566.260000" data-stop="3567.583000">want to make a quick edit in there."</span> <span class="audio-time caption" data-speaker="Ross" data-start="3567.603000" data-stop="3569.365000">It would at least scroll me to that point in the</span> <span class="audio-time caption" data-speaker="Ross" data-start="3569.405000" data-stop="3570.447000">other window quicker.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3571.523000" data-stop="3573.466000"><strong class="speaker-name">Sacha:</strong>  If you add more language-related</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3573.486000" data-stop="3576.291000">stuff to your extended config, I'm very</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3576.351000" data-stop="3579.516000">interested in what people use to look up</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3579.577000" data-stop="3581.440000">dictionaries, look up example sentences, and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3581.460000" data-stop="3582.722000">things like that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3582.802000" data-stop="3585.527000">@blaiseutube says, "Recovering linguist here.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3585.667000" data-stop="3587.690000">English, Spanish, and French for work.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3587.730000" data-stop="3590.595000">Japanese, Portuguese, Sanskrit, and Swedish for fun."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3590.575000" data-stop="3594.720000">So I'm guessing there are a lot of linguists or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3595.320000" data-stop="3598.363000">people who do language learning as a hobby who</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3598.384000" data-stop="3599.345000">use Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3599.365000" data-stop="3601.267000">It's great because you can switch to all the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3601.427000" data-stop="3603.309000">different input methods very easily too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3603.489000" data-stop="3605.311000">It's all text.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3608.214000" data-stop="3609.035000">Oh, this is fantastic.</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="3609.115000" data-stop="3610.617000"><strong class="speaker-name">Ross:</strong>  For all the diacritics that we</span> <span class="audio-time caption" data-speaker="Ross" data-start="3610.657000" data-stop="3613.839000">don't have on the US layout keyboard,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3613.840000" data-stop="3617.224000">the <code>C-x 8</code> key binding.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3617.592000" data-stop="3621.817000">Autocomplete if you need an obscure Unicode</span> <span class="audio-time caption" data-speaker="Ross" data-start="3621.857000" data-stop="3624.240000">character, and it'll autocomplete on all those.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3625.141000" data-stop="3629.186000">So, okay, I want nice little built-in there.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3630.488000" data-stop="3632.090000"><strong class="speaker-name">Sacha:</strong>  Yeah, on Linux, I've just been</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3632.170000" data-stop="3634.673000">using <code>setxkbmap</code> to switch my layout</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3634.693000" data-stop="3637.697000">temporarily, but I also like just being able to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3637.777000" data-stop="3641.361000">set the input method in Emacs in case I just want</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3641.401000" data-stop="3643.704000">to write something quickly, then I can just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3643.744000" data-stop="3646.268000"><code>C-\</code>, I think.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3646.548000" data-stop="3651.816000">Okay, I've got about one minute</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3651.856000" data-stop="3653.599000">before the kid does lunch break.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3653.619000" data-stop="3654.761000">Thank you so much for doing this.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3655.442000" data-stop="3658.667000">Was there anything that you wanted to pass on as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3658.728000" data-stop="3663.195000">a key tip that you'd like people to know from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3663.235000" data-stop="3667.362000">your experience with using Emacs?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3667.763000" data-stop="3671.309000">What's something we haven't mentioned that you'd</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3671.329000" data-stop="3671.950000">like to share?</span> <p></p><span class="audio-time caption" data-speaker="Ross" data-start="3673.246000" data-stop="3677.159000"><strong class="speaker-name">Ross:</strong>  I guess I didn't mention the things that I think</span> <span class="audio-time caption" data-speaker="Ross" data-start="3677.279000" data-stop="3678.483000">are exciting outside.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3678.503000" data-stop="3680.289000">We talked about the built-in configs, so the</span> <span class="audio-time caption" data-speaker="Ross" data-start="3680.349000" data-stop="3684.522000">things that I missed the most, I would say...</span> <span class="audio-time caption" data-speaker="Ross" data-start="3685.480000" data-stop="3687.602000">Well, I guess look at my crab juice config.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3687.743000" data-stop="3689.685000">Those are the packages that I found that I</span> <span class="audio-time caption" data-speaker="Ross" data-start="3689.765000" data-stop="3691.307000">absolutely cannot live without.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3691.867000" data-stop="3693.589000">Magit, a few language modes.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3694.651000" data-stop="3696.673000">You can get by on the built-in thing a lot better</span> <span class="audio-time caption" data-speaker="Ross" data-start="3696.713000" data-stop="3698.315000">than you think, but there are a few things that</span> <span class="audio-time caption" data-speaker="Ross" data-start="3698.335000" data-stop="3700.417000">are out there that are the really special ones,</span> <span class="audio-time caption" data-speaker="Ross" data-start="3700.437000" data-stop="3702.339000">and I think that's the distilled essence of that.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3702.580000" data-stop="3704.482000">Just take a look at that package.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3704.502000" data-stop="3706.504000">Those are the ones that, yeah, I tried really</span> <span class="audio-time caption" data-speaker="Ross" data-start="3706.544000" data-stop="3708.427000">hard on the built-ins and I failed.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3708.467000" data-stop="3710.269000">These are the ones I really need.</span> <span class="audio-time caption" data-speaker="Ross" data-start="3710.289000" data-stop="3711.951000">I'd encourage people to take a look at that as well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3712.772000" data-stop="3713.192000"><strong class="speaker-name">Sacha:</strong>  All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3713.493000" data-stop="3716.745000">For folks who are watching, you can find all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3716.765000" data-stop="3718.893000">of that stuff at rossabaker.com.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3719.615000" data-stop="3720.378000">Thank you so much.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3720.659000" data-stop="3724.212000">You've got links to your GitHub and Berg.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3724.883000" data-stop="3730.188000">Thanks to everyone on the stream for hanging out</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3730.268000" data-stop="3731.890000">and for sharing your questions and comments.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3732.471000" data-stop="3737.716000">I almost forgot to mention [@ispringle] had a tip</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3737.776000" data-stop="3743.242000">about putting emacs-lock-mode on a keyboard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3743.262000" data-stop="3747.606000">shortcut so you can toggle it if you wanted to.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3748.307000" data-stop="3749.147000">Nice idea.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3749.428000" data-stop="3750.329000">Again, thank you everyone.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3750.349000" data-stop="3751.650000">We're going to end the stream here.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3751.630000" data-stop="3753.494000">I will work on the transcripts and all that stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3753.574000" data-stop="3756.500000">Thanks again Ross for doing this, and I'll see</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3756.540000" data-stop="3758.905000">everyone around probably in September or October</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3758.945000" data-stop="3764.998000">because I have to be on summer vacation.</span></div>
<p></p>


<a name="end-emacs-chat-26-ross-a-baker-transcript"></a></details>
</div>
</div>
<div id="outline-container-emacs-chats-emacs-chat-26-ross-a-baker-chat" class="outline-3">
<h3 id="emacs-chats-emacs-chat-26-ross-a-baker-chat"><a href="https://sachachua.com/blog/feed/index.xml#emacs-chats-emacs-chat-26-ross-a-baker-chat">Chat</a></h3>
<div class="outline-text-3" id="text-emacs-chats-emacs-chat-26-ross-a-baker-chat">
<ul class="org-ul">
<li><span class="nick">Ray-On-Emacs:</span> ​​How do you exit Emacs, then? Or do you never exit Emacs?</li>
<li><span class="nick">pratikmishra4073:</span> ​i stealing that lock mode hack. i too have killed scratch buffer accidentally before.</li>
<li><span class="nick">ispringle:</span> ​`(global-set-key (kbd "C-c l") #'emacs-lock-mode)` is handy for one off locks too</li>
<li><span class="nick">PuercoPop:</span> ​​There is a gh-notify package specifically for high volume GitHub notifications</li>
<li><span class="nick">blaiseutube:</span> ​​I keep procrastinating my return to emacs 😔</li>
<li><span class="nick">gr1maldi:</span> ​​Yo, and stuff. Sorry I'm late.</li>
<li><span class="nick">Ray-On-Emacs:</span> ​​Getting older! Oh boy! more tell me, please</li>
<li><span class="nick">dubstepandlovee:</span> ​​fantastic chat so far! as a local agent user, gptel-agent looks like an interesting project</li>
<li><span class="nick">Trevoke:</span> ​​Hopefully without starting a philosophical war, why nix over guix?</li>
<li><span class="nick">dubstepandlovee:</span> ​why nix over lix</li>
<li><span class="nick">dubstepandlovee:</span> ​(joke)</li>
<li><span class="nick">Trevoke:</span> ​​<b>shakes fist in F/OSS</b> Thanks for the answer</li>
<li><span class="nick">blaiseutube:</span> ​​recovering linguist here. English Spanish and French for work. Japanese Portuguese, Sanskrit and Swedish for fun.</li>
<li><span class="nick">blaiseutube:</span> ​​c-x h ? I love it</li>
<li><span class="nick">sachactube:</span> ​​Maybe C-x 8 RET</li>
<li><span class="nick">blaiseutube:</span> ​oh! thank you</li>
<li><span class="nick">Ray-On-Emacs:</span> Thank you!</li>
</ul>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/06/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%2F06%2Femacs-chat-with-ross-a-baker%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>2026-06-15 Emacs news</title>
		<link>https://sachachua.com/blog/2026/06/2026-06-15-emacs-news/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Mon, 15 Jun 2026 13:54:28 GMT</pubDate>
    <category>emacs</category>
<category>emacs-news</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/06/2026-06-15-emacs-news/</guid>
		<description><![CDATA[<p>
Lots of discussion around Karthik's latest blog post <a href="https://karthinks.com/software/even-more-batteries-included-with-emacs/">Even More Batteries Included with Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1u5pago/even_more_batteries_included_with_emacs_karthinks/">Reddit</a>, <a href="https://news.ycombinator.com/item?id=48535886">HN</a>, <a href="https://lobste.rs/s/wwbl1n/even_more_batteries_included_with_emacs">lobste.rs</a>). Check it out!
</p>

<ul class="org-ul">
<li>Emacs updates:
<ul class="org-ul">
<li><a href="https://copr.fedorainfracloud.org/coprs/bhavin192/emacs-pretest/">Emacs 31.0.90 pretest packages for Fedora</a> (<a href="https://www.reddit.com/r/emacs/comments/1u17dmp/emacs_31090_pretest_packages_for_fedora/">Reddit</a>)</li>
<li><a href="https://f-droid.org/en/packages/org.gnu.emacs/">Emacs 31.0.90 pretest packages for Android, via F-Droid</a> (<a href="https://www.reddit.com/r/emacs/comments/1u6ed1e/emacs_31090_pretest_packages_for_android_via/">Reddit</a>)</li>
</ul></li>
<li>Upcoming events (<a href="https://emacslife.com/calendar/emacs-calendar.ics">iCal file</a>, <a href="https://emacslife.com/calendar/">Org</a>):
<ul class="org-ul">
<li>M-x Research: TBA <a href="https://m-x-research.github.io/">https://m-x-research.github.io/</a> Wed Jun 17 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1500 Etc/GMT - 1700 Europe/Berlin - 2030 Asia/Kolkata - 2300 Asia/Singapore</li>
<li>OrgDevMeetup <a href="https://bbb.emacsverse.org/rooms/orgdevmeetup">https://bbb.emacsverse.org/rooms/orgdevmeetup</a> Sat Jun 20 0900 America/Vancouver - 1100 America/Chicago - 1200 America/Toronto - 1600 Etc/GMT - 1800 Europe/Berlin - 2130 Asia/Kolkata &ndash; Sun Jun 21 0000 Asia/Singapore</li>
<li>EmacsSF (in person): coffee.el in SF <a href="https://www.meetup.com/emacs-sf/events/315192115/">https://www.meetup.com/emacs-sf/events/315192115/</a> Sat Jun 20 1100 America/Los_Angeles</li>
<li>Emacs Berlin: Emacs-Berlin Hybrid Meetup <a href="https://emacs-berlin.org/">https://emacs-berlin.org/</a> Wed Jun 24 1000 America/Vancouver - 1200 America/Chicago - 1300 America/Toronto - 1700 Etc/GMT - 1900 Europe/Berlin - 2230 Asia/Kolkata &ndash; Thu Jun 25 0100 Asia/Singapore</li>
<li>Emacs APAC: Emacs APAC meetup (virtual) <a href="https://emacs-apac.gitlab.io/announcements/">https://emacs-apac.gitlab.io/announcements/</a> Sat Jun 27 0130 America/Vancouver - 0330 America/Chicago - 0430 America/Toronto - 0830 Etc/GMT - 1030 Europe/Berlin - 1400 Asia/Kolkata - 1630 Asia/Singapore</li>
</ul></li>
<li>Beginner:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=Lnj45uzDcLc">How to Install a Package on Emacs From Melpa</a> (04:09)</li>
</ul></li>
<li>Emacs configuration:
<ul class="org-ul">
<li><a href="https://rtzptz.xyz/posts/eat-replace-shell-pop.html">Replace shell-pop with built-in display-buffer-alist</a> (<a href="https://www.reddit.com/r/emacs/comments/1u1fmm5/replace_shellpop_with_builtin_displaybufferalist/">Reddit</a>)</li>
<li><a href="https://codeberg.org/salvari/emacs30_elpaca_public">salvari/emacs30_elpaca_public: My new configuration for Emacs using Elpaca as package manager - Codeberg.org</a> (<a href="https://mastodon.gal/@salvari/116720718764088405">@salvari@mastodon.gal</a>)</li>
</ul></li>
<li>Emacs Lisp:
<ul class="org-ul">
<li><a href="https://lars.ingebrigtsen.no/2026/06/11/web-scraping-is-getting-harder-all-the-time/">Lars Ingebrigtsen: Web scraping is getting harder all the time</a></li>
<li><a href="https://tv.dyne.org/w/d38i5Gmk4xpHEHdFq8mGfW">[22] Integrating Emacs Reader with Canvas - Dyne.org TV</a> (<a href="https://mathstodon.xyz/@divyaranjan/116737776379893396">@divyaranjan@mathstodon.xyz</a>)</li>
</ul></li>
<li>Appearance:
<ul class="org-ul">
<li><a href="https://github.com/kn66/halo.el">halo.el: an experimental minor mode for keeping point centered and dimming distant lines</a> (<a href="https://www.reddit.com/r/emacs/comments/1u5i881/haloel_an_experimental_minor_mode_for_keeping/">Reddit</a>)</li>
<li><a href="https://github.com/gonewest818/dimmer.el">dimmer.el &ndash; after a hiatus, new development underway</a> (<a href="https://www.reddit.com/r/emacs/comments/1u2af5n/dimmerel_after_a_hiatus_new_development_underway/">Reddit</a>) - dims inactive buffers; updates: reset when theme changes, handle child frames</li>
<li><a href="https://blog.davep.org/2026/06/12/simplifying-my-mode-line.html">Dave Pearson: Simplifying my mode line</a></li>
<li><a href="https://blog.davep.org/2026/06/13/it-got-darker.html">Dave Pearson: It got darker</a> - switched to a dark-mode</li>
<li><a href="https://github.com/kn66/vertico-buffer-frame">Inspired by nano-emacs: vertico-buffer-frame with nano-vertico</a> (<a href="https://www.reddit.com/r/emacs/comments/1u2zyp7/inspired_by_nanoemacs_verticobufferframe_with/">Reddit</a>)</li>
</ul></li>
<li>Navigation:
<ul class="org-ul">
<li><a href="https://github.com/dmgerman/bookmark-plusplus">modernizing bookmark+</a> (<a href="https://www.reddit.com/r/emacs/comments/1u4uzop/modernizing_bookmark/">Reddit</a>)- trying to get in touch with Drew Adams</li>
<li><a href="https://github.com/jamescherti/outline-indent.el">outline-indent, a modern Indentation-based Text Folding Mode for Emacs (Release 1.2.0)</a> (<a href="https://www.reddit.com/r/emacs/comments/1u18jlq/outlineindent_a_modern_indentationbased_text/">Reddit</a>)</li>
</ul></li>
<li>Dired:
<ul class="org-ul">
<li><a href="https://protesilaos.com/codelog/2026-06-13-emacs-flat-dired-for-regexp-since-days/">Protesilaos: Emacs: flat Dired listing for REGEXP, optionally up to DAYS since last  modification</a> (<a href="https://irreal.org/blog/?p=13875">Irreal</a>)</li>
</ul></li>
<li>Writing:
<ul class="org-ul">
<li><a href="https://batsov.com/articles/2026/06/11/emacs-loves-asciidoc/">Bozhidar Batsov: Emacs loves AsciiDoc</a> (<a href="https://irreal.org/blog/?p=13871">Irreal</a>)</li>
<li><a href="https://blog.davep.org/2026/06/14/blogmore-el-v5-3-0.html">Dave Pearson: blogmore.el v5.3.0</a> - adds blogmore-link-series</li>
<li><a href="https://gitlab.com/smaller-infinity/bibtex-format">New, Fast, BibTex Formatter</a> (<a href="https://www.reddit.com/r/emacs/comments/1u2djgg/new_fast_bibtex_formatter/">Reddit</a>) - Uses rust</li>
</ul></li>
<li>Denote:
<ul class="org-ul">
<li><a href="https://taonaw.com/2026/06/14/meta-journal-notes-in-denotejournal.html">TAONAW - Emacs and Org Mode: Meta Journal notes in Denote-Journal with Journelly</a></li>
</ul></li>
<li>Org Mode:
<ul class="org-ul">
<li><a href="https://sachachua.com/blog/2026/06/from-dc-toedt-copy-org-mode-as-markdown/">Sacha Chua: From DC Toedt: Copy Org Mode as Markdown</a></li>
<li><a href="https://ray-on-emacs.blogspot.com/2026/06/creating-reference-to-webpage-in-org.html">Raymond Zeitler: Creating a Reference to a Webpage in Org</a></li>
<li><a href="https://www.reddit.com/r/orgmode/comments/1u5gpmb/a_day_with_orgsupertag_one_persons_complete/">A Day with Org-SuperTag — One Person's Complete Workflow</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1u31nrb/org_export_dispatcher_to_eisvogel_latex_template/">Org export dispatcher to Eisvogel LaTeX template</a></li>
<li><a href="https://tilde.town/~cryptk/blog/yaob.html">YAOB – Yet Another Org Blog · (interzone)</a> (<a href="https://mastodon.social/@cryptk/116722167175985830">@cryptk</a>)</li>
<li><a href="https://www.youtube.com/watch?v=t_mi-H9iFXA">Emacs Org-Roam: Gestione della Conoscenza a Grafi e Metodo Zettelkasten</a> (06:39)</li>
<li>Org development:
<ul class="org-ul">
<li><a href="https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/etc/ORG-NEWS?id=0a7387385710c708d54af89ebcd3835eb8a2eb7a">ob-core: Obsolete `org-babel-remote-temporary-directory'</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/etc/ORG-NEWS?id=4dc39c7eb3d481984fabfe2bfe578da51fb9c779">org-agenda-timerange-leaders: Allow functions as element values</a></li>
</ul></li>
</ul></li>
<li>Completion:
<ul class="org-ul">
<li><a href="https://utcc.utoronto.ca/~cks/space/blog/programming/EmacsUnderstandingEmbark">Chris's Wiki - blog/programming/EmacsUnderstandingEmbark</a> (<a href="https://lobste.rs/s/secptg/understanding_embark_gnu_emacs_bit_some">lobste.rs</a>, <a href="https://lemmy.ml/post/48522563?scrollToComments=true">lemmy.ml</a>)</li>
</ul></li>
<li>Coding:
<ul class="org-ul">
<li><a href="https://emacs.dyerdwelling.family/emacs/20260610061920-emacs&#45;&#45;the-hidden-git-stash-keys-in-emacs-vc-directory-mode/">James Dyer: The Hidden Git Stash Keys in Emacs VC Directory Mode</a></li>
<li><a href="https://www.swift.org/documentation/articles/zero-to-swift-emacs.html">Configuring Emacs for Swift Development | Swift.org</a> (<a href="https://sfba.social/@kickingvegas/116734370211177731">@kickingvegas@sfba.social</a>)</li>
<li><a href="https://codeberg.org/zshaftel/tree-sitter-cl-syntax">Common Lisp tree-sitter grammar with a major-mode and Sly powered semantic highlighting</a> (<a href="https://www.reddit.com/r/emacs/comments/1u0pyfj/common_lisp_treesitter_grammar_with_a_majormode/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=i6i1omycw0Y">Corrigindo divergências entre arquivos de configuração do emacs</a> (01:37:06)</li>
</ul></li>
<li>Mail, news, and chat:
<ul class="org-ul">
<li><a href="https://github.com/laurynas-biveinis/mu4e-autotask/">mu4e-based email automation package</a> (<a href="https://www.reddit.com/r/emacs/comments/1u0iqtm/mu4ebased_email_automation_package/">Reddit</a>)</li>
<li><a href="https://git.securityops.co/cristiancmoises/whatsappel">Whatsappel - Run WhatsApp inside Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1u58hb8/whatsappel_run_whatsapp_inside_emacs/">Reddit</a>)</li>
</ul></li>
<li>Doom Emacs:
<ul class="org-ul">
<li><a href="https://github.com/orgs/doomemacs/discussions/114">doom emacs 项目拆分为core和modules, doom emacs 将进入快速发展期</a> (<a href="https://www.reddit.com/r/DoomEmacs/comments/1u13u8o/doom_emacs_%E9%A1%B9%E7%9B%AE%E6%8B%86%E5%88%86%E4%B8%BAcore%E5%92%8Cmodules_doom_emacs_%E5%B0%86%E8%BF%9B%E5%85%A5%E5%BF%AB%E9%80%9F%E5%8F%91%E5%B1%95%E6%9C%9F/">Reddit</a>)</li>
</ul></li>
<li>Fun:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=7tURkbpdUmo">The World Cup&hellip; in emacs! ⚽️💻</a> (04:41, <a href="https://www.reddit.com/r/emacs/comments/1u2q0o9/the_world_cup_in_emacs/">Reddit</a>)</li>
<li><a href="https://www.chiply.dev/post-emacs-svg-benchmark">Emacs SVG Benchmark Reveals Gaming-Caliber Frame Rates</a> (<a href="https://www.reddit.com/r/emacs/comments/1u2ycqp/emacs_svg_benchmark_reveals_gamingcaliber_frame/">Reddit</a>)</li>
</ul></li>
<li>AI:
<ul class="org-ul">
<li><a href="https://xenodium.com/agent-shell-0-55-updates">Alvaro Ramirez: agent-shell 0.55 updates</a> (<a href="https://lobste.rs/s/qulbgz/agent_shell_0_55_updates">lobste.rs</a>, <a href="https://www.reddit.com/r/emacs/comments/1u2x3ur/agentshell_055_updates/">Reddit</a>)</li>
<li><a href="https://github.com/dnouri/pi-coding-agent/releases/tag/v2.5.0">New Pi Emacs coding harness release has no trust issues!</a> (<a href="https://www.reddit.com/r/emacs/comments/1u4s8ks/new_pi_emacs_coding_harness_release_has_no_trust/">Reddit</a>)</li>
<li><a href="https://codeberg.org/martenlienen/emcp">EMCP - Emacs an an MCP server</a> (<a href="https://www.reddit.com/r/emacs/comments/1u5ef0v/emcp_emacs_an_an_mcp_server/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=8JgIE48vh6c">Vibe Coding with Emacs' Built-In AI - System Crafters Live!</a> (01:47:29)</li>
</ul></li>
<li>Community:
<ul class="org-ul">
<li><a href="https://v.redd.it/uxwyavj7646h1">Joshua Blais on Doom Emacs, Vanilla Emacs, Guix, and 34-Key Keyboards</a> (<a href="https://www.reddit.com/r/emacs/comments/1u0iy6b/joshua_blais_on_doom_emacs_vanilla_emacs_guix_and/">Reddit</a>)</li>
<li><a href="https://ray-on-emacs.blogspot.com/2026/05/emacs-its-worth-revealing-oneself-for.html">Raymond Zeitler: Emacs &ndash; It's Worth Revealing Oneself For</a></li>
<li><a href="https://www.rahuljuliato.com/posts/blog-on-gemini">My Blog Now Has a Gemini Mirror</a> (<a href="https://www.reddit.com/r/emacs/comments/1u1hxyf/my_blog_now_has_a_gemini_mirror/">Reddit</a>) - Rahul Juliato</li>
</ul></li>
<li><a href="https://rossabaker.com/blog/underappreciated-emacs-built-ins/">Emacs Carnival: Underappreciated Built-ins</a>:
<ul class="org-ul">
<li><a href="https://karthinks.com/software/even-more-batteries-included-with-emacs/">Even More Batteries Included With Emacs (Karthinks)</a> (<a href="https://www.reddit.com/r/emacs/comments/1u5pago/even_more_batteries_included_with_emacs_karthinks/">Reddit</a>, <a href="https://news.ycombinator.com/item?id=48535886">HN</a>, <a href="https://lobste.rs/s/wwbl1n/even_more_batteries_included_with_emacs">lobste.rs</a>)</li>
<li><a href="https://www.youtube.com/watch?v=yuJYEua0ZwA">Yay Emacs 33: Sacha and Prot Talk Emacs: Built-ins</a> (01:01:36)</li>
<li><a href="https://www.homepages.ucl.ac.uk/~ucecesf/blog/20260602.html">Emacs carnival: rec mode, an all-text database system</a> (<a href="https://lobste.rs/s/p78ttt/emacs_rec_mode_all_text_database_system">lobste.rs</a>)</li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="https://github.com/tanrax/emacs-gpu">tanrax/emacs-gpu: GNU Emacs with a GPU-accelerated display backend · GitHub</a> (<a href="https://activity.andros.dev/@andros/statuses/01KTZV88P5V4VCQ2M9293R9BTZ">@andros@activity.andros.dev</a>)</li>
<li><a href="https://www.youtube.com/watch?v=imAgBN3brns">Xah Talk Show Ep793. emacs, install Xah Fly Keys in WSL linux emacs</a> (02:18:11)</li>
<li><a href="https://www.youtube.com/watch?v=teAgI3aoIpU">Xah Talk Show Ep792. install emacs on wsl Windows Subsystem for Linux</a> (01:47:31)</li>
<li><a href="https://sachachua.com/blog/2026/06/june-11-sacha-and-prot-talk-emacs-built-ins/">Sacha Chua: Yay Emacs 33: Sacha and Prot Talk Emacs: Built-ins</a> (<a href="https://protesilaos.com/codelog/2026-06-09-emacs-live-sacha-chua-built-ins/">Prot</a>)</li>
<li><a href="https://chrismaiorana.com/tmux-wm-emacs-no-gui/">Chris Maiorana: When tmux is your window manager</a> (<a href="https://irreal.org/blog/?p=13868">Irreal</a>)</li>
</ul></li>
<li>Emacs development:
<ul class="org-ul">
<li>emacs-devel:
<ul class="org-ul">
<li><a href="https://yhetil.org/emacs-devel/ed53dc2f-d0e2-427d-9415-45901f95ffcf@gutov.dev/">Re: master 1d91d9b717d: project-vc-dir: Use truenames - Dmitry Gutov</a> - discussion of when to use symlinks and when to use truenames</li>
<li><a href="https://yhetil.org/emacs-devel/87zf0y8w0y.fsf@linabee.uk/">Re: SDL terminal type - Lina</a> - anyone interested in trying to port Emacs UI to SDL rendering?</li>
</ul></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=15e5f404f05f7a1ca5bdd8eb6a7579e0546472da">Optional display of overlay-arrow in margin (bug#81109)</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=87133286d6b7ed20c2d6aa41c9bf00c10bc80d30">Revert "project-vc-dir: Use truenames"</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=78a10d17c69970687f8330f6c896170bcf936ef3">Convert outline-search-function to defcustom</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=194c28aaf22979d46f22cc424ba8f1bc78db27b3">Add outline-search-from-regexp generic helper</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=c6c4888ced296b6bda7752066df44d95f591cb06">'work-buffer&ndash;release' kill locals silently and reset the buffer (bug#81111)</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=725120ca3de9f30c8c6bbaeb237f9c803c12b442">Set user options in file/directory locals like 'setopt-local' (bug#81120)</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=e7e9c55ba745e5499dc4d2370fda481b7270d74a">Add outline-show-entry-and-parents to reveal entry hierarchy</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=f343f20b9449c14deceb9fed1a062687c1d52d38">Mark vc-dir-show-outgoing-count obsolete</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=1d91d9b717df1781c07d28f46af4ac2af19c16b4">project-vc-dir: Use truenames</a></li>
</ul></li>
<li>New packages:
<ul class="org-ul">
<li><a target="_blank" href="https://melpa.org/#/pure-light-theme">pure-light-theme</a>: A light colored theme for e-ink color monitors (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/shexc-ts-mode">shexc-ts-mode</a>: Tree-sitter major mode for ShExC (MELPA)</li>
</ul></li>
</ul>

<p>
Links from <a href="https://www.reddit.com/r/emacs">reddit.com/r/emacs</a>, <a href="https://www.reddit.com/r/orgmode">r/orgmode</a>, <a href="https://www.reddit.com/r/spacemacs">r/spacemacs</a>, <a href="https://mastodon.social/tags/emacs">Mastodon #emacs</a>, <a href="https://bsky.app/hashtag/emacs">Bluesky #emacs</a>, <a href="https://hn.algolia.com/?query=emacs&amp;sort=byDate&amp;prefix&amp;page=0&amp;dateRange=all&amp;type=story">Hacker News</a>, <a href="https://lobste.rs/search?q=emacs&amp;what=stories&amp;order=newest">lobste.rs</a>, <a href="https://programming.dev/c/emacs?dataType=Post&amp;page=1&amp;sort=New">programming.dev</a>, <a href="https://lemmy.world/c/emacs">lemmy.world</a>, <a href="https://lemmy.ml/c/emacs?dataType=Post&amp;page=1&amp;sort=New">lemmy.ml</a>, <a href="https://planet.emacslife.com">planet.emacslife.com</a>, <a href="https://www.youtube.com/playlist?list=PL4th0AZixyREOtvxDpdxC9oMuX7Ar7Sdt">YouTube</a>, <a href="http://git.savannah.gnu.org/cgit/emacs.git/log/etc/NEWS">the Emacs NEWS file</a>, <a href="https://emacslife.com/calendar/">Emacs Calendar</a>, and <a href="https://lists.gnu.org/archive/html/emacs-devel/2026-06">emacs-devel</a>. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at <a href="mailto:sacha@sachachua.com">sacha@sachachua.com</a>. Thank you!</p>
<div><a href="https://sachachua.com/blog/2026/06/2026-06-15-emacs-news/index.org">View Org source for this post</a></div>
<p>You can <a href="https://social.sachachua.com/@sacha/statuses/01KV5XYWFASX9YDD8MN7QEGEC0" 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%2F06%2F2026-06-15-emacs-news%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>From DC Toedt: Copy Org Mode as Markdown</title>
		<link>https://sachachua.com/blog/2026/06/from-dc-toedt-copy-org-mode-as-markdown/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 15:49:08 GMT</pubDate>
    <category>emacs</category>
<category>org</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/06/from-dc-toedt-copy-org-mode-as-markdown/</guid>
		<description><![CDATA[<div class="update" id="org6a372d6">
<p>
<span class="timestamp-wrapper"><time class="timestamp" datetime="2026-06-10">[2026-06-10 Wed]</time></span>: Add embark way to do things.
</p>

</div>

<p>
DC Toedt is a lawyer and professor of practice who uses Emacs and Org Mode. He wanted a small Emacs Lisp function to convert Org Mode syntax to Markdown and copy it to the clipboard to make it easier to copy the materials he's writing for a course on contract drafting. This seems to be a common need, and here are several other approaches:
</p>

<ul class="org-ul">
<li><code>embark-org-copy-as-markdown</code> in <a target="_blank" href="https://melpa.org/#/embark">embark</a></li>
<li><a href="https://mbork.pl/2021-05-02_Org-mode_to_Markdown_via_the_clipboard">Marcin Borkowski: 2021-05-02 Org-mode to Markdown via the clipboard</a></li>
<li><a href="https://mmk2410.org/2026/04/14/copy-an-org-mode-region-as-markdown">Marcel Kapfer - Copy an Org Mode region as Markdown</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/17um2fk/does_anyone_have_a_function_they_use_to_quickly/">Reddit</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/e98yyf/send_output_of_orgmdexportasmarkdownstraight_to/">Reddit</a></li>
</ul>

<p>
Anyway, DC shared how he used Claude to generate a simple function to do it, which is here under public domain:
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">defun</span> <span class="org-function-name">my/org-to-markdown-clipboard</span> ()
  <span class="org-doc">"Export org region (or buffer) to Markdown and copy to clipboard.</span>
<span class="org-doc">With no active region, exports the whole buffer."</span>
  (<span class="org-keyword">interactive</span>)
  (<span class="org-keyword">require</span> <span class="org-highlight-quoted-quote">'</span><span class="org-constant">ox-md</span>)
  (<span class="org-keyword">let*</span> ((text (<span class="org-keyword">if</span> (use-region-p)
                   (buffer-substring-no-properties (region-beginning)
(region-end))
                 (buffer-substring-no-properties (point-min) (point-max))))
         (md (org-export-string-as text <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">md</span> t <span class="org-highlight-quoted-quote">'</span>(<span class="org-builtin">:with-toc</span> nil
                                                <span class="org-builtin">:with-author</span> nil
                                                <span class="org-builtin">:with-date</span> nil
                                                <span class="org-builtin">:with-title</span> nil))))
    (kill-new md)
    (message <span class="org-string">"Markdown copied (%d chars)"</span> (length md))))
(<span class="org-keyword">with-eval-after-load</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">org</span>
  (define-key org-mode-map (kbd <span class="org-string">"C-c m"</span>) <span class="org-highlight-quoted-quote">#'</span><span class="org-highlight-quoted-symbol">my/org-to-markdown-clipboard</span>))
</code></pre>
</div>

<div><a href="https://sachachua.com/blog/2026/06/from-dc-toedt-copy-org-mode-as-markdown/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%2F06%2Ffrom-dc-toedt-copy-org-mode-as-markdown%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>Yay Emacs 33: Sacha and Prot Talk Emacs: Built-ins</title>
		<link>https://sachachua.com/blog/2026/06/june-11-sacha-and-prot-talk-emacs-built-ins/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 02:51:39 GMT</pubDate>
    <category>emacs</category>
<category>yay-emacs</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/06/june-11-sacha-and-prot-talk-emacs-built-ins/</guid>
		<description><![CDATA[<div class="update" id="org33bb627">
<p>
<span class="timestamp-wrapper"><time class="timestamp" datetime="2026-06-15">[2026-06-15 Mon]</time></span>: Updated transcript
</p>

</div>

<p>
I chatted with <a href="https://protesilaos.com">Prot</a> about the Emacs Carnival June 2026 topic <a href="https://rossabaker.com/blog/underappreciated-emacs-built-ins/">Underappreciated Emacs Built-ins</a>. Thanks to Ross A. Baker for hosting the carnival!
<video preload="none" controls="1" src="https://archive.org/download/yay-emacs-33-sacha-and-prot-talk-emacs-built-ins/yay-emacs-33-sacha-and-prot-talk-emacs-built-ins.mp4" poster="https://sachachua.com/blog/2026/06/june-11-sacha-and-prot-talk-emacs-built-ins/2026-06-08_22-53-17.png" type="video/mp4"><track kind="subtitles" label="Captions" src="https://sachachua.com/blog/2026/06/june-11-sacha-and-prot-talk-emacs-built-ins/yay-emacs-33-sacha-and-prot-talk-emacs-built-ins.vtt" srclang="en" default=""><span>Video not supported. Thumbnail:<br><img src="https://sachachua.com/blog/2026/06/june-11-sacha-and-prot-talk-emacs-built-ins/2026-06-08_22-53-17.png" alt="Thumbnail"></span></video>
</p>

<p>
<a href="https://archive.org/details/yay-emacs-33-sacha-and-prot-talk-emacs-built-ins/">View in the Internet Archive</a>, <a href="https://youtube.com/live/yuJYEua0ZwA">watch or comment on YouTube</a>, <a href="https://sachachua.com/blog/feed/index.xml#ID-yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-transcript">read the transcript online</a>, <a href="https://sachachua.com/blog/2026/06/june-11-sacha-and-prot-talk-emacs-built-ins/yay-emacs-33-sacha-and-prot-talk-emacs-built-ins.vtt">download 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://rossabaker.com/blog/underappreciated-emacs-built-ins/">Underappreciated Emacs Built-ins</a></li>
<li><a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/index.html">Top (GNU Emacs Manual)</a></li>
<li><a href="https://sachachua.com/blog/2026/04/yay-emacs-sacha-and-prot-talk-emacs-newbies-starter-kits/">YE24: Sacha and Prot Talk Emacs - Newbies/Starter Kits</a></li>
<li><a href="https://protesilaos.com/codelog/2026-04-30-emacs-decent-default-sacha-chua/">Emacs: decent defaults I shared with Sacha Chua | Protesilaos</a></li>
<li><a href="https://www.emacswiki.org/emacs/Carnival">EmacsWiki: Carnival</a></li>
</ul>
<div id="outline-container-yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-chapters" class="outline-3">
<h3 id="yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-chapters"><a href="https://sachachua.com/blog/feed/index.xml#yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-chapters">Chapters</a></h3>
<div class="outline-text-3" id="text-yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-chapters">
<p>
</p><ul class="org-ul">
<li><span class="audio-time" data-start="0.031" data-stop="2.517">0:00</span> Starting up</li>
<li><span class="audio-time" data-start="147.080" data-stop="150.407">2:27</span> Focus and distraction</li>
<li><span class="audio-time" data-start="234.846" data-stop="236.728">3:54</span> Org Mode and other note-taking, task-management systems</li>
<li><span class="audio-time" data-start="298.448" data-stop="301.010">4:58</span> Kill ring</li>
<li><span class="audio-time" data-start="410.110" data-stop="410.812">6:50</span> Registers</li>
<li><span class="audio-time" data-start="598.891" data-stop="603.755">9:58</span> Narrowing</li>
<li><span class="audio-time" data-start="724.994" data-stop="727.578">12:04</span> org-narrow-to-subtree</li>
<li><span class="audio-time" data-start="733.486" data-stop="740.858">12:13</span> narrow-to-defun</li>
<li><span class="audio-time" data-start="799.568" data-stop="800.693">13:19</span> Indirect buffers</li>
<li><span class="audio-time" data-start="890.980" data-stop="894.423">14:50</span> Undoing within a region</li>
<li><span class="audio-time" data-start="953.975" data-stop="955.838">15:53</span> Bookmarks</li>
<li><span class="audio-time" data-start="1061.205" data-stop="1062.287">17:41</span> isearch</li>
<li><span class="audio-time" data-start="1101.487" data-stop="1102.229">18:21</span> Tip: Add a counter to isearch</li>
<li><span class="audio-time" data-start="1166.570" data-stop="1171.037">19:26</span> C-x C-x (exchange-point-and-mark)</li>
<li><span class="audio-time" data-start="1255.279" data-stop="1257.281">20:55</span> Popping to marks - going back to where you were</li>
<li><span class="audio-time" data-start="1309.394" data-stop="1311.917">21:49</span> Selecting what you just pasted</li>
<li><span class="audio-time" data-start="1353.706" data-stop="1355.729">22:33</span> Indenting pasted or selected text with indent-rigidly</li>
<li><span class="audio-time" data-start="1404.487" data-stop="1408.171">23:24</span> Popping to mark after xref or imenu</li>
<li><span class="audio-time" data-start="1445.645" data-stop="1447.687">24:05</span> Adding other packages like consult</li>
<li><span class="audio-time" data-start="1484.447" data-stop="1486.889">24:44</span> Tip about indicating isearch wrapping</li>
<li><span class="audio-time" data-start="1526.814" data-stop="1530.139">25:26</span> Navigating by sentence or s-expression</li>
<li><span class="audio-time" data-start="1665.334" data-stop="1668.904">27:45</span> Navigating to other errors</li>
<li><span class="audio-time" data-start="1709.561" data-stop="1711.263">28:29</span> Tags</li>
<li><span class="audio-time" data-start="1727.186" data-stop="1731.075">28:47</span> Imenu</li>
<li><span class="audio-time" data-start="1819.662" data-stop="1823.546">30:19</span> Projects</li>
<li><span class="audio-time" data-start="1930.952" data-stop="1934.855">32:10</span> Putting projects in tabs or frames</li>
<li><span class="audio-time" data-start="1955.102" data-stop="1956.986">32:35</span> Tabs</li>
<li><span class="audio-time" data-start="2081.797" data-stop="2084.543">34:41</span> Navigating frames</li>
<li><span class="audio-time" data-start="2167.135" data-stop="2168.839">36:07</span> These navigation shortcuts work for prose, too</li>
<li><span class="audio-time" data-start="2229.050" data-stop="2230.111">37:09</span> follow-mode</li>
<li><span class="audio-time" data-start="2270.802" data-stop="2273.886">37:50</span> Ediff</li>
<li><span class="audio-time" data-start="2532.277" data-stop="2538.643">42:12</span> Calling functions by name</li>
<li><span class="audio-time" data-start="2572.964" data-stop="2575.369">42:52</span> Completion</li>
<li><span class="audio-time" data-start="2653.236" data-stop="2655.139">44:13</span> Manuals</li>
<li><span class="audio-time" data-start="2757.420" data-stop="2758.842">45:57</span> Menus</li>
<li><span class="audio-time" data-start="2866.418" data-stop="2868.724">47:46</span> Automation - abbreviations</li>
<li><span class="audio-time" data-start="2996.812" data-stop="2998.855">49:56</span> Quoting the next character with C-q</li>
<li><span class="audio-time" data-start="3031.372" data-stop="3033.814">50:31</span> Mapping abbreviations to code</li>
<li><span class="audio-time" data-start="3111.249" data-stop="3113.313">51:51</span> Taking notes with org-capture</li>
<li><span class="audio-time" data-start="3128.504" data-stop="3130.150">52:08</span> Navigating back to captures or refiles</li>
<li><span class="audio-time" data-start="3229.383" data-stop="3232.270">53:49</span> dabbrev</li>
<li><span class="audio-time" data-start="3284.699" data-stop="3287.362">54:44</span> Keyboard macros</li>
<li><span class="audio-time" data-start="3472.706" data-stop="3474.868">57:52</span> Editable grep and occur</li>
<li><span class="audio-time" data-start="3661.709" data-stop="3665.676">1:01:01</span> Emacs Carnival June 2026: Underappreciated built-ins</li>
</ul>

<p></p>
</div>
</div>
<div id="outline-container-yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-transcript-section" class="outline-3">
<h3 id="yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-transcript-section"><a href="https://sachachua.com/blog/feed/index.xml#yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-transcript-section">Transcript</a></h3>
<div class="outline-text-3" id="text-yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-transcript-section">
<details class="code-details"><a name="ID-yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-transcript"></a><summary>Expand this to read the transcript</summary>
<p>
</p><div class="full-transcript"><p></p><div class="transcript-heading"><span class="audio-time" data-start="0.000000">0:00</span> <strong>Starting up</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="0.031000" data-stop="2.517000"><strong class="speaker-name">Sacha:</strong>  There's a 10-second delay, so I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2.557000" data-stop="4.962000">never quite tell when I'm starting to start, but</span> <span class="audio-time caption" data-speaker="Sacha" data-start="5.243000" data-stop="6.305000">I think I'm going to do that now.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="6.465000" data-stop="7.147000">Okay, let's go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="9.472000" data-stop="11.436000">Okay, I have pressed the Go Live button.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="11.456000" data-stop="13.220000">Let's see how it goes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="13.401000" data-stop="17.550000">So this is Yay Emacs 33 with Prot:</span> <span class="audio-time caption" data-speaker="Sacha" data-start="17.530000" data-stop="18.972000">Sacha and Prot Talk Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="19.012000" data-stop="20.635000">Today, we're going to be talking about</span> <span class="audio-time caption" data-speaker="Sacha" data-start="20.695000" data-stop="23.539000">underappreciated Emacs built-ins, which is the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="23.640000" data-stop="26.264000">theme for this month's Emacs carnival.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="28.700000" data-stop="29.088000"><strong class="speaker-name">Sacha:</strong> Kind of like this, you know, shared, lots of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="29.128000" data-stop="31.592000">people writing or talking about a specific topic.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="32.372000" data-stop="34.497000">This one is hosted by Ross A. Baker.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="34.637000" data-stop="35.658000">(Thanks for hosting that!)</span> <span class="audio-time caption" data-speaker="Sacha" data-start="36.239000" data-stop="39.564000">Anyway, so I'm here with Prot. I was very</span> <span class="audio-time caption" data-speaker="Sacha" data-start="39.625000" data-stop="42.148000">tempted to just dive into this brain dump like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="42.189000" data-stop="43.150000">last time about...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="43.433000" data-stop="50.665000">Let's start with the kinds of problems that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="52.407000" data-stop="55.392000">newcomers and intermediate users might run into,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="55.432000" data-stop="57.776000">especially the problems they don't even know</span> <span class="audio-time caption" data-speaker="Sacha" data-start="58.457000" data-stop="62.724000">about because Emacs would allow them to do things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="62.784000" data-stop="65.188000">that other editors might not offer.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="65.607000" data-stop="68.310000">But they've got to think about it first, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="68.350000" data-stop="70.433000">They've got to discover that this is a need of theirs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="70.533000" data-stop="72.015000">and that Emacs can help them with it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="72.716000" data-stop="75.819000">So maybe this conversation can be a high-level</span> <span class="audio-time caption" data-speaker="Sacha" data-start="76.340000" data-stop="78.903000">discussion of these concepts to help people</span> <span class="audio-time caption" data-speaker="Sacha" data-start="78.983000" data-stop="81.126000">develop this intuition for what's out there,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="81.546000" data-stop="83.288000">particularly for the things that Emacs does</span> <span class="audio-time caption" data-speaker="Sacha" data-start="83.368000" data-stop="85.151000">differently compared to other editors.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="85.791000" data-stop="87.533000">And if we start with a problem, and I have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="87.754000" data-stop="90.116000">several that I often run into in my own life, you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="90.136000" data-stop="92.239000">might suggest others as well.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="92.219000" data-stop="94.864000">Then we can talk about how the things that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="94.904000" data-stop="97.509000">are built into Emacs can support that and how</span> <span class="audio-time caption" data-speaker="Sacha" data-start="97.550000" data-stop="99.994000">they fit together at a high level. We don't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="100.034000" data-stop="101.878000">have to go into "This is precisely how</span> <span class="audio-time caption" data-speaker="Sacha" data-start="101.918000" data-stop="104.243000">to start a keyboard macro and how to stop it."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="104.523000" data-stop="106.167000">People can look that up in the manual. But the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="106.227000" data-stop="108.491000">idea of a keyboard macro and how it's useful,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="108.812000" data-stop="110.675000"><b>that</b> would probably be a good thing for a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="110.736000" data-stop="111.477000">conversation.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="111.862000" data-stop="115.408000">Then for the advanced users who are listening</span> <span class="audio-time caption" data-speaker="Sacha" data-start="115.448000" data-stop="118.374000">to this, we can sprinkle in some things we've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="118.414000" data-stop="120.718000">seen about some really advanced uses of these</span> <span class="audio-time caption" data-speaker="Sacha" data-start="121.279000" data-stop="122.842000">built-ins, because there's a lot of high-level</span> <span class="audio-time caption" data-speaker="Sacha" data-start="122.902000" data-stop="124.745000">use that I haven't even got into yet.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="125.947000" data-stop="128.572000">So Prot is here, which means that because you've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="128.592000" data-stop="132.118000">got two people, you can see how these same tools</span> <span class="audio-time caption" data-speaker="Sacha" data-start="132.178000" data-stop="134.202000">can be used in different ways to support</span> <span class="audio-time caption" data-speaker="Sacha" data-start="134.262000" data-stop="135.304000">different workflows.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="135.537000" data-stop="139.665000">I'm going to suggest some problems that I have.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="140.186000" data-stop="142.571000">Of course, you can share some from your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="142.631000" data-stop="145.918000">experience and from the times that you've coached</span> <span class="audio-time caption" data-speaker="Sacha" data-start="145.958000" data-stop="146.539000">other people.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="147.000000">2:27</span> <strong>Focus and distraction</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="147.080000" data-stop="150.407000"><strong class="speaker-name">Sacha:</strong> My main problem with life in general.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="150.640000" data-stop="152.181000">is focus and distraction.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="153.382000" data-stop="156.665000">Because I have a kid, my focus time is very</span> <span class="audio-time caption" data-speaker="Sacha" data-start="156.806000" data-stop="157.566000">unpredictable.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="157.586000" data-stop="159.668000">It can be interrupted any moment by somebody</span> <span class="audio-time caption" data-speaker="Sacha" data-start="159.728000" data-stop="160.789000">needing help.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="160.809000" data-stop="163.792000">My life over the last 10 years has mostly</span> <span class="audio-time caption" data-speaker="Sacha" data-start="163.852000" data-stop="166.554000">been about five minutes here, 10 minutes there,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="166.634000" data-stop="169.497000">maybe 15, one hour of focus time if I'm lucky.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="170.178000" data-stop="173.200000">This is a universal challenge.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="173.220000" data-stop="175.282000">Well, some people actually get to focus, but my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="175.342000" data-stop="178.145000">brain is not one of those focusable things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="178.225000" data-stop="180.647000">It has to work in stops and starts.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="180.627000" data-stop="184.730000">Any chance this is a problem that you also run into?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="186.492000" data-stop="188.974000"><strong class="speaker-name">Prot:</strong>  Not to that extent, but I have the</span> <span class="audio-time caption" data-speaker="Prot" data-start="189.014000" data-stop="190.956000">propensity to go down rabbit holes.</span> <span class="audio-time caption" data-speaker="Prot" data-start="191.656000" data-stop="193.878000">I will go really deep, like really deep.</span> <span class="audio-time caption" data-speaker="Prot" data-start="193.898000" data-stop="195.720000">You give me something which I know nothing about,</span> <span class="audio-time caption" data-speaker="Prot" data-start="195.760000" data-stop="196.941000">I will become an expert in it.</span> <span class="audio-time caption" data-speaker="Prot" data-start="197.381000" data-stop="199.223000">But of course, this is a problem when you combine</span> <span class="audio-time caption" data-speaker="Prot" data-start="199.263000" data-stop="201.084000">it with curiosity, because now you want to learn</span> <span class="audio-time caption" data-speaker="Prot" data-start="201.184000" data-stop="202.686000">everything.</span> <span class="audio-time caption" data-speaker="Prot" data-start="202.706000" data-stop="204.707000">Thankfully, I have learned to control myself.</span> <span class="audio-time caption" data-speaker="Prot" data-start="204.747000" data-stop="206.529000">If you give me something I don't know about,</span> <span class="audio-time caption" data-speaker="Prot" data-start="206.569000" data-stop="209.291000">I will say, OK, sounds very tempting, but I will</span> <span class="audio-time caption" data-speaker="Prot" data-start="209.371000" data-stop="210.212000">not even try.</span> <span class="audio-time caption" data-speaker="Prot" data-start="210.597000" data-stop="213.317000">I won't even go down the rabbit hole.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="213.668000" data-stop="215.289000"><strong class="speaker-name">Sacha:</strong>  So these are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="215.389000" data-stop="218.312000">two sides of the same problem,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="218.352000" data-stop="220.254000">and something that a lot of people will resonate</span> <span class="audio-time caption" data-speaker="Sacha" data-start="220.294000" data-stop="222.756000">with... When you're working on something and you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="222.796000" data-stop="225.158000">realize, okay, I've got to go do this other thing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="225.258000" data-stop="227.940000">first or, oh, I'm curious about this question</span> <span class="audio-time caption" data-speaker="Sacha" data-start="227.980000" data-stop="229.222000">that has come up in my brain.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="229.602000" data-stop="231.263000">I want to go down that rabbit hole.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="231.684000" data-stop="233.365000">How do we manage this?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="233.385000" data-stop="234.826000">Emacs is here to help.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="234.000000">3:54</span> <strong>Org Mode and other note-taking, task-management systems</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="234.846000" data-stop="236.728000"><strong class="speaker-name">Sacha:</strong> My first recommendation for this problem is:</span> <span class="audio-time caption" data-speaker="Sacha" data-start="236.828000" data-stop="238.950000">take advantage of Org Mode or other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="239.150000" data-stop="241.732000">built-in note-taking task management support</span> <span class="audio-time caption" data-speaker="Sacha" data-start="241.752000" data-stop="243.574000">systems because it...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="244.482000" data-stop="246.905000">Sometimes people think, okay, an IDE is just an</span> <span class="audio-time caption" data-speaker="Sacha" data-start="247.025000" data-stop="247.866000">IDE, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="248.206000" data-stop="250.248000">If they're programmers, it's just for code.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="250.608000" data-stop="253.812000">Sometimes people are writing. They're using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="253.852000" data-stop="255.734000">a text editor just for writing their novel.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="256.113000" data-stop="258.315000">But because Emacs has these built-in ways to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="258.357000" data-stop="260.699000">support managing your to-dos and all that stuff,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="260.738000" data-stop="263.662000">it's very easy just to stuff that task in there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="264.343000" data-stop="266.465000">Have a quick shortcut to go to your to-do list</span> <span class="audio-time caption" data-speaker="Sacha" data-start="266.505000" data-stop="268.767000">and put something in. Then it gets out of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="268.827000" data-stop="270.970000">your brain so that you can try to focus on the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="270.990000" data-stop="272.211000">thing that you're trying to get done.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="272.326000" data-stop="274.989000">That's my quick underappreciated...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="275.750000" data-stop="277.272000">actually, a lot of people really appreciate</span> <span class="audio-time caption" data-speaker="Sacha" data-start="277.292000" data-stop="279.635000">this, but it's one of those things</span> <span class="audio-time caption" data-speaker="Sacha" data-start="279.755000" data-stop="281.958000">people coming to Emacs from other editors might</span> <span class="audio-time caption" data-speaker="Sacha" data-start="282.018000" data-stop="283.420000">not immediately catch on to.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="284.942000" data-stop="286.504000"><strong class="speaker-name">Prot:</strong>  You might not understand the</span> <span class="audio-time caption" data-speaker="Prot" data-start="286.584000" data-stop="288.346000">extent of how valuable it is.</span> <span class="audio-time caption" data-speaker="Prot" data-start="288.366000" data-stop="291.130000">It's the gift that keeps giving, basically.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="291.150000" data-stop="291.810000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="292.031000" data-stop="294.314000">When your to-dos and your notes are just a couple</span> <span class="audio-time caption" data-speaker="Sacha" data-start="294.334000" data-stop="296.436000">of keystrokes away, and they can save the context</span> <span class="audio-time caption" data-speaker="Sacha" data-start="296.516000" data-stop="297.878000">of whatever you were looking at.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="298.000000">4:58</span> <strong>Kill ring</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="298.448000" data-stop="301.010000"><strong class="speaker-name">Sacha:</strong> There are all sorts of other small</span> <span class="audio-time caption" data-speaker="Sacha" data-start="301.070000" data-stop="304.934000">conveniences that Emacs has that also help with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="304.974000" data-stop="307.516000">distraction and focus.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="307.536000" data-stop="308.697000">For example, the kill ring.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="310.479000" data-stop="311.520000">It's such a simple thing, right?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="312.821000" data-stop="315.283000"><strong class="speaker-name">Prot:</strong>  It's super simple, but super useful.</span> <span class="audio-time caption" data-speaker="Prot" data-start="315.383000" data-stop="318.186000">Just to say on the kill ring, it has been</span> <span class="audio-time caption" data-speaker="Prot" data-start="318.246000" data-stop="320.327000">part of Emacs for several versions now, but it's</span> <span class="audio-time caption" data-speaker="Prot" data-start="320.387000" data-stop="321.008000">not obvious.</span> <span class="audio-time caption" data-speaker="Prot" data-start="321.488000" data-stop="325.032000">If you type <code>M-y</code> without <code>C-y</code> beforehand,</span> <span class="audio-time caption" data-speaker="Prot" data-start="325.052000" data-stop="326.633000">you get completion.</span> <span class="audio-time caption" data-speaker="Prot" data-start="326.765000" data-stop="329.913000">So you can select something that you had in your</span> <span class="audio-time caption" data-speaker="Prot" data-start="329.973000" data-stop="331.979000">kill-ring like a few kills ago.</span> <span class="audio-time caption" data-speaker="Prot" data-start="332.700000" data-stop="334.926000">Clipboard navigation,</span> <span class="audio-time caption" data-speaker="Prot" data-start="334.986000" data-stop="338.054000">which is something that you don't see right away.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="339.995000" data-stop="341.697000"><strong class="speaker-name">Sacha:</strong>  If people are coming</span> <span class="audio-time caption" data-speaker="Sacha" data-start="341.737000" data-stop="343.779000">from outside Emacs and they're like, "What is this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="343.839000" data-stop="344.680000">thing that you're talking about?"</span> <span class="audio-time caption" data-speaker="Sacha" data-start="344.960000" data-stop="347.323000">People are used to having a clipboard, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="347.823000" data-stop="350.526000">As soon as you copy something, your program</span> <span class="audio-time caption" data-speaker="Sacha" data-start="350.686000" data-stop="353.069000">forgets the thing that you previously copied.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="353.149000" data-stop="356.212000">On mobile phones now, if you press</span> <span class="audio-time caption" data-speaker="Sacha" data-start="356.272000" data-stop="358.394000">paste, you can see a selection of the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="358.454000" data-stop="360.817000">previous things you've copied before.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="361.277000" data-stop="363.500000">It's like that, but larger.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="363.720000" data-stop="366.243000"><strong class="speaker-name">Sacha:</strong> Prot points out: you can use completion</span> <span class="audio-time caption" data-speaker="Sacha" data-start="366.283000" data-stop="366.563000">with it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="367.164000" data-stop="372.637000">So <code>M-y</code> is <code>yank-pop</code> I think?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="375.182000" data-stop="378.407000">What I find useful about this is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="378.467000" data-stop="380.771000">sometimes I'll copy something because I want to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="380.811000" data-stop="382.895000">go paste it somewhere else, and then on the way to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="382.955000" data-stop="385.219000">that somewhere else, I get distracted by something,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="385.639000" data-stop="388.323000">and I need to copy that, but I know that the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="388.324000" data-stop="391.930000"><code>kill-ring</code> will have the other copies that I meant to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="391.970000" data-stop="394.875000">put somewhere else.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="395.311000" data-stop="397.398000"><strong class="speaker-name">Prot:</strong>  By completion here, we mean you</span> <span class="audio-time caption" data-speaker="Prot" data-start="397.438000" data-stop="400.328000">can type and match that thing, narrow down to it.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="400.348000" data-stop="402.876000"><strong class="speaker-name">Prot:</strong> You don't have to go searching for it and,</span> <span class="audio-time caption" data-speaker="Prot" data-start="402.956000" data-stop="405.645000">"Okay, which one exactly is it," right?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="405.665000" data-stop="408.274000"><strong class="speaker-name">Prot:</strong> You can find it more easily.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="410.000000">6:50</span> <strong>Registers</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="410.110000" data-stop="410.812000"><strong class="speaker-name">Sacha:</strong>  Registers.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="411.694000" data-stop="413.558000">It's the other thing that I like to use when I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="413.638000" data-stop="416.785000">know that I'm copying several things and I need</span> <span class="audio-time caption" data-speaker="Sacha" data-start="416.805000" data-stop="419.751000">to paste them, possibly in different order.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="420.774000" data-stop="423.500000"><strong class="speaker-name">Sacha:</strong> Again, that's another thing that people are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="423.560000" data-stop="425.204000">like, "What is this thing, even?"</span> <span class="audio-time caption" data-speaker="Sacha" data-start="425.584000" data-stop="428.511000">Do you find yourself explaining registers to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="428.571000" data-stop="429.874000">people who are new to Emacs?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="430.698000" data-stop="433.001000"><strong class="speaker-name">Prot:</strong>  Yes. Registers is</span> <span class="audio-time caption" data-speaker="Prot" data-start="433.041000" data-stop="435.465000">something that is underutilized, because of course,</span> <span class="audio-time caption" data-speaker="Prot" data-start="435.665000" data-stop="437.707000">why would you need them when you can have a</span> <span class="audio-time caption" data-speaker="Prot" data-start="437.708000" data-stop="441.373000">kill-ring with a history, right? Why do I need to</span> <span class="audio-time caption" data-speaker="Prot" data-start="441.453000" data-stop="443.816000">store things in a register when I can just have</span> <span class="audio-time caption" data-speaker="Prot" data-start="443.876000" data-stop="447.220000">them one after the other in the kill-ring.</span> <span class="audio-time caption" data-speaker="Prot" data-start="447.221000" data-stop="451.186000">The answer is because if you do something more</span> <span class="audio-time caption" data-speaker="Prot" data-start="451.266000" data-stop="454.090000">advanced, such as with a keyboard macro,</span> <span class="audio-time caption" data-speaker="Prot" data-start="454.475000" data-stop="456.157000">it will always be correct.</span> <span class="audio-time caption" data-speaker="Prot" data-start="456.277000" data-stop="457.418000">It's precise.</span> <span class="audio-time caption" data-speaker="Prot" data-start="457.438000" data-stop="460.181000">It's not "Give me the last thing on the kill ring,"</span> <span class="audio-time caption" data-speaker="Prot" data-start="460.321000" data-stop="463.444000">or last thing minus two or whatever.</span> <span class="audio-time caption" data-speaker="Prot" data-start="463.465000" data-stop="465.687000">Give me that, right,</span> <span class="audio-time caption" data-speaker="Prot" data-start="465.707000" data-stop="467.249000">and you specify what that is.</span> <span class="audio-time caption" data-speaker="Prot" data-start="467.969000" data-stop="470.272000">It's an expression of intent.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="470.912000" data-stop="474.575000"><strong class="speaker-name">Prot:</strong> Plus more advanced things,</span> <span class="audio-time caption" data-speaker="Prot" data-start="474.576000" data-stop="476.557000">like incrementing a number or whatever.</span> <span class="audio-time caption" data-speaker="Prot" data-start="476.558000" data-stop="478.120000">I think that's super specialized.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="478.471000" data-stop="479.872000"><strong class="speaker-name">Sacha:</strong>  I don't even use that very much,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="480.013000" data-stop="482.354000">but I know some people who use that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="482.355000" data-stop="483.136000">to great effect.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="483.316000" data-stop="486.139000">So that's one of those little Easter eggs for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="486.159000" data-stop="487.300000">advanced users.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="487.401000" data-stop="490.364000">If you're watching this and you're like, okay, I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="490.404000" data-stop="491.985000">know about these built-ins, but there's more.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="492.406000" data-stop="494.468000">Emacs has this fractal complexity.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="494.568000" data-stop="496.229000">It just keeps getting more interesting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="496.230000" data-stop="497.251000">the more you dig into it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="497.732000" data-stop="499.153000">Okay, so, registers.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="499.173000" data-stop="501.755000">Registers can store text that you're copying,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="501.756000" data-stop="503.698000">but they can also store other things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="504.399000" data-stop="506.401000">I think, like, do you use them for window</span> <span class="audio-time caption" data-speaker="Sacha" data-start="506.441000" data-stop="507.482000">configurations, Prot?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="508.508000" data-stop="511.796000"><strong class="speaker-name">Prot:</strong>  I have used them for framesets:</span> <span class="audio-time caption" data-speaker="Prot" data-start="512.096000" data-stop="518.892000">frames and their window configurations.</span> <span class="audio-time caption" data-speaker="Prot" data-start="519.393000" data-stop="521.558000">If you have three frames and they are</span> <span class="audio-time caption" data-speaker="Prot" data-start="521.597000" data-stop="523.523000">split in different ways, you restore that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="524.425000" data-stop="525.668000"><strong class="speaker-name">Sacha:</strong>  You can do all of that with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="525.808000" data-stop="527.091000">just one register.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="527.476000" data-stop="528.558000"><strong class="speaker-name">Prot:</strong>  With a register, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="528.678000" data-stop="531.182000">I have created another register of mine just</span> <span class="audio-time caption" data-speaker="Prot" data-start="531.223000" data-stop="535.169000">to see how it works, where it saves a</span> <span class="audio-time caption" data-speaker="Prot" data-start="535.470000" data-stop="538.274000">file with a specific location,</span> <span class="audio-time caption" data-speaker="Prot" data-start="538.275000" data-stop="539.777000">but it's supposed to be in memory,</span> <span class="audio-time caption" data-speaker="Prot" data-start="539.778000" data-stop="541.540000">not like a bookmark.</span> <span class="audio-time caption" data-speaker="Prot" data-start="541.541000" data-stop="542.903000">I did it just for testing.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="543.338000" data-stop="544.419000"><strong class="speaker-name">Sacha:</strong>  I have that too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="544.499000" data-stop="548.104000">I use registers to files so that I can jump to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="548.144000" data-stop="551.869000">things like my Emacs configuration or my notes or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="551.949000" data-stop="552.750000">something like that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="553.611000" data-stop="555.974000">I use that instead of bookmarks so that I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="556.014000" data-stop="558.397000">just have a keyboard shortcut go straight to that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="558.457000" data-stop="558.898000">register.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="559.358000" data-stop="563.964000">I can do the [<code>jump-to-register</code>] and then I can just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="564.064000" data-stop="565.365000">easily press one more key</span> <span class="audio-time caption" data-speaker="Sacha" data-start="565.366000" data-stop="568.890000">to get to the file that I want.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="568.870000" data-stop="572.213000">So registers, again, if you're not used to Emacs,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="572.494000" data-stop="574.996000">this is a built-in that's got a lot of features</span> <span class="audio-time caption" data-speaker="Sacha" data-start="575.096000" data-stop="577.879000">for helping you save text to things, especially</span> <span class="audio-time caption" data-speaker="Sacha" data-start="577.899000" data-stop="579.641000">if you're going to use them in keyboard macros</span> <span class="audio-time caption" data-speaker="Sacha" data-start="580.061000" data-stop="582.664000">because you can say, okay, insert text A and then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="582.764000" data-stop="586.587000">insert text C and then insert text B. But you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="586.627000" data-stop="589.510000">also use them for other things like frameset,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="589.831000" data-stop="592.533000">like the way that your windows and your buffers</span> <span class="audio-time caption" data-speaker="Sacha" data-start="592.593000" data-stop="597.358000">are arranged, or files that you want to go back to.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="598.000000">9:58</span> <strong>Narrowing</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="598.891000" data-stop="603.755000"><strong class="speaker-name">Sacha:</strong> Another built-in that I find really helpful for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="603.795000" data-stop="606.589000">managing my focus and distraction is narrowing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="607.261000" data-stop="611.006000">I get distracted by all the other stuff, or I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="611.066000" data-stop="613.189000">worry about accidentally revealing private</span> <span class="audio-time caption" data-speaker="Sacha" data-start="613.249000" data-stop="615.752000">information when I am streaming, or something else.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="616.053000" data-stop="618.777000">So instead I narrow it to just the task that I'm</span> <span class="audio-time caption" data-speaker="Sacha" data-start="618.817000" data-stop="621.120000">working on or just the function that I'm editing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="621.841000" data-stop="624.204000">That's super useful not only for keeping me</span> <span class="audio-time caption" data-speaker="Sacha" data-start="624.244000" data-stop="627.248000">focused, but also for making sure that my changes</span> <span class="audio-time caption" data-speaker="Sacha" data-start="627.348000" data-stop="630.973000">don't affect more text than I mean to.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="630.953000" data-stop="634.301000">If I'm using substitute.el... You can select the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="634.341000" data-stop="636.968000">region, and a lot of the functions in Emacs will</span> <span class="audio-time caption" data-speaker="Sacha" data-start="637.068000" data-stop="638.572000">operate only within that region.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="639.033000" data-stop="642.542000">But reselecting the region several times, if you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="642.562000" data-stop="644.727000">end up needing to do multiple operations, it's a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="644.767000" data-stop="645.689000">bit annoying.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="645.709000" data-stop="647.734000">So instead, I'll just narrow and then it can work</span> <span class="audio-time caption" data-speaker="Sacha" data-start="647.754000" data-stop="648.456000">on the whole thing.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="649.094000" data-stop="651.278000"><strong class="speaker-name">Prot:</strong>  Yes. When you narrow, you can</span> <span class="audio-time caption" data-speaker="Prot" data-start="651.378000" data-stop="654.003000">also be less careful, in a sense.</span> <span class="audio-time caption" data-speaker="Prot" data-start="654.004000" data-stop="655.826000">Like, you do a <code>query-replace</code>,</span> <span class="audio-time caption" data-speaker="Prot" data-start="655.827000" data-stop="658.992000">when you do <code>!</code>, it means yes to all,</span> <span class="audio-time caption" data-speaker="Prot" data-start="658.993000" data-stop="660.596000">but if you are in a narrowed region,</span> <span class="audio-time caption" data-speaker="Prot" data-start="660.597000" data-stop="662.399000">yes to all means only within</span> <span class="audio-time caption" data-speaker="Prot" data-start="662.400000" data-stop="663.642000">that portion of the buffer.</span> <span class="audio-time caption" data-speaker="Prot" data-start="663.643000" data-stop="665.065000">So if you take care to</span> <span class="audio-time caption" data-speaker="Prot" data-start="665.145000" data-stop="666.387000">narrow to where you want to be,</span> <span class="audio-time caption" data-speaker="Prot" data-start="666.388000" data-stop="668.993000">then okay yes to all, you don't even have to check.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="669.968000" data-stop="671.110000"><strong class="speaker-name">Sacha:</strong>  And I think this is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="671.370000" data-stop="674.115000">underappreciated enough that, in fact, if you try</span> <span class="audio-time caption" data-speaker="Sacha" data-start="674.175000" data-stop="677.862000">to use… Is it <code>C-x n</code>?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="677.882000" data-stop="679.385000"><strong class="speaker-name">Prot:</strong>  That's the prefix key.</span> <span class="audio-time caption" data-speaker="Prot" data-start="679.445000" data-stop="680.887000"><code>C-x n</code> for narrowing.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="680.907000" data-stop="682.711000"><strong class="speaker-name">Sacha:</strong>  The first time Emacs will</span> <span class="audio-time caption" data-speaker="Sacha" data-start="682.751000" data-stop="684.113000">say, are you really, really sure?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="684.754000" data-stop="686.738000">It's one of those disabled commands, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="687.339000" data-stop="689.422000">You've got to enable it for yourself.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="689.543000" data-stop="691.707000">You've got to say, "Okay, I know what I'm doing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="691.787000" data-stop="693.991000">I'm not going to panic if the rest of my file</span> <span class="audio-time caption" data-speaker="Sacha" data-start="694.031000" data-stop="694.812000">disappears."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="694.792000" data-stop="695.917000">I know it's there.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="696.198000" data-stop="697.805000">I'm just choosing to focus on it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="698.287000" data-stop="700.236000">I think it's actually available off the menu as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="700.296000" data-stop="702.123000">well, but I haven't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="702.124000" data-stop="703.249000">used it off the menu bar.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="704.005000" data-stop="706.609000"><strong class="speaker-name">Prot:</strong>  Yeah, I don't use the menu, so I</span> <span class="audio-time caption" data-speaker="Prot" data-start="706.649000" data-stop="707.209000">cannot tell.</span> <span class="audio-time caption" data-speaker="Prot" data-start="708.411000" data-stop="710.333000">But I remember that prompt,</span> <span class="audio-time caption" data-speaker="Prot" data-start="710.334000" data-stop="711.315000">"Are you really sure?"</span> <span class="audio-time caption" data-speaker="Prot" data-start="711.355000" data-stop="712.657000">It's disabled by default.</span> <span class="audio-time caption" data-speaker="Prot" data-start="713.398000" data-stop="715.561000">Please make sure you know what you want.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="715.761000" data-stop="716.883000"><strong class="speaker-name">Sacha:</strong>  Keyboard shortcut.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="716.903000" data-stop="718.165000">That's the way to do it anyway.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="718.405000" data-stop="723.953000"><strong class="speaker-name">Prot:</strong>  The thing is that I do use it extensively.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="724.000000">12:04</span> <strong>org-narrow-to-subtree</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="724.994000" data-stop="727.578000"><strong class="speaker-name">Prot:</strong> Narrowing, of course, is generic.,</span> <span class="audio-time caption" data-speaker="Prot" data-start="727.618000" data-stop="730.442000">Org also has its own narrowing.</span> <span class="audio-time caption" data-speaker="Prot" data-start="730.882000" data-stop="733.506000">The most common one is [<code>org-narrow-to-subtree</code>].</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="733.000000">12:13</span> <strong>narrow-to-defun</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="733.486000" data-stop="740.858000"><strong class="speaker-name">Sacha:</strong>  Narrowing to defun feels easier</span> <span class="audio-time caption" data-speaker="Sacha" data-start="740.898000" data-stop="742.841000">than trying to mark the function before search</span> <span class="audio-time caption" data-speaker="Sacha" data-start="742.901000" data-stop="743.462000">and replace.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="743.602000" data-stop="744.483000">I love narrowing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="745.204000" data-stop="747.154000">In fact, I narrow to functions</span> <span class="audio-time caption" data-speaker="Sacha" data-start="747.155000" data-stop="748.790000">or sets of functions a lot,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="749.251000" data-stop="752.035000">because I do a lot of work with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="752.015000" data-stop="753.861000">with Javascript in HTML files,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="753.862000" data-stop="756.533000">just a single file HTML that I can upload.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="756.534000" data-stop="759.367000">It's got CSS and regular HTML in it as well.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="759.368000" data-stop="762.712000">But I often just need to copy</span> <span class="audio-time caption" data-speaker="Sacha" data-start="762.713000" data-stop="764.816000">the particular snippet of JavaScript</span> <span class="audio-time caption" data-speaker="Sacha" data-start="764.817000" data-stop="766.981000">so I can paste it into the console as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="767.041000" data-stop="767.943000">I'm making changes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="768.704000" data-stop="770.547000">I have a function that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="770.527000" data-stop="772.009000">looks for certain text:</span> <span class="audio-time caption" data-speaker="Sacha" data-start="772.149000" data-stop="773.652000">"start of focus", "end of focus".</span> <span class="audio-time caption" data-speaker="Sacha" data-start="774.172000" data-stop="776.756000">Then it narrows to that section, which might</span> <span class="audio-time caption" data-speaker="Sacha" data-start="777.157000" data-stop="778.779000">include several functions.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="778.799000" data-stop="780.822000">Then I have another keyboard shortcut that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="780.843000" data-stop="783.346000">just copies the entire buffer and adds a little</span> <span class="audio-time caption" data-speaker="Sacha" data-start="783.386000" data-stop="785.349000">text at the end, so I can run whatever function I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="785.550000" data-stop="786.150000">need to test.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="786.551000" data-stop="788.734000">I can paste that into the browser.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="789.055000" data-stop="792.680000">Narrowing either to one function or to a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="793.782000" data-stop="796.566000">predefined region or whatever else is very useful.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="797.648000" data-stop="799.150000"><strong class="speaker-name">Prot:</strong>  Yes, very nice.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="799.000000">13:19</span> <strong>Indirect buffers</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="799.568000" data-stop="800.693000"><strong class="speaker-name">Sacha:</strong>  Then people are like, yeah, but</span> <span class="audio-time caption" data-speaker="Sacha" data-start="800.733000" data-stop="803.024000">what if I want to narrow to two</span> <span class="audio-time caption" data-speaker="Sacha" data-start="803.124000" data-stop="804.591000">parts of the same file?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="805.917000" data-stop="813.485000"><strong class="speaker-name">Prot:</strong>  That's why you have indirect buffers there.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="813.505000" data-stop="815.067000"><strong class="speaker-name">Sacha:</strong>  It's Emacs, of course there's a way</span> <span class="audio-time caption" data-speaker="Sacha" data-start="815.127000" data-stop="815.647000">to do it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="816.348000" data-stop="818.650000">Indirect buffers is another one of those</span> <span class="audio-time caption" data-speaker="Sacha" data-start="818.730000" data-stop="821.053000">built-ins that's a little hard to wrap your head</span> <span class="audio-time caption" data-speaker="Sacha" data-start="821.113000" data-stop="825.077000">around, because you're like, okay, you're opening</span> <span class="audio-time caption" data-speaker="Sacha" data-start="825.137000" data-stop="829.261000">a file twice, but you can have it narrowed to a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="829.321000" data-stop="831.323000">different part of it, or you can be looking at a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="831.443000" data-stop="833.525000">different part of it, or you can even have it in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="833.565000" data-stop="836.528000">a different major mode.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="837.436000" data-stop="837.977000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="837.998000" data-stop="841.267000">And the point, like the practical one, is the</span> <span class="audio-time caption" data-speaker="Prot" data-start="841.327000" data-stop="843.633000">different levels of narrow, really...</span> <span class="audio-time caption" data-speaker="Prot" data-start="843.874000" data-stop="845.919000">The most common one, I mean,</span> <span class="audio-time caption" data-speaker="Prot" data-start="845.939000" data-stop="848.727000">where it's like, okay, you focus on this heading</span> <span class="audio-time caption" data-speaker="Prot" data-start="848.767000" data-stop="852.036000">and now you focus on this other heading.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="852.370000" data-stop="854.454000"><strong class="speaker-name">Sacha:</strong>  I'll often split my buffer if I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="854.514000" data-stop="857.119000">know that I'm not going to narrow.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="857.360000" data-stop="860.085000">So that way, if I need to refer to two parts of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="860.125000" data-stop="863.371000">the file at the same time, I can have one window</span> <span class="audio-time caption" data-speaker="Sacha" data-start="863.491000" data-stop="865.796000">focusing on one part of it and the other window</span> <span class="audio-time caption" data-speaker="Sacha" data-start="865.836000" data-stop="866.998000">focusing on the other part of it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="867.018000" data-stop="868.641000">It might even be a different frame.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="868.621000" data-stop="871.124000">And that way, I don't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="871.164000" data-stop="872.486000">have to keep switching back and forth.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="872.526000" data-stop="874.929000">I don't have to scroll up and down all the time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="874.949000" data-stop="877.292000">I can just look at one and then look at the other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="877.472000" data-stop="880.536000">and arrange my windows and my desktop as I see fit.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="880.556000" data-stop="882.779000">But if you want to do something more complicated,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="883.280000" data-stop="885.582000">like more narrowing or different modes or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="885.623000" data-stop="889.267000">whatever, then cloning an indirect buffer is the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="889.307000" data-stop="889.988000">way to do it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="890.000000">14:50</span> <strong>Undoing within a region</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="890.980000" data-stop="894.423000"><strong class="speaker-name">Prot:</strong>  I don't know if you have this,</span> <span class="audio-time caption" data-speaker="Prot" data-start="894.424000" data-stop="895.285000">but because you</span> <span class="audio-time caption" data-speaker="Prot" data-start="895.325000" data-stop="897.648000">mentioned the region earlier, I will say it.</span> <span class="audio-time caption" data-speaker="Prot" data-start="897.908000" data-stop="899.730000">Maybe you have it somewhere, I don't see it there.</span> <span class="audio-time caption" data-speaker="Prot" data-start="901.452000" data-stop="905.978000">You know regular undo in Emacs and how it works,</span> <span class="audio-time caption" data-speaker="Prot" data-start="905.998000" data-stop="908.220000">but when you have a region selected, undo works</span> <span class="audio-time caption" data-speaker="Prot" data-start="908.300000" data-stop="908.921000">in the region.</span> <span class="audio-time caption" data-speaker="Prot" data-start="909.962000" data-stop="912.325000">So you make a change here, you go make some</span> <span class="audio-time caption" data-speaker="Prot" data-start="912.365000" data-stop="915.028000">changes up there, you come back here, you mark</span> <span class="audio-time caption" data-speaker="Prot" data-start="915.108000" data-stop="917.371000">this region, undo only works here, it doesn't</span> <span class="audio-time caption" data-speaker="Prot" data-start="917.391000" data-stop="918.372000">work up there anymore.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="918.672000" data-stop="920.575000"><strong class="speaker-name">Sacha:</strong>  Oh yeah, that's definitely a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="920.736000" data-stop="923.440000">built-in that people will benefit from if they develop</span> <span class="audio-time caption" data-speaker="Sacha" data-start="923.460000" data-stop="924.482000">an intuition for it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="925.204000" data-stop="928.049000">If you've made a bunch of changes to your file</span> <span class="audio-time caption" data-speaker="Sacha" data-start="928.549000" data-stop="931.394000">and you notice that something's wrong in just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="931.415000" data-stop="934.139000">this section, you can select the region and then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="934.260000" data-stop="938.487000">undo within it to just fix those things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="939.715000" data-stop="942.563000">Those are some of the things that I've thought</span> <span class="audio-time caption" data-speaker="Sacha" data-start="942.603000" data-stop="945.370000">about for focus or distraction or getting tempted</span> <span class="audio-time caption" data-speaker="Sacha" data-start="945.410000" data-stop="946.493000">to go down rabbit holes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="946.654000" data-stop="950.203000">Do you use any of the other Emacs built-ins to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="950.263000" data-stop="952.810000">help you with your tendency to dive really deep</span> <span class="audio-time caption" data-speaker="Sacha" data-start="952.870000" data-stop="953.472000">into something?</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="953.000000">15:53</span> <strong>Bookmarks</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="953.975000" data-stop="955.838000"><strong class="speaker-name">Prot:</strong>  So the other one would be bookmarks.</span> <span class="audio-time caption" data-speaker="Prot" data-start="955.858000" data-stop="957.681000">You mentioned it already,</span> <span class="audio-time caption" data-speaker="Prot" data-start="957.701000" data-stop="960.665000">but it really is worth having it there,</span> <span class="audio-time caption" data-speaker="Prot" data-start="961.386000" data-stop="964.872000">because the nice thing with bookmarks is that not</span> <span class="audio-time caption" data-speaker="Prot" data-start="965.012000" data-stop="968.758000">only it's a way to go to a place, but you also</span> <span class="audio-time caption" data-speaker="Prot" data-start="969.018000" data-stop="970.480000">give it a name.</span> <span class="audio-time caption" data-speaker="Prot" data-start="970.601000" data-stop="972.103000">So the counterpart...</span> <span class="audio-time caption" data-speaker="Prot" data-start="972.123000" data-stop="974.126000">Like you said, okay, I have a key to quickly go</span> <span class="audio-time caption" data-speaker="Prot" data-start="974.206000" data-stop="977.451000">to my init file, for example, my configuration file.</span> <span class="audio-time caption" data-speaker="Prot" data-start="977.566000" data-stop="981.733000">But what if I want to have something by name that</span> <span class="audio-time caption" data-speaker="Prot" data-start="981.813000" data-stop="986.701000">doesn't quite fit nicely in all the keys, right?</span> <span class="audio-time caption" data-speaker="Prot" data-start="986.721000" data-stop="988.343000">Then I can have a descriptive name.</span> <span class="audio-time caption" data-speaker="Prot" data-start="988.383000" data-stop="989.085000">Maybe it's long.</span> <span class="audio-time caption" data-speaker="Prot" data-start="989.145000" data-stop="993.452000">For example, my notes for my meeting with Sacha,</span> <span class="audio-time caption" data-speaker="Prot" data-start="993.472000" data-stop="995.996000">which is in mid-June, blah, blah, blah, right?</span> <span class="audio-time caption" data-speaker="Prot" data-start="996.256000" data-stop="998.780000">I can have a long name like that, which</span> <span class="audio-time caption" data-speaker="Prot" data-start="998.860000" data-stop="1001.224000">is descriptive and gives me context.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1001.244000" data-stop="1003.067000">Then I use a bookmark for that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1003.351000" data-stop="1005.534000"><strong class="speaker-name">Sacha:</strong>  And that's a great built-in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1005.574000" data-stop="1008.036000">solution for the general problem of finding your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1008.117000" data-stop="1009.518000">way around.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1009.538000" data-stop="1011.921000">So in case you're trying to find your way around</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1011.981000" data-stop="1014.604000">different files or different projects or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1014.684000" data-stop="1018.068000">different places in various files, bookmarks are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1018.108000" data-stop="1020.751000">great for that because you can give it a name.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1020.791000" data-stop="1024.496000">That means you can file more things than will fit</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1024.556000" data-stop="1025.237000">on your keyboard.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1025.957000" data-stop="1029.021000">Kind of an advanced</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1029.001000" data-stop="1031.933000">use of it, I was talking to Ben</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1031.934000" data-stop="1035.433000">in the previous Emacs Chat about</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1035.434000" data-stop="1039.000000">So he bookmarks Elfeed searches,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1039.001000" data-stop="1041.266000">and based on his naming convention,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1041.267000" data-stop="1043.067000">if he names his bookmark a certain way,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1043.068000" data-stop="1045.667000">then it becomes available for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1045.668000" data-stop="1047.500000">these other functions that he has.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1047.501000" data-stop="1049.200000">So if you have a naming convention for your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1049.201000" data-stop="1051.097000">bookmarks, you can do other things with it from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1051.237000" data-stop="1052.038000">Emacs Lisp.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1053.233000" data-stop="1054.194000"><strong class="speaker-name">Prot:</strong>  Yeah, exactly.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1054.214000" data-stop="1057.139000">That's the more advanced power user thing.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1057.159000" data-stop="1059.943000">It's just data and you have access to it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1061.000000">17:41</span> <strong>isearch</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1061.205000" data-stop="1062.287000"><strong class="speaker-name">Sacha:</strong>  Going back to something a little</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1062.327000" data-stop="1065.111000">more basic for the problem of finding your way</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1065.171000" data-stop="1067.815000">around, I think that isearch is one of those</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1067.875000" data-stop="1070.499000">built-ins that people coming from a different</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1070.579000" data-stop="1072.963000">editor might not think of using.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1073.281000" data-stop="1079.191000">"Find in page" is an annoying experience in a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1079.251000" data-stop="1081.054000">browser or in other editors.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1081.074000" data-stop="1083.357000">You have to go to the menu, you do it, and then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1083.498000" data-stop="1085.601000">there's things you have to click on in order to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1085.641000" data-stop="1087.725000">go to the next one or the previous one and so</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1087.805000" data-stop="1088.546000">forth.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1088.566000" data-stop="1091.230000">But isearch lets you just keep typing and then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1091.471000" data-stop="1093.474000">you can just press the isearch shortcut again,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1093.574000" data-stop="1096.298000"><code>C-s</code>, to search for the next one, or you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1096.359000" data-stop="1099.103000">go to the previous one very easily.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1099.083000" data-stop="1101.467000">So isearch is great.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1101.000000">18:21</span> <strong>Tip: Add a counter to isearch</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="1101.487000" data-stop="1102.229000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah, it is.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1102.749000" data-stop="1105.895000">I think one nice quality of life improvement to</span> <span class="audio-time caption" data-speaker="Prot" data-start="1105.975000" data-stop="1108.720000">it, which again is several Emacs versions old, is</span> <span class="audio-time caption" data-speaker="Prot" data-start="1109.020000" data-stop="1109.662000">a counter.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1110.062000" data-stop="1113.608000">Like it shows you are on number 3 out of</span> <span class="audio-time caption" data-speaker="Prot" data-start="1113.628000" data-stop="1115.031000">10, for example.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1115.051000" data-stop="1117.395000">You have a sense of where you are going.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1118.050000" data-stop="1120.455000"><strong class="speaker-name">Sacha:</strong>  Otherwise, I find I just wrap</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1120.515000" data-stop="1122.619000">around to the beginning and I</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1122.639000" data-stop="1125.365000">take a moment to reorient myself because it has</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1125.906000" data-stop="1127.489000">wrapped around.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1127.770000" data-stop="1129.494000">The other thing that I want to point out</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1130.335000" data-stop="1135.245000">related to isearch as well is using it to help</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1135.706000" data-stop="1137.510000">you mark a region.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1137.929000" data-stop="1140.813000">This is something that people aren't</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1140.933000" data-stop="1144.237000">used to because in other editors, you highlight</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1144.337000" data-stop="1145.619000">things with your mouse, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1146.280000" data-stop="1148.401000">Here in Emacs, we say, okay,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1148.402000" data-stop="1149.703000">press C-SPC to say</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1149.704000" data-stop="1151.065000">you're going to start a region,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1151.066000" data-stop="1153.008000">and then just search for the end of the region,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1153.489000" data-stop="1157.754000">navigate to it somewhere, and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1157.774000" data-stop="1160.457000">the text between</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1160.458000" data-stop="1162.219000">when you press C-SPC</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1162.220000" data-stop="1163.721000">and where your cursor is now,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1163.722000" data-stop="1164.763000">that's the region.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1165.368000" data-stop="1166.550000"><strong class="speaker-name">Prot:</strong>  Yes, exactly.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1166.000000">19:26</span> <strong>C-x C-x (exchange-point-and-mark)</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="1166.570000" data-stop="1171.037000"><strong class="speaker-name">Prot:</strong> On this note, <code>C-x C-x</code>.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1171.097000" data-stop="1174.582000">By default, it’s <code>exchange-point-and-mark</code>.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1174.602000" data-stop="1177.607000">Which, if your cursor is here and where you</span> <span class="audio-time caption" data-speaker="Prot" data-start="1177.627000" data-stop="1180.532000">started is up there, it moves the cursor up there</span> <span class="audio-time caption" data-speaker="Prot" data-start="1180.792000" data-stop="1183.616000">and now where you started is down at that point.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1184.097000" data-stop="1186.261000">You can expand the region both ways.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1187.643000" data-stop="1189.806000">You can keep switching and expanding.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1190.123000" data-stop="1191.585000"><strong class="speaker-name">Sacha:</strong>  I have never thought about using it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1191.625000" data-stop="1192.687000">for expanding the region.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1192.827000" data-stop="1195.231000">I usually just use it to confirm that, yes, I am</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1195.351000" data-stop="1197.073000">actually selecting the parts that I meant to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1197.133000" data-stop="1197.494000">select.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1197.855000" data-stop="1199.417000">Because by the time, of course, I've found the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1199.457000" data-stop="1201.320000">thing that I wanted to end the region with, I've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1201.380000" data-stop="1204.004000">forgotten or I'm not entirely sure I have the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1204.044000" data-stop="1204.625000">right start.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1204.765000" data-stop="1207.609000">So I was using <code>C-x C-x</code> to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1207.649000" data-stop="1209.752000">quickly verify and have everything nicely</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1209.792000" data-stop="1210.313000">highlighted.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1210.734000" data-stop="1212.556000">But expanding the region, yeah, that's a thing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1212.576000" data-stop="1215.000000">you can do with it.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1215.858000" data-stop="1216.880000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah, of course.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1216.920000" data-stop="1218.722000">Now it's obvious, right?</span> <span class="audio-time caption" data-speaker="Prot" data-start="1218.762000" data-stop="1222.107000">But it's something that you may notice by</span> <span class="audio-time caption" data-speaker="Prot" data-start="1222.148000" data-stop="1223.029000">mistake, by accident.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1223.590000" data-stop="1250.412000"><strong class="speaker-name">Sacha:</strong>  [interrupted by life]</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1250.432000" data-stop="1252.075000">@charliemcmackin4859 says, "I love that you can make those</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1252.135000" data-stop="1254.638000">marking tricks part of a keyboard macro."</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1255.000000">20:55</span> <strong>Popping to marks - going back to where you were</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1255.279000" data-stop="1257.281000"><strong class="speaker-name">Sacha:</strong> Oh, the other thing I want to say with marks is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1257.481000" data-stop="1260.445000">you can also navigate by mark.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1260.425000" data-stop="1264.736000">C-x SPC?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1264.756000" data-stop="1267.524000"><strong class="speaker-name">Prot:</strong>  <code>C-u C-SPC</code>.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1268.045000" data-stop="1271.113000">I think it’s <code>pop-to-mark</code> is the concept.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1273.058000" data-stop="1274.221000"><strong class="speaker-name">Sacha:</strong>  Popping to mark.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1274.241000" data-stop="1275.946000">We'll just go with the concept because people can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1275.966000" data-stop="1277.269000">search for the key binding.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1277.249000" data-stop="1281.075000">Which basically means for all the places where</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1281.135000" data-stop="1284.341000">you were before you went off searching for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1284.401000" data-stop="1286.784000">something else or doing some other command,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1286.785000" data-stop="1289.469000">you can go back to those places in sequence.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1290.010000" data-stop="1292.134000">I think there are even some commands to let</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1292.154000" data-stop="1294.918000">you easily navigate through all the places</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1294.958000" data-stop="1296.481000">you've been previously.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1296.501000" data-stop="1299.966000">That is a thing that you can do with Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1300.006000" data-stop="1300.467000">built-ins.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1300.788000" data-stop="1301.849000">It's called popping the mark.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1301.970000" data-stop="1303.392000">It lets you revisit places.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1304.148000" data-stop="1304.909000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1304.929000" data-stop="1307.732000">Another point related to this and also related to</span> <span class="audio-time caption" data-speaker="Prot" data-start="1307.852000" data-stop="1309.374000">yank that we said earlier...</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1309.000000">21:49</span> <strong>Selecting what you just pasted</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="1309.394000" data-stop="1311.917000"><strong class="speaker-name">Prot:</strong> Imagine you have copied something and you are</span> <span class="audio-time caption" data-speaker="Prot" data-start="1311.997000" data-stop="1314.079000">pasting it now in your Emacs.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1314.099000" data-stop="1316.742000">Then what you want to do is select it, maybe</span> <span class="audio-time caption" data-speaker="Prot" data-start="1316.782000" data-stop="1319.265000">to do something with it, such as to</span> <span class="audio-time caption" data-speaker="Prot" data-start="1319.385000" data-stop="1321.628000">make it all up case or whatever, right?</span> <span class="audio-time caption" data-speaker="Prot" data-start="1321.648000" data-stop="1324.852000">Instead of selecting it manually, you can just</span> <span class="audio-time caption" data-speaker="Prot" data-start="1324.892000" data-stop="1327.955000">do <code>C-x C-x</code>. Because when you paste</span> <span class="audio-time caption" data-speaker="Prot" data-start="1328.075000" data-stop="1331.039000">something or when you do I search or whatever, it</span> <span class="audio-time caption" data-speaker="Prot" data-start="1331.099000" data-stop="1333.041000">has the effect of updating the mark.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1333.612000" data-stop="1336.437000">Then you can work with that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1336.657000" data-stop="1338.460000"><strong class="speaker-name">Sacha:</strong>  Yeah, that one I use fairly often.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1339.522000" data-stop="1341.786000">Also, that way, you can easily</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1341.866000" data-stop="1345.432000">see what it highlights, the part that you've just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1345.492000" data-stop="1349.018000">pasted, and then you can do your other</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1349.198000" data-stop="1351.722000">replacements or uppercasing or whatever else</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1352.223000" data-stop="1353.445000">to it.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1353.000000">22:33</span> <strong>Indenting pasted or selected text with indent-rigidly</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="1353.706000" data-stop="1355.729000"><strong class="speaker-name">Prot:</strong>  The nice part for this is the</span> <span class="audio-time caption" data-speaker="Prot" data-start="1355.910000" data-stop="1357.392000"><code>indent-rigidly</code>,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1359.278000" data-stop="1363.408000"><code>C-x C-i</code> by default, where you can now</span> <span class="audio-time caption" data-speaker="Prot" data-start="1363.468000" data-stop="1366.815000">have a region of text including an implicit</span> <span class="audio-time caption" data-speaker="Prot" data-start="1366.976000" data-stop="1370.323000">region between mark and point, and you just shift</span> <span class="audio-time caption" data-speaker="Prot" data-start="1370.344000" data-stop="1373.170000">it around, literally left or right.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1374.213000" data-stop="1374.593000">Try it.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1374.614000" data-stop="1375.675000">It's very nice.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1375.695000" data-stop="1378.479000"><strong class="speaker-name">Sacha:</strong>  <code>C-x C-i</code>.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1381.462000" data-stop="1383.365000">I think you can even use the arrow keys to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1383.405000" data-stop="1384.086000">move things,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1384.126000" data-stop="1387.170000">so you can just nudge it until it looks right,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1387.190000" data-stop="1388.832000">which is great because sometimes, when you paste</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1388.872000" data-stop="1391.676000">things, the indentation isn't the same</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1391.716000" data-stop="1393.358000">as all of the rest of your stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1393.378000" data-stop="1395.521000">You might want to put it all the way into an</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1395.661000" data-stop="1399.786000">Org list or whatever else, code block, whatever.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1400.287000" data-stop="1400.768000"><strong class="speaker-name">Prot:</strong>  Okay.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1400.848000" data-stop="1403.011000"><strong class="speaker-name">Sacha:</strong>  So <code>C-x C-x</code>, very handy</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1403.111000" data-stop="1404.152000">even after you paste.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1404.000000">23:24</span> <strong>Popping to mark after xref or imenu</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1404.487000" data-stop="1408.171000"><strong class="speaker-name">Sacha:</strong> Oh, @hmelman also points out the fact that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1408.411000" data-stop="1411.475000">things like xref or imenu push the last location</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1411.515000" data-stop="1414.117000">before jumping means popping the mark is an easy</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1414.177000" data-stop="1416.840000">way to go back from various navigation mechanisms.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1417.461000" data-stop="1420.704000">In general, if you have navigated away from</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1420.805000" data-stop="1423.507000">something using some magical Emacs command that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1423.548000" data-stop="1426.310000">has taken you far from where you are, you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1426.351000" data-stop="1428.913000">always find your way back home or back to where</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1428.973000" data-stop="1431.456000">you were by popping the mark.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1431.436000" data-stop="1433.402000">I think there's even a distinction between</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1433.462000" data-stop="1436.893000">popping the mark in your buffer</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1436.913000" data-stop="1439.060000">versus popping your global mark.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1439.481000" data-stop="1442.269000">You can go to a different buffer that you were</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1442.310000" data-stop="1444.737000">just in if you wanted to.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1445.000000">24:05</span> <strong>Adding other packages like consult</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="1445.645000" data-stop="1447.687000"><strong class="speaker-name">Prot:</strong>  Very nice.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1447.727000" data-stop="1451.592000">Many of these are also augmented by</span> <span class="audio-time caption" data-speaker="Prot" data-start="1451.712000" data-stop="1455.436000">packages. When you install a package, it doesn't</span> <span class="audio-time caption" data-speaker="Prot" data-start="1455.497000" data-stop="1458.180000">introduce completely new functionality. It adds to</span> <span class="audio-time caption" data-speaker="Prot" data-start="1458.200000" data-stop="1460.703000">existing one. For example, the consult package,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1460.763000" data-stop="1463.866000">which is very useful, very nice, has something to</span> <span class="audio-time caption" data-speaker="Prot" data-start="1463.926000" data-stop="1466.750000">do with what we just mentioned. Like,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1466.830000" data-stop="1468.611000">navigating the mark in a visual way,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1468.612000" data-stop="1469.593000">so you get to see it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1470.232000" data-stop="1474.537000"><strong class="speaker-name">Sacha:</strong>  @hmelman points out that local and global</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1474.597000" data-stop="1477.179000">marks are useful to navigate through.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1477.700000" data-stop="1480.223000">Check out all these other packages for adding</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1480.263000" data-stop="1481.844000">extra functionality around that.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1484.000000">24:44</span> <strong>Tip about indicating isearch wrapping</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1484.447000" data-stop="1486.889000"><strong class="speaker-name">Sacha:</strong> @matthewjorgensen9115 says,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1486.890000" data-stop="1488.191000">"thinking about isearch wrapping</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1488.251000" data-stop="1488.792000">around search,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1488.812000" data-stop="1490.734000">gwhen you get to the bottom of your file, when</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1490.754000" data-stop="1493.336000">you're isearching and there's no other matches to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1493.376000" data-stop="1496.320000">be found, it will by default wrap you around to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1496.360000" data-stop="1497.741000">the beginning of the file so you can keep</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1497.801000" data-stop="1498.602000">searching from there."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1498.970000" data-stop="1502.957000">Matthew says you can either have scroll to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1502.997000" data-stop="1504.820000">position to know the direction</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1505.581000" data-stop="1507.544000">(it also indicates the position in your mode line),</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1507.905000" data-stop="1509.828000">or you can have your mode line flash to see it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1509.888000" data-stop="1511.651000">move from last to first.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1511.671000" data-stop="1512.913000">I don't have that configured.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1512.993000" data-stop="1514.716000">I should look into how to get that configured</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1515.116000" data-stop="1516.919000">because it's like all these little things, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1520.585000" data-stop="1521.907000">But sometimes you don't need</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1521.927000" data-stop="1523.830000">to make a big navigational jump.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1523.850000" data-stop="1526.033000">You just need to move forward by a little bit.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1526.000000">25:26</span> <strong>Navigating by sentence or s-expression</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1526.814000" data-stop="1530.139000"><strong class="speaker-name">Sacha:</strong> Emacs has built-in shortcuts for navigating</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1530.259000" data-stop="1534.244000">by expression, maybe things inside the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1534.284000" data-stop="1537.369000">parentheses or things inside the quotes, as well</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1537.469000" data-stop="1540.473000">as natural language shortcuts like navigating by</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1540.573000" data-stop="1542.696000">word or by sentence.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1542.716000" data-stop="1544.980000">Those are some very useful built-ins that are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1545.060000" data-stop="1547.303000">well worth learning the keyboard shortcuts for.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1548.397000" data-stop="1550.080000"><strong class="speaker-name">Prot:</strong>  Yes, indeed.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1550.100000" data-stop="1551.822000">Of course, we call them</span> <span class="audio-time caption" data-speaker="Prot" data-start="1551.982000" data-stop="1555.287000">S-expressions and the terminology of the commands</span> <span class="audio-time caption" data-speaker="Prot" data-start="1555.328000" data-stop="1558.352000">alludes to Lisp, but they work in other</span> <span class="audio-time caption" data-speaker="Prot" data-start="1558.392000" data-stop="1559.734000">programming languages as well.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1560.535000" data-stop="1561.897000">For example, there is the</span> <span class="audio-time caption" data-speaker="Prot" data-start="1561.898000" data-stop="1565.303000"><code>forward-sexp</code>, but it works in other languages</span> <span class="audio-time caption" data-speaker="Prot" data-start="1565.683000" data-stop="1568.127000">which don't have this Lispy syntax.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1568.647000" data-stop="1572.410000"><strong class="speaker-name">Sacha:</strong>  So if you skipped over that part of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1572.450000" data-stop="1575.033000">the tutorial or the manual, go back and read it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1575.093000" data-stop="1576.534000">because it can save you some time.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1576.934000" data-stop="1580.637000">In a pinch, it will also help you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1580.677000" data-stop="1583.440000">make sure that your parentheses are matched up</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1583.500000" data-stop="1585.762000">correctly and you go to where you expect them to go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1586.583000" data-stop="1588.664000">There are other ways to make it easier to match</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1588.764000" data-stop="1591.106000">up parentheses or braces or brackets or quotes</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1591.547000" data-stop="1593.569000">like [ <code>show-paren-mode</code> ] or whatever.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1593.589000" data-stop="1596.972000">Sometimes I just go forward and back to see</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1597.012000" data-stop="1598.653000">whether I end up in the right place.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1598.633000" data-stop="1602.016000"><strong class="speaker-name">Prot:</strong>  A small trick here,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1602.017000" data-stop="1604.059000">if you are writing specifically Emacs Lisp,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1604.060000" data-stop="1606.563000">there is a very common mistake of adding</span> <span class="audio-time caption" data-speaker="Prot" data-start="1606.663000" data-stop="1608.866000">an extra parenthesis, and it says "end of</span> <span class="audio-time caption" data-speaker="Prot" data-start="1608.926000" data-stop="1612.150000">file during parsing", or one less parenthesis, what</span> <span class="audio-time caption" data-speaker="Prot" data-start="1612.190000" data-stop="1614.373000">you can do with a combination of keyboard macros...</span> <span class="audio-time caption" data-speaker="Prot" data-start="1614.793000" data-stop="1616.975000">You go to the beginning</span> <span class="audio-time caption" data-speaker="Prot" data-start="1616.976000" data-stop="1620.761000">and you do <code>C-M-e</code> to go to the end of the defun,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1621.322000" data-stop="1624.405000">and then, in a keyboard macro, you keep doing that.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1624.606000" data-stop="1628.050000">Next, next, next, end, end, end, right? Until it stops,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1628.030000" data-stop="1629.592000">and you know where your error is.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1630.093000" data-stop="1631.995000"><strong class="speaker-name">Sacha:</strong>  Oh, and I should tell people, if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1632.055000" data-stop="1635.459000">you give the <code>execute-kbd-macro</code> a negative</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1635.679000" data-stop="1637.502000">argument, it'll run until error.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1637.762000" data-stop="1638.802000">So you just do that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1638.803000" data-stop="1640.666000">and it'll drop you where it ends.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1640.686000" data-stop="1643.849000">You don’t have to manually press <code>e</code> 500 times.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1644.691000" data-stop="1645.371000"><strong class="speaker-name">Prot:</strong>  Exactly.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1645.391000" data-stop="1647.955000">The "run until error" happens when you are in a</span> <span class="audio-time caption" data-speaker="Prot" data-start="1648.015000" data-stop="1649.076000">narrowed region as well.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1649.697000" data-stop="1652.400000">Error here means end of region, end of buffer.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1653.342000" data-stop="1655.167000"><strong class="speaker-name">Sacha:</strong>  I should point out in the specific</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1655.207000" data-stop="1657.313000">case where you're trying to hunt down a stray</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1657.353000" data-stop="1659.390000">parenthesis, you should also just use</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1659.391000" data-stop="1661.003000">check-parens, which will tell you.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1662.346000" data-stop="1664.572000"><strong class="speaker-name">Prot:</strong>  Of course.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1665.000000">27:45</span> <strong>Navigating to other errors</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1665.334000" data-stop="1668.904000"><strong class="speaker-name">Sacha:</strong>  And for other errors</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1669.070000" data-stop="1673.395000">not just limited to missing quotation marks or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1673.435000" data-stop="1674.096000">parentheses,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1674.797000" data-stop="1677.881000">it's well worth taking the time to set up</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1678.401000" data-stop="1681.164000">flycheck or flymake or whatever error checking</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1681.205000" data-stop="1683.547000">thing you want to use, because then you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1683.667000" data-stop="1686.150000">navigate to the previous and next errors as</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1686.251000" data-stop="1690.315000">easily as you would with keyboard shortcuts.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1690.816000" data-stop="1692.999000">If you get the hang of doing that, you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1693.099000" data-stop="1696.663000">also use the same mental model to navigate through...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1696.880000" data-stop="1701.047000">If you're doing a keyword search with grep, then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1701.067000" data-stop="1702.870000">you can use the <code>next-error</code>, <code>previous-error</code>
to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1702.930000" data-stop="1705.073000">also go to just the next match or the previous match.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1706.135000" data-stop="1708.279000"><strong class="speaker-name">Prot:</strong>  That's very useful.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1709.000000">28:29</span> <strong>Tags</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1709.561000" data-stop="1711.263000"><strong class="speaker-name">Sacha:</strong>  I am not using tags nearly as much</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1711.304000" data-stop="1714.669000">as I probably should for navigating symbols.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1715.459000" data-stop="1716.962000"><strong class="speaker-name">Prot:</strong>  Tags, yeah, in the context of</span> <span class="audio-time caption" data-speaker="Prot" data-start="1717.003000" data-stop="1717.464000">programming.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1717.824000" data-stop="1719.669000">Me, I haven't used that, no.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1719.689000" data-stop="1720.671000"><strong class="speaker-name">Sacha:</strong>  Oh, yeah?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1720.691000" data-stop="1722.194000">I guess because you primarily work with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1722.195000" data-stop="1724.699000">Emacs Lisp, it's easy enough</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1724.700000" data-stop="1726.184000">to find the definition from there.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1727.000000">28:47</span> <strong>Imenu</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="1727.186000" data-stop="1731.075000"><strong class="speaker-name">Prot:</strong>  But imenu is the other one, along those lines.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1731.095000" data-stop="1731.997000"><strong class="speaker-name">Sacha:</strong>  That's interesting.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1732.078000" data-stop="1734.463000">You don't use the menu bar, but you use imenu.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1735.169000" data-stop="1737.672000"><strong class="speaker-name">Prot:</strong>  Yes, imenu is useful because, of</span> <span class="audio-time caption" data-speaker="Prot" data-start="1737.732000" data-stop="1738.993000">course, it's with completion.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1739.854000" data-stop="1741.796000">Now, I should say here, of course, that the</span> <span class="audio-time caption" data-speaker="Prot" data-start="1741.836000" data-stop="1746.521000">default imenu has this concept of going in steps,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1746.541000" data-stop="1748.864000">but you can flatten the list, which is more</span> <span class="audio-time caption" data-speaker="Prot" data-start="1748.984000" data-stop="1752.468000">interesting for the purpose of completion.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1753.269000" data-stop="1755.912000">I believe what I'm saying is the case, but I</span> <span class="audio-time caption" data-speaker="Prot" data-start="1755.952000" data-stop="1756.733000">don't remember anymore.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1756.853000" data-stop="1759.516000">But you can have a flattened list, at which point</span> <span class="audio-time caption" data-speaker="Prot" data-start="1759.576000" data-stop="1761.598000">you navigate the file with completion.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1762.388000" data-stop="1765.151000"><strong class="speaker-name">Sacha:</strong>  I should try that because I really</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1765.232000" data-stop="1767.935000">like the way that Org, when you're navigating by</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1767.975000" data-stop="1771.119000">the outline, you can also configure it to flatten</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1771.159000" data-stop="1772.981000">the list so you don't have to complete the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1773.041000" data-stop="1774.904000">heading and the next setting and all that stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1775.564000" data-stop="1778.628000">@hmelman says you don't actually need flymake for the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1779.189000" data-stop="1780.370000">error navigation thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1780.771000" data-stop="1783.393000">You can just use <code>next-error</code></span> <span class="audio-time caption" data-speaker="Sacha" data-start="1783.394000" data-stop="1784.695000">and <code>previous-error</code> which works with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1784.696000" data-stop="1786.158000"><code>compile</code> and <code>grep</code> and <code>occur</code></span> <span class="audio-time caption" data-speaker="Sacha" data-start="1786.578000" data-stop="1788.661000">and a bunch of other things that have the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1788.721000" data-stop="1789.662000">same convention.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1789.777000" data-stop="1793.001000">So yes, if you use the <code>M-x compile</code> command to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1793.081000" data-stop="1796.706000">run whatever your compilation step is, it will</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1796.787000" data-stop="1801.593000">parse the output of many compilation systems,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1802.034000" data-stop="1804.497000">programs, and it will let you jump to the next</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1804.597000" data-stop="1804.857000">error.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1804.877000" data-stop="1807.141000">It will also even show you the errors, I think.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1807.161000" data-stop="1809.444000">Anyway, so you don't need flymake.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1810.765000" data-stop="1812.328000">Flymake just gives you the squiggly underlines.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1812.868000" data-stop="1815.091000">But you can use <code>next-error</code> right away.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1816.353000" data-stop="1816.854000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1816.874000" data-stop="1818.616000">Flymake is more narrow.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1818.636000" data-stop="1819.277000">Yeah, correct.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1819.000000">30:19</span> <strong>Projects</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1819.662000" data-stop="1823.546000"><strong class="speaker-name">Sacha:</strong>  I think projects and project-based</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1823.566000" data-stop="1827.531000">navigation is another big chunk of Emacs built-in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1827.591000" data-stop="1830.915000">functionality that is useful for people who have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1830.955000" data-stop="1832.256000">a hard time finding their way around.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1832.276000" data-stop="1834.899000">You don't have to manually find each file.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1834.959000" data-stop="1836.701000">You can set up shortcuts so you can say, I want</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1836.721000" data-stop="1837.662000">to go to this project.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1838.063000" data-stop="1841.467000">Then from within this project, I can find a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1841.527000" data-stop="1844.590000">file very easily.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1844.637000" data-stop="1846.720000"><strong class="speaker-name">Prot:</strong>  This is indeed very</span> <span class="audio-time caption" data-speaker="Prot" data-start="1846.821000" data-stop="1850.406000">powerful. The thing is you don't have to also</span> <span class="audio-time caption" data-speaker="Prot" data-start="1850.486000" data-stop="1854.874000">think in terms of the structure of the project,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1855.134000" data-stop="1857.317000">like the tree structure of the project, because if</span> <span class="audio-time caption" data-speaker="Prot" data-start="1857.378000" data-stop="1860.663000">you find the file in the project, it</span> <span class="audio-time caption" data-speaker="Prot" data-start="1860.763000" data-stop="1863.207000">will flatten the structure for you, so then you</span> <span class="audio-time caption" data-speaker="Prot" data-start="1863.307000" data-stop="1865.711000">use completion to find it or find the directory</span> <span class="audio-time caption" data-speaker="Prot" data-start="1865.771000" data-stop="1868.736000">where something is. Of course, you can still</span> <span class="audio-time caption" data-speaker="Prot" data-start="1868.976000" data-stop="1871.320000">use the tree view as well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1871.705000" data-stop="1873.727000"><strong class="speaker-name">Sacha:</strong>  This is great because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1873.987000" data-stop="1876.630000">for example, in Java projects, the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1876.750000" data-stop="1878.512000">directory structure gets very deep because they</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1878.532000" data-stop="1880.734000">have to be their domain name and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1880.874000" data-stop="1882.196000">package names and all that stuff.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1883.016000" data-stop="1887.100000">Just have either project or projectile index all</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1887.120000" data-stop="1888.922000">of your files for you, and then you can jump to a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1888.982000" data-stop="1891.104000">file by name anywhere in your structure.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1891.545000" data-stop="1894.148000">You can tell it also to ignore certain files,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1894.168000" data-stop="1896.310000">which is handy so that you don't have to go into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1896.370000" data-stop="1897.631000">your node-modules.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1898.492000" data-stop="1899.653000">That would be silly.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1900.308000" data-stop="1904.254000"><strong class="speaker-name">Prot:</strong>  Yeah, that would be a nightmare.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1904.255000" data-stop="1909.204000"><strong class="speaker-name">Sacha:</strong>  Do we have basically the Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1909.244000" data-stop="1911.108000">built-ins for finding your way around well</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1911.148000" data-stop="1913.592000">covered here, or other other recommendations that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1913.632000" data-stop="1916.116000">people should go check out?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1916.117000" data-stop="1919.683000"><strong class="speaker-name">Prot:</strong>  These are already very useful, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1920.102000" data-stop="1926.928000">Most of these, if not all, are augmented by packages.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1927.008000" data-stop="1929.410000">So the core functionality is there, and then you</span> <span class="audio-time caption" data-speaker="Prot" data-start="1929.451000" data-stop="1930.932000">can do more stuff with them.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1930.000000">32:10</span> <strong>Putting projects in tabs or frames</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="1930.952000" data-stop="1934.855000"><strong class="speaker-name">Prot:</strong> For example, with projects, you may want to have</span> <span class="audio-time caption" data-speaker="Prot" data-start="1934.895000" data-stop="1936.897000">an arrangement where you put them in separate</span> <span class="audio-time caption" data-speaker="Prot" data-start="1936.997000" data-stop="1940.060000">tabs, and then you use a package like tabspaces</span> <span class="audio-time caption" data-speaker="Prot" data-start="1940.521000" data-stop="1943.283000">so that each tab has its own buffer list, or</span> <span class="audio-time caption" data-speaker="Prot" data-start="1943.603000" data-stop="1946.466000">my package beframe so that you put them in</span> <span class="audio-time caption" data-speaker="Prot" data-start="1946.506000" data-stop="1947.527000">separate frames.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1947.507000" data-stop="1950.152000">Each frame has its own buffer list,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1950.172000" data-stop="1952.517000">so that basically when you search for buffers,</span> <span class="audio-time caption" data-speaker="Prot" data-start="1952.537000" data-stop="1955.062000">you only see those related to the project.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="1955.000000">32:35</span> <strong>Tabs</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="1955.102000" data-stop="1956.986000"><strong class="speaker-name">Sacha:</strong>  I am not using tabs nearly as much</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1957.086000" data-stop="1958.870000">as I probably could,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1959.291000" data-stop="1962.236000">so that is one of my underappreciated Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1962.277000" data-stop="1963.018000">built-ins here.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1963.387000" data-stop="1967.112000">I'm getting the sense that people use tabs to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1967.152000" data-stop="1970.817000">say, okay, this is the set of windows related to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1972.580000" data-stop="1975.824000">managing my mail, or this is a set of tabs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1975.864000" data-stop="1977.066000">related to this project.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1977.126000" data-stop="1979.930000">This is a set of windows related to this project,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1979.970000" data-stop="1982.774000">or this is a set of windows related to managing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1982.954000" data-stop="1984.256000">my notes about something.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="1984.977000" data-stop="1987.200000">Is that what you use tabs for?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="1987.940000" data-stop="1989.643000"><strong class="speaker-name">Prot:</strong>  I seldom use them.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1989.803000" data-stop="1992.868000">I use them specifically only within the context</span> <span class="audio-time caption" data-speaker="Prot" data-start="1992.949000" data-stop="1997.757000">of popping into a Magit interface.</span> <span class="audio-time caption" data-speaker="Prot" data-start="1998.157000" data-stop="2000.542000">So I have my project that I'm working on.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2000.602000" data-stop="2002.325000">Let's say it's split in three windows.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2002.745000" data-stop="2005.069000">And then I want to leave everything intact and</span> <span class="audio-time caption" data-speaker="Prot" data-start="2005.129000" data-stop="2008.014000">just go into Magit to do some Git operation.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2008.595000" data-stop="2011.300000">I configure <code>display-buffer-alist</code></span> <span class="audio-time caption" data-speaker="Prot" data-start="2011.320000" data-stop="2013.103000">so when I do Emacs Magit,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2013.083000" data-stop="2016.100000">magit-status or whatever, it goes in a new tab.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2016.101000" data-stop="2019.133000">Then I leave my work where it is.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2019.134000" data-stop="2021.300000">I do the git thing,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2021.301000" data-stop="2024.733000">then I quit those. I'm back to my layout.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2024.734000" data-stop="2028.190000"><strong class="speaker-name">Sacha:</strong>  I know you're a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2028.878000" data-stop="2031.322000">good advocate of checking out</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2031.382000" data-stop="2033.385000">display-buffer-alist and all the wonderful</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2033.425000" data-stop="2034.167000">things it can do.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2034.828000" data-stop="2037.492000">I should definitely look into having it set up a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2037.552000" data-stop="2041.298000">tab because that sounds a lot nicer than trying</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2041.318000" data-stop="2043.061000">to remember, okay, I need to save my window</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2043.121000" data-stop="2046.887000">configuration to register and then do this thing.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2047.137000" data-stop="2049.519000">I have it set up actually so that I can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2049.520000" data-stop="2052.884000"><code>winner-undo</code> in order to get back to my previous</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2053.685000" data-stop="2054.525000">configuration.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2055.027000" data-stop="2057.730000">But of course, if I need to flip back and forth</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2057.810000" data-stop="2061.335000">between two different views, like Magit and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2061.554000" data-stop="2064.739000">my project code, then a tab would work much</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2064.799000" data-stop="2066.161000">better for this purpose, I think.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2067.042000" data-stop="2068.924000"><strong class="speaker-name">Prot:</strong>  Yes, and it scales better as well,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2068.964000" data-stop="2071.828000">like if you need to have three tabs or whatever.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2072.112000" data-stop="2075.260000"><strong class="speaker-name">Sacha:</strong>  Or a new frame.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2075.340000" data-stop="2077.687000">But sometimes managing frames gets a little</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2077.726000" data-stop="2078.447000">annoying too.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2079.672000" data-stop="2080.353000"><strong class="speaker-name">Prot:</strong>  Of course, of course.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2080.373000" data-stop="2081.777000">There are pros and cons.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2081.000000">34:41</span> <strong>Navigating frames</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="2081.797000" data-stop="2084.543000"><strong class="speaker-name">Prot:</strong> Speaking of frames, one nice thing is that there</span> <span class="audio-time caption" data-speaker="Prot" data-start="2084.745000" data-stop="2087.893000">is completion again to select frames.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2088.059000" data-stop="2089.821000">So I forget how it's called.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2089.841000" data-stop="2091.422000">[ <code>select-frame</code> ], I think, is the command.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2091.922000" data-stop="2095.065000">If you have lots of frames and you don't know</span> <span class="audio-time caption" data-speaker="Prot" data-start="2095.167000" data-stop="2097.909000">where they are, you can use completion for that.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2098.090000" data-stop="2101.533000">If you want, you can also name frames.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2101.914000" data-stop="2103.515000">I believe it’s rename frame. [<code>set-frame-name</code>]</span> <span class="audio-time caption" data-speaker="Prot" data-start="2103.555000" data-stop="2104.817000">I forget now the command.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2104.837000" data-stop="2106.879000">Basically, you can give it a specific name</span> <span class="audio-time caption" data-speaker="Prot" data-start="2107.239000" data-stop="2109.502000">rather than it changing the name all the time.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2110.162000" data-stop="2112.165000">So you can say, OK, this is my super</span> <span class="audio-time caption" data-speaker="Prot" data-start="2112.185000" data-stop="2114.527000">important note for our livestream, right?</span> <span class="audio-time caption" data-speaker="Prot" data-start="2115.188000" data-stop="2116.349000">That's the frame for you.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2116.369000" data-stop="2117.290000">Now you can find it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2118.721000" data-stop="2119.742000"><strong class="speaker-name">Sacha:</strong>  I should look into that.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2119.942000" data-stop="2123.326000">I also underutilize frames because for the most</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2123.366000" data-stop="2127.971000">part, I have a keyboard shortcut like Super 1</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2128.692000" data-stop="2132.015000">which jumps back to Emacs, raises my</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2132.095000" data-stop="2133.497000">Emacs window.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2133.677000" data-stop="2135.739000">But it doesn't work so well if I have multiple</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2135.839000" data-stop="2137.942000">Emacs window, like multiple Emacs frames.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2138.723000" data-stop="2142.306000">If I can figure out how to get mentally</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2142.527000" data-stop="2145.650000">through that or if I switch to EXWM as my window</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2145.690000" data-stop="2146.551000">manager,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2148.353000" data-stop="2150.837000">then I'm sure that managing multiple Emacs frames</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2150.857000" data-stop="2152.259000">will be a lot easier.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2152.279000" data-stop="2153.300000">But at least</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2153.320000" data-stop="2156.145000">tabs, I can probably use within that one frame in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2156.205000" data-stop="2158.108000">order to manage different windows.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2158.889000" data-stop="2160.731000"><strong class="speaker-name">Prot:</strong>  I would say tabs is the first thing</span> <span class="audio-time caption" data-speaker="Prot" data-start="2160.771000" data-stop="2161.693000">you want to check.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2162.234000" data-stop="2164.477000">Frames is a little bit more... You have to change</span> <span class="audio-time caption" data-speaker="Prot" data-start="2164.517000" data-stop="2165.839000">your mental model a little bit.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2167.000000">36:07</span> <strong>These navigation shortcuts work for prose, too</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2167.135000" data-stop="2168.839000"><strong class="speaker-name">Sacha:</strong>  @hmelman has one more tip to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2168.899000" data-stop="2171.765000">include in this section on finding your way</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2171.845000" data-stop="2172.326000">around.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2173.328000" data-stop="2176.434000">You can use these S-expression commands</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2176.435000" data-stop="2177.557000">in prose too.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2177.918000" data-stop="2181.504000">Like for example, <code>C-M-u</code> or
<code>backwards-up-list</code></span> <span class="audio-time caption" data-speaker="Sacha" data-start="2181.505000" data-stop="2184.773000">moves you out of a quote or a parenthesis</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2184.753000" data-stop="2187.833000">and then you can <code>C-M-e</code> to go to the end of it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2187.834000" data-stop="2190.967000">So even if you're writing, for example, a novel,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2190.968000" data-stop="2192.667000">and you're saying, okay, I want to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2192.668000" data-stop="2195.933000">get out of this quote and go to the next sentence,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2195.934000" data-stop="2198.367000">you can either isearch to the start of it,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2198.368000" data-stop="2200.700000">or you can go up out of the quote and then</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2200.701000" data-stop="2201.767000">go to the end of the quote.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2201.768000" data-stop="2206.005000">Also very handy to learn the commands for killing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2206.365000" data-stop="2207.326000">an S expression [ <code>kill-sexp</code> ],</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2207.327000" data-stop="2208.989000">which again also works with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2209.169000" data-stop="2212.874000">other stuff like quotes or parentheses, because</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2212.935000" data-stop="2215.058000">then you can copy and paste things or you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2215.538000" data-stop="2216.279000">kill it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2216.299000" data-stop="2217.581000">You don't have to paste it back.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2217.681000" data-stop="2219.304000">It's just you delete it and then you type</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2219.344000" data-stop="2219.924000">something else in.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2220.145000" data-stop="2220.445000">It's fine.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2223.610000" data-stop="2225.132000"><strong class="speaker-name">Prot:</strong>  Exactly, exactly.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2225.152000" data-stop="2227.856000">And one of those is the <code>mark-sexp</code>, which</span> <span class="audio-time caption" data-speaker="Prot" data-start="2227.936000" data-stop="2228.817000">is very useful.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2229.000000">37:09</span> <strong>follow-mode</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2229.050000" data-stop="2230.111000"><strong class="speaker-name">Sacha:</strong>  Oh yeah, oh yeah.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2230.933000" data-stop="2234.017000">And <span class="citation" data-cites="matthewjorgensen9115">@matthewjorgensen9115</span> shares:
<code>follow-mode</code> allows the same</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2234.097000" data-stop="2236.019000">file with multiple frames like a book.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2236.340000" data-stop="2238.623000">So follow mode can work with two, three or more</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2238.743000" data-stop="2239.204000">windows.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2240.085000" data-stop="2241.987000">You have an ultra wide, right?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2242.728000" data-stop="2246.514000">So like, okay, you can have several columns</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2246.634000" data-stop="2249.437000">following the same file and you can scroll and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2249.578000" data-stop="2252.482000">all of them will scroll in sync.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2252.682000" data-stop="2253.042000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2253.062000" data-stop="2253.803000">It's quite nice.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2253.964000" data-stop="2255.085000">Quite nice.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2255.105000" data-stop="2256.507000"><strong class="speaker-name">Sacha:</strong>  I forget, does follow mode work</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2256.547000" data-stop="2258.770000">with different files?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2259.087000" data-stop="2260.869000"><strong class="speaker-name">Prot:</strong>  With different files?</span> <span class="audio-time caption" data-speaker="Prot" data-start="2260.889000" data-stop="2261.810000">I don't think so.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2261.971000" data-stop="2264.674000">Like kind of a scroll lock for all windows?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2264.694000" data-stop="2265.695000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah, yeah.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2266.577000" data-stop="2267.057000"><strong class="speaker-name">Prot:</strong>  I don't know.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2267.077000" data-stop="2267.738000">I don't think so.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2268.419000" data-stop="2269.500000">I haven't tried it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2269.801000" data-stop="2270.622000"><strong class="speaker-name">Sacha:</strong>  Worth looking into. [<code>scroll-all-mode</code>]</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2270.000000">37:50</span> <strong>Ediff</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2270.802000" data-stop="2273.886000"><strong class="speaker-name">Sacha:</strong> If you do find yourself needing to compare one</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2273.966000" data-stop="2278.632000">file with another manually, then maybe</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2278.696000" data-stop="2281.001000">like ediff?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2281.643000" data-stop="2285.552000"><strong class="speaker-name">Prot:</strong>  Ediff would do that.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2285.592000" data-stop="2286.714000">You would have them side by side.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2286.735000" data-stop="2289.701000">But the thing with Ediff is that you don't get a</span> <span class="audio-time caption" data-speaker="Prot" data-start="2290.022000" data-stop="2291.205000">scroll lock for both.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2291.405000" data-stop="2294.472000">It's only navigation through the differences.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2294.492000" data-stop="2296.958000">So that wouldn't be exactly that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2297.242000" data-stop="2298.965000"><strong class="speaker-name">Sacha:</strong>  For the purposes of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2299.025000" data-stop="2302.370000">comparing, Ediff will let you compare two files,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2302.390000" data-stop="2304.333000">but you can even use it to compare two buffers.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2304.894000" data-stop="2307.599000">However, Prot does have some recommendations in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2307.619000" data-stop="2311.124000">the one on the defaults that you shared before on</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2311.184000" data-stop="2314.069000">how to make Ediff more manageable.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2315.028000" data-stop="2317.231000"><strong class="speaker-name">Prot:</strong>  Yeah, I think by default it's not</span> <span class="audio-time caption" data-speaker="Prot" data-start="2317.291000" data-stop="2319.715000">intuitive, because by default, when you do Ediff</span> <span class="audio-time caption" data-speaker="Prot" data-start="2319.735000" data-stop="2322.500000">without any configuration, it will display its</span> <span class="audio-time caption" data-speaker="Prot" data-start="2322.640000" data-stop="2324.042000">panel in a separate frame.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2324.563000" data-stop="2326.406000">If you have never used many frames, that's</span> <span class="audio-time caption" data-speaker="Prot" data-start="2326.466000" data-stop="2327.647000">already your first problem.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2327.668000" data-stop="2329.370000">Like you don't even know what happened.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2330.111000" data-stop="2334.158000">The second problem is that the layout will be one</span> <span class="audio-time caption" data-speaker="Prot" data-start="2334.238000" data-stop="2338.144000">above the other, which depending on your screen,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2338.544000" data-stop="2341.489000">you have like a wide screen, so it's not as easy</span> <span class="audio-time caption" data-speaker="Prot" data-start="2341.549000" data-stop="2342.250000">of a layout.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2342.230000" data-stop="2344.375000">Then you have to figure out where the other</span> <span class="audio-time caption" data-speaker="Prot" data-start="2344.435000" data-stop="2345.798000">frame with the panel is.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2345.818000" data-stop="2348.083000">Basically two variables where you change them</span> <span class="audio-time caption" data-speaker="Prot" data-start="2348.224000" data-stop="2350.288000">and you have the panel at the bottom, the control</span> <span class="audio-time caption" data-speaker="Prot" data-start="2350.329000" data-stop="2354.057000">panel and then file A here, file B there.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2354.077000" data-stop="2355.499000">And of course you can do it with three files</span> <span class="audio-time caption" data-speaker="Prot" data-start="2355.500000" data-stop="2355.801000">as well.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2356.152000" data-stop="2357.474000"><strong class="speaker-name">Sacha:</strong>  I will find it and put it in the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2357.514000" data-stop="2357.935000">show notes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2359.016000" data-stop="2362.882000">Matthew also points out the following also works</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2362.922000" data-stop="2364.223000">with <code>centered-cursor-mode</code> [(it’s a package)],</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2364.224000" data-stop="2364.864000">which will keep the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2364.904000" data-stop="2368.009000">cursor position in the middle of the frame.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2368.369000" data-stop="2370.833000">So I can't remember whether there's also like a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2370.893000" data-stop="2371.874000">scroll lock or whatever.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2372.195000" data-stop="2373.056000"><strong class="speaker-name">Prot:</strong>  <code>scroll-lock-mode</code>.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2373.357000" data-stop="2374.979000">Yeah, there is `scroll-lock mode.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2374.999000" data-stop="2377.182000"><strong class="speaker-name">Sacha:</strong>  Or there was another</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2377.162000" data-stop="2380.026000">Emacs built-in that someone mentioned that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2380.066000" data-stop="2382.350000">scrolls it one line at a time, keeping it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2382.730000" data-stop="2385.254000">centered, I guess, which the person found very</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2385.314000" data-stop="2387.217000">useful because their cat was sitting on their</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2387.237000" data-stop="2391.443000">laptop.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2391.704000" data-stop="2395.048000">So moral lesson is: learn about the Emacs built-in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2395.069000" data-stop="2397.031000">because you never know when a small mammal will</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2397.051000" data-stop="2399.094000">be obscuring half of your screen.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2400.216000" data-stop="2401.498000">You can still use Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2403.352000" data-stop="2407.821000">Which actually is an interesting segue into this</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2407.841000" data-stop="2412.390000">thing about discoverability because Emacs is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2412.490000" data-stop="2413.993000">quite unlike many other editors.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2414.153000" data-stop="2416.779000">It is very well documented and if you can figure</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2416.819000" data-stop="2419.484000">out how to navigate and find that documentation</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2419.544000" data-stop="2423.532000">and even how to make this fun for you, then you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2423.572000" data-stop="2425.596000">can do all sorts of interesting things with it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2426.167000" data-stop="2429.411000">Okay, so self-documentation.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2430.352000" data-stop="2431.974000">I love telling people, okay, you can just press</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2432.014000" data-stop="2434.797000"><code>C-h k</code> or <code>describe-key</code> to describe
anything.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2434.817000" data-stop="2436.839000">You can <code>C-h f</code> any function.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2437.300000" data-stop="2439.482000">You can, you know, <code>C-h v</code> any variable.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2439.502000" data-stop="2442.225000"><code>describe-</code> whatever is great.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2442.706000" data-stop="2445.829000">Of course, adding <code>C-h</code> to the end of the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2445.889000" data-stop="2447.711000">keyboard shortcut that you've started but you've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2447.751000" data-stop="2451.115000">forgotten how to finish, especially if you've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2451.155000" data-stop="2452.697000">turned on <code>which-key</code> mode,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2452.981000" data-stop="2456.267000">is great for listing the actual shortcuts that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2456.307000" data-stop="2457.469000">start with that sequence.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2459.232000" data-stop="2460.635000"><strong class="speaker-name">Prot:</strong>  And even without <code>which-key</code>, it will</span> <span class="audio-time caption" data-speaker="Prot" data-start="2460.675000" data-stop="2463.600000">put all those shortcuts in a Help buffer,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2464.081000" data-stop="2466.806000">and it will show the key and the name of the</span> <span class="audio-time caption" data-speaker="Prot" data-start="2466.866000" data-stop="2467.267000">command.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2469.230000" data-stop="2472.757000">Of course, you can click on the command to</span> <span class="audio-time caption" data-speaker="Prot" data-start="2472.837000" data-stop="2473.538000">read about it.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2474.682000" data-stop="2476.866000"><strong class="speaker-name">Sacha:</strong>  Someday I think it would be amazing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2476.926000" data-stop="2483.276000">if Emacs comes with a completion interface that's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2483.336000" data-stop="2485.300000">easy for people to understand and get started with,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2485.700000" data-stop="2487.664000">but in the meantime, if you don't already have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2487.704000" data-stop="2490.568000">completion set up, that is well worth taking the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2490.609000" data-stop="2491.510000">time to figure out.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2492.671000" data-stop="2493.192000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2493.472000" data-stop="2497.299000">The built-in one has improved tremendously.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2497.739000" data-stop="2499.743000">I mean minibuffer.el here</span> <span class="audio-time caption" data-speaker="Prot" data-start="2500.043000" data-stop="2503.769000">has improved tremendously over the various recent</span> <span class="audio-time caption" data-speaker="Prot" data-start="2503.829000" data-stop="2504.330000">versions.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2505.111000" data-stop="2507.716000">But you still need to be aware of all the user</span> <span class="audio-time caption" data-speaker="Prot" data-start="2507.776000" data-stop="2508.818000">options to configure it.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2509.479000" data-stop="2512.804000">So to get, for example, a single column view</span> <span class="audio-time caption" data-speaker="Prot" data-start="2512.904000" data-stop="2515.168000">instead of a grid with 100 options...</span> <span class="audio-time caption" data-speaker="Prot" data-start="2515.148000" data-stop="2519.277000">That requires some effort.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2519.297000" data-stop="2521.662000">Out of the box, if you really want something</span> <span class="audio-time caption" data-speaker="Prot" data-start="2521.682000" data-stop="2524.268000">that is built into Emacs and does completion in a</span> <span class="audio-time caption" data-speaker="Prot" data-start="2524.308000" data-stop="2526.834000">way that is fairly easy to understand, it would</span> <span class="audio-time caption" data-speaker="Prot" data-start="2526.874000" data-stop="2530.762000">be icomplete-vertical-mode or fido or</span> <span class="audio-time caption" data-speaker="Prot" data-start="2530.783000" data-stop="2531.925000">fido-vertical-mode.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2532.000000">42:12</span> <strong>Calling functions by name</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2532.277000" data-stop="2538.643000"><strong class="speaker-name">Sacha:</strong>  Another thing that Emacs does</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2538.703000" data-stop="2541.526000">differently that might be good for people to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2541.586000" data-stop="2545.110000">learn about is that in Emacs, it is totally okay</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2545.170000" data-stop="2547.592000">to not remember the keyboard shortcuts for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2547.672000" data-stop="2550.355000">everything or not use the menus for everything,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2550.375000" data-stop="2551.876000">because not everything will fit in the menus</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2552.017000" data-stop="2552.257000">either.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2552.817000" data-stop="2555.840000">If you kind of remember the name of the function,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2555.900000" data-stop="2559.284000">you can use M-x and possibly completion to go</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2559.444000" data-stop="2560.545000">run that function,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2560.880000" data-stop="2564.627000">which is helpful because sometimes knowing the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2564.688000" data-stop="2568.034000">words to call a function is a lot easier to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2568.074000" data-stop="2570.218000">remember than remembering the shortcut for it.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2571.361000" data-stop="2571.782000"><strong class="speaker-name">Prot:</strong>  Exactly.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2571.802000" data-stop="2572.944000">And I would say completion...</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2572.000000">42:52</span> <strong>Completion</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="2572.964000" data-stop="2575.369000"><strong class="speaker-name">Prot:</strong> If you have to configure one part of Emacs,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2575.389000" data-stop="2576.070000">it's completion.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2576.573000" data-stop="2579.980000">If you improve that part of it, it will help you</span> <span class="audio-time caption" data-speaker="Prot" data-start="2580.140000" data-stop="2580.601000">everywhere.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2580.701000" data-stop="2582.966000">Like we were saying earlier about bookmarks, it</span> <span class="audio-time caption" data-speaker="Prot" data-start="2583.026000" data-stop="2583.667000">helps you there.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2583.988000" data-stop="2585.471000">The kill-ring, it helps you there.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2585.751000" data-stop="2587.194000">Finding files, it helps you there.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2587.234000" data-stop="2589.058000">Switching to buffers and so on.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2589.078000" data-stop="2590.621000">Like what we are now talking about.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2590.741000" data-stop="2591.663000">It's always useful.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2592.976000" data-stop="2595.560000"><strong class="speaker-name">Sacha:</strong>  When you set up a completion, also</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2595.620000" data-stop="2598.183000">learn how your favorite completion system lets</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2598.243000" data-stop="2600.667000">you put in things that look like they should</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2600.747000" data-stop="2604.151000">match something on the list, but you actually</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2604.232000" data-stop="2606.815000">want just the partial part or just the blank part.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2607.616000" data-stop="2610.602000">For example, in some systems, you press</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2610.603000" data-stop="2615.046000"><code>M-RET</code> or <code>M-p</code> to send what you already
have</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2615.107000" data-stop="2617.029000">there instead of selecting one of the completion</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2617.129000" data-stop="2617.650000">options.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2618.002000" data-stop="2619.885000">This is helpful because sometimes you'll want</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2619.925000" data-stop="2623.010000">to name a file something that is a substring of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2623.071000" data-stop="2625.074000">another file and you want to be able to say,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2625.114000" data-stop="2626.977000">yeah, that is actually what I meant, not the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2627.498000" data-stop="2629.401000">completion part.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2629.421000" data-stop="2629.782000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2629.802000" data-stop="2632.867000">I think that's the only rough edge with most of</span> <span class="audio-time caption" data-speaker="Prot" data-start="2632.927000" data-stop="2633.448000">those, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2634.109000" data-stop="2636.573000">Where you have to be mindful of that or, you</span> <span class="audio-time caption" data-speaker="Prot" data-start="2636.613000" data-stop="2639.438000">know, I have to select the prompt or I have to</span> <span class="audio-time caption" data-speaker="Prot" data-start="2639.558000" data-stop="2642.944000">type a special key for this edge case.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2642.964000" data-stop="2643.064000">Yeah.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2643.263000" data-stop="2645.266000"><strong class="speaker-name">Sacha:</strong>  Once you get that sorted out and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2645.366000" data-stop="2649.271000">you've drilled it into your fingers, it's very,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2649.311000" data-stop="2652.575000">very helpful to have completion sorted out.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2653.000000">44:13</span> <strong>Manuals</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2653.236000" data-stop="2655.139000"><strong class="speaker-name">Sacha:</strong> Emacs also comes with extensive manuals.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2655.259000" data-stop="2657.221000">You like to write very thorough manuals for your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2657.261000" data-stop="2658.803000">packages, which I also appreciate.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2659.745000" data-stop="2662.829000">Flipping through manuals for fun is something</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2662.869000" data-stop="2666.233000">that we've discussed in previous...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2666.416000" data-stop="2669.003000">This is such a great practice.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2669.023000" data-stop="2670.166000">You learn something new every day.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2670.187000" data-stop="2674.138000">I was going through the Emacs manual in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2674.178000" data-stop="2677.166000">preparation for this conversation and I was just</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2677.347000" data-stop="2679.312000">highlighting things that I need to dig into.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2681.232000" data-stop="2684.218000"><strong class="speaker-name">Prot:</strong>  It's very useful and again to point</span> <span class="audio-time caption" data-speaker="Prot" data-start="2684.318000" data-stop="2685.059000">out completion.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2685.400000" data-stop="2688.866000"><code>C-h R</code> is how you can search for the</span> <span class="audio-time caption" data-speaker="Prot" data-start="2688.946000" data-stop="2690.529000">manual of a package.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2690.549000" data-stop="2692.112000">Like for example, I'm interested in Org.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2692.172000" data-stop="2694.557000"><code>C-h R</code>, Org.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2694.958000" data-stop="2696.681000">I find Org from anywhere, right?</span> <span class="audio-time caption" data-speaker="Prot" data-start="2697.502000" data-stop="2700.488000"><code>C-h R</code> and then I will search for</span> <span class="audio-time caption" data-speaker="Prot" data-start="2700.548000" data-stop="2701.330000">something else, right?</span> <span class="audio-time caption" data-speaker="Prot" data-start="2701.470000" data-stop="2703.373000">Elisp, for example, to go to the Emacs Lisp</span> <span class="audio-time caption" data-speaker="Prot" data-start="2703.393000" data-stop="2704.776000">reference manual.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2704.857000" data-stop="2705.838000">Again, very useful.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2705.938000" data-stop="2709.122000">From inside the manuals, <code>g</code> to go to a</span> <span class="audio-time caption" data-speaker="Prot" data-start="2709.202000" data-stop="2712.966000">chapter, also known as a node, <code>i</code> to go to a</span> <span class="audio-time caption" data-speaker="Prot" data-start="2713.066000" data-stop="2718.412000">topic, an index, and <code>m</code> if you want, but <code>g</code>
and <code>i</code>.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2718.552000" data-stop="2721.576000">Just think of <code>g</code> and <code>i</code>. Very, very
useful.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2721.716000" data-stop="2724.499000"><code>m</code> is also useful to navigate the menu of the</span> <span class="audio-time caption" data-speaker="Prot" data-start="2724.559000" data-stop="2725.640000">current node.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2726.121000" data-stop="2728.283000"><strong class="speaker-name">Sacha:</strong>  I use <code>s</code> also for search.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2728.448000" data-stop="2729.529000"><strong class="speaker-name">Prot:</strong>  And there's for research</span> <span class="audio-time caption" data-speaker="Prot" data-start="2729.570000" data-stop="2730.250000">throughout, yes.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2730.431000" data-stop="2730.711000"><strong class="speaker-name">Sacha:</strong>  Yes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2731.252000" data-stop="2733.595000">I have not been using <code>C-h R</code>.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2733.615000" data-stop="2736.319000">I have been using <code>C-h i</code> to look at the whole</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2736.359000" data-stop="2740.404000">list of info manuals and then using <code>m</code> or isearch</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2740.484000" data-stop="2741.546000">like a newbie.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2742.827000" data-stop="2743.468000"><strong class="speaker-name">Prot:</strong>  That works.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2743.508000" data-stop="2745.551000">The problem with that is that if you have already</span> <span class="audio-time caption" data-speaker="Prot" data-start="2745.611000" data-stop="2746.913000">gone into a manual,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2747.365000" data-stop="2749.969000"><code>C-h i</code> will take you back to that manual.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2749.989000" data-stop="2751.952000">So you have to click it and then start again.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2752.412000" data-stop="2752.673000"><strong class="speaker-name">Sacha:</strong>  Okay.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2753.013000" data-stop="2753.594000">Alright.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2753.654000" data-stop="2755.036000">Well, I'm learning new things.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2756.639000" data-stop="2756.959000"><strong class="speaker-name">Prot:</strong>  Nice.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2757.000000">45:57</span> <strong>Menus</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2757.420000" data-stop="2758.842000"><strong class="speaker-name">Sacha:</strong>  Okay, you mentioned you are not a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2758.862000" data-stop="2761.746000">fan of... you don't use the menus and I know a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2761.766000" data-stop="2761.900000">lot of people...</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2761.901000" data-stop="2764.009000"><strong class="speaker-name">Prot:</strong>  But I appreciate that.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2764.029000" data-stop="2766.052000">And in one of my... oh, in a couple</span> <span class="audio-time caption" data-speaker="Prot" data-start="2766.072000" data-stop="2768.496000">of my packages I have menu entry.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2768.628000" data-stop="2770.331000"><strong class="speaker-name">Sacha:</strong>  Yeah, and I know a lot of people</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2770.371000" data-stop="2773.456000">turn the menu bar off in their</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2773.496000" data-stop="2775.820000">"this is how you configure Emacs" sort</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2775.861000" data-stop="2776.542000">of tutorials.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2777.123000" data-stop="2779.627000">But if you are new to Emacs, and even if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2779.647000" data-stop="2781.250000">you're an intermediate user, I strongly</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2781.290000" data-stop="2784.576000">recommend, sacrificing that tiny sliver</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2784.876000" data-stop="2787.581000">of vertical space for the menu bar,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2787.661000" data-stop="2789.404000">because it's a great way to discover</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2789.384000" data-stop="2791.867000">commands that are related to your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2791.868000" data-stop="2795.533000">particular major mode or other things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2795.534000" data-stop="2798.954000">It's just fun to go through it and see what's</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2799.014000" data-stop="2801.056000">been deemed worthy of including in one of those</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2801.136000" data-stop="2801.557000">menus.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2805.161000" data-stop="2808.244000">There are some efforts now to get the right-click</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2808.784000" data-stop="2811.487000">mouse menus to also have lots of interesting</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2811.607000" data-stop="2814.230000">options, but definitely the menu bar at the top,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2814.911000" data-stop="2817.574000">which can also be accessed if you use F10 if you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2817.614000" data-stop="2818.935000">don't want to use the mouse.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2819.000000" data-stop="2821.285000">The menu bar is even working on terminal,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2821.305000" data-stop="2821.826000">which is nice.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2822.227000" data-stop="2824.412000">So yes, menu bar at the top has a lot of useful</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2824.452000" data-stop="2827.499000">suggestions for discovering things.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2827.519000" data-stop="2828.602000"><strong class="speaker-name">Prot:</strong>  Yes, yes, excellent.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2829.725000" data-stop="2831.829000">The part you mentioned about key navigation,</span> <span class="audio-time caption" data-speaker="Prot" data-start="2831.849000" data-stop="2832.551000">that's also good.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2832.571000" data-stop="2834.936000">You may be like, don't want to use</span> <span class="audio-time caption" data-speaker="Prot" data-start="2834.957000" data-stop="2835.398000">the mouse.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2835.658000" data-stop="2836.199000">There you have it.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2836.239000" data-stop="2836.941000">You don't have...</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2837.545000" data-stop="2839.908000"><strong class="speaker-name">Sacha:</strong>  And speaking of key navigation, if</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2839.948000" data-stop="2842.592000">you press <code>C-h k</code>, which is <code>describe-key</code>,
it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2842.632000" data-stop="2844.975000">will work on menu items as well.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2844.995000" data-stop="2847.057000">If you're finding yourself always going to the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2847.137000" data-stop="2850.882000">menu to do this thing, sometimes the menu items</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2850.942000" data-stop="2853.065000">are not named the same as their commands, but you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2853.085000" data-stop="2855.408000">can use <code>C-h k</code> to find out what that function</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2855.528000" data-stop="2857.831000">is and what keyboard shortcuts it's bound to.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2857.992000" data-stop="2860.495000">Then you can call it with M-x directly, or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2860.535000" data-stop="2862.237000">you can memorize the keyboard shortcuts.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2866.000000">47:46</span> <strong>Automation - abbreviations</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2866.418000" data-stop="2868.724000"><strong class="speaker-name">Sacha:</strong> Okay, shall we move on to automation,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2869.225000" data-stop="2873.515000">for which Emacs has a ton of built-in things?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2873.595000" data-stop="2879.489000">Using abbreviations and things like that is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2879.529000" data-stop="2881.113000">actually something I picked up from reading your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2881.153000" data-stop="2884.461000">config, I think, because you use abbreviations a lot.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2885.437000" data-stop="2887.620000"><strong class="speaker-name">Prot:</strong>  Yeah. Very nice. Very useful.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2887.740000" data-stop="2889.962000">Even for basic things.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2889.982000" data-stop="2892.645000">For example, I want to write, you know, my</span> <span class="audio-time caption" data-speaker="Prot" data-start="2892.725000" data-stop="2895.849000">fancy French expressions, like, this is so</span> <span class="audio-time caption" data-speaker="Prot" data-start="2895.889000" data-stop="2896.950000">déjà vu, you know?</span> <span class="audio-time caption" data-speaker="Prot" data-start="2897.611000" data-stop="2899.393000">I want to have the accents correct.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2899.633000" data-stop="2902.917000">I just write <code>deja vu</code> with English, and then I</span> <span class="audio-time caption" data-speaker="Prot" data-start="2902.977000" data-stop="2904.999000">have the French equivalent with all the fancy</span> <span class="audio-time caption" data-speaker="Prot" data-start="2905.120000" data-stop="2906.261000">accents.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2906.281000" data-stop="2908.103000">Stuff like that you can do, like...</span> <span class="audio-time caption" data-speaker="Prot" data-start="2908.302000" data-stop="2911.286000">something you keep misspelling the whole time you</span> <span class="audio-time caption" data-speaker="Prot" data-start="2911.346000" data-stop="2914.350000">actually do it, right, something that is with an</span> <span class="audio-time caption" data-speaker="Prot" data-start="2914.410000" data-stop="2918.456000">annoying spelling, like annoying capitalization</span> <span class="audio-time caption" data-speaker="Prot" data-start="2918.496000" data-stop="2921.820000">like LaTeX. Nobody knows how that is written. You</span> <span class="audio-time caption" data-speaker="Prot" data-start="2921.841000" data-stop="2924.624000">just write it latex, all lowercase, and then expand</span> <span class="audio-time caption" data-speaker="Prot" data-start="2924.664000" data-stop="2927.008000">to whatever it should expand. This sort of thing</span> <span class="audio-time caption" data-speaker="Prot" data-start="2927.068000" data-stop="2929.731000">is very useful. Of course, you can just have</span> <span class="audio-time caption" data-speaker="Prot" data-start="2929.791000" data-stop="2932.795000">some short text which expands into very long</span> <span class="audio-time caption" data-speaker="Prot" data-start="2932.856000" data-stop="2933.196000">text.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2933.547000" data-stop="2935.170000"><strong class="speaker-name">Sacha:</strong>  We should also point out if you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2936.312000" data-stop="2939.358000">type something that is normally an abbreviation</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2939.479000" data-stop="2942.585000">like LaTeX, but in this case you actually want to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2942.625000" data-stop="2949.238000">write the word latex, then how do you do the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2949.298000" data-stop="2951.783000">abbreviation without it being expanded into</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2952.364000" data-stop="2953.446000">whatever that is?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="2953.426000" data-stop="2954.968000"><strong class="speaker-name">Prot:</strong>  Of course you would rather avoid</span> <span class="audio-time caption" data-speaker="Prot" data-start="2955.048000" data-stop="2958.373000">that situation with your abbreviation. It wouldn't</span> <span class="audio-time caption" data-speaker="Prot" data-start="2958.393000" data-stop="2960.616000">be like that, but otherwise you will have to undo.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2960.997000" data-stop="2965.663000">When you do SPC and it expands, you undo.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2965.723000" data-stop="2969.148000">That is a little bit annoying, for sure. But I</span> <span class="audio-time caption" data-speaker="Prot" data-start="2969.188000" data-stop="2971.752000">would say, just make sure to have abbreviations</span> <span class="audio-time caption" data-speaker="Prot" data-start="2971.792000" data-stop="2974.776000">that are not ordinary words.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2975.144000" data-stop="2978.150000">They are a little bit contrived, so you don't get</span> <span class="audio-time caption" data-speaker="Prot" data-start="2978.210000" data-stop="2980.154000">false positives.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2980.775000" data-stop="2983.321000">A good use case here, like what I have in my</span> <span class="audio-time caption" data-speaker="Prot" data-start="2983.361000" data-stop="2985.325000">configuration, like you can have your</span> <span class="audio-time caption" data-speaker="Prot" data-start="2985.385000" data-stop="2989.072000">abbreviations behind a</span> <span class="audio-time caption" data-speaker="Prot" data-start="2989.112000" data-stop="2991.016000">character such as the semicolon.</span> <span class="audio-time caption" data-speaker="Prot" data-start="2992.840000" data-stop="2994.543000">Then of course it's very unlikely that you will</span> <span class="audio-time caption" data-speaker="Prot" data-start="2994.603000" data-stop="2996.427000">have semicolon later.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="2996.000000">49:56</span> <strong>Quoting the next character with C-q</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="2996.812000" data-stop="2998.855000"><strong class="speaker-name">Sacha:</strong>  The other thing that you could</span> <span class="audio-time caption" data-speaker="Sacha" data-start="2998.895000" data-stop="3002.139000">potentially do is use <code>C-q</code> to quote the next</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3002.219000" data-stop="3003.902000">character literally.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3003.922000" data-stop="3007.206000">So here for example, I have <code>ot</code> expand to the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3007.246000" data-stop="3013.174000">current time, but if I say <code>ot</code> <code>C-q</code> SPC, this
helps.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3013.254000" data-stop="3017.540000">And in general, this idea of <code>C-q</code> to quote</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3017.580000" data-stop="3020.103000">the next character is also useful in other places</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3020.164000" data-stop="3022.327000">where you might, for example, need to add a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3022.507000" data-stop="3025.671000">literal new line to a search or something like that,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3025.651000" data-stop="3030.261000">or a literal tab.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3031.000000">50:31</span> <strong>Mapping abbreviations to code</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3031.372000" data-stop="3033.814000"><strong class="speaker-name">Sacha:</strong> The other thing that I want to add to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3033.955000" data-stop="3037.678000">abbreviations here is your abbreviations are not</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3037.758000" data-stop="3038.899000">limited to just text.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3038.979000" data-stop="3042.102000">You can use them to run things, which means you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3042.143000" data-stop="3045.005000">can use them to run things that expand to text,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3045.025000" data-stop="3047.027000">or I think you might even get away with using</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3047.067000" data-stop="3049.370000">them to run commands.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3049.590000" data-stop="3052.893000">So it's pretty limitless.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3053.614000" data-stop="3053.994000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3054.034000" data-stop="3057.077000">Of course, it's how determined you are to write</span> <span class="audio-time caption" data-speaker="Prot" data-start="3057.137000" data-stop="3058.298000">custom code for that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3059.148000" data-stop="3062.652000"><strong class="speaker-name">Sacha:</strong>  Or how resourceful you are in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3062.732000" data-stop="3064.674000">finding other people's custom code that you can</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3064.754000" data-stop="3065.735000">copy, at least.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3067.397000" data-stop="3069.059000">Good motivation to learn Emacs Lisp.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3070.220000" data-stop="3072.743000">I do not remember if Yasnippet is built-in.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3072.843000" data-stop="3073.904000">It feels like it's built-in.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3075.126000" data-stop="3077.929000"><strong class="speaker-name">Prot:</strong>  No, but it's one of those that</span> <span class="audio-time caption" data-speaker="Prot" data-start="3078.429000" data-stop="3079.971000">basically everybody uses.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3079.991000" data-stop="3083.755000">Yasnippet or Tempel.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3084.173000" data-stop="3088.539000"><strong class="speaker-name">Sacha:</strong>  A couple of questions from chat.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3088.579000" data-stop="3090.461000">When highlighting parts of the manual, how are</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3090.501000" data-stop="3091.202000">you doing this?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3091.622000" data-stop="3094.446000">In bookmarks, bookmark-region, using Org Remark,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3094.586000" data-stop="3095.167000">other ways?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3095.948000" data-stop="3100.354000">I was doing this at the playground the other day,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3100.774000" data-stop="3103.998000">so I just had it in my iPad and I had it in one</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3104.038000" data-stop="3105.760000">of those graphical note-taking things and I was</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3105.800000" data-stop="3107.042000">highlighting with the Pencil.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3107.022000" data-stop="3109.566000">But I've heard good things about Org Remark,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3109.587000" data-stop="3111.089000">which is a package.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3111.000000">51:51</span> <strong>Taking notes with org-capture</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3111.249000" data-stop="3113.313000"><strong class="speaker-name">Sacha:</strong> You can also use just <code>org-capture</code> if you’re</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3113.353000" data-stop="3115.297000">reading the manuals from within Emacs, which you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3115.337000" data-stop="3115.657000">can.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3116.118000" data-stop="3119.484000">If you <code>org-capture</code>, you can even select sections</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3119.564000" data-stop="3121.888000">of the manual and it'll automatically save that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3122.008000" data-stop="3124.573000">in the capture template along with a link back to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3124.633000" data-stop="3125.995000">where you were looking.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3126.416000" data-stop="3127.478000">This is great.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3128.000000">52:08</span> <strong>Navigating back to captures or refiles</strong></div><p></p><span class="audio-time caption" data-speaker="Prot" data-start="3128.504000" data-stop="3130.150000"><strong class="speaker-name">Prot:</strong>  Since you mentioned <code>org-capture</code></span> <span class="audio-time caption" data-speaker="Prot" data-start="3130.271000" data-stop="3132.740000">and we talked about bookmarks earlier, when you</span> <span class="audio-time caption" data-speaker="Prot" data-start="3132.800000" data-stop="3136.334000">do <code>org-capture</code> or <code>org-refile</code>, it stores
a</span> <span class="audio-time caption" data-speaker="Prot" data-start="3136.374000" data-stop="3136.876000">bookmark.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3137.056000" data-stop="3139.365000">You can go back to the last capture, the last</span> <span class="audio-time caption" data-speaker="Prot" data-start="3139.446000" data-stop="3139.847000">refile.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3140.418000" data-stop="3142.421000"><strong class="speaker-name">Sacha:</strong>  Yeah, yeah, which is handy.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3142.441000" data-stop="3146.306000">Also, you can use <code>org-refile</code> to navigate your Org
files.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3146.326000" data-stop="3148.989000">In addition to using it to jump to the last</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3149.049000" data-stop="3150.551000">thing that you filed because you were like, "Oh,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3150.571000" data-stop="3151.512000">yeah, wait, I forgot.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3151.833000" data-stop="3153.675000">I want to add more to that note,"</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3153.695000" data-stop="3156.219000">you can also use it to jump to any of your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3156.359000" data-stop="3158.401000">projects, for example, or any of your notes,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3158.862000" data-stop="3161.065000">assuming you’ve set up your <code>org-refile-targets</code></span> <span class="audio-time caption" data-speaker="Sacha" data-start="3161.165000" data-stop="3161.886000">appropriately.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3163.064000" data-stop="3165.046000">Okay, @RandCode has question.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3165.307000" data-stop="3168.431000">Does Emacs have a grammar checker like Harper's LSP?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3168.771000" data-stop="3171.214000">I know there are packages that people can use to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3171.475000" data-stop="3174.018000">work with Harper and other things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3174.839000" data-stop="3176.961000">Do you know of any other built-in things?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3177.242000" data-stop="3178.964000"><strong class="speaker-name">Prot:</strong>  Built-in, it's flyspell, but</span> <span class="audio-time caption" data-speaker="Prot" data-start="3179.004000" data-stop="3179.845000">that's not grammar.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3179.885000" data-stop="3180.806000">That's spelling.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3181.607000" data-stop="3182.568000"><strong class="speaker-name">Sacha:</strong>  Okay, all right.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3182.608000" data-stop="3183.630000"><strong class="speaker-name">Prot:</strong>  I cannot think of something.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3183.650000" data-stop="3185.172000">No, I don't think there is for grammar.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3185.632000" data-stop="3188.876000">So Harper or anything like that would plug into</span> <span class="audio-time caption" data-speaker="Prot" data-start="3188.916000" data-stop="3189.477000">Flymake.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3189.946000" data-stop="3196.023000"><strong class="speaker-name">Sacha:</strong>  @greggr0th has a question.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3196.063000" data-stop="3202.200000">What are your favorite completion plugins?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3202.366000" data-stop="3204.548000"><strong class="speaker-name">Prot:</strong>  Yeah, I think it's really vertico.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3204.628000" data-stop="3207.492000">I prefer it over the built-in options, over</span> <span class="audio-time caption" data-speaker="Prot" data-start="3207.512000" data-stop="3209.594000">icomplete.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3209.774000" data-stop="3213.038000">So it's vertico, and then with that, I would</span> <span class="audio-time caption" data-speaker="Prot" data-start="3213.118000" data-stop="3215.460000">say, at minimum, orderless.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3216.141000" data-stop="3217.823000">So vertico and orderless, at minimum.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3217.863000" data-stop="3219.665000">But then, of course, if you want a little bit</span> <span class="audio-time caption" data-speaker="Prot" data-start="3219.725000" data-stop="3223.589000">more, which is very useful, Marginalia, Consult,</span> <span class="audio-time caption" data-speaker="Prot" data-start="3223.609000" data-stop="3226.773000">Embark, maybe I'm forgetting something, save-hist,</span> <span class="audio-time caption" data-speaker="Prot" data-start="3226.793000" data-stop="3227.353000">it's built-in.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3227.513000" data-stop="3229.015000">But yeah, those, those for sure.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3229.000000">53:49</span> <strong>dabbrev</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3229.383000" data-stop="3232.270000"><strong class="speaker-name">Sacha:</strong>  @hmelman says dabbrev for dynamic</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3232.310000" data-stop="3233.834000">abbreviations is underrated.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3234.135000" data-stop="3235.378000">You don't need to predefine them.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3235.398000" data-stop="3237.623000">You just type the start of a word or symbol and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3237.683000" data-stop="3240.670000">type <code>M-/</code>, and it will search the buffer for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3240.791000" data-stop="3243.878000">something starting with what's on the left side</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3243.938000" data-stop="3245.923000">of your point and then expand it.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3245.903000" data-stop="3248.626000">I can't remember if it's dabbrev or hippie-expand,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3248.647000" data-stop="3250.849000">but you can also set it up so that it can try</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3250.929000" data-stop="3253.913000">words from other buffers or other things that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3253.953000" data-stop="3256.376000">you've got or contacts or whatever.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3256.477000" data-stop="3258.439000">Anyway, so dynamic abbreviations.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3258.559000" data-stop="3261.944000">If you search for dabbrev and if you look also for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3261.984000" data-stop="3265.188000">hippie-expand, you will find lots of things that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3265.228000" data-stop="3268.772000">you can configure to fit your particular workflow.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3269.133000" data-stop="3271.716000">So you can expand abbreviations without having to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3271.776000" data-stop="3272.417000">define them.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3273.258000" data-stop="3273.900000"><strong class="speaker-name">Prot:</strong>  Yeah, yeah, yeah.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3273.940000" data-stop="3274.882000">Super powerful.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3274.902000" data-stop="3275.604000">Super useful.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3275.704000" data-stop="3278.912000">I use it more than tab completion, you know, like</span> <span class="audio-time caption" data-speaker="Prot" data-start="3278.932000" data-stop="3280.496000">with core.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3280.516000" data-stop="3281.920000">I use dabbrev more.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3282.301000" data-stop="3284.185000">It's very nice.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3284.366000" data-stop="3284.466000">Yeah.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3284.000000">54:44</span> <strong>Keyboard macros</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3284.699000" data-stop="3287.362000"><strong class="speaker-name">Sacha:</strong>  Okay, so we've mentioned keyboard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3287.422000" data-stop="3291.006000">macros very briefly, but this is another very</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3291.086000" data-stop="3295.010000">powerful chunk of things that people might not be</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3295.170000" data-stop="3297.632000">used to if they're coming from an editor that is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3297.692000" data-stop="3298.413000">not Emacs.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3299.014000" data-stop="3302.598000">So keyboard macros, what's kind of like the thing</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3302.618000" data-stop="3304.359000">that we can use to explain?</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3304.379000" data-stop="3306.141000">How do we explain it to people who are new to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3306.181000" data-stop="3306.402000">this?</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3307.723000" data-stop="3310.045000"><strong class="speaker-name">Prot:</strong>  In its simplest form, you record</span> <span class="audio-time caption" data-speaker="Prot" data-start="3310.306000" data-stop="3312.508000">what you type and you can play it back in its</span> <span class="audio-time caption" data-speaker="Prot" data-start="3312.548000" data-stop="3313.609000">simplest form.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3313.859000" data-stop="3316.321000">But the thing with Emacs is that you don't just</span> <span class="audio-time caption" data-speaker="Prot" data-start="3316.381000" data-stop="3319.624000">record typing motions, typing actions.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3319.644000" data-stop="3322.246000">You also record all the Emacs motions.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3322.566000" data-stop="3324.608000">You can have a keyboard macro that includes</span> <span class="audio-time caption" data-speaker="Prot" data-start="3324.668000" data-stop="3328.631000">stuff such as move to another window or create a</span> <span class="audio-time caption" data-speaker="Prot" data-start="3328.712000" data-stop="3330.013000">new split or whatever.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3330.053000" data-stop="3332.635000">You can do more advanced things like that.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3333.355000" data-stop="3337.619000">This has very nice qualities to it where it's</span> <span class="audio-time caption" data-speaker="Prot" data-start="3337.659000" data-stop="3340.001000">like, oh, I just want to copy all these symbols</span> <span class="audio-time caption" data-speaker="Prot" data-start="3340.061000" data-stop="3342.423000">and move them to my shell buffer and then I will</span> <span class="audio-time caption" data-speaker="Prot" data-start="3342.463000" data-stop="3343.444000">do something with them,</span> <span class="audio-time caption" data-speaker="Prot" data-start="3343.897000" data-stop="3346.033000">pipe it to something like a program</span> <span class="audio-time caption" data-speaker="Prot" data-start="3346.034000" data-stop="3347.800000">outside of Emacs. So it has</span> <span class="audio-time caption" data-speaker="Prot" data-start="3347.801000" data-stop="3350.000000">a lot of nice applications like that.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3351.187000" data-stop="3355.853000"><strong class="speaker-name">Sacha:</strong>  I think that if people can get the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3355.913000" data-stop="3358.216000">hang of: very carefully set up their</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3358.256000" data-stop="3361.220000">keyboard macro, think what's a series of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3361.280000" data-stop="3364.845000">steps that I can do so that I can do the change</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3364.945000" data-stop="3367.428000">and then move my cursor to the start of where the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3367.488000" data-stop="3368.510000">next change should be...</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3369.110000" data-stop="3372.074000">For example, I'll start the keyboard</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3372.114000" data-stop="3374.818000">macro, I'll delete the word, I'll type in</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3374.898000" data-stop="3378.763000">something new, or maybe I'll paste in a register</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3378.743000" data-stop="3381.461000">I'll use isearch to find the next point at which</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3381.521000" data-stop="3382.729000">I need to do something.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3383.047000" data-stop="3385.930000">If you define your keyboard macros like this,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3385.950000" data-stop="3387.712000">then you're giving yourself the ability to</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3388.212000" data-stop="3390.434000">interactively confirm whether you're still on the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3390.474000" data-stop="3394.258000">right track and then make the change because that</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3394.358000" data-stop="3396.861000">way, it's not just like a search and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3396.881000" data-stop="3398.522000">replace and you're hoping it all works out.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3398.582000" data-stop="3400.264000">Although the recent search and replaces are great</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3400.284000" data-stop="3402.026000">because they show you the changes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3402.046000" data-stop="3403.727000">But for something that's more complex, especially</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3403.747000" data-stop="3405.309000">if you're not used to regular expressions,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3405.669000" data-stop="3407.691000">keyboard macros can help you</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3408.172000" data-stop="3410.674000">interactively do it in small steps.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3411.582000" data-stop="3412.786000"><strong class="speaker-name">Prot:</strong>  Yeah, exactly.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3412.806000" data-stop="3415.435000">Of course, search and replace will be more</span> <span class="audio-time caption" data-speaker="Prot" data-start="3415.555000" data-stop="3418.745000">tricky if you have to go through many files and</span> <span class="audio-time caption" data-speaker="Prot" data-start="3418.786000" data-stop="3420.732000">perform multiple edits in each,</span> <span class="audio-time caption" data-speaker="Prot" data-start="3421.575000" data-stop="3424.063000">because then the concept of regular expressions</span> <span class="audio-time caption" data-speaker="Prot" data-start="3424.143000" data-stop="3424.765000">breaks down.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3425.521000" data-stop="3428.206000">You don't want to think in those terms where it's</span> <span class="audio-time caption" data-speaker="Prot" data-start="3428.266000" data-stop="3430.030000">like, I will have to make a change somewhere</span> <span class="audio-time caption" data-speaker="Prot" data-start="3430.070000" data-stop="3432.053000">towards the top and then somewhere in the middle</span> <span class="audio-time caption" data-speaker="Prot" data-start="3432.133000" data-stop="3434.518000">and then somewhere towards the end. Keyboard</span> <span class="audio-time caption" data-speaker="Prot" data-start="3434.558000" data-stop="3437.464000">macros combined with Dired combined with going to</span> <span class="audio-time caption" data-speaker="Prot" data-start="3437.504000" data-stop="3438.726000">file... Very nice.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3439.527000" data-stop="3442.052000">Just to say another thing about keyboard macros</span> <span class="audio-time caption" data-speaker="Prot" data-start="3442.072000" data-stop="3443.856000">is... Let's say you have written your very nice</span> <span class="audio-time caption" data-speaker="Prot" data-start="3443.896000" data-stop="3446.521000">keyboard macro. You're recording it, and somewhere</span> <span class="audio-time caption" data-speaker="Prot" data-start="3446.761000" data-stop="3448.845000">towards the end, you make a small mistake.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3449.973000" data-stop="3453.626000">Keep going and then <code>C-x C-k C-e</code> to</span> <span class="audio-time caption" data-speaker="Prot" data-start="3453.687000" data-stop="3454.570000">edit your macro.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3455.051000" data-stop="3458.243000">It's a text buffer. You just remove what you</span> <span class="audio-time caption" data-speaker="Prot" data-start="3458.283000" data-stop="3458.785000">don't want.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3459.153000" data-stop="3460.975000"><strong class="speaker-name">Sacha:</strong>  You can save these keyboard macros</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3461.055000" data-stop="3461.515000">as well.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3461.956000" data-stop="3465.499000">You can use them in a future Emacs session or</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3465.539000" data-stop="3468.262000">even turn them into your first Emacs Lisp</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3468.322000" data-stop="3468.842000">function.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3468.983000" data-stop="3471.565000">You can give it a name and you can run it that way.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3472.000000">57:52</span> <strong>Editable grep and occur</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3472.706000" data-stop="3474.868000"><strong class="speaker-name">Sacha:</strong> In the next three minutes before the kiddo runs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3475.068000" data-stop="3477.711000">out for lunch break, I also want to mention,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3477.751000" data-stop="3479.633000">since we talked about making changes in multiple</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3479.673000" data-stop="3484.077000">files, that grep and occur are both editable.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3484.097000" data-stop="3486.279000">You can do your grep and you can search for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3486.319000" data-stop="3487.000000">things.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3486.980000" data-stop="3491.067000">And then you can say <code>C-x C-q</code> which turns it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3491.068000" data-stop="3493.633000">from read-only to something you can change,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3493.634000" data-stop="3495.867000">then you can do your search and replace in that,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3495.868000" data-stop="3498.167000">and you can <code>C-x C-q</code> again</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3498.168000" data-stop="3500.933000">and those changes can get put back</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3500.934000" data-stop="3502.356000">into all those different files.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3503.332000" data-stop="3504.714000"><strong class="speaker-name">Prot:</strong>  It's amazing.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3505.115000" data-stop="3507.900000">On this note, specifically for grep, if you</span> <span class="audio-time caption" data-speaker="Prot" data-start="3508.000000" data-stop="3510.945000">edit many files with the grep edit mode that is</span> <span class="audio-time caption" data-speaker="Prot" data-start="3510.965000" data-stop="3514.210000">built into Emacs 31, it will not save them for you.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3514.230000" data-stop="3517.736000">So <code>C-x s</code>, instead of <code>C-x C-s</code>,</span> <span class="audio-time caption" data-speaker="Prot" data-start="3517.977000" data-stop="3519.940000">allows you to save multiple buffers.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3520.223000" data-stop="3522.988000">And every time, it gives you a prompt and you can</span> <span class="audio-time caption" data-speaker="Prot" data-start="3523.028000" data-stop="3525.533000">type <code>d</code> to see the diff.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3525.553000" data-stop="3527.416000">Like, okay, what exactly did I change?</span> <span class="audio-time caption" data-speaker="Prot" data-start="3527.436000" data-stop="3530.602000">If you have many unsaved files, <code>d</code> to see what</span> <span class="audio-time caption" data-speaker="Prot" data-start="3530.642000" data-stop="3533.507000">you're about to save so you never make any</span> <span class="audio-time caption" data-speaker="Prot" data-start="3533.527000" data-stop="3533.828000">mistakes.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3534.280000" data-stop="3534.861000"><strong class="speaker-name">Sacha:</strong>  Mm-hmm.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3535.381000" data-stop="3539.586000">Taking advantage of these diffing tools is</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3539.646000" data-stop="3540.327000">great also.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3542.310000" data-stop="3544.732000">Even if you're new to Emacs or you don't have a</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3544.793000" data-stop="3546.775000">programming background, if you find yourself</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3546.835000" data-stop="3548.637000">making changes to lots of files, I strongly</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3548.697000" data-stop="3551.461000">recommend learning more about version control</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3551.501000" data-stop="3554.144000">systems like Git and then using something like</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3554.204000" data-stop="3556.086000">Magit or even the built-in VC.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3556.066000" data-stop="3559.756000">If you use VC, you can use it and you have set up</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3559.896000" data-stop="3561.300000">something like a git repository.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3566.060000" data-stop="3566.354000">You can use `C-x v =` to diff to see</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3566.374000" data-stop="3569.022000">the changes between your file and the previous</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3569.463000" data-stop="3571.408000">thing that you had saved.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3571.388000" data-stop="3574.573000">Which makes sense so that you can see, okay,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3574.653000" data-stop="3575.414000">these are the changes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3575.875000" data-stop="3578.118000">Also it means that you can experiment with</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3578.178000" data-stop="3579.380000">different changes.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3579.400000" data-stop="3582.105000">You can experiment with different ways of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3582.185000" data-stop="3584.288000">writing a paragraph or whatever, and you know</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3584.348000" data-stop="3586.591000">that all of your previous versions are saved and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3586.632000" data-stop="3589.195000">you don't have "really, really final</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3589.276000" data-stop="3590.217000">version two."</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3591.239000" data-stop="3594.584000">You don't clutter your directory with a lot of</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3594.804000" data-stop="3596.046000">copies of the same file.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3597.612000" data-stop="3599.717000"><strong class="speaker-name">Prot:</strong>  But even if you don't have any of</span> <span class="audio-time caption" data-speaker="Prot" data-start="3599.737000" data-stop="3603.064000">the version control system set up, a very simple</span> <span class="audio-time caption" data-speaker="Prot" data-start="3603.125000" data-stop="3605.410000">thing is <code>diff-buffer-with-file</code>.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3605.971000" data-stop="3608.958000">So you have a file you are working on and now you</span> <span class="audio-time caption" data-speaker="Prot" data-start="3608.998000" data-stop="3609.740000">make some edits.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3610.381000" data-stop="3613.107000">The buffer, what is in memory, is different</span> <span class="audio-time caption" data-speaker="Prot" data-start="3613.147000" data-stop="3614.490000">than what is on disk.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3614.510000" data-stop="3616.515000">You can compare the difference between the two.</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3618.284000" data-stop="3620.507000"><strong class="speaker-name">Sacha:</strong>  Okay, I'm going to try to wrap up</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3620.547000" data-stop="3622.830000">here because the kid is going to run and say hi</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3622.970000" data-stop="3623.431000">very soon.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3623.812000" data-stop="3625.554000">Thank you so much for joining me.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3625.674000" data-stop="3627.697000">Of course, there's a lot more to talk about the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3627.717000" data-stop="3630.040000">Emacs built-ins, but I hope we've given a quick</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3630.260000" data-stop="3632.563000">tour of some of the things that are definitely</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3632.604000" data-stop="3635.367000">worth learning more about and the situations for</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3635.427000" data-stop="3637.090000">which they are absurdly useful.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3637.731000" data-stop="3639.954000">Thanks to everyone in chat also for coming and</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3639.994000" data-stop="3640.594000">hanging out.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3640.695000" data-stop="3644.620000">I will post the show notes eventually and get the</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3644.660000" data-stop="3645.461000">transcripts sorted out.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3645.541000" data-stop="3646.182000">Thanks.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3647.022000" data-stop="3647.625000"><strong class="speaker-name">Prot:</strong>  You're welcome.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3647.645000" data-stop="3648.248000">You're welcome.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3649.654000" data-stop="3650.156000">Take care.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3650.337000" data-stop="3653.371000">Of course, good luck with everything.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3654.577000" data-stop="3656.425000">Didn't she show up here?</span> <p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3658.244000" data-stop="3660.047000"><strong class="speaker-name">Sacha:</strong>  If she shows up, she will.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3660.367000" data-stop="3661.028000">It's inevitable.</span> <p></p><div class="transcript-heading"><span class="audio-time" data-start="3661.000000">1:01:01</span> <strong>Emacs Carnival June 2026: Underappreciated built-ins</strong></div><p></p><span class="audio-time caption" data-speaker="Sacha" data-start="3661.709000" data-stop="3665.676000"><strong class="speaker-name">Sacha:</strong> Also, if folks are interested, even if you've</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3665.716000" data-stop="3669.602000">never blogged before, the Emacs carnival theme</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3669.722000" data-stop="3673.167000">for June 2026 is "Underappreciated Emacs</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3673.207000" data-stop="3674.910000">built-ins," which is why we had this conversation.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3675.251000" data-stop="3676.973000">Feel free to write about something and either</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3677.294000" data-stop="3678.014000">send [Ross and] me a link,</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3678.015000" data-stop="3679.137000">or you can even send me the post</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3679.197000" data-stop="3681.480000">and I'll post it on my blog with your name on it</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3681.540000" data-stop="3683.724000">and other things like that so you can share your</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3683.764000" data-stop="3685.787000">appreciation for these built-ins.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3685.936000" data-stop="3686.377000">All right.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3686.618000" data-stop="3688.103000">Okay, I hear movement.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3688.123000" data-stop="3688.625000">I gotta go.</span> <span class="audio-time caption" data-speaker="Sacha" data-start="3688.866000" data-stop="3689.207000">All right.</span> <p></p><span class="audio-time caption" data-speaker="Prot" data-start="3689.267000" data-stop="3692.077000"><strong class="speaker-name">Prot:</strong>  Take care, Sacha.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3692.097000" data-stop="3692.819000">Take care, folks.</span> <span class="audio-time caption" data-speaker="Prot" data-start="3692.859000" data-stop="3693.180000">Goodbye.</span></div>
<p></p>


<a name="end-yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-transcript"></a></details>
</div>
</div>
<div id="outline-container-yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-chat" class="outline-3">
<h3 id="yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-chat"><a href="https://sachachua.com/blog/feed/index.xml#yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-chat">Chat</a></h3>
<div class="outline-text-3" id="text-yay-emacs-33-sacha-and-prot-talk-emacs-built-ins-chat">
<ul class="org-ul">
<li><span class="nick">protesilaos:</span> ​Looking forward to this! Talk to you soon.</li>
<li><span class="nick">gr1maldi:</span> ​​Yo, and stuff.🙂</li>
<li><span class="nick">charliemcmackin4859:</span> ​​I just checked, there are 11 items in my kill-ring at the moment. Some of them are several lines long</li>
<li><span class="nick">charliemcmackin4859:</span> ​narrowing to defun feels easier than trying to mark the function before search-and-replacing&hellip; I love narrowing</li>
<li><span class="nick">charliemcmackin4859:</span> ​&hellip;and I love that you can make those marking tricks part of a keyboard macro</li>
<li><span class="nick">hmelman:</span> ​​both local and global marks are useful to navigate through</li>
<li><span class="nick">pratikmishra4073:</span> ​​just tried indirect buffer. didn't know it existed</li>
<li><span class="nick">hmelman:</span> ​and the fact that things like xref or imenu push the last location before jumping, means popping the mark is an easy way to go back from various navigation mechanisms</li>
<li><span class="nick">matthewjorgensen9115:</span> ​​thinking about isearrch wrap around search losing your place. either have scrroll to posisiotn to know the direction and how far it was away, or have mode line flash to say it moved from last to first</li>
<li><span class="nick">hmelman:</span> ​Don't need flymake for that just M-g M-n (next-error) which works with compile, grep, occur (I think).</li>
<li><span class="nick">hmelman:</span> ​One I keep forgetting about, you mentioned using sexp commands in other languages, works in prose too. C-M-u (backwards-up-list) moves you out of a "quote" or (paren) and then C-M-e to the end of it.</li>
<li><span class="nick">matthewjorgensen9115:</span> ​​follow mode alllows the smae file with multiple frames, like a book. follow mode can work with 2 3 or more windows</li>
<li><span class="nick">matthewjorgensen9115:</span> ​also works with centered cursor mode which will keep the cusor possion in the middle of the frame</li>
<li><span class="nick">RandCode:</span> ​​Damn I am late, hello everyone! 🙂</li>
<li><span class="nick">matthewjorgensen9115:</span> ​when highlighting parts of the manual how are you doing this? in bookmarks, bookmark region, using org-remark? other ways?</li>
<li><span class="nick">RandCode:</span> ​​Does emacs have a grammar checker like harper's lsp?</li>
<li><span class="nick">greggr0th:</span> ​​What are your favorite completion plugins?</li>
<li><span class="nick">RandCode:</span> ​​Also, looking fresh Prot ;)</li>
<li><span class="nick">protesilaos:</span> ​​Thanks!</li>
<li><span class="nick">hmelman:</span> ​dabbrev is underrated. You don't need to pre-define them, just type the start of a word/symbol and type M-/ and it will search the buffer for something starting with what's left of point and expand it</li>
<li><span class="nick">RandCode:</span> ​There is so much to learn that I feel like I have been missing out on all of emacs somehow lol</li>
<li><span class="nick">RandCode:</span> ​Since you mentioned built-in completion framewworks, how does the built-in (vertical) completions compare to corfu btw?</li>
<li><span class="nick">charliemcmackin4859:</span> ​not grammar, but if you have a dictionary server running (like dicod on linux) emacs can be made to communicate with it to give definitions at point</li>
<li><span class="nick">RandCode:</span> ​Ohh, that is a cool! ^</li>
<li><span class="nick">matthewjorgensen9115:</span> ​​virtico multiform mode allows custom settings command, for example for files I use grid and alphabetical, but vertico recommendations normally. This allows more value of completion knowledge</li>
<li><span class="nick">RandCode:</span> ​Thank you so mcuh for this wonderful stream everyone!!!</li>
</ul>
</div>
</div>
<div><a href="https://sachachua.com/blog/2026/06/june-11-sacha-and-prot-talk-emacs-built-ins/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%2F06%2Fjune-11-sacha-and-prot-talk-emacs-built-ins%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>2026-06-08 Emacs news</title>
		<link>https://sachachua.com/blog/2026/06/2026-06-08-emacs-news/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Mon, 08 Jun 2026 18:36:11 GMT</pubDate>
    <category>emacs</category>
<category>emacs-news</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/06/2026-06-08-emacs-news/</guid>
		<description><![CDATA[<p>
It's <a href="https://rossabaker.com/blog/underappreciated-emacs-built-ins/">Emacs Built-ins appreciation month</a>! I'm coming to appreciate the menu bar more. What built-ins do you appreciate? Write about it and <a href="https://rossabaker.com/blog/underappreciated-emacs-built-ins/">send Ross a link</a>!
</p>

<ul class="org-ul">
<li>Emacs updates:
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2026-06/msg00118.html">Emacs 31.0.90 pretest is available</a> (<a href="https://www.reddit.com/r/emacs/comments/1tycwh7/emacs_31090_pretest_released_speed_boosts_ui/">Reddit</a>, <a href="https://www.linuxcompatible.org/story/emacs-31090-pretest-released-speed-boosts-ui-tweaks-bug-fixes/">Linux Compatible</a>, <a href="https://irreal.org/blog/?p=13858">Irreal</a>)</li>
</ul></li>
<li>Upcoming events (<a href="https://emacslife.com/calendar/emacs-calendar.ics">iCal file</a>, <a href="https://emacslife.com/calendar/">Org</a>):
<ul class="org-ul">
<li>Emacs Berlin: In-Person-Only Emacs-Berlin Stammtisch <a href="https://emacs-berlin.org/">https://emacs-berlin.org/</a> Tue Jun 9 1900 Europe/Berlin</li>
<li>OrgMeetup (virtual) <a href="https://orgmode.org/worg/orgmeetup.html">https://orgmode.org/worg/orgmeetup.html</a> Wed Jun 10 0900 America/Vancouver - 1100 America/Chicago - 1200 America/Toronto - 1600 Etc/GMT - 1800 Europe/Berlin - 2130 Asia/Kolkata &ndash; Thu Jun 11 0000 Asia/Singapore</li>
<li>Atelier Emacs Montpellier (in person) <a href="https://lebib.org/date/atelier-emacs">https://lebib.org/date/atelier-emacs</a> Fri Jun 12 1800 Europe/Paris</li>
<li>M-x Research: TBA <a href="https://m-x-research.github.io/">https://m-x-research.github.io/</a> Wed Jun 17 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1500 Etc/GMT - 1700 Europe/Berlin - 2030 Asia/Kolkata - 2300 Asia/Singapore</li>
</ul></li>
<li>Beginner:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=diPparUrHGw">How to Install Emacs on a Chromebook in 2026</a> (07:15)</li>
<li><a href="https://www.youtube.com/watch?v=CVtYtcFvutw">How to Setup Emacs on a Chromebook Without Elisp in 2026</a> (10:37)</li>
</ul></li>
<li>Emacs configuration:
<ul class="org-ul">
<li><a href="https://wiki.plexwave.org/useful-emacs-key-bindings">Useful Emacs key bindings</a> (<a href="https://gts.plexwave.org/@spnw/statuses/01KT4TKGRQ2VZ62CD1N9APSG20">@spnw@plexwave.org</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1tzo8jz/this_is_my_best_emacs_function_written_in_my/">function to list bindings</a></li>
<li><a href="https://ray-on-emacs.blogspot.com/2026/06/emacs-and-numeric-keypad.html">Raymond Zeitler: Emacs and the Numeric Keypad</a></li>
<li><a href="https://mathstodon.xyz/@oantolin/116698855002229972">new embark-automatic-prefix-help-mode (@oantolin@mathstodon.xyz)</a></li>
<li><a href="https://www.youtube.com/watch?v=ZCELm1zUcH0">How I structure my Emacs init.el file</a> (27:05, <a href="https://github.com/maxfriis/my-emacs-config">GitHub</a>)</li>
<li><a href="https://github.com/jamescherti/minimal-emacs.d">minimal-emacs.d: A Customizable init.el and early-init.el for Optimized Startup and Better Emacs Defaults [Release 1.5.0]​</a> (<a href="https://www.reddit.com/r/emacs/comments/1tuowci/minimalemacsd_a_customizable_initel_and/">Reddit</a>)</li>
<li><a href="https://github.com/scovl/dotfiles/tree/main/OpenBSD/.emacs.d">dotfiles/OpenBSD/.emacs.d at main · scovl/dotfiles · GitHub</a> (<a href="https://hachyderm.io/@lobocode/116677349851718741">@lobocode@hachyderm.io</a>)</li>
</ul></li>
<li>Emacs Lisp:
<ul class="org-ul">
<li><a href="https://github.com/k3jph/stops-el">k3jph/stops-el: stops: Guards in Emacs Lisp · GitHub</a> (<a href="https://mastodon.social/@k3jph/116693120049548169">@k3jph</a>)</li>
<li><a href="https://codeberg.org/imarko/vared.el">imarko/vared.el: Emacs command for interactively editing a variable - Codeberg.org</a> (<a href="https://fosstodon.org/@zrzz/116711371610663138">@zrzz@fosstodon.org</a>)</li>
</ul></li>
<li>Appearance:
<ul class="org-ul">
<li><a href="https://github.com/jamescherti/vim-tab-bar.el">vim-tab-bar: A Vim inspired Emacs tab-bar that adapts to any Emacs theme [Release 1.1.5]​</a> (<a href="https://www.reddit.com/r/emacs/comments/1tu64xu/vimtabbar_a_vim_inspired_emacs_tabbar_that_adapts/">Reddit</a>)</li>
<li><a href="https://www.chiply.dev/post-svg-line">svg-line: Better Status Bars for Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1u069gm/svgline_better_status_bars_for_emacs/">Reddit</a>, <a href="https://lobste.rs/s/bqjxzj/svg_line_better_status_bars_for_emacs">lobste.rs</a>)</li>
<li><a href="https://ray-on-emacs.blogspot.com/2026/06/change-emacs-cursor-to-indicate.html">Raymond Zeitler: Change Emacs Cursor to Indicate Overwrite Mode</a></li>
<li><a href="https://source.cipherbliss.com/tykayn/emacs-theming">tykayn/emacs-theming</a> (<a href="https://mastodon.cipherbliss.com/@tykayn/116697952623553128">@tykayn@mastodon.cipherbliss.com</a>)</li>
<li><a href="https://github.com/lucasobx/pixel-themes">Emacs themes inspired by pixel art palettes</a> (<a href="https://www.reddit.com/r/emacs/comments/1tx56oj/emacs_themes_inspired_by_pixel_art_palettes/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=FSdPbKTBWaQ">How to Change Themes in Emacs</a> (01:31)</li>
<li><a href="https://www.youtube.com/watch?v=7Gz-FOq9AIs">How to Inhibit the Welcome Screen in Emacs</a> (01:12)</li>
<li><a href="https://www.youtube.com/watch?v=Cr9IHzj_APQ">How to Maximize Emacs' Screen Upon Startup</a> (01:24)</li>
<li><a href="https://www.youtube.com/watch?v=Rsgg-uVJlIw">How to Hide the Tool Bar, Scroll Bar, and Menu Bar in Emacs</a> (02:00)</li>
<li><a href="https://www.youtube.com/watch?v=XTgIJUwmz0Q">Nicolas Rougier's Talk at 39C3 - The art of text (rendering)</a> (<a href="https://www.reddit.com/r/emacs/comments/1txnsrr/nicolas_rougiers_talk_at_39c3_the_art_of_text/">Reddit</a>) see discussion for more thoughts on SVG in Emacs</li>
</ul></li>
<li>Navigation:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1tu9wvg/post_a_solution_embarkactonlastmessage/">Post a solution: embark-act-on-last-message</a></li>
<li><a href="https://github.com/vmargb/project-x">Project-x revived with Emacs 30+ support!</a> (<a href="https://www.reddit.com/r/emacs/comments/1tylkdz/projectx_revived_with_emacs_30_support/">Reddit</a>) - session persistence</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1txrf6o/little_llm_helper_function_for_copying_fileline/">Little LLM helper function for copying file:line coordinates</a></li>
<li><a href="https://github.com/jamescherti/kirigami.el">kirigami: A unified Emacs method to fold and unfold text in Emacs: outline, outline-indent, org-mode, markdown-mode, vdiff, hideshow, treesit-fold&hellip; [Release 1.1.2]​</a> (<a href="https://www.reddit.com/r/emacs/comments/1tup3tb/kirigami_a_unified_emacs_method_to_fold_and/">Reddit</a>)</li>
</ul></li>
<li>Writing:
<ul class="org-ul">
<li><a href="https://github.com/mmarshall540/electric-sentence">mmarshall540/electric-sentence: Automatically add the extra space between sentences in Emacs. · GitHub</a> (<a href="https://www.reddit.com/r/emacs/comments/1tynlmb/wrote_a_package_to_add_the_2nd_space_between/">Reddit</a>)</li>
<li><a href="https://github.com/jamescherti/quick-sdcv.el">quick-sdcv: Emacs offline dictionary using 'sdcv' [Release 1.0.5]​</a> (<a href="https://www.reddit.com/r/emacs/comments/1tu6u91/quicksdcv_emacs_offline_dictionary_using_sdcv/">Reddit</a>, <a href="https://irreal.org/blog/?p=13848">Irreal</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1tvrwet/notes_linking_and_tagging_systems_in_emacs/">Notes, Linking and Tagging systems in Emacs</a></li>
<li><a href="https://mahmoodsh.com/blk.html">blk</a>: creating and navigating titles of text files, linking between them</li>
<li><a href="https://blog.davep.org/2026/06/05/blogmore-el-v4-6-0.html">Dave Pearson: blogmore.el v4.6.0</a> - show toc, show toc inline</li>
</ul></li>
<li>Org Mode:
<ul class="org-ul">
<li><a href="https://bicycleforyourmind.com/much-ado-about-emacs-014">Much Ado About Emacs 014: Org-Mode and the Capture System</a>, creating headings at different levels, and changing bindings</li>
<li><a href="https://taonaw.com/2026/06/03/correcting-photo-orientation-for-orgmode.html">TAONAW - Emacs and Org Mode: Correcting photo orientation for org-mode in Linux</a> (<a href="https://irreal.org/blog/?p=13860">Irreal</a>)</li>
<li><a href="https://citum.org/news/citing-with-citum-in-emacs-org-mode.html">Citing with Citum in Emacs org-mode | News | Citum</a> (<a href="https://mas.to/@bdarcus/116677048360094778">@bdarcus@mas.to</a>)</li>
<li><a href="https://eugene-andrienko.com/it/2024/12/01/emacs-plugin-jekyll-blog.html">How I wrote an Emacs plugin to build my blog</a> (<a href="https://mastodon.bsd.cafe/@evgandr/116687815479622870">@evgandr@bsd.cafe</a>)</li>
<li><a href="https://thecloudlet.github.io/technical/emacs/org-zola-workflow/">Migrating a Zola blog from Markdown to Org-mode — with a lint/export/check pipeline to keep them in sync | The Cloudlet</a></li>
<li>Org development: <a href="https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/etc/ORG-NEWS?id=3ea1682731fa061115bc690e76ce7d1d2955f810">Generate images in TOC for HTML export</a></li>
</ul></li>
<li>Completion:
<ul class="org-ul">
<li><a href="https://www.chiply.dev/post-incremental-suggesting-read">Beyond ICR: Incremental 'Suggesting' Read in Emacs</a> (<a href="https://www.youtube.com/watch?v=UnAavHqekp0">YouTube</a> 20:10, <a href="https://www.reddit.com/r/emacs/comments/1tvjp8l/beyond_icr_incremental_suggesting_read_in_emacs/">Reddit</a>, <a href="https://fosstodon.org/@chiply/116685381663629482">@chiply@fosstodon.org</a>)</li>
</ul></li>
<li>Coding:
<ul class="org-ul">
<li><a href="https://github.com/rschmukler/magit-difftastic">Introducing magit-difftastic: integrate difftastic into magit</a> (<a href="https://www.reddit.com/r/emacs/comments/1twq1bg/introducing_magitdifftastic_integrate_difftastic/">Reddit</a>)</li>
<li><a href="https://github.com/phye/inline-review">inline-review: review merge/pull requests directly within emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1ttw2qg/inlinereview_review_mergepull_requests_directly/">Reddit</a>)</li>
<li><a href="https://www.alcarney.me/blog/2026/alc-jj-log-view-mode/">Building alc-jj-log-view-mode — Alex Carney</a> (<a href="https://mastodon.social/@alcarney/116711382373829868">@alcarney</a>)</li>
<li><a href="https://wassimans.com/blog/building-ios-apps-with-doom-emacs/">Building IOS Apps With Doom Emacs | Wassim Mansouri</a> (<a href="https://news.ycombinator.com/item?id=48388710">HN</a>)</li>
<li><a href="https://www.youtube.com/watch?v=thPsF9C2b10">CEDET for  Plan 9 coding</a> (01:14)</li>
<li><a href="https://oylenshpeegul.gitlab.io/blog/posts/20260601/">Tim Heaney: Ziglings</a></li>
</ul></li>
<li>Shells:
<ul class="org-ul">
<li><a href="https://www.alcarney.me/blog/2026/eshell-integration/">A Simple jj Integration for eshell — Alex Carney</a> (<a href="https://mastodon.social/@alcarney/116703207672988666">@alcarney</a>)</li>
<li><a href="https://ray-on-emacs.blogspot.com/2026/06/exeln-execute-line.html">Raymond Zeitler: exeln: EXEcute LiNe</a>
<ul class="org-ul">
<li><a href="https://ray-on-emacs.blogspot.com/2026/06/follow-on-to-exeln.html">Follow-on to exeln</a></li>
</ul></li>
</ul></li>
<li>Web:
<ul class="org-ul">
<li><a href="https://irreal.org/blog/?p=13846">Irreal: My Growing Appreciation For EWW</a></li>
</ul></li>
<li>Mail, news, and chat:
<ul class="org-ul">
<li><a href="https://ashishpanigrahi.com/blog/o365-offline-email/">Setting up offline email for Microsoft O365 with notmuch and emacs | Ashish Panigrahi</a> (<a href="https://ioc.exchange/@paniash/116711092886642906">@paniash@ioc.exchange</a>)</li>
<li><a href="https://lars.ingebrigtsen.no/2026/06/05/super-simple-spam-splitting-for-gnus/">Lars Ingebrigtsen: Super Simple Spam Splitting for Gnus</a></li>
<li><a href="https://github.com/emacs-elfeed/elfeed/blob/main/NEWS.org#version-400-2026-06-06">New Elfeed 4.0.0 release</a> (<a href="https://irreal.org/blog/?p=13862">Irreal</a>, <a href="https://news.ycombinator.com/item?id=48428652">HN</a>)</li>
<li><a href="https://en.andros.dev/blog/1a6f3018/chatting-via-meshtastic-in-emacs/">Chatting via Meshtastic in Emacs | Andros Fenollosa</a></li>
</ul></li>
<li>Multimedia:
<ul class="org-ul">
<li><a href="https://mbork.pl/2026-06-06_Copying_images_in_Emacs">Marcin Borkowski: Copying images in Emacs</a></li>
<li><a href="https://www.youtube.com/watch?v=iUrTC4PrBpM">Kokoro-onnx with Cuda for text to speech with Emacs</a> (01:26:56)</li>
</ul></li>
<li>Fun:
<ul class="org-ul">
<li><a href="https://github.com/modeverv/wasmacs">I ported GNU Emacs 30.2 to the browser with WebAssembly</a> (<a href="https://www.reddit.com/r/emacs/comments/1tzy72g/i_ported_gnu_emacs_302_to_the_browser_with/">Reddit</a>)</li>
<li><a href="https://ianyepan.github.io/posts/emacs-in-pop-culture/">Emacs Appearance in Pop Culture</a> (<a href="https://www.reddit.com/r/emacs/comments/1u02d0v/emacs_appearance_in_pop_culture/">Reddit</a>, <a href="https://news.ycombinator.com/item?id=48474274">HN</a>, <a href="https://irreal.org/blog/?p=13866">Irreal</a>)</li>
</ul></li>
<li>AI:
<ul class="org-ul">
<li><a href="https://kevinlynagh.com/newsletter/2026_05_difftron/">Structural diffing in Emacs; deterministic agent harnesses</a> (<a href="https://github.com/lynaghk/difftron/">GitHub</a>)</li>
<li><a href="https://github.com/ananthakumaran/pi.el">Emacs client for Pi Coding Agent</a> (<a href="https://www.reddit.com/r/emacs/comments/1tz40nr/emacs_client_for_pi_coding_agent/">Reddit</a>)</li>
<li><a href="https://github.com/jaketothepast/codetutor">jaketothepast/codetutor: An AI Pair Programmer, that teaches you to code as you write, for Emacs · GitHub</a> (<a href="https://news.ycombinator.com/item?id=48449430">HN</a>)</li>
</ul></li>
<li>Community:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1tueedh/fortnightly_tips_tricks_and_questions_20260602/">Fortnightly Tips, Tricks, and Questions — 2026-06-02 / week 22</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1tudad3/learning_emacs_with_progressive_vision_loss/">Learning Emacs with Progressive Vision Loss</a></li>
<li><a href="https://kelar.org/~bandali/news/fsa-202605.html">Amin Bandali: Free software activities in May 2026</a></li>
<li><a href="https://sachachua.com/blog/2026/06/june-4-emacs-chat-with-ben-zanin-gnomon-mastodon-social/">Emacs Chat 25: Ben Zanin (@gnomon@mastodon.social)</a> (<a href="https://www.youtube.com/watch?v=ax4f5uaOHA8">YouTube</a> 59:30)</li>
<li><a href="https://sachachua.com/blog/2026/05/emacs-carnival-may-2026-may-i-recommend/">Sacha Chua: Emacs Carnival May 2026 wrap-up: "May I recommend&hellip;"</a></li>
<li><a href="https://sachachua.com/blog/2026/06/transcript-of-chat-with-matei-candea-about-emacs-and-ai/">Sacha Chua: Transcript of chat with Matei Candea about Emacs and AI</a></li>
<li><a href="https://www.youtube.com/watch?v=UqashZncNj4">This perfect text editor doesn't exist</a> (15:57)</li>
<li><a href="https://linuxblog.io/teco-neovim-text-editing-unix-linux/">From TECO to Neovim: 50 Years of Text Editing on Unix and Linux</a> (<a href="https://www.reddit.com/r/emacs/comments/1tzo58i/from_teco_to_neovim_50_years_of_text_editing_on/">Reddit</a>)</li>
<li><a href="https://www.swi-prolog.org/PceEmacs.md">PceEmacs is an Emacs written in Prolog instead of Lisp! It also seems to support LSP</a> (<a href="https://www.reddit.com/r/emacs/comments/1tvn264/pceemacs_is_an_emacs_written_in_prolog_instead_of/">Reddit</a>)</li>
</ul></li>
<li><a href="https://rossabaker.com/blog/underappreciated-emacs-built-ins/">Emacs Carnival: Underappreciated Emacs Builtins</a>:
<ul class="org-ul">
<li><a href="https://www.homepages.ucl.ac.uk/~ucecesf/blog/20260602.html">Emacs carnival: rec mode, an all-text database system</a> (<a href="https://fediscience.org/@ericsfraga/116681034174534204">@ericsfraga@fediscience.org</a>)</li>
<li><a href="https://www.cyan.sh/blog/posts/radical-builtins.html">Jakub Nowak: Radical Builtins</a></li>
<li><a href="https://wiki.plexwave.org/emacs-dwim-case-commands">Emacs DWIM case commands</a> by spnw</li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="https://github.com/ErikPrantare/phony.el">phony.el: Define voice commands in Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1tubei6/phonyel_define_voice_commands_in_emacs/">Reddit</a>)</li>
<li><a href="https://bicycleforyourmind.com/much_ado_about_emacs_013">Bicycle for Your Mind: Much Ado About Emacs 013</a> - anddo.el (todos), substitute</li>
<li><a href="https://lars.ingebrigtsen.no/2026/06/03/todo-lists-and-procrastination/">Lars Ingebrigtsen: Todo Lists and Procrastination</a></li>
<li><a href="https://github.com/jamescherti/inhibit-mouse.el">jamescherti/inhibit-mouse.el 1.0.4</a> (<a href="https://www.reddit.com/r/emacs/comments/1tvwk7l/inhibitmouse_disable_the_mouse_in_emacs_release/">Reddit</a>, <a href="https://irreal.org/blog/?p=13853">Irreal</a>)</li>
<li><a href="http://yummymelon.com/devnull/revisiting-emacs-keyboard-macros-with-a-mouse.html">Charles Choi: Revisiting Emacs Keyboard Macros with a Mouse</a></li>
<li><a href="https://sachachua.com/blog/2026/06/emacs-pdf-view-replace-current-page-with-file-using-pdftk/">Sacha Chua: Emacs PDF View: Replace current page with file using PDFtk</a></li>
<li><a href="https://www.yakshaving.co.uk/posts/conquering-the-emacs-daemon/">conquering the Emacs daemon - Blog In Isolation</a> (<a href="https://mastodon.me.uk/@andyc/116697585241088161">@andyc@mastodon.me.uk</a>)</li>
<li><a href="https://github.com/tanrax/emacs-gpu">tanrax/emacs-gpu: GNU Emacs with a GPU-accelerated display backend · GitHub</a> (<a href="https://activity.andros.dev/@andros/statuses/01KT8T7D12K9A22FCZX0NXDV43">@andros@activity.andros.dev</a>)
<ul class="org-ul">
<li><a href="https://yhetil.org/emacs-devel/0CAC2512-C560-4D1C-964B-46BBEF5228BF@subvertising.org/">emacs-devel re: overlap with Canvas patch</a>,<a href="https://yhetil.org/emacs-devel/571c261a-a4fc-4d7f-9ccb-afc6cb530547@gutov.dev/"> can't accept LLM-generated contributions</a></li>
</ul></li>
<li><a href="https://fedora-sysexts.github.io/fedora/emacs/">emacs | extensions.fcos.fr (Fedora)</a> (<a href="https://mastodon.social/@alcarney/116687391476450331">@alcarney</a>) - emacs sysext for Fedora image-based systems</li>
<li><a href="https://github.com/nohzafk/emacs-workspace-hud">I built a floating HUD for Emacs, rendered in Rust egui via WASM</a> (<a href="https://www.reddit.com/r/emacs/comments/1tw7u87/i_built_a_floating_hud_for_emacs_rendered_in_rust/">Reddit</a>) macOS</li>
<li><a href="http://yummymelon.com/devnull/opening-macos-finder-folders-in-emacs-with-scrim.html">Charles Choi: Opening macOS Finder Folders in Emacs with Scrim</a> (<a href="https://sfba.social/@kickingvegas/116678063857985054">@kickingvegas@sfba.social</a>)</li>
<li><a href="https://unixbhaskar.wordpress.com/2026/06/03/damn-emacs-regex-problem/">Damn! Emacs Regex problem | Unixbhaskar's Blog</a> (<a href="https://fosstodon.org/@unixbhaskar/116682966197832720">@unixbhaskar@fosstodon.org</a>)</li>
<li><a href="https://www.youtube.com/watch?v=omoGBS3rzEw">самый хайповый гайд на Emacs</a> (15:40)</li>
</ul></li>
<li>Emacs development:
<ul class="org-ul">
<li>emacs-devel: <a href="https://yhetil.org/emacs-devel/m2mrxes3bs.fsf@gmail.com/">markdown-ts-mode and markdown-ts-view-mode demoted on the release branch</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=1d91d9b717df1781c07d28f46af4ac2af19c16b4">project-vc-dir: Use truenames</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=66e02b3123a2f6845b1ec6e192f3820bb74d4a7b">(Fmarkers_in): New function (bug#81153)</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=2db5a145acbbe84042128806d8b2e333495cf70e">Support Ansible messages in compilation-mode</a></li>
</ul></li>
<li>New packages:
<ul class="org-ul">
<li><a target="_blank" href="https://melpa.org/#/bluesky">bluesky</a>: A Bluesky client (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/cui">cui</a>: AI-LLM chat blocks for org-mode (MELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/desert-theme">desert-theme</a>: A warm earthy port of Vim's desert theme (MELPA)</li>
<li><a target="_blank" href="https://elpa.nongnu.org/nongnu/flamegraph.html">flamegraph</a>: Flame graphs for Emacs's native profiler and folded stacks files (NonGNU ELPA)</li>
<li><a target="_blank" href="https://melpa.org/#/sleek-modeline">sleek-modeline</a>: Minimal and elegant modeline (MELPA)</li>
</ul></li>
</ul>

<p>
Links from <a href="https://www.reddit.com/r/emacs">reddit.com/r/emacs</a>, <a href="https://www.reddit.com/r/orgmode">r/orgmode</a>, <a href="https://www.reddit.com/r/spacemacs">r/spacemacs</a>, <a href="https://mastodon.social/tags/emacs">Mastodon #emacs</a>, <a href="https://bsky.app/hashtag/emacs">Bluesky #emacs</a>, <a href="https://hn.algolia.com/?query=emacs&amp;sort=byDate&amp;prefix&amp;page=0&amp;dateRange=all&amp;type=story">Hacker News</a>, <a href="https://lobste.rs/search?q=emacs&amp;what=stories&amp;order=newest">lobste.rs</a>, <a href="https://programming.dev/c/emacs?dataType=Post&amp;page=1&amp;sort=New">programming.dev</a>, <a href="https://lemmy.world/c/emacs">lemmy.world</a>, <a href="https://lemmy.ml/c/emacs?dataType=Post&amp;page=1&amp;sort=New">lemmy.ml</a>, <a href="https://planet.emacslife.com">planet.emacslife.com</a>, <a href="https://www.youtube.com/playlist?list=PL4th0AZixyREOtvxDpdxC9oMuX7Ar7Sdt">YouTube</a>, <a href="http://git.savannah.gnu.org/cgit/emacs.git/log/etc/NEWS">the Emacs NEWS file</a>, <a href="https://emacslife.com/calendar/">Emacs Calendar</a>, and <a href="https://lists.gnu.org/archive/html/emacs-devel/2026-06">emacs-devel</a>. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at <a href="mailto:sacha@sachachua.com">sacha@sachachua.com</a>. Thank you!
</p>
<div><a href="https://sachachua.com/blog/2026/06/2026-06-08-emacs-news/index.org">View Org source for this post</a></div>
<p>You can <a href="https://social.sachachua.com/@sacha/statuses/01KTMYVZBS50B5EFDW77VQJC0F" 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%2F06%2F2026-06-08-emacs-news%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item><item>
		<title>Emacs PDF View: Replace current page with file using PDFtk</title>
		<link>https://sachachua.com/blog/2026/06/emacs-pdf-view-replace-current-page-with-file-using-pdftk/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Sun, 07 Jun 2026 00:35:27 GMT</pubDate>
    <category>emacs</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2026/06/emacs-pdf-view-replace-current-page-with-file-using-pdftk/</guid>
		<description><![CDATA[<p>
I needed to replace a page in a PDF with another PDF. This was a bit
of an annoying process on my iPad involving copying and pasting pages
in Noteful and then re-exporting them as a PDF, but it was easy to do
in Emacs thanks to <a target="_blank" href="https://melpa.org/#/pdf-tools">pdf-tools</a> and <a href="https://www.pdflabs.com/tools/pdftk-server/">PDFtk</a>.
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp"><code><span class="org-comment-delimiter">;;;</span><span class="org-comment">###</span><span class="org-comment"><span class="org-warning">autoload</span></span>
(<span class="org-keyword">defun</span> <span class="org-function-name">sacha-pdf-view-replace-current-page-with-file</span> (file)
  <span class="org-doc">"Replace the current page in PDF View with FILE.</span>
<span class="org-doc">Requires pdftk."</span>
  (<span class="org-keyword">interactive</span> <span class="org-string">"FFile to insert: "</span>)
  (<span class="org-keyword">let</span> ((temp-file (concat (make-temp-name <span class="org-string">"pdf-view"</span>) <span class="org-string">".pdf"</span>)))
    (call-process
     <span class="org-string">"pdftk"</span>
     nil nil nil
     (concat <span class="org-string">"A="</span> (expand-file-name (buffer-file-name)))
     (concat <span class="org-string">"B="</span> (expand-file-name file))
     <span class="org-string">"cat"</span>
     (format <span class="org-string">"A%d-%d"</span>
             1
             (1- (<span class="org-keyword">pdf-view-current-page</span>)))
     <span class="org-string">"B"</span>
     (format <span class="org-string">"A%d-end"</span>
             (1+ (<span class="org-keyword">pdf-view-current-page</span>)))
     <span class="org-string">"output"</span>
     temp-file)
    (rename-file temp-file (buffer-file-name) t)))
</code></pre>
</div>


<div class="note">This is part of my <a href="https://sachachua.com/dotemacs#navigation-pdf-view-emacs-pdf-view-replace-current-page-with-file-using-pdftk">Emacs configuration.</a></div><div><a href="https://sachachua.com/blog/2026/06/emacs-pdf-view-replace-current-page-with-file-using-pdftk/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%2F06%2Femacs-pdf-view-replace-current-page-with-file-using-pdftk%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>]]></description>
		</item>
	</channel>
</rss>