<?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</title>
	<atom:link href="https://sachachua.com/blog/feed/index.xml" rel="self" type="application/rss+xml" />
	<atom:link href="https://sachachua.com" rel="alternate" type="text/html" />
	<link>https://sachachua.com/blog/feed/index.xml</link>
	<description>Emacs, sketches, and life</description>
	<lastBuildDate>Mon, 23 Dec 2024 15:27:13 GMT</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>11ty</generator>
  <item>
		<title>2024-12-23 Emacs news</title>
		<link>https://sachachua.com/blog/2024/12/2024-12-23-emacs-news/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Mon, 23 Dec 2024 15:27:13 GMT</pubDate>
    <category>emacs</category>
<category>emacs-news</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2024/12/2024-12-23-emacs-news/</guid>
		<description><![CDATA[<ul class="org-ul">
<li>Help wanted:
<ul class="org-ul">
<li><a href="https://list.orgmode.org/87a5cr7dn9.fsf@localhost">Org Mode requests: [FR] Allow SPC to scroll todo/tag selection menu - for users with huge accessible fonts (was: Transient: accessibility problems for users who need to use large fonts)</a></li>
</ul></li>
<li>Emacs updates:
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00869.html">Emacs 30.0.93 pretest is available</a> (<a href="https://www.reddit.com/r/emacs/comments/1hihzl9/emacs_30093_pretest_is_available/">Reddit</a>, <a href="https://irreal.org/blog/?p=12663">Irreal</a>)</li>
<li><a href="https://www.youtube.com/watch?v=yDVj75fC2pQ">Emacs 31 News Stream VOD</a> (01:26:53)</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 (virtual, in English) <a href="https://emacs-berlin.org/">https://emacs-berlin.org/</a> Wed Dec 25 0930 America/Vancouver - 1130 America/Chicago - 1230 America/Toronto - 1730 Etc/GMT - 1830 Europe/Berlin - 2300 Asia/Kolkata &#x2013; Thu Dec 26 0130 Asia/Singapore</li>
<li>Emacs APAC (virtual) <a href="https://emacs-apac.gitlab.io/">https://emacs-apac.gitlab.io/</a> Sat Dec 28 0030 America/Vancouver - 0230 America/Chicago - 0330 America/Toronto - 0830 Etc/GMT - 0930 Europe/Berlin - 1400 Asia/Kolkata - 1630 Asia/Singapore (<a href="https://emacs-apac.gitlab.io/announcements/december-2024/">announcement</a>)</li>
<li>M-x Research: TBA <a href="https://m-x-research.github.io/">https://m-x-research.github.io/</a> Fri Jan 3 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1600 Etc/GMT - 1700 Europe/Berlin - 2130 Asia/Kolkata &#x2013; Sat Jan 4 0000 Asia/Singapore</li>
<li><a href="https://events.ccc.de/congress/2024/hub/en/event/emacs-usermeetup/">🧠💻 Emacs User Meetup - 38C3</a> (<a href="https://social.tchncs.de/@cabhan/113680360792934598">@cabhan@social.tchncs.de</a>)</li>
</ul></li>
<li>Emacs configuration:
<ul class="org-ul">
<li><a href="https://www.rahuljuliato.com/posts/multiple-eln-cache">How to Share Your Emacs Configuration Between Different Machines (and Architectures) with Native Compilation</a> (<a href="https://www.reddit.com/r/emacs/comments/1hgjra6/how_to_share_your_emacs_configuration_between/">Reddit</a>)</li>
</ul></li>
<li>Emacs Lisp:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/elisp/comments/1hhmezr/bringing_emacs_introspection_debugging_to_casual/">Bringing Emacs Introspection &amp; Debugging to Casual Suite</a> (<a href="https://www.reddit.com/r/emacs/comments/1hhmfab/bringing_emacs_introspection_debugging_to_casual/">Reddit</a>)</li>
<li><a href="https://github.com/distichum/callnum">callnum.el; Sort library call numbers</a> (<a href="https://www.reddit.com/r/emacs/comments/1hfrj8x/callnumel_sort_library_call_numbers/">Reddit</a>)</li>
<li><a href="https://kisaragi-hiu.com/emacs-xml-encode/">Kisaragi Hiu: Emacs: turning parsed XML/HTML nodes back into text (encoding/printing/writing it out)</a></li>
</ul></li>
<li>Appearance:
<ul class="org-ul">
<li><a href="https://techhub.social/@Anoncheg/113688185961229577">Change theme by sunrise and sunset with circadian package</a></li>
<li><a href="https://github.com/konrad1977/neofusion-emacs">konrad1977/neofusion-emacs: Emacs port for NeoFusion theme from Neovim</a> (<a href="https://www.reddit.com/r/emacs/comments/1hkp9m9/new_theme_ported_from_neovim/">Reddit</a>)</li>
<li><a href="https://protesilaos.com/codelog/2024-12-17-emacs-standard-themes-tinted/">Protesilaos Stavrou: Emacs: two new Standard themes (‘standard-light-tinted’ and ‘standard-dark-tinted’)</a></li>
</ul></li>
<li>Navigation:
<ul class="org-ul">
<li><a href="https://takeonrules.com/2024/12/17/extending-built-in-emacs-bookmark-package/">Extending Built-In Emacs Bookmark Package</a> (<a href="https://dice.camp/@takeonrules/113668314143293564">@takeonrules@dice.camp</a>)</li>
<li><a href="http://yummymelon.com/devnull/rethinking-minibuffer-movement.html">Rethinking Minibuffer Movement</a> (<a href="https://www.reddit.com/r/emacs/comments/1hhj98l/rethinking_minibuffer_movement/">Reddit</a>)</li>
<li><a href="https://breatheoutbreathe.in/blog/2024-12-19-query-regexp-replace-lisp-replacement.html">Lisp expression replacements with query-regexp-replace</a> (<a href="https://www.reddit.com/r/emacs/comments/1hifeca/lisp_expression_replacements_with/">Reddit</a>)</li>
</ul></li>
<li>Dired:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1hfrigu/automatic_fallback_to_sudo_for_local_dired/">Automatic fallback to /sudo: for local dired commands</a></li>
</ul></li>
<li>Writing:
<ul class="org-ul">
<li><a href="https://gist.github.com/karthink/7d89df35ee9b7ac0c93d0177b862dadb">Configuration for super-fast Latex input using AucTeX, CDLatex and a bit of YaSnippet. See karthinks.com/software/latex-input-for-impatient-scholars</a></li>
<li><a href="https://www.youtube.com/watch?v=eSmTN5jynvg">Using Howm in Emacs for Notes and Tasks - System Crafters Live!</a> (02:11:21)</li>
</ul></li>
<li>Org Mode:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1hj9iz2/new_package_orgrankerel_sort_org_headlines_by/">New Package: org-ranker.el - sort org headlines by custom rules</a> (<a href="https://www.reddit.com/r/orgmode/comments/1hjgobm/new_package_orgrankerel_sort_org_headlines_by/">Reddit</a>)</li>
<li><a href="https://github.com/yibie/org-supertag">Org-supertag v0.0.2 released - enhance tag system of org-mode</a> (<a href="https://www.reddit.com/r/orgmode/comments/1hif4cr/orgsupertag_v002_released/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=I5VNszZaOIA">Emacs Org Attach Various Methods 2024_12_17_14:56:08</a> (04:04)</li>
<li><a href="https://github.com/positron-solutions/dslide/releases/tag/v0.6.0">DSLiDE v0.6.0  Your slides now play keyboard macros</a> (<a href="https://www.reddit.com/r/orgmode/comments/1hge9bo/dslide_v060_your_slides_now_play_keyboard_macros/">Reddit</a>)</li>
<li><a href="https://thanosapollo.org/posts/org-gnosis-progress-1/">Thanos Apollo: Progress update on org-gnosis &amp; a graphical interface addition.</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1hjj09d/what_is_desireable_in_an_org_to_html_framework/">What is desireable in an Org to HTML framework?</a></li>
<li><a href="https://breatheoutbreathe.in/blog/2024-12-16-mirror-worg-to-a-hyperdrive.html">How to mirror worg to a hyperdrive</a></li>
<li><a href="https://www.emacsuser.org/emacs/">How I use Emacs to publish "food" recipes</a></li>
</ul></li>
<li>Completion:
<ul class="org-ul">
<li><a href="https://rahuljuliato.com/posts/in-buffer-icomplete">Rahul Juliato: Enhancing icomplete-vertical-mode in Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1hhy6n9/enhancing_icompleteverticalmode_in_emacs/">Reddit</a>)</li>
</ul></li>
<li>Coding:
<ul class="org-ul">
<li><a href="https://metaredux.com/posts/2024/12/23/state-of-cider-2024.html">Meta Redux: State of CIDER Survey (2024)</a></li>
<li><a href="https://archive.casouri.cc/note/2024/emacs-30-tree-sitter">Tree-sitter Changes in Emacs 30</a> (<a href="https://www.reddit.com/r/emacs/comments/1hiwm8j/treesitter_changes_in_emacs_30/">Reddit</a>)</li>
<li><a href="https://gitlab.com/skybert/my-little-friends/-/blob/master/emacs/.emacs#L542">Run JUnit method or class at point</a> (<a href="https://hachyderm.io/@skybert/113679416976496391">@skybert@hachyderm.io</a>)</li>
<li><a href="https://www.youtube.com/watch?v=gMb6VTqUE10">Трошки про Emacs</a> (21:31) - Clojure</li>
<li><a href="https://mclare.blog/posts/using-uv-in-emacs/">Using uv in Emacs | MClare Blog</a> - python environment</li>
<li><a href="https://www.youtube.com/watch?v=IWyat0bbCss">Xah Talk Show 2024-12-21 Ep605. Run Code of Python JS Fsharp Etc in Emacs. Are You Based?</a> (53:31)</li>
<li><a href="https://fediverse.tv/w/bCw6xPvs1n8c68jKqFBEgW">Bases de Datos-SQLite en GNU Emacs - encuentro/taller - FTV</a> (<a href="https://fosstodon.org/@hispaemacs/113698030498809368">@hispaemacs@fosstodon.org</a>)</li>
</ul></li>
<li>Math:
<ul class="org-ul">
<li><a href="https://codelearn.me/2024/12/22/emacs-quick-calc.html">Ruslan Bekenev: Emacs: quick-calc</a></li>
</ul></li>
<li>Web:
<ul class="org-ul">
<li><a href="https://dice.camp/@takeonrules/113668410028513504">TIL eww-copy-alternate-url</a></li>
<li><a href="https://github.com/alphapapa/unpackaged.el/blob/master/unpackaged.el#L1623-L1675">eww-readable + imenu = quickly jump to different headings in webpage</a> (<a href="https://fosstodon.org/@marcc/113678792712925717">@marcc@fosstodon.org</a>)</li>
<li><a href="https://takeonrules.com/2024/12/18/adding-html5-display-block-elements-to-emacs-shr-and-eww-tag-rendering/">Adding HTML5 Display Block Elements to Emacs’ SHR (and EWW) Tag Rendering // Take on Rules</a> (<a href="https://dice.camp/@takeonrules/113674326454421331">@takeonrules@dice.camp</a>)</li>
</ul></li>
<li>Mail, news, and chat:
<ul class="org-ul">
<li><a href="https://todon.nl/@mousebot/113701769399574182">mastodon.el 1.1.8: adds support for link-hint, bugfixes</a></li>
<li><a href="https://codeberg.org/glenneth/discourse-emacs">glenneth/discourse-emacs: A modern Emacs package for seamless Discourse forum integration.</a> (<a href="https://techhub.social/@barocio/113666382496309705">@barocio@techhub.social</a>)</li>
</ul></li>
<li>Multimedia:
<ul class="org-ul">
<li><a href="https://emacs.tv/">emacs.tv</a> (<a href="https://lmno.lol/alvaro/hello-emacstv">Hello emacs.tv</a>, 1700+ videos)</li>
<li><a href="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/">Sacha Chua: subed.el: Tweaking subtitle times</a></li>
</ul></li>
<li>EXWM:
<ul class="org-ul">
<li><a href="https://www.maketecheasier.com/use-emacs-as-desktop-environment-linux/">How to Use Emacs as a Desktop Environment in Linux with EXWM - Make Tech Easier</a></li>
</ul></li>
<li>AI:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1hkex1q/llm_version_020_released_with_structured_json/">llm version 0.20 released, with structured JSON output</a></li>
<li><a href="https://indieweb.social/@xenodium/113673438068184091">chatgpt-shell: LaTeX rendering now turned on by default on LLM shell</a></li>
<li><a href="https://github.com/lepisma/onnx.el">lepisma/onnx.el: ONNX runtime for Emacs Lisp</a> (<a href="https://www.reddit.com/r/emacs/comments/1hg5r5n/onnxel_onnx_runtime_binding_for_emacs_lisp/">Reddit</a>) - optimized and portable ML on the edge, also interchange format for neural network models</li>
</ul></li>
<li>Community:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1hgx486/weekly_tips_tricks_c_thread_20241218_week_51/">Weekly Tips, Tricks, &amp;c. Thread — 2024-12-18 / week 51</a></li>
<li><a href="https://www.youtube.com/watch?v=u7DW78ng9Cg">00: Why You Want Programmable Tools</a> (04:36, <a href="https://www.reddit.com/r/emacs/comments/1hkk5bn/a_cool_video_about_emacs/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1hhxf8x/what_can_we_learn_from_neovims_rise_in_popularity/">What can we learn from Neovim’s rise in popularity?</a> (<a href="https://news.ycombinator.com/item?id=42465428">HN</a>)</li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="https://emacs.dyerdwelling.family/emacs/20241219132107-emacs&#45;&#45;calculate-number-of-days-between-two-dates/">James Dyer: Calculate Number Of Days Between Two Dates</a> - calendar-count-days-region</li>
<li><a href="https://github.com/glotlabs/gdrive">glotlabs/gdrive: Google Drive CLI Client</a> (<a href="https://todon.nl/@mousebot/113668699737441680">@mousebot@todon.nl</a>)</li>
<li><a href="https://lifeofpenguin.blogspot.com/2024/09/html-renderer.html#masonry">HTML Renderer (Emacs)</a> - Masonry (<a href="https://www.reddit.com/r/emacs/comments/1hh3xjz/html_renderer_masonry/">Reddit</a>)</li>
<li><a href="https://lifeofpenguin.blogspot.com/2024/09/html-renderer.html">HTML Renderer (Emacs)</a> - colspan (<a href="https://www.reddit.com/r/emacs/comments/1hg4z69/html_renderer_colspan/">Reddit</a>)</li>
<li><a href="https://themkat.net/2024/12/17/twenty_four_emacs_packages.html">Marie K. Ekeberg: 24 Emacs packages and utilities to try while counting down to Jul/Christmas/Holidays</a></li>
<li><a href="https://github.com/positron-solutions/moc/">positron-solutions/moc: Master of Ceremonies. Display &amp; presentation utilities to make presentation packages more effective</a> (<a href="https://private-user-images.githubusercontent.com/73710933/398084554-69b2d887-be79-440b-92df-cc34994eec20.mp4?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzQ5NDM3MTQsIm5iZiI6MTczNDk0MzQxNCwicGF0aCI6Ii83MzcxMDkzMy8zOTgwODQ1NTQtNjliMmQ4ODctYmU3OS00NDBiLTkyZGYtY2MzNDk5NGVlYzIwLm1wND9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMjMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjIzVDA4NDMzNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUwYmE0ODJiZjVhM2U3ZDIwNWJjNDFhNTE1NWEyOGU2ZDE4NzA3YWUxNGIyNzA5Y2FiMTUwZmJkYTdlNDhmZGUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.8_QToA2wx27lRkczLt0UWFstFAHHKD2Hmtm1Ys4f39I">Video</a>, <a href="https://www.reddit.com/r/elisp/comments/1hkjgvw/ann_moc_buffer_text_to_video_presentation_content/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/elisp/comments/1hg1m5r/the_semantics_and_broad_strokes_of_buffer/">The Semantics and Broad Strokes of Buffer Parallelism</a></li>
<li><a href="https://andreyor.st/posts/2024-12-20-extending-emacs-with-fennel/">Andrey Listopadov: Extending Emacs with Fennel</a></li>
</ul></li>
<li>Emacs development:
<ul class="org-ul">
<li>emacs-devel:
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00980.html">Re: Some experience with the igc branch</a> next impediments for IGC branch</li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00687.html">Merging scratch/no-purespace to remove unexec and purespace</a> - discussion, preparing to merge</li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00951.html">Re: Merging scratch/no-purespace to remove unexec and purespace</a> - ideas
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00965.html">Re: Merging scratch/no-purespace to remove unexec and purespace</a> - hints/guesses vs promises</li>
</ul></li>
</ul></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=961cff855a9eccb9c2de31edc7d90ce697ebb65d">* lisp/vc/smerge-mode.el (smerge-extend): New command (bug#74509)</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=fd529bbd076d14087d70c50d94bc9ef231cf1997">Add support for the ':data' keyword for play-sound in MS-Windows.</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=308d5d54737917d449bfc0bf80815537eef69446">'seconds-to-string': new optional arguments for readable strings</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=c19dd8e9d6c54080426623129a824e5bb2fcf7be">Add more documentation for TTY child frames</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=b156a69eec8af26991ede5c5bc2d7fbcd8dba134">NEWS entry for the removal of `redisplay-dont-pause'</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=a8c83b496b3f98ad0be835d772a36f75c47d693e">NEWS entry for tty child frames</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=d930d7f8651897dc3130ff16731751691566d490">New treesit thing 'sexp-list' (bug#73404)</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=4415102b573bb776e7f256633626f798b2ab9f28">Delete support for the Conkeror web browser</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=14a3dd6a30f7a720f29d51f2df8f8ab8138989a0">New user option browse-url-transform-alist</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=3d3c1094604ceb6133a15226aec9b568f7923ee7">Make font-lock face variables obsolete</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=69facd33a80bee3f49b0518e75e8ec570978334c">Rename the property 'repeat-continue-only' to 'repeat-continue'</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=2f4a7f5ec3c75641e2a3c66156c2783c5576b1d7">; * etc/NEWS: Mention 'eager-display' for 'completion-category-overrides'.</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=5a8adaeac81182f080b041a3a3840580c61213d2">unintern: Drop support for obsolete calling convention</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=80dc431b5a453c8200260969c8e2904e2d353b1e">all-completions: Drop support for obsolete calling convention</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=78b50603a25d8eb366deab92ce1f475aef497a64">; * etc/NEWS: Add 'completion-table-with-metadata' to "Lisp Changes".</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=d2986e79b76d442f8620195a54120d8be3e4583c">* lisp/comint.el (comint-complete-input-ring): New command (bug#74694).</a></li>
</ul></li>
<li>New packages:
<ul class="org-ul">
<li><a target="_blank" href="http://melpa.org/#/copilot">copilot</a>: An unofficial Copilot plugin (MELPA)</li>
<li><a target="_blank" href="https://elpa.gnu.org/packages/dicom.html">dicom</a>: DICOM viewer - Digital Imaging &amp; Communications in Medicine (GNU ELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/kill-dollar-mode">kill-dollar-mode</a>: Remove leading $ from shell-script-like text (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/moc">moc</a>: Master of Ceremonies (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/ocaml-eglot">ocaml-eglot</a>: An OCaml companion for Eglot (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/p4-ts-mode">p4-ts-mode</a>: Major mode for the P4_16 programming language (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/russian-calendar">russian-calendar</a>: Russian holidays and conferences. Updated 2024-11-22 (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/symbol-overlay-mc">symbol-overlay-mc</a>: Mark highlighted symbols with multiple cursors (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/uv-mode">uv-mode</a>: Integrate uv with python-mode (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://www.reddit.com/r/planetemacs">r/planetemacs</a>, <a href="https://mastodon.social/tags/emacs">Mastodon #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://communick.news/c/emacs?dataType=Post&amp;page=1&amp;sort=New">communick.news</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/2024-12">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/2024/12/2024-12-23-emacs-news/index.org">View org source for this post</a></div>]]></description>
		</item><item>
		<title>subed.el: Tweaking subtitle times</title>
		<link>https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Thu, 19 Dec 2024 14:51:17 GMT</pubDate>
    <category>emacs</category>
<category>subed</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/</guid>
		<description><![CDATA[<p>
When subtitle times are too far off from the video
or audio, people start worrying if their video has
frozen or jumped ahead. It's good to keep
subtitles roughly in time with the audio.
</p>

<p>
For EmacsConf, we can get timing information from
two places. <a href="https://github.com/m-bain/whisperX">WhisperX</a> produces a JSON file with
word data in the process of doing the speech
recognition, and the <a href="https://www.readbeyond.it/aeneas/">aeneas forced alignment tool</a>
can use synthesized text-to-speech to figure out
the timestamps for each line of text compared to a
media file.
</p>

<p>
Aeneas timestamps are more helpful once we start
editing, but it can be confused by long silences,
extraneous noises, multiple speakers, and
inaccurate transcripts (words added or removed).
</p>

<p>
<a href="https://sachachua.com/blog/2024/11/yay-emacs-7-using-word-timing-in-caption-editing-with-subed-word-data/">When I combine the WhisperX word data with
subtitles</a>, I can see where the times might need a
closer look because matching words weren't found.
</p>


<figure id="org4b1534a">
<img src="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/2024-12-18_12-27-37.png" alt="2024-12-18_12-27-37.png">

<figcaption><span class="figure-number">Figure 1: </span>Screenshot with word data loaded</figcaption>
</figure>

<p>
Loading word data requires a pretty close match at
the moment, but since we change only about 4% of
the subtitle text when editing, those cues are
still helpful. (I measured this by the Levenshtein
distance between the combined cue texts of edited
subtitles versus the original WhisperX
transcripts, using <code>string-distance</code> to
approximate the editing percentage.)
</p>

<details><summary>Calculating how much we edited</summary>
<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">let</span> ((sum-original 0)
      (sum-dist 0))
  (append
   (seq-keep
    (<span class="org-keyword">lambda</span> (talk)
      (<span class="org-keyword">when</span> (<span class="org-keyword">and</span> (emacsconf-talk-file talk <span class="org-string">"&#45;&#45;main.vtt"</span>)
                 (emacsconf-talk-file talk <span class="org-string">"&#45;&#45;reencoded.json"</span>))
        (<span class="org-keyword">let*</span> ((json-object-type <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">alist</span>)
               (json-array-type <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">list</span>)
               (edited-text
                (mapconcat (<span class="org-keyword">lambda</span> (sub) (elt sub 3))
                           (subed-parse-file (emacsconf-talk-file talk <span class="org-string">"&#45;&#45;main.vtt"</span>))
                           <span class="org-string">" "</span>))
               (original-text
                (mapconcat
                 (<span class="org-keyword">lambda</span> (word)
                   (assoc-default <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">word</span> word))
                 (assoc-default
                  <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">word_segments</span>
                  (json-read-file (emacsconf-talk-file talk <span class="org-string">"&#45;&#45;reencoded.json"</span>)))
                 <span class="org-string">" "</span>))
               (dist (string-distance original-text edited-text)))
          (<span class="org-keyword">setq</span> sum-original (+ sum-original (length original-text)))
          (<span class="org-keyword">setq</span> sum-dist (+ sum-dist dist))
          (list
           (length original-text)
           (length edited-text)
           dist))))
    (emacsconf-get-talk-info))
   <span class="org-highlight-quoted-quote">'</span>(hline)
   (list
    (list
     sum-original
     (format <span class="org-string">"%d%%"</span> (/ (* 100.0 sum-dist) sum-original))
     sum-dist))))
</pre>
</div>

</details>

<p>
To make it easier to correct subtitle timing, I
added a few ways to tweak subtitle timing for a
region of subtitles.
</p>

<p>
<b>WhisperX:</b> <code>subed-word-data-fix-subtitle-timing</code> in
<a href="https://github.com/sachac/subed/blob/main/subed/subed-word-data.el">subed-word-data.el</a> tries to match the word
data from WhisperX against the text of the current
subtitle, using <code>string-distance</code> for approximate
matches. I start at about two words shorter than
what's in the subtitle, and then increase the
number of words taken from the data while the
string distance decreases. I skip the data for
words before the beginning of the first
subtitle in the region.
</p>

<p>
</p><figure><video controls="1" src="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/2024-12-18_12.44.23.webm" type="video/webm"><a href="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/2024-12-18_12.44.23.webm">Download the video</a></video><figcaption><div>Screencast of subed-word-data-fix-subtitle-timing</div></figcaption></figure>
<p></p>

<p>
<b>Aeneas:</b> <code>subed-align-region</code> uses Aeneas to realign the
subtitles from the region using the section of the
media file between the start of the first subtitle
and the end of the last subtitle in the region.
When I notice that the times are off, I <a href="https://sachachua.com/blog/2024/11/checking-caption-timing-by-skimming-with-emacs-lisp-or-js/">skim the
subtitles</a> (or just skim them visually) to find the
last well-timed subtitle. Then I pick a subtitle
that's in the incorrectly-timed section. I use
<code>subed-mpv-jump-to-current-subtitle</code> (<code>M-j</code>) to
jump to that position, and I play back that
subtitle. It usually belongs to some text further
down, so I reset to that position with <code>M-j</code>, set
my mark before the previous correctly-timed
subtitle with <code>C-SPC</code>, go to the subtitle that
matches that time, and use
<code>subed-copy-player-pos-to-start-time</code> (<code>C-c [</code>) to
set the proper timestamp. Then I can go to the
previous incorrectly-timed subtitle and use <code>M-x
subed-align-region</code>. This runs the Aeneas forced
alignment tool using just the subtitle text in the
region, the starting timestamp of the first
subtitle, and the ending timestamp of the last
subtitle, making it easy to adjust that section.
<code>subed-align-region</code> is in <a href="https://github.com/sachac/subed/blob/main/subed/subed-align.el">subed-align.el</a>
</p>

<p>
<b>Retiming by pressing SPC after each subtitle:</b> As
an experiment, I've also added a
<code>subed-retime-subtitles</code> command that plays
through the subtitles so that I can press <code>SPC</code>
when the next subtitle starts. It begins with the
current subtitle and stops when you press a key
that's not in its keymap.
</p>

<p>
</p><figure><video controls="1" src="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/2024-12-18_13.06.47.webm" type="video/webm"><a href="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/2024-12-18_13.06.47.webm">Download the video</a></video><figcaption><div>Screencast with audio: subed-retime-subtitles</div></figcaption></figure>
<p></p>

<p>
<b>Manual adjustments</b>: For fine-tuning timestamps,
I usually turn on <code>subed-waveform-show-all</code> and
shift-left-click
(<code>subed-waveform-set-start-and-copy-to-previous</code>)
or shift-right-click
(<code>subed-waveform-set-stop-and-copy-to-next</code>) on
the waveforms because it's easy to see where the
words and pauses are. When I'm not sure, I can use
middle-click (<code>subed-waveform-play-sample</code>) to
play part of the file without changing the
subtitle start/stop or the MPV playback position.
</p>

<p>
</p><figure><video controls="1" src="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/2024-12-18_12.54.08.webm" type="video/webm"><a href="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/2024-12-18_12.54.08.webm">Download the video</a></video><figcaption><div>Screencast with audio of using the waveforms</div></figcaption></figure>
<p></p>

<p>
I'm experimenting with adding repeating
keybindings. There was a
<code>subed-mpv-frame-step-map</code> that was bound to <code>C-c
C-f</code>, so I've renamed it to <code>subed-mpv-control</code>,
added a whole bunch of keybindings to the
<code>subed-mpv-control-map</code> based on MPV and Aegisub
shortcuts, and made it a repeating transient map.
</p>

<p>
</p><figure><video controls="1" src="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/2024-12-18_13.02.52.webm" type="video/webm"><a href="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/2024-12-18_13.02.52.webm">Download the video</a></video><figcaption><div>Screencast with audio, experimenting with the mpv control map</div></figcaption></figure>
<p></p>

<p>
<b>Ideas for next steps</b>:
</p>

<p>
Gotta get the hang of all these new capabilities
through practice! =)
</p>

<p>
To make my <code>subed-align-region</code> workflow even more
convenient, I could use <code>completing-read</code> to let
me select a future subtitle with completion, and
then Emacs could automatically fix the subtitle
start time, go to the previous subtitle, and
realign the region.
</p>

<p>
Also, I think switching the waveforms from overlays to
text properties could be a good idea. When I cut
text, the overlays get left behind, but I want the
waveforms to go away too.
</p>

<p>
While writing this post and fiddling with <a href="https://github.com/sachac/subed">subed</a>, I
ended up adding a bunch of keybindings and a menu.
I figured this was as good a time as any to stop
tweaking it and finally publish. (But it's fun!
Just one more idea&#x2026;)
</p>
<div><a href="https://sachachua.com/blog/2024/12/subed-el-tweaking-subtitle-times/index.org">View org source for this post</a></div>]]></description>
		</item><item>
		<title>2024-12-16 Emacs news</title>
		<link>https://sachachua.com/blog/2024/12/2024-12-16-emacs-news/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Mon, 16 Dec 2024 17:34:21 GMT</pubDate>
    <category>emacs</category>
<category>emacs-news</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2024/12/2024-12-16-emacs-news/</guid>
		<description><![CDATA[<ul class="org-ul">
<li>Help wanted:
<ul class="org-ul">
<li><a href="https://list.orgmode.org/87msgzh1dh.fsf@localhost">Org Mode requests: [RFC] The best way to choose an "action" at point: context-menu-mode, transient, which-key or embark? (was: Fwd: Org-cite: Replace basic follow-processor with transient menu?)</a>
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00559.html">also on emacs-devel</a></li>
</ul></li>
<li><a href="https://list.orgmode.org/87seqqg38b.fsf@localhost">Org Mode requests: [TASK] Documenting ob-fortran, ob-forth, ob-sed, ob-ocaml, ob-ruby, and ob-sass (was: [TASK] Move babel backend docs from WORG to Org manual)</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00359.html">Merging MPS a.k.a. scratch/igc, yet again</a> - documentation help wanted for README-IGC, build instructions for Debian etc.</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 Dec 18 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1600 Etc/GMT - 1700 Europe/Berlin - 2130 Asia/Kolkata &#x2013; Thu Dec 19 0000 Asia/Singapore</li>
<li>Emacs Berlin (virtual, in English) <a href="https://emacs-berlin.org/">https://emacs-berlin.org/</a> Wed Dec 25 0930 America/Vancouver - 1130 America/Chicago - 1230 America/Toronto - 1730 Etc/GMT - 1830 Europe/Berlin - 2300 Asia/Kolkata &#x2013; Thu Dec 26 0130 Asia/Singapore</li>
<li>Emacs APAC (virtual) <a href="https://emacs-apac.gitlab.io/">https://emacs-apac.gitlab.io/</a> Sat Dec 28 0030 America/Vancouver - 0230 America/Chicago - 0330 America/Toronto - 0830 Etc/GMT - 0930 Europe/Berlin - 1400 Asia/Kolkata - 1630 Asia/Singapore</li>
</ul></li>
<li>Emacs configuration:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1he7ghg/recommendations_of_emacs_config/">Recommendations of emacs config</a></li>
<li><a href="https://baty.net/2024/12/emacs-from-scratch-once-again/">Jack Baty: Emacs from scratch once again</a> (<a href="https://irreal.org/blog/?p=12657">Irreal</a>)</li>
<li><a href="https://news.ycombinator.com/item?id=42428762">Show HN: Small Collection of Emacs Packages | Hacker News</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1heejxn/release_emacskick_013_for_vimneovim_users_ready/">[Release] Emacs-Kick 0.1.3 – For Vim/Neovim Users Ready to Explore Emacs</a></li>
<li><a href="https://fediverse.tv/videos/watch/c70d6802-7c48-4e0c-8578-fb32cc26d357">Configurar Emacs usando emacs-lisp (0x0005) - FTV</a> (<a href="https://techhub.social/@barocio/113651007187044891">@barocio@techhub.social</a>)</li>
</ul></li>
<li>Emacs Lisp:
<ul class="org-ul">
<li><a href="https://codeberg.org/pkal/do-at-point">do-at-point: A generic action dispatcher for Emacs</a> - simpler than Embark, uses thing-at-point</li>
<li><a href="https://flandrew.srht.site/listful/map-vs-other-libraries-through-hundreds-of-examples.html">Listful Andrew: map.el vs. other libraries through hundreds of examples</a></li>
<li><a href="https://flandrew.srht.site/listful/seq-vs-other-libraries-through-hundreds-of-examples.html">Listful Andrew: seq.el vs. other libraries through hundreds of examples</a></li>
</ul></li>
<li>Appearance:
<ul class="org-ul">
<li><a href="https://files.mastodon.social/cache/media_attachments/files/113/636/526/704/442/800/original/b6e749c63e775d26.png">Highlight selected window by measuring and increasing contrast</a> (<a href="https://techhub.social/@Anoncheg/113636526684529242">@Anoncheg@techhub.social</a>)</li>
<li><a href="https://protesilaos.com/codelog/2024-12-12-emacs-pulsar-1-2-0/">Protesilaos Stavrou: Emacs: pulsar version 1.2.0</a></li>
</ul></li>
<li>Navigation:
<ul class="org-ul">
<li><a href="https://emacs.dyerdwelling.family/emacs/20241213115239-emacs&#45;&#45;emacs-core-window-jumping-between-two-windows/">James Dyer: Emacs Quick Window Pt 3 - jumping between two windows</a>
<ul class="org-ul">
<li>Improvement: <a href="https://emacs.dyerdwelling.family/emacs/20241209085935-emacs&#45;&#45;emacs-core-window-jumping-visual-feedback/">James Dyer: Emacs Core Window Jumping With Visual Feedback</a></li>
</ul></li>
</ul></li>
<li>Hyperbole:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1haz1rf/android_emacs_fingerstylus_support_for_hyperbole/">Android emacs: finger/stylus support for hyperbole buttons</a></li>
</ul></li>
<li>Writing:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=ZkKKuvVUWkE">litdb and Emacs</a> (11:03)</li>
</ul></li>
<li>Org Mode:
<ul class="org-ul">
<li><a href="https://liron.tilde.team/blog/skipping-weekends-when-scheduling-items-with-org-mode20758.html">Skipping weekends when scheduling items with org-mode</a></li>
<li><a href="https://mbork.pl/2024-12-16_Changing_the_TODO_state_of_an_Org_entry_when_refiling">Marcin Borkowski: Changing the TODO state of an Org entry when refiling</a></li>
<li><a href="https://protesilaos.com/codelog/2024-12-15-emacs-org-coaching-clock/">Protesilaos Stavrou: Emacs: custom Org clock report for my coaching</a> (<a href="https://www.youtube.com/watch?v=FMutOCOoFSQ">YouTube</a> 13:08)</li>
<li><a href="https://github.com/bohonghuang/org-srs">Org-srs: A feature-rich and flexible spaced repetition system inside Org-mode with FSRS support</a> (<a href="https://www.reddit.com/r/emacs/comments/1hb5cnz/orgsrs_a_featurerich_and_flexible_spaced/">Reddit</a>)</li>
<li>Import, export, and integration:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1hbjq6n/package_niceorghtml/">[package] nice-org-html</a></li>
<li><a href="https://github.com/mahmoodsh36/org-xopp">new package: org-xopp (org+xournalpp)</a> (<a href="https://www.reddit.com/r/emacs/comments/1habnh2/new_package_orgxopp_orgxournalpp/">Reddit</a>)</li>
<li><a href="https://list.orgmode.org/87zfl3uxhb.fsf@localhost">Org Mode requests: [TASK] Move babel backend docs from WORG to Org manual</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1hbi751/passing_data_between_org_source_blocks_a/">Passing data between org source blocks (a practical example)</a></li>
<li><a href="https://breatheoutbreathe.in/blog/2024-12-10-sourcehut-org-mode-readme.html">Render README.org as HTML on Sourcehut</a> (<a href="https://lobste.rs/s/edzywh/render_readme_org_as_html_on_sourcehut">lobste.rs</a>)</li>
</ul></li>
</ul></li>
<li>Completion:
<ul class="org-ul">
<li><a href="https://thanosapollo.org/posts/emacs-built-in-completions-video/">Thanos Apollo: Emacs 30 Built-in Completion UI &amp; Styles [Video]​</a> (<a href="https://www.reddit.com/r/planetemacs/comments/1hcx1l0/thanos_apollo_emacs_30_builtin_completion_ui/">Reddit</a>)</li>
</ul></li>
<li>Coding:
<ul class="org-ul">
<li><a href="https://blog.serghei.pl/posts/emacs-python-ide/">Advanced Python Development Workflow in Emacs</a> (<a href="https://www.reddit.com/r/planetemacs/comments/1hcxe1d/advanced_python_development_workflow_in_emacs/">Reddit</a>, <a href="https://news.ycombinator.com/item?id=42395329">HN</a>)</li>
<li><a href="https://www.youtube.com/watch?v=evmRpr_DEBQ">Get Started with Clojure Programming with Cider | Emacs Tutorial</a> (12:41)</li>
<li><a href="https://www.youtube.com/watch?v=9dMYSrstrLk">The Definitive EMACS + GO Setup #emacs #golang</a> (01:07:18)</li>
<li><a href="https://github.com/chmouel/gotest-ts.el">[new package] gotest-ts - run go tests with gotest.el and tree-sitter</a> (<a href="https://www.reddit.com/r/emacs/comments/1haa3zx/new_package_gotestts_run_go_tests_with_gotestel/">Reddit</a>)</li>
<li><a href="https://codeberg.org/alexjgriffith/love2d-fennel.el">alexjgriffith/love2d-fennel.el - Codeberg.org</a> (<a href="https://mastodon.gamedev.place/@Alexjgriffith/113657784568312489">@Alexjgriffith@mastodon.gamedev.place</a>)</li>
<li><a href="https://gist.github.com/dhruvasagar/6d1cf62d772a35bbc9b0326e370d4f63">Minor Mode for Advent Of Code</a> (<a href="https://www.reddit.com/r/emacs/comments/1hawbsn/minor_mode_for_advent_of_code/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=wEbHCg6XGRU">[video] Using emacs dape-mode to debug software with DAP protocol</a> (<a href="https://www.reddit.com/r/emacs/comments/1ha903r/video_using_emacs_dapemode_to_debug_software_with/">Reddit</a>)</li>
<li><a href="https://fosstodon.org/@chmouel/113646312567316722">my-copy-function-name-with-ts</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1hbmpub/package_jujutsushi_a_package_for_jujutsu/">[package] Jujutsushi a package for Jujutsu</a></li>
</ul></li>
<li>Shells:
<ul class="org-ul">
<li><a href="https://lmno.lol/alvaro/an-experimental-e-shell-pager">Alvaro Ramirez: An experimental (e)shell pager</a> (<a href="https://www.reddit.com/r/emacs/comments/1halllx/en_experimental_eshell_pager/">Reddit</a>)</li>
</ul></li>
<li>Mail, news, and chat:
<ul class="org-ul">
<li><a href="https://glenneth.org/content/posts/2024-12-12-discourse-emacs.html">I'm attempting to write a discourse forum package for Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1hckaln/im_attempting_to_write_a_discourse_forum_package/">Reddit</a>)</li>
</ul></li>
<li>Fun:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=0f9Rvk6dulM">EmacsGME - Solo Roleplaying inside the Emacs Text Editor</a> (15:37)</li>
<li><a href="https://www.scannedinavian.com/programmers-want-flow-when-programming-light-turns-red.html">Shae Erisson's blog - Programmers want flow. when programming, light turns RED</a> (<a href="https://irreal.org/blog/?p=12650">Irreal</a>, <a href="https://lobste.rs/s/3rybyx/programmers_want_flow_when_programming">lobste.rs</a>)</li>
<li><a href="https://i.redd.it/99mmcnzw177e1.gif">May the shadows shield you and the light lead you to Emacsia</a> (<a href="https://www.reddit.com/r/emacs/comments/1hfgutm/may_the_shadows_shield_you_and_the_light_lead_you/">Reddit</a>)</li>
</ul></li>
<li>Community:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1hbov34/weekly_tips_tricks_c_thread_20241211_week_50/">Weekly Tips, Tricks, &amp;c. Thread — 2024-12-11 / week 50</a></li>
<li><a href="https://functional.cafe/@PaniczGodek/113630055034870975">The concept of Emacs - history</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1hcipqi/best_emacs_package_you_tried_and_stuck_with_in/">Best emacs package you tried and stuck with in 2024?</a></li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="https://lambdaland.org/posts/2024-12-14_emacs_catchup/">Lambda Land: What's New in Emacs: Last Decade Edition</a> (<a href="https://irreal.org/blog/?p=12655">Irreal</a>)</li>
<li><a href="https://discuss.systems/@jfdm/113640001250256154">Tip about using keycast-header-line-mode</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1hbls9u/so_happy_to_have_discovered_markdowndndimages/">So happy to have discovered markdown-dnd-images</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1hawd0f/hyperdriveel_v050_explore_the_interactive_peer/">hyperdrive.el v0.5.0: Explore the interactive peer graph</a></li>
<li><a href="https://github.com/KeyWeeUsr/emacs-syncthing">KeyWeeUsr/emacs-syncthing: Emacs client for Syncthing</a></li>
<li><a href="https://hackerpublicradio.org/eps/hpr4268/index.html">Hacker Public Radio: @enistello talks about Mastering Emacs by Mickey Peterson</a> (<a href="https://infosec.exchange/@hpr/113636111399505665">@hpr@infosec.exchange</a>)</li>
<li><a href="https://www.youtube.com/watch?v=8dWPDJ4ShFc">Building Emacs 30 from git on openSUSE Tumbleweed</a> (21:08)</li>
<li><a href="https://kisaragi-hiu.com/find-han-character-with-cangjie/">Kisaragi Hiu: 不會倉頡也能利用倉頡找打不出來的漢字</a></li>
<li><a href="https://picandocodigo.net/2024/macros-de-teclado-en-emacs/">Macros de teclado en Emacs | Picando Código</a> (<a href="https://mastodon.online/@picandocodigo/113646854111714700">@picandocodigo@mastodon.online</a>)</li>
<li><a href="https://emacsconf.org/2024/talks/guile/">Guile Emacs development has started again after a decade</a> (<a href="https://www.reddit.com/r/emacs/comments/1hb4om4/guile_emacs_development_has_started_again_after_a/">Reddit</a>, <a href="https://irreal.org/blog/?p=12635">Irreal</a>, <a href="https://lwn.net/SubscriberLink/1001645/b1e4453a8c6c16d7/">LWN</a>, <a href="https://news.ycombinator.com/item?id=42432004">HN</a>, <a href="https://lobste.rs/s/clyk9b/using_guile_for_emacs">lobste.rs</a>,  <a href="https://irreal.org/blog/?p=12659">Irreal</a>, <a href="https://lemmy.ml/post/23656526?scrollToComments=true">lemmy.ml</a>)</li>
</ul></li>
<li>Emacs development:
<ul class="org-ul">
<li>emacs-devel:
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00355.html">Improve access to documentation in Info format (was: Proposal: Include C</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00630.html">Re: pdumper on Solaris 10</a> - mixed news for 32-bit MPS builds on sparc</li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00455.html">Background information on concurrent redisplay Re: Gap buffer problem?</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00390.html">challenges of garbage collection pauses</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00552.html">Cluffer vs gap buffer</a>
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00488.html">related post about gap buffers vs ropes</a></li>
</ul></li>
</ul></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=fd021c07606264a73cd4c1f6fa6fe80a756defe0">New customization variable `completion-eager-display'</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=ed1f3b8488e18143d658e4f1aca8d21a3b84e2b2">Add `browse-url-qutebrowser'</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=9ccd459e8452cc9e6e81e53f26bbeef20d2d5bb7">Enable xterm-mouse-mode by default in xterm</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=eb9ba4830e4c7853150eaed93f89225c00d6e52a">Revert Dired buffer when clicking on basename of directory</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=3959ea66448fb371cdc67bd963cd539a90f99ee5">Rework history Isearch for Eshell</a></li>
</ul></li>
<li>New packages:
<ul class="org-ul">
<li><a target="_blank" href="http://melpa.org/#/consult-vc-modified-files">consult-vc-modified-files</a>: Show git modified files in a vc project with consult (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/current-window-only">current-window-only</a>: Open things only in the current window (MELPA)</li>
<li><a target="_blank" href="https://elpa.nongnu.org/nongnu/eldoc-diffstat.html">eldoc-diffstat</a>: Make VCS diffstat available via eldoc (NonGNU ELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/hindu-calendar">hindu-calendar</a>: Arithmetical traditional Hindu calendar (panchanga) (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/js-pkg-mode">js-pkg-mode</a>: Minor mode for working with javascript projects (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/le-gpt">le-gpt</a>: Emacs on steroids with GPT (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/terraform-docs">terraform-docs</a>: Generate Terraform modules documentation with terraform-docs (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://www.reddit.com/r/planetemacs">r/planetemacs</a>, <a href="https://mastodon.social/tags/emacs">Mastodon #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://communick.news/c/emacs?dataType=Post&amp;page=1&amp;sort=New">communick.news</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/2024-12">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/2024/12/2024-12-16-emacs-news/index.org">View org source for this post</a></div>]]></description>
		</item><item>
		<title>Weekly review: Two weeks ending December 11, 2024</title>
		<link>https://sachachua.com/blog/2024/12/weekly-review-week-ending-december-11-2024/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Thu, 12 Dec 2024 15:22:44 GMT</pubDate>
    <category>weekly</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2024/12/weekly-review-week-ending-december-11-2024/</guid>
		<description><![CDATA[<p>
This post covers the week ending Dec 4 and the week ending Dec 11, since it was a bit of a rush leading up to EmacsConf.
</p>

<ul class="org-ul">
<li><a href="https://emacsconf.org/2024">EmacsConf 2024</a> went well, hooray! Here are some of my journal entries over the past two weeks:
<ul class="org-ul">
<li>I worked on the BigBlueButton server some more. I used Spookfox to automate Firefox from Emacs Lisp so that I could add moderator codes to all the BBB rooms. That way, speakers can let themselves in if needed, since we might be understaffed. (Might need to ask the mailing list if anyone wants to volunteer to host, which is mostly reading out questions and making conversation.) I also updated the Tampermonkey script so that the user in the VNC session will be able to join the web conference automatically.</li>
<li>I added shell scripts to copy the BBB redirect files so that I can easily do that by hand in case I don't get the automation sorted out again over the next week.</li>
<li>Livestreaming to Toobnix seems to be iffy at the moment, so I'll just focus on 480p and YouTube. I'll probably end up manually copying and pasting the stream keys for each event, so I've added them to the shift checklists to make that easier for myself.</li>
<li>I confirmed crontab and publishing still worked, and I processed some last-minute submissions. I also sent the check-in emails and fixed my email delivery verification.</li>
<li><p>
<a href="https://social.sachachua.com/@sacha/statuses/01JEHVCS11ME6WBGDAADMB94SE">2024-12-08T00:40:59.681Z</a>
</p>
<blockquote>
<p>
<a href="https://social.sachachua.com/tags/emacsconf">#emacsconf</a> day 1 wasn't
100% smooth, but it was 100% fun, and people rerouted around all of the
tech hiccups. I think we've figured out the color issue (needed to
update mpv from 0.35 to 0.38), I updated my scripts to take the video
files from the cache directory instead of other directories that I
forgot to update, updated the checklist to have the right URLs, enabled
case-fold-search on the other Emacs, and added random package mentions
to the countdown screen. I forgot to let zaeph know I edited one of the
videos, so next time I should flag that somehow. I'm not 100% sure about
our BBB setup; a couple of people's computers crashed. On the plus side,
this year, sooo many people helped out with captions and quality checks.
Improving little by little! :D The important stuff got done: people got
to see things and chat with other people!
</p>
</blockquote></li>
<li>The second day of EmacsConf went pretty well! We managed to handle a couple of last-minute uploads.</li>
<li>I processed the EmacsConf Q&amp;As to add chapter indices and correct a number of misrecognized words. I also copied comments from of IRC and YouTube.</li>
<li>I modified the VTT separator regexp for subed.el.</li>
<li><p>
<a href="https://social.sachachua.com/@sacha/statuses/01JEJ1W2PAX97PPXA9VH3MMP8T">swapping roles 2024-12-08T02:34:12.554Z</a>
</p>
<blockquote>
<p>
I had a lot of fun watching Leo Vivier, Corwin Brust, and FlowyCoder
fluidly swap roles as needed during
<a href="https://social.sachachua.com/tags/emacsconf">#emacsconf</a> . It was
like professional jugglers dancing, one tossing a ball up in the air,
the other shifting into place to catch it, the third getting the next
ones lined up so things keep moving smoothly.
</p>
</blockquote></li>
<li><p>
I dropped by <a href="https://archives.anonradio.net/202412110000_screwtape.mp3">Lispy Gopher Show</a> again to chat about Emacs, Emacs Lisp, and EmacsConf with screwtape.
</p>
<ul class="org-ul">
<li><a href="https://social.sachachua.com/@sacha/statuses/01JEV9H4E0B3YD5PFJ09CGJ691">2024-12-11T16:41:12.384Z</a></li>
</ul>
<blockquote>
<p>
<a href="https://mastodon.sdf.org/@screwtape">@screwtape</a> I imagine it could
be useful to have a smart radio object that could tell someone how many
minutes until your next show and where to listen to it (saves us from
UTC conversions); do the same for other anonradio shows; search for a
keyword in your archives (even just the descriptions); and maybe even
allow other people to contribute a note that can be reviewed and
included in the archive description for an episode
</p>
</blockquote></li>
<li><p>
<a href="https://social.sachachua.com/@sacha/statuses/01JEXNFB3BZCDZRWN7QB4PVHBG">Q&amp;A update 2024-12-12T14:48:25.451Z</a>
</p>
<blockquote>
<p>
Yay, I've copied the rest of the comments from IRC and YouTube to the
<a href="https://social.sachachua.com/tags/emacsconf">#EmacsConf</a> talk pages,
so speakers will be able to review them in one go. I've also copied some
sections out of the transcripts for quick answers. I might send the
speakers the thanks email with the discussion and main talk video links,
but without links to the Q&amp;A videos yet.<br>
<br>
BigBlueButton audio mixing was as usual a bit of a challenge, with some
participants quiet and some participants louder. BBB saves only mixed
audio. It would be nice to see if I can get separate audio recordings
next year by configuring
<a href="https://github.com/bigbluebutton/bigbluebutton/issues/12302">https://github.com/bigbluebutton/bigbluebutton/issues/12302</a> , but
that sounds a little complicated. Instead of taking over the task of
messing with the audio in the current recordings (which I tend to flub
because I don't have the patience for it :) ), I can leave space for
other people to do things. Instead, I can focus on the other tasks I've
been procrastinating. :)
</p>
</blockquote></li>
</ul></li>
<li>Life:
<ul class="org-ul">
<li>A- felt that the Outschool club was worth keeping because she likes the people.</li>
<li>We all practised shinny at High Park. Nice! A- and I worked on our stops once it was time to move over to the leisure skate area. We've also skated even though there was a light drizzle.</li>
<li>W- enjoyed helping out with the Bike Brigade.</li>
<li>A+'s CCAT scores qualified her for the next step in the TDSB gifted identification process. I've been trying to figure out what this could look like for us. There's probably no gifted program for virtual school, so it might look much like what we've already got. We've been talking about how to adapt to systems that are designed for other people. At the moment, it seems to work better for her if I sit with her during boring parts of class and help her explore things like coding with Python (or help her get her homework out of the way), so I don't have much focused time myself. It's important to us that she feels good about learning and that she learns how to work with/around systems, so spending that time is worthwhile. It just means that I have to be strategic about what I do.</li>
</ul></li>
</ul>

<details class="code-details" style="padding: 1em;
                 border-radius: 15px;
                 font-size: 0.9em;
                 box-shadow: 0.05em 0.1em 5px 0.01em  #00000057;">
                  <summary><strong>Time</strong></summary>
<table>


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

<col class="org-right">

<col class="org-right">

<col class="org-right">

<col class="org-right">

<col class="org-right">
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Category</th>
<th scope="col" class="org-right">The other week %</th>
<th scope="col" class="org-right">Last week %</th>
<th scope="col" class="org-right">Diff %</th>
<th scope="col" class="org-right">h/wk</th>
<th scope="col" class="org-right">Diff h/wk</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Discretionary - Productive</td>
<td class="org-right">7.6</td>
<td class="org-right">26.3</td>
<td class="org-right">18.8</td>
<td class="org-right">44.3</td>
<td class="org-right">31.5</td>
</tr>

<tr>
<td class="org-left">Business</td>
<td class="org-right">0.2</td>
<td class="org-right">1.6</td>
<td class="org-right">1.4</td>
<td class="org-right">2.7</td>
<td class="org-right">2.3</td>
</tr>

<tr>
<td class="org-left">Discretionary - Play</td>
<td class="org-right">0.0</td>
<td class="org-right">0.6</td>
<td class="org-right">0.6</td>
<td class="org-right">1.0</td>
<td class="org-right">1.0</td>
</tr>

<tr>
<td class="org-left">Discretionary - Social</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>

<tr>
<td class="org-left">Discretionary - Family</td>
<td class="org-right">0.9</td>
<td class="org-right">0.0</td>
<td class="org-right">-0.9</td>
<td class="org-right">0.0</td>
<td class="org-right">-1.6</td>
</tr>

<tr>
<td class="org-left">Personal</td>
<td class="org-right">8.3</td>
<td class="org-right">6.9</td>
<td class="org-right">-1.4</td>
<td class="org-right">11.6</td>
<td class="org-right">-2.4</td>
</tr>

<tr>
<td class="org-left">Unpaid work</td>
<td class="org-right">4.3</td>
<td class="org-right">0.9</td>
<td class="org-right">-3.4</td>
<td class="org-right">1.5</td>
<td class="org-right">-5.7</td>
</tr>

<tr>
<td class="org-left">Sleep</td>
<td class="org-right">35.0</td>
<td class="org-right">29.4</td>
<td class="org-right">-5.6</td>
<td class="org-right">49.4</td>
<td class="org-right">-9.4</td>
</tr>

<tr>
<td class="org-left">A-</td>
<td class="org-right">43.6</td>
<td class="org-right">34.2</td>
<td class="org-right">-9.4</td>
<td class="org-right">57.5</td>
<td class="org-right">-15.8</td>
</tr>
</tbody>
</table>


</details>
<div><a href="https://sachachua.com/blog/2024/12/weekly-review-week-ending-december-11-2024/index.org">View org source for this post</a></div>]]></description>
		</item><item>
		<title>2024-12-09 Emacs news</title>
		<link>https://sachachua.com/blog/2024/12/2024-12-09-emacs-news/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Mon, 09 Dec 2024 13:35:58 GMT</pubDate>
    <category>emacs</category>
<category>emacs-news</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2024/12/2024-12-09-emacs-news/</guid>
		<description><![CDATA[<ul class="org-ul">
<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>OrgMeetup (virtual) <a href="https://orgmode.org/worg/orgmeetup.html">https://orgmode.org/worg/orgmeetup.html</a> Wed Dec 11 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1600 Etc/GMT - 1700 Europe/Berlin - 2130 Asia/Kolkata &#x2013; Thu Dec 12 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 Dec 13 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 Dec 18 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1600 Etc/GMT - 1700 Europe/Berlin - 2130 Asia/Kolkata &#x2013; Thu Dec 19 0000 Asia/Singapore</li>
<li><a href="https://graz.social/@publicvoit/113617784000171596">Karl Voit - Dec 20 14:15-16:00 demonstration of PIM tools at Graz</a></li>
</ul></li>
<li>Emacs configuration:
<ul class="org-ul">
<li><a href="https://olddeuteronomy.github.io/post/emacs-startup-screen/">The Emacs Cat: Emacs Startup Screen</a> (<a href="https://irreal.org/blog/?p=12631">Irreal</a>)</li>
<li><a href="https://codeberg.org/ideasman42/emacs-package-upgrade-from-term">Package Upgrade (from the terminal)</a> (<a href="https://www.reddit.com/r/emacs/comments/1h8kbc8/package_upgrade_from_the_terminal/">Reddit</a>)</li>
<li><a href="https://emacs.dyerdwelling.family/emacs/20241206143221-emacs&#45;&#45;emacs-core-emacs-init-without-external-packages/">James Dyer: Core Emacs Init Without External Packages</a></li>
<li><a href="https://bicycleforyourmind.com/much_ado_about_emacs_003">Much Ado about Emacs 003 - Bicycle For Your Mind</a> (<a href="https://fosstodon.org/@macosxguru/113600506741865801">@macosxguru@fosstodon.org</a>) - org-roam, god-mode, hydra, elfeed, etc.</li>
<li><a href="https://codeberg.org/oxo/dotf/src/branch/main/emacs">dotf/emacs at main - oxo/dotf - Codeberg.org</a> (<a href="https://qoto.org/@oxo/113618215059522157">@oxo@qoto.org</a>)</li>
<li><a href="https://dotdoom.rgoswami.me/config.html">rgoswami's literate Doom Emacs Config</a></li>
<li><a href="https://hieuphay.com/doom-emacs-config/">Hieu Phay's Doom Emacs Config</a></li>
<li><a href="https://comacero.com/posts/notes_emacs_elpaca/">Mi Configuración De Emacs Con Elpaca - comacero</a> (<a href="https://mastodon.gal/@salvari/113589652410129804">@salvari@mastodon.gal</a>)</li>
</ul></li>
<li>Emacs Lisp:
<ul class="org-ul">
<li><a href="https://lmno.lol/alvaro/awesome-elisp">Alvaro Ramirez: Awesome elisp</a></li>
<li><a href="https://flandrew.srht.site/listful/the-art-of-replacing-long-lambdas-i-llamas-anaphorics-and-combinators.html">Listful Andrew: The art of replacing long lambdas I: llamas, anaphorics, and combinators</a> (<a href="https://www.reddit.com/r/planetemacs/comments/1h9jsdd/listful_andrew_the_art_of_replacing_long_lambdas/">Reddit</a>)
<ul class="org-ul">
<li><a href="https://flandrew.srht.site/listful/the-art-of-replacing-long-lambdas-ii-llamas-vs-anaphorics-in-dash-and-xht.html">II: llamas vs. anaphorics in dash and xht</a></li>
<li><a href="https://flandrew.srht.site/listful/the-art-of-replacing-long-lambdas-iii-nested-anaphoras-and-threading-annoyances.html">III: nested anaphoras and threading annoyances</a></li>
</ul></li>
<li><a href="https://vmst.io/@t0yv0/113614794615591834">tip about using ert to test point movement in Emacs Lisp functions</a></li>
</ul></li>
<li>Appearance:
<ul class="org-ul">
<li><a href="https://github.com/ibakepunk/helix-theme">Emacs color theme inspired by the Helix editor default color scheme.</a> (<a href="https://www.reddit.com/r/emacs/comments/1h4wub7/emacs_color_theme_inspired_by_the_helix_editor/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1h7su3w/translucent_emacs_fork_macos/">Translucent Emacs Fork (MacOS)!</a></li>
</ul></li>
<li>Navigation:
<ul class="org-ul">
<li></li>
<li><a href="https://takeonrules.com/2024/12/03/monkey-patch-fix-for-bookmark-for-emacs-30/">Monkey Patch Fix for Bookmark+ for Emacs 30 // Take on Rules</a> (<a href="https://dice.camp/@takeonrules/113589663574569788">@takeonrules@dice.camp</a>)</li>
</ul></li>
<li>Writing:
<ul class="org-ul">
<li><a href="https://gnu.support/gnu-emacs/emacs-lisp/Emacs-Lisp-Capitalize-English-Line-by-Chicago-Manual-of-Style-CMOS.html">Emacs Lisp: Capitalize English Line by Chicago Manual of Style (CMOS)</a></li>
<li><a href="https://notxor.nueva-actitud.org/2024/12/06/tareas-intelectuales-y-toma-de-notas.html">Tareas intelectuales y toma de notas</a> (<a href="https://tuiter.rocks/@Notxor/113606345854435627">@Notxor@tuiter.rocks</a>)</li>
</ul></li>
<li>Org Mode:
<ul class="org-ul">
<li><a href="https://bzg.fr/en/org-has-a-new-maintainer/">Bastien Guerry: 🦄 Org Mode has a new maintainer</a> (<a href="https://list.orgmode.org/87plm3x5ve.fsf@bzg.fr">mailing list</a>, <a href="https://www.reddit.com/r/planetemacs/comments/1h8x8bg/bastien_guerry_org_mode_has_a_new_maintainer/">Reddit</a>)</li>
<li><a href="https://taonaw.com/2024/12/02/back-in-july.html">TAONAW - Emacs and Org Mode: Filtering org-agenda to <b>exclude</b> a category</a></li>
<li><a href="https://christiantietze.de/posts/2024/12/org-mode-emphasis-keymap-mnemonics/">Christian Tietze: Org-Mode Emphasis Keymap with Mnemonics</a></li>
<li><a href="https://takeonrules.com/2024/12/07/add-work-link-type-to-org-mode/">Add Work Link Type to Org-Mode // Take on Rules</a> (<a href="https://dice.camp/@takeonrules/113613392700893306">@takeonrules@dice.camp</a>)</li>
<li><a href="https://github.com/gavv/om-dash/releases/tag/v0.3">om-dash 0.3: improved github support, imap support, more</a> (<a href="https://www.reddit.com/r/emacs/comments/1h5t31o/omdash_03_improved_github_support_imap_support/">Reddit</a>) - org-mode dynamic blocks for dashboards</li>
<li><a href="https://www.cipherbliss.com/2024/suivi-de-r%C3%A9daction-de-livre-orgmode/">Suivi de rédaction de livre Orgmode / Follow-up to the writing of Orgmode books</a></li>
<li>Import, export, and integration:
<ul class="org-ul">
<li><a href="https://eugene-andrienko.com/en/it/2024/12/01/emacs-plugin-jekyll-blog">How I wrote an Emacs plugin to build my blog | Dragon’s notes</a> <a href="https://eugene-andrienko.com/it/2024/12/01/emacs-plugin-jekyll-blog">Как я сделал Emacs-плагин для сборки своего блога / How I Made an Emacs Plugin to assemble my blog</a> - jekyll</li>
<li><a href="https://infosec.press/csantosb/on-writting-freely">on writing freely — csantosb</a> (<a href="https://sigmoid.social/@csantosb/113602681783127776">@csantosb@sigmoid.social</a>)</li>
<li><a href="https://mastodon.social/@lhp/113597860111955174">Import appointments exported from StudIP into org agenda</a></li>
<li><a href="https://paste.yunohost.org/raw/kuseyahunu">Add target blank property to external links in Org Mode export</a> (<a href="https://toot.si/@len/113618881747712088">@len@toot.si</a>)</li>
</ul></li>
<li><a href="https://mastodon.social/@laotang/113621710177713954">orgrr update: show-multiverse, quick-add, rename-title-and-file, rename-and-move - @laotang@mastodon.social</a></li>
<li><a href="https://www.youtube.com/watch?v=BKiSCTUMqxs">OrgNote 0.22.7: Now with Android file system sync and GPG support</a> (<a href="https://www.reddit.com/r/emacs/comments/1h7ivzs/orgnote_0227_now_with_android_file_system_sync/">Reddit</a>)</li>
</ul></li>
<li>Denote:
<ul class="org-ul">
<li><a href="https://github.com/sarcom-sar/denote-tree">sarcom-sar/denote-tree: Visualize your notes as a tree</a> (<a href="https://www.reddit.com/r/emacs/comments/1h9vonw/package_denotetree_your_denotes_as_a_tree/">Reddit</a>)</li>
</ul></li>
<li>Coding:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1h87p91/emacs_as_an_ide/">emacs as an IDE</a> (long discussion)</li>
<li><a href="https://emacs-lsp.github.io/lsp-mode/page/keybindings/">Keybindings - LSP Mode - LSP support for Emacs</a> (<a href="https://chaos.social/@rtn/113598264762394448">@rtn@chaos.social</a>)</li>
<li><a href="https://www.youtube.com/watch?v=YBX2Ki1ZoGg">Emacs + Python</a> (34:45)</li>
<li><a href="https://github.com/fargiolas/eglot-inactive-regions">New package: eglot-inactive-regions</a> (<a href="https://www.reddit.com/r/emacs/comments/1ha82xj/new_package_eglotinactiveregions/">Reddit</a>) - dim inactive ifdef</li>
<li><a href="https://jointhefreeworld.org/blog/articles/emacs/yaml-schemas-in-emacs-eglot/">YAML Schemas in Emacs with Eglot - just renewed blog, help feedback welcome</a></li>
</ul></li>
<li>Shells:
<ul class="org-ul">
<li><a href="https://indieweb.social/@xenodium/113618545284937383">Experimenting with generic pager for Emacs shells</a></li>
</ul></li>
<li>Mail, news, and chat:
<ul class="org-ul">
<li><a href="https://mastodon.social/@bthalpin/113585743946949455">Warn about unsent mail buffers</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1h66cbh/email_providers_that_still_work_reasonably_with/">Email providers that still work reasonably with Emacs?</a> (<a href="https://irreal.org/blog/?p=12622">Irreal</a>)</li>
<li><a href="https://emacs.ch/@fox/113585132893741191">elfeed plugin recommendations</a></li>
<li><a href="https://todon.nl/@mousebot/113611044329636775">mastodon.el update - bugfixes, notifications, domain blocking, toot visibility, etc.</a></li>
</ul></li>
<li>Evil mode:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1h73623/evilmatchit_401_is_published/">evil-matchit 4.0.1 is published</a></li>
</ul></li>
<li>Multimedia:
<ul class="org-ul">
<li><a href="https://github.com/rtrppl/streams">rtrppl/streams: Emacs package to collect, organize and start web streams (via mpv)</a> (<a href="https://mastodon.social/@laotang/113588161859004051">@laotang@mastodon.social</a>)</li>
</ul></li>
<li>AI:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1h74cgp/gptel_097_released_dynamic_directives_improved/">gptel 0.9.7 released (dynamic directives, improved rewrite UI and more)</a></li>
<li><a href="https://lmno.lol/alvaro/llm-chat-navigation">Alvaro Ramirez: LLM chat navigation</a></li>
</ul></li>
<li>Community:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1h6b8ww/weekly_tips_tricks_c_thread_20241204_week_49/">Weekly Tips, Tricks, &amp;c. Thread — 2024-12-04 / week 49</a></li>
<li><a href="https://commenting.onthe.incoherenceofthe.net/@pkal/statuses/01JEM1W2MG1YRN513981KGT16T">Considering ELPA package video reviews</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1h5c778/which_emacsconf_2024_talks_have_your_attention/">Which EmacsConf 2024 Talks Have Your Attention?</a></li>
<li><a href="https://pad.elbinario.net/p/hispa-emacs">HispaEmacs Conf 2024?</a> (<a href="https://mast.lat/@libretics/113613062198809020">@libretics@mast.lat</a>)</li>
<li><a href="https://www.youtube.com/watch?v=c5M3VgBYyw0">ASMR Livecode | Advent Of Code Day 6 In Emacs Lisp!</a> (59:07)</li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=-OKXUK1AYFU">windows emacs picture pathname capture and display hack - YouTube</a> (<a href="https://techhub.social/@lispwizard/113614095601896879">@lispwizard@techhub.social</a>)</li>
<li><a href="https://codeberg.org/rstocker/emacs-bluetooth">rstocker/emacs-bluetooth: Manage Bluetooth devices using GNU Emacs - Codeberg.org</a> (<a href="https://mastodon.social/@frodjo/113595893639657052">@frodjo@mastodon.social</a>)</li>
<li><a href="https://techhub.social/@Anoncheg/113595684176084077">epa-pinentry-mode tip</a></li>
<li><a href="https://codeberg.org/tennoseremel/translit-iso9/src/branch/main/tenno-seremel-translit-iso9.el">Transliterate Cyrillic text into ISO 9:1995 Latin</a> (<a href="https://lor.sh/@tennoseremel/113618508922488761">@tennoseremel@lor.sh</a>)</li>
<li><a href="https://tech.toryanderson.com/2024/12/05/why-is-my-emacs-crashing-answer-bad-garbage-collection/">Tory Anderson: Why is my emacs crashing? Answer: bad garbage collection</a></li>
<li><a href="https://www.jamescherti.com/emacs-buffer-terminator/">Release 1.1.0: buffer-terminator.el - Safely Terminate Emacs Buffers Automatically</a> (<a href="https://github.com/jamescherti/buffer-terminator.el">Github</a>, <a href="https://www.reddit.com/r/emacs/comments/1h64aok/bufferterminatorel_automatically_terminate/">Reddit</a>)</li>
<li><a href="https://todon.nl/@janneke/113618415838208605">Guile Emacs updated in Guix</a></li>
</ul></li>
<li>Emacs development:
<ul class="org-ul">
<li>emacs-devel:
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00226.html">Enabling Xterm-Mouse-Mode</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00342.html">Tip: tty mode-line popup menus</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00221.html">Discussion about texinfo and highlighting source code blocks</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00107.html">Info manual distribution challenges</a>
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00284.html">GNU Free Documentation License vs Debian Free Software Guidelines</a></li>
</ul></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00291.html">Making decoded-times and calendar dates compatible?</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00174.html">Proposal for a new filter-based customization interface</a> (<a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00344.html">with screenshot</a>)</li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00340.html">Re: pdumper on Solaris 10</a> - discussion of mpc and other branches
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00324.html">continued relevance of 32-bit</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00293.html">some notes on rare and unusual systems</a></li>
</ul></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00069.html">Some info on phases of redisplay</a></li>
</ul></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=d706be4b345f3e2d242c4f2ffb5e566845b2935d">Remove obsolete 'display-comint-buffer-action' (bug#74361)</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=69e1f787528eaf2f223c53a6ff518ba4f984bc17">Add new keyword :continue-only to defvar-keymap for repeat-mode (bug#74140)</a></li>
</ul></li>
<li>New packages:
<ul class="org-ul">
<li><a target="_blank" href="http://melpa.org/#/buffer-terminator">buffer-terminator</a>: Safely Terminate/Kill Buffers Automatically (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/diredfd">diredfd</a>: Dired functions and settings to mimic FD/FDclone (MELPA)</li>
<li><a target="_blank" href="https://elpa.nongnu.org/nongnu/eglot-inactive-regions.html">eglot-inactive-regions</a>: Highlight inactive code regions with eglot power (NonGNU ELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/fancy-urls-menu">fancy-urls-menu</a>: Interface for viewing and opening URLs in current buffer (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/gotest-ts">gotest-ts</a>: Gotest with treesitter (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/hardtime">hardtime</a>: Prevents overuse of specified commands (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/nice-org-html">nice-org-html</a>: Prettier org-to-html export (MELPA)</li>
<li><a target="_blank" href="https://elpa.gnu.org/packages/speedrect.html">speedrect</a>: Fast modal rectangle commands (GNU ELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/sticky-scroll-mode">sticky-scroll-mode</a>: Sticky scrolling (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/transform-symbol-at-point">transform-symbol-at-point</a>: Transforming your symbols at point (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://www.reddit.com/r/planetemacs">r/planetemacs</a>, <a href="https://mastodon.social/tags/emacs">Mastodon #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://communick.news/c/emacs?dataType=Post&amp;page=1&amp;sort=New">communick.news</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/2024-12">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/2024/12/2024-12-09-emacs-news/index.org">View org source for this post</a></div>]]></description>
		</item><item>
		<title>2024-12-02 Emacs news</title>
		<link>https://sachachua.com/blog/2024/12/2024-12-02-emacs-news/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Mon, 02 Dec 2024 18:10:14 GMT</pubDate>
    <category>emacs</category>
<category>emacs-news</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2024/12/2024-12-02-emacs-news/</guid>
		<description><![CDATA[<ul class="org-ul">
<li>Emacs 30:
<ul class="org-ul">
<li><a href="https://www.mgmarlow.com/words/2024-07-28-emacs-30-news/">New stuff in Emacs 30</a> (July 2024, <a href="https://mastodon.social/@frodjo/113582424954136889">@frodjo@mastodon.social</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 Paris: S: Emacs workshop in Paris (online) <a href="https://emacs-doctor.com/">https://emacs-doctor.com/</a> Thu Dec 5 0830 America/Vancouver - 1030 America/Chicago - 1130 America/Toronto - 1630 Etc/GMT - 1730 Europe/Berlin - 2200 Asia/Kolkata &#x2013; Fri Dec 6 0030 Asia/Singapore</li>
<li>Emacs.si (in person): Emacs.si meetup #15 2024 (v #živo) <a href="https://dogodki.kompot.si/events/57815aa7-f253-4768-8059-9fbede8de0f9">https://dogodki.kompot.si/events/57815aa7-f253-4768-8059-9fbede8de0f9</a> Thu Dec 5 1900 CET</li>
<li>M-x Research: TBA <a href="https://m-x-research.github.io/">https://m-x-research.github.io/</a> Fri Dec 6 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1600 Etc/GMT - 1700 Europe/Berlin - 2130 Asia/Kolkata &#x2013; Sat Dec 7 0000 Asia/Singapore</li>
<li>Emacs.si (in person): Skupni ogled Emacs konference <a href="https://dogodki.kompot.si/events/00a6f9ee-9087-400d-9d9b-d51b98561424">https://dogodki.kompot.si/events/00a6f9ee-9087-400d-9d9b-d51b98561424</a> Sat Dec 7 1445 Europe/Ljubljana</li>
<li>Atelier Emacs Montpellier (in person) <a href="https://lebib.org/date/atelier-emacs">https://lebib.org/date/atelier-emacs</a> Fri Dec 13 1800 Europe/Paris</li>
</ul></li>
<li>Beginner:
<ul class="org-ul">
<li><a href="https://mint.westdri.ca/emacs/top_intro">Getting started with Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1h1p47d/getting_started_with_emacs/">Reddit</a>)</li>
</ul></li>
<li>Emacs configuration:
<ul class="org-ul">
<li><a href="https://protesilaos.com/codelog/2024-11-28-basic-emacs-configuration/">Emacs: a basic and capable configuration</a> (<a href="https://www.reddit.com/r/emacs/comments/1h1zyhz/emacs_a_basic_and_capable_configuration/">Reddit</a>, <a href="https://news.ycombinator.com/item?id=42266608">HN</a>, <a href="https://lemmy.ml/post/23076708?scrollToComments=true">lemmy.ml</a>, <a href="https://alpo.gitlab.io/jots/links/2024/11/prot-basic-and-capable-emacs-configuration/">Alex Popescu</a>, <a href="https://www.reddit.com/r/planetemacs/comments/1h27742/alex_popescu_prots_basic_and_capable_emacs/">Reddit</a>) - Protesilaos</li>
<li><a href="https://olddeuteronomy.github.io/post/some-excerpts-from-config-2-functions/">The Emacs Cat: Some Excerpts From My Emacs Config - 2: Functions</a> - dired, timestamps, editing (<a href="https://irreal.org/blog/?p=12618">Irreal</a>)</li>
<li><a href="https://zstg.is-a.dev/linux/emacs-other/">Miscellaneous Emacs configuration - ZeStig's lair - LaTeX, org-beamer, org-reveal, Elpaca, mail, elfeed</a></li>
<li><a href="https://github.com/cyrialize/.emacs.d">cyrialize/.emacs.d: My Emacs configuration files!</a></li>
<li><a href="https://github.com/tfree87/.emacs.d">tfree87's Emacs Config</a></li>
</ul></li>
<li>Emacs Lisp:
<ul class="org-ul">
<li><a href="https://arialdomartini.github.io/emacs-zoom">Emacs: let's zoom</a> (<a href="https://www.reddit.com/r/emacs/comments/1h13840/lets_zoom/">Reddit</a>) - walkthrough of developing a small Emacs Lisp package that modifies text appearance</li>
<li><a href="https://maxxcan.flounder.online/informatica/emacs/cursos-elisp/">Cursos de Emacs Lisp</a> (also available via gemini://maxxcan.flounder.online/informatica/emacs/cursos-elisp/index.gmi )</li>
<li><a href="https://github.com/amno1/lisp-edit">lisp-edit: amno1's misc. tools for editing lisp files</a></li>
</ul></li>
<li>Appearance:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=4iyCkEA_KaY">Crafting Color Overrides for Emacs Modus Themes - System Crafters Live</a> (02:03:21)</li>
</ul></li>
<li>Navigation:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1h25quh/otpp_aka_onetabperproject_v310_is_out_with_a/">otpp (a.k.a. one-tab-per-project) v3.1.0 is out with a couple of bug fixes and new features</a></li>
<li><a href="https://gist.github.com/quantumish/643314fdbdb992af66a88fdeb3bd1ead">Simple zoxide integration for Emacs · GitHub</a> - a smarter change-directory command</li>
</ul></li>
<li>Org Mode:
<ul class="org-ul">
<li><a href="https://www.youtube.com/watch?v=v1_oHrPeUa0">Gamify Org-mode agenda tasks</a> (02:21)</li>
<li><a href="https://emacs.dyerdwelling.family/emacs/20241128130253-emacs&#45;&#45;shrinking-widening-org-tables/">James Dyer: Shrinking and Widening Org Tables</a> (<a href="https://irreal.org/blog/?p=12612">Irreal</a>)</li>
<li><a href="https://jdrm.info/mis-tareas-organizardas-con-org-mode.html">Mis tareas organizardas con org-mode</a> (<a href="https://emacs.ch/@hispa/113579032080095672">@hispa@emacs.ch</a>)</li>
<li><a href="https://youtu.be/00JEayL5Emk">Emacs Crushing the Board Room With D'SLIDE  [0.5.5 Release]​</a> (<a href="https://www.youtube.com/watch?v=00JEayL5Emk">YouTube</a>, <a href="https://www.reddit.com/r/emacs/comments/1gzwt4e/emacs_crushing_the_board_room_with_dslide_055/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/orgmode/comments/1h1lyi1/dslide_10_feature_proposal_rfc/">Dslide 1.0 Feature Proposal &amp; RFC</a> - Org-based presentation</li>
<li>Import, export, and integration:
<ul class="org-ul">
<li><a href="https://brain.trainpats.eu/20241201222215-december_adventure.html#org2e1f43f">December Adventure - notes on publishing Org</a> (<a href="https://merveilles.town/@csepp/113580318244804004">@csepp@merveilles.town</a>)</li>
<li><a href="https://eugene-andrienko.com/en/it/2024/12/01/emacs-plugin-jekyll-blog">How I wrote an Emacs plugin to build my blog | Dragon’s notes</a> (<a href="https://mas.to/@evgandr/113579450483365088">@evgandr@mas.to</a>) - with Jekyll</li>
<li><a href="https://blog.lazy-evaluation.net/posts/orgmode-diagrams.html">Inline Diagrams in Orgmode | Dzu's Blog</a> (<a href="https://mathstodon.xyz/@6d03/113550020197168004">@6d03@mathstodon.xyz</a>)</li>
<li><a href="https://michaelneuper.com/posts/how-i-use-org-roam-to-takes-notes-for-cs/">How I Use Org-Roam to Take Notes for CS - Michael</a> (<a href="https://www.reddit.com/r/emacs/comments/1h0dnke/update_one_year_of_orgroam_notes_for_my_computer/">Reddit</a>)</li>
</ul></li>
<li>Org development:
<ul class="org-ul">
<li><a href="https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/etc/ORG-NEWS?id=e87ecf88be043445f2af2acac53b1c61a382d0e5">Document preview API for arbitrary link types</a></li>
</ul></li>
</ul></li>
<li>Coding:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1h2o8hr/share_your_mx_compile_compilationmode_config/">Share your M-x compile / compilation-mode config, hacks, tips, and tricks</a></li>
<li><a href="https://github.com/jadestrong/lsp-copilot">jadestrong/lsp-copilot: An LSP client for Emacs implemented in Rust.</a> (<a href="https://www.reddit.com/r/emacs/comments/1h13dg9/a_new_lsp_client_written_in_rust/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1h1d5k4/how_to_potentially_make_your_eglot_completions/">How to potentially make your eglot completions faster</a></li>
<li><a href="https://infosec.exchange/@craigbro/113555600896530891">Rust setup that plays well with Nix and direnv</a></li>
<li><a href="https://utterlyvoice.com/demos#Use_Emacs_to_Write_Go_Code">Using Utterly Voice to write Go code in Emacs</a></li>
<li><a href="https://blog.dornea.nu/2024/11/28/mastering-golang-debugging-in-emacs/">Mastering Golang Debugging in Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1h1rez6/mastering_golang_debugging_in_emacs/">Reddit</a>)</li>
<li><a href="https://github.com/Remillard/hexl-inspect">DESIGN REVIEW: hexl-inspect &#x2013; A minor mode for hexl providing inspection data</a> (<a href="https://www.reddit.com/r/emacs/comments/1h4w1i1/design_review_hexlinspect_a_minor_mode_for_hexl/">Reddit</a>)</li>
<li><a href="https://youtu.be/YBX2Ki1ZoGg">Emacs + Python</a></li>
<li><a href="https://blog.serghei.pl/posts/emacs-python-ide">Advanced Python Development Workflow in Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1h45ess/advanced_python_development_workflow_in_emacs/">Reddit</a>)</li>
<li><a href="https://slinkp.com/python-emacs-lsp-20231229.html">Modernizing my Python development setup in Emacs</a> (2023)</li>
</ul></li>
<li>Web:
<ul class="org-ul">
<li><a href="https://github.com/EFLS/readel/">EFLS/readel: Retrieval of Readeck annotations in Emacs</a> (<a href="https://www.reddit.com/r/emacs/comments/1h4bd5x/sharing_code_readeck_annotations_in_emacs/">Reddit</a>)</li>
</ul></li>
<li>Mail, news, and chat:
<ul class="org-ul">
<li><a href="https://cce.whatthefuck.computer/elfeed-adaptive-scoring">Elfeed Adaptive Scoring - The Complete Computer</a></li>
<li><a href="https://github.com/thundertheidiot/bsky.el">thundertheidiot/bsky.el: Very WIP Bluesky client for emacs</a></li>
</ul></li>
<li>EXWM:
<ul class="org-ul">
<li><a href="https://github.com/lrustand/qutebrowser.el">qutebrowser.el: Tight integration between Qutebrowser and Emacs/EXWM</a> (<a href="https://www.reddit.com/r/emacs/comments/1h2ty22/qutebrowserel_tight_integration_between/">Reddit</a>)</li>
</ul></li>
<li>AI:
<ul class="org-ul">
<li><a href="https://lmno.lol/alvaro/ob-chatgpt-shell-goes-multi-model-too">Alvaro Ramirez: ob-chatgpt-shell goes multi-model too</a> (<a href="https://lobste.rs/s/ekhclm/chatgpt_shell_goes_multi_model">lobste.rs</a>)</li>
<li><a href="https://lmno.lol/alvaro/llm-iterate-and-insert">LLM iterate and insert</a> (<a href="https://www.reddit.com/r/emacs/comments/1gzq5if/llm_iterate_and_insert/">Reddit</a>)</li>
<li><a href="https://github.com/xenodium/chatgpt-shell/commit/6573f9e730e97dc8ca9413a0d795267e75bb2c72">chatgpt-shell: Adds an initial Kagi summarizer implementation</a> (<a href="https://indieweb.social/@xenodium/113582466631925006">@xenodium@indieweb.social</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1h2s8a9/legpt_a_fork_of_gptel_that_adds_completion_at/">le-gpt: A fork of gpt.el that adds completion at point, region transforms and project awareness!</a></li>
</ul></li>
<li>Community:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1h0zjvq/weekly_tips_tricks_c_thread_20241127_week_48/">Weekly Tips, Tricks, &amp;c. Thread — 2024-11-27 / week 48</a> - GTK styling, window jumping</li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1h15mni/a_function_to_periodically_wipe_buffers_not/">A function to periodically wipe buffers not recently shown; thoughts?</a></li>
<li></li>
<li></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1h2ipcc/pdf_slides_presentation_setup_for_emacs/">PDF Slides Presentation Setup for Emacs!</a> - uses pdf-tools view buffer, no modeline</li>
<li><a href="http://yummymelon.com/devnull/announcing-casual-calendar.html">Announcing Casual Calendar</a> (<a href="https://www.reddit.com/r/emacs/comments/1gzo5ag/announcing_casual_calendar/">Reddit</a>, <a href="https://irreal.org/blog/?p=12608">Irreal</a>)</li>
<li><a href="https://github.com/haji-ali/calfw-blocks">A block view of calendar</a> - fork of calfw (<a href="https://www.reddit.com/r/emacs/comments/1h43sak/a_block_view_of_calendar/">Reddit</a>)</li>
<li><a href="https://github.com/bbatsov/guru-mode">guru-mode: Learn to use Emacs the way it was meant to be used (the Emacs guru way)</a> (<a href="https://www.reddit.com/r/planetemacs/comments/1h1ptko/gurumode_learn_to_use_emacs_the_way_it_was_meant/">Reddit</a>)</li>
<li><a href="https://onlisp.co.uk/Creating-an-info-manual-for-Python.html">J.e.r.e.m.y B.r.y.a.n.t: Creating an info manual by conversion, example for Python</a></li>
<li><a href="https://mbork.pl/2024-12-01_Automatically_inserting_Ledger_transactions">Marcin Borkowski: Automatically inserting Ledger transactions</a></li>
<li><a href="https://eshelyaron.com/posts/2024-11-27-emacs-aritrary-code-execution-and-how-to-avoid-it.html">Emacs Arbitrary Code Execution and How to Avoid It</a> (<a href="https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00749.html">emacs-devel</a>, <a href="https://www.reddit.com/r/emacs/comments/1h16hmv/emacs_arbitrary_code_execution_and_how_to_avoid_it/">Reddit</a>, <a href="https://news.ycombinator.com/item?id=42256409">HN</a>, <a href="https://lobste.rs/s/khomv9/emacs_arbitrary_code_execution_how_avoid">lobste.rs</a>, <a href="https://lemmy.ml/post/22994001?scrollToComments=true">lemmy.ml</a>)</li>
<li><a href="https://github.com/amake/dotfiles/tree/e22b2da8afc53f710badd047a15c2d9c2229819c/services/Library/Services/Edit%20in%20Emacs.workflow/Contents">Edit in Emacs.workflow for macOS</a> (<a href="https://mastodon.social/@amake/113557504782560433">@amake@mastodon.social</a>)</li>
<li><a href="https://maxxcan.flounder.online/informatica/emacs/articulos/2024-11-25-a-vuelta-con-los-plugins.gmi">A vuelta con los plugins en Emacs</a> (also available via gemini)</li>
</ul></li>
<li>Emacs development:
<ul class="org-ul">
<li>emacs-devel:
<ul class="org-ul">
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00879.html">The need to shift more discussions from the bug reporting list to emacs-devel</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00817.html">c-ts-mode indentation rules are getting a bit complex</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-12/msg00007.html">Thinking about vtable conventions</a></li>
</ul></li>
<li><a href="https://recursewithless.net/emacs/icalendar-parser2.org">iCalendar support update</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=64c289590b56ea08d646b74f1a4b5de0a1faa2e2">Add command symbol property 'repeat-continue-only' for 'repeat-mode'</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=0624fe6f8497a677ae354da0a604dbf82e69400a">Make Xref commands follow 'display-buffer' customizations</a></li>
</ul></li>
<li>New packages:
<ul class="org-ul">
<li><a target="_blank" href="http://melpa.org/#/enhanced-evil-paredit">enhanced-evil-paredit</a>: Paredit support for evil keybindings (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/minizinc-ts-mode">minizinc-ts-mode</a>: Major mode for the MiniZinc constraint modeling language (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/tab-line-nerd-icons">tab-line-nerd-icons</a>: Add icons to tab-line tabs (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://www.reddit.com/r/planetemacs">r/planetemacs</a>, <a href="https://mastodon.social/tags/emacs">Mastodon #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://communick.news/c/emacs?dataType=Post&amp;page=1&amp;sort=New">communick.news</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="http://lists.gnu.org/archive/html/emacs-devel/2024-12">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/2024/12/2024-12-02-emacs-news/index.org">View org source for this post</a></div>]]></description>
		</item><item>
		<title>2024-11-25 Emacs news</title>
		<link>https://sachachua.com/blog/2024/11/2024-11-25-emacs-news/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Tue, 26 Nov 2024 01:09:06 GMT</pubDate>
    <category>emacs</category>
<category>emacs-news</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2024/11/2024-11-25-emacs-news/</guid>
		<description><![CDATA[<ul class="org-ul">
<li>Upcoming events:
<ul class="org-ul">
<li>Emacs Berlin (hybrid, in English) <a href="https://emacs-berlin.org/">https://emacs-berlin.org/</a> Wed Nov 27 0930 America/Vancouver - 1130 America/Chicago - 1230 America/Toronto - 1730 Etc/GMT - 1830 Europe/Berlin - 2300 Asia/Kolkata &#x2013; Thu Nov 28 0130 Asia/Singapore</li>
<li>Emacs Paris: S: Emacs workshop in Paris (online) <a href="https://emacs-doctor.com/">https://emacs-doctor.com/</a> Thu Dec 5 0830 America/Vancouver - 1030 America/Chicago - 1130 America/Toronto - 1630 Etc/GMT - 1730 Europe/Berlin - 2200 Asia/Kolkata &#x2013; Fri Dec 6 0030 Asia/Singapore</li>
<li>Emacs.si (in person): Emacs.si meetup #15 2024 (v #živo) <a href="https://dogodki.kompot.si/events/57815aa7-f253-4768-8059-9fbede8de0f9">https://dogodki.kompot.si/events/57815aa7-f253-4768-8059-9fbede8de0f9</a> Thu Dec 5 1900 CET</li>
<li>M-x Research: TBA <a href="https://m-x-research.github.io/">https://m-x-research.github.io/</a> Fri Dec 6 0800 America/Vancouver - 1000 America/Chicago - 1100 America/Toronto - 1600 Etc/GMT - 1700 Europe/Berlin - 2130 Asia/Kolkata &#x2013; Sat Dec 7 0000 Asia/Singapore</li>
</ul></li>
<li>Emacs configuration:
<ul class="org-ul">
<li><a href="https://write.as/jeffbowman/crafted-emacs-approach-to-systemcrafters-livestream">Crafted Emacs Approach to SystemCrafters Livestream — Bowmansarrow</a></li>
<li><a href="https://jd.codes/posts/transient-emacs/">Transient Menus in Emacs pt. 1 | JD Codes</a> (<a href="https://www.reddit.com/r/emacs/comments/1gvf3nn/transient_for_beginners/">Reddit</a>)</li>
<li><a href="https://picandocodigo.net/2020/como-empezar-con-emacs-distribuciones/">Cómo empezar con Emacs: Distribuciones | Picando Código</a> (<a href="https://mastodon.online/@picandocodigo/113514817338349292">@picandocodigo@mastodon.online</a>)</li>
<li><a href="https://olddeuteronomy.github.io/post/some-excerpts-from-my-emacs-config/">The Emacs Cat: Some Excerpts From My Emacs Config</a> (<a href="https://irreal.org/blog/?p=12595">Irreal</a>)</li>
<li><a href="https://github.com/ultronozm/emacsd">ultronozm's Emacs Config</a></li>
<li><a href="https://github.com/xenodium/dotsies">xenodium's Emacs Config</a></li>
<li><a href="https://git.sr.ht/~lbodnar/emacs-dot">lbodnar's Emacs Config</a></li>
<li><a href="https://git.sr.ht/~johnhamelink/nix/tree/master/item/home/modules/emacs/README.md">johnhamelink's Emacs Config</a></li>
<li><a href="https://github.com/certainty/madmacs">madmacs: certainty's Emacs Config</a></li>
<li><a href="https://github.com/andykuszyk/dotfiles">andykuszyk's Emacs Config</a></li>
<li><a href="https://github.com/MArpogaus/emacs.d">MArpogaus's Emacs Config</a></li>
</ul></li>
<li>Emacs Lisp:
<ul class="org-ul">
<li><a href="https://github.com/politza/emil">emil: A type-system and data-structures for Emacs-Lisp</a></li>
</ul></li>
<li>Appearance:
<ul class="org-ul">
<li><a href="https://fosstodon.org/@chmouel/113520153574926980">Toggling relative line number</a></li>
<li><a href="https://arialdomartini.github.io/emacs-zoom">`squint`:A little package for controlling the font height, so you won’t need to squint your eyes when you are on smaller screens.</a> (<a href="https://www.reddit.com/r/planetemacs/comments/1gybtd2/squinta_little_package_for_controlling_the_font/">Reddit</a>)</li>
<li><a href="https://github.com/daut/miasma-theme.el">miasma-theme.el: 🌲 Emacs color theme inspired by the woods</a></li>
<li><a href="https://github.com/bcardoso/spaceink-theme">bcardoso/spaceink-theme: A cosmic dark theme for Emacs</a> (<a href="https://mastodon.social/@cryptk/113534591425744245">@cryptk@mastodon.social</a>)</li>
</ul></li>
<li>Navigation:
<ul class="org-ul">
<li><a href="https://donaldh.wtf/2024/11/lower-other-frame-in-emacs/">Lower Other Frame in Emacs</a> (<a href="https://hachyderm.io/@donaldh/113512305380232466">@donaldh@hachyderm.io</a>)</li>
<li><a href="https://picandocodigo.net/2024/grupos-y-capturas-reemplazando-texto-con-expresiones-regulares/">Grupos y capturas reemplazando texto con expresiones regulares | Picando Código</a> (<a href="https://mastodon.online/@picandocodigo/113515057913426535">@picandocodigo@mastodon.online</a>)</li>
<li><a href="https://codeberg.org/kakafarm/emacs-fancy-ffap-menu/">kakafarm/emacs-fancy-ffap-menu: Fancy FFAP Menu lists visible URLs in the current buffer and allows the user to choose which ones to open. - Codeberg.org</a></li>
<li><a href="https://github.com/aurtzy/disproject">aurtzy/disproject: Transient interface for managing and interacting with projects</a> (<a href="https://discuss.tchncs.de/post/25591500">tchncs</a>)</li>
<li><a href="https://github.com/jamescherti/outline-indent.el">Release 1.1.0: outline-indent: Fold text based on indentation (Alternative to origami and yafolding)</a> (<a href="https://www.reddit.com/r/emacs/comments/1gyyuqq/release_110_outlineindent_fold_text_based_on/">Reddit</a>)</li>
<li><a href="https://github.com/szermatt/visual-replace">[ANN] visual-replace - A nicer interface for query-replace and others</a> (<a href="https://www.reddit.com/r/emacs/comments/1gufxo2/ann_visualreplace_a_nicer_interface_for/">Reddit</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1guzbv7/hardtimeel_emacs_package_that_prevents_overuse_of/">hardtime.el - Emacs package that prevents overuse of specified commands</a></li>
</ul></li>
<li>Writing:
<ul class="org-ul">
<li><a href="https://chrismaiorana.com/my-freewrite-mode/">Chris Maiorana: My Freewrite Mode</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1guj670/wordstar_keys_emacs_org_whichkey_olivetti_is/">Wordstar keys + Emacs + org + which-key + olivetti is amazing!</a></li>
</ul></li>
<li>Org Mode:
<ul class="org-ul">
<li><a href="https://jlamothe.net/blog/2024-11-15/">Jonathan Lamothe: Organizing My Life with org-mode</a></li>
<li><a href="https://www.youtube.com/watch?v=GEdOj0zcDWk">Demo of org-mode's cycling of folds with TAB and SHIFT+TAB</a> (00:39)</li>
<li><a href="https://gist.github.com/redblobgames/ca9d0808f13a42f9c6e64c913e2a5894">redblobgames' journal code</a></li>
<li><a href="https://gist.github.com/redblobgames/3ef970bdeeef0e4a025d2981ce83ed27">redblobgames' note taking setup in emacs</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1gw3u00/org_music_is_an_awesome_way_to_organize_your_songs/">Org Music is an awesome way to organize your songs</a></li>
<li><a href="https://thanosapollo.org/posts/org-gnosis-01/">Thanos Apollo: org-gnosis | Roam-like note taking system</a></li>
<li><a href="https://chrismaiorana.com/custom-function-updates/">Chris Maiorana: Some Custom Emacs Functions That Are Changing My Game</a> (<a href="https://www.reddit.com/r/planetemacs/comments/1gwm5yg/chris_maiorana_some_custom_emacs_functions_that/">Reddit</a>)</li>
<li>Import, export, and integration:
<ul class="org-ul">
<li><a href="https://yiming.dev/blog/2016/01/28/add-org-store-link-entry-for-elfeed/">Add org-store-link Entry for elfeed - Yiming Chen</a> (2016)</li>
<li><a href="https://gist.github.com/RyanFleck/3195387af3ebd302152ec3397457689a">Offline Scripture Text Insertion Functions - rcf-sword.el · GitHub</a> (<a href="https://www.youtube.com/watch?v=EcmtY1TtS0Q">YouTube</a>, <a href="https://www.reddit.com/r/emacs/comments/1gu8nw2/feature_showcase_scripture_insertion_in/">Reddit</a>)</li>
<li><a href="https://www.youtube.com/watch?v=OOL6hGLejFE">Copy images from the clipboard into a org file with yank-media</a> (<a href="https://www.reddit.com/r/planetemacs/comments/1gzfwgg/copy_images_from_the_clipboard_into_a_org_file/">Reddit</a>)</li>
<li><a href="https://defcon.social/@texaco/113517985678351374">Yank screen captures into org-mode using yank-media</a></li>
<li><a href="https://takeonrules.com/2024/11/25/exploring-the-reworking-of-a-blog-page/">Exploring the Reworking of a Blog Page // Take on Rules</a> (<a href="https://dice.camp/@takeonrules/113543882209412577">@takeonrules@dice.camp</a>)</li>
<li><a href="https://olano.dev/blog/my-blogging-setup-is-my-writing-process/">my blogging setup is my writing process | olano.dev</a> (<a href="https://hachyderm.io/@facundoolano/113538527867943156">@facundoolano@hachyderm.io</a>)</li>
<li><a href="https://qiita.com/skkzsh/items/ffb63459b9cce7dd6a8c?utm_campaign=popular_items&amp;utm_medium=feed&amp;utm_source=popular_items">GitHub org-mode記法 チートシート #Emacs - Qiita</a> (<a href="https://rss-mstdn.studiofreesia.com/@qiita/113520342215601797">@qiita@rss-mstdn.studiofreesia.com</a>)</li>
<li><a href="https://www.reddit.com/r/emacs/comments/1gv5x3k/exampleusing_orgpublish_with_orgroam_with_search/">Example:Using org-publish with org-roam (with search and backlinks)</a></li>
<li><a href="https://github.com/positron-solutions/dslide/releases/">Dslide 0.5.5 Release is Up.  The End of Power Point is Nigh.</a> (<a href="https://www.reddit.com/r/orgmode/comments/1gz9vr9/dslide_055_release_is_up_the_end_of_power_point/">Reddit</a>)</li>
</ul></li>
</ul></li>
<li>Coding:
<ul class="org-ul">
<li><a href="https://mas.to/@evgandr/113539503773563497">tip about setting gdb-many-windows to t to take advantage of a large monitor</a></li>
<li><a href="https://github.com/magit/orgit">Tip: using orgit to link to specific Git commits</a> (<a href="https://fosstodon.org/@wiersdorf/113517026467630082">@wiersdorf@fosstodon.org</a>)</li>
<li><a href="https://gist.github.com/notcancername/04cf2dcd0bce1a9b03e82bc4197e31a3">elisp python-on-region · GitHub</a> (<a href="https://mas.to/@cancername/113515785119074672">@cancername@mas.to</a>)</li>
<li><a href="https://mekeor.codeberg.page/emacs-auth-source-pass-instead-of-ssh-agent.html">Use Cache of Emacs Auth-Source Interface to Password-Store as Alternative to SSH-Agent for Magit?</a> (<a href="https://mastodon.catgirl.cloud/@mekeor/113506827782407469">@mekeor@mastodon.catgirl.cloud</a>)</li>
<li><a href="https://github.com/Nathan-Melaku/hyprlang-ts-mode">A Major mode for editing Hyperland config files in EMACS.</a> (<a href="https://www.reddit.com/r/emacs/comments/1gz2pel/a_major_mode_for_editing_hyperland_config_files/">Reddit</a>)</li>
</ul></li>
<li>Mail, news, and chat:
<ul class="org-ul">
<li><a href="https://todon.nl/@mousebot/113525733372105348">mastodon.el updates - group notifications, folding, thread views</a></li>
<li><a href="https://codeberg.org/quotuva/nnweb-page">quotuva/nnweb-page: nnweb extension to watch for changes in webpages - Codeberg.org</a></li>
<li><a href="https://www.reddit.com/r/emacs/comments/1guiwq1/emacsslack_is_back/">emacs-slack is back!</a></li>
</ul></li>
<li>Multimedia:
<ul class="org-ul">
<li><a href="https://github.com/ahihi/osceval">ahihi/osceval: evaluate Emacs Lisp code received over OSC</a> (<a href="https://anticapitalist.party/@ahihi/113542407935738082">@ahihi@anticapitalist.party</a>)</li>
<li><a href="https://social.rossabaker.com/@ross/113515511423053558">Tip about editing the XML of SVG files with C-c C-c</a></li>
<li><a href="https://sachachua.com/blog/2024/11/updating-my-audio-braindump-workflow-to-take-advantage-of-whisperx/">Sacha Chua: Updating my audio braindump workflow to take advantage of WhisperX</a></li>
<li><a href="https://sachachua.com/blog/2024/11/remove-filler-words-at-the-start-and-upcase-the-next-word/">Sacha Chua: Remove filler words at the start and upcase the next word</a></li>
</ul></li>
<li>AI:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1gxuewa/llms_are_made_for_emacs_using_ellama_ollama_is/">LLMs are made for Emacs! Using Ellama + Ollama is incredible - a big thank you to the community for this incredibly useful combination!</a></li>
<li><a href="https://lmno.lol/alvaro/chatgpt-shell-goes-multi-model">Alvaro Ramirez: chatgpt-shell goes multi-model</a> (<a href="https://lobste.rs/s/ekhclm/chatgpt_shell_goes_multi_model">lobste.rs</a>, <a href="https://www.reddit.com/r/emacs/comments/1gvma2c/chatgptshell_goes_multi_model_we_can_now_add/">Reddit</a>, <a href="https://indieweb.social/@xenodium/113514561619566385">@xenodium@indieweb.social</a> - looking for sponsors)</li>
<li><a href="https://lmno.lol/alvaro/chatgpt-shell-goes-offline">Alvaro Ramirez: chatgpt-shell goes offline</a> (<a href="https://www.reddit.com/r/emacs/comments/1gwqylv/for_folks_wanting_local_llms_chatgptshell_is/">Reddit</a>)</li>
<li><a href="https://lmno.lol/alvaro/llm-iterate-and-insert">Alvaro Ramirez: LLM iterate and insert</a></li>
</ul></li>
<li>Community:
<ul class="org-ul">
<li><a href="https://www.reddit.com/r/emacs/comments/1gvkske/weekly_tips_tricks_c_thread_20241120_week_47/">Weekly Tips, Tricks, &amp;c. Thread — 2024-11-20 / week 47</a></li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00534.html">My Resignation from Emacs Development</a> - Alan Mackenzie (<a href="https://news.ycombinator.com/item?id=42194726">HN</a>, <a href="https://www.reddit.com/r/emacs/comments/1gyngxc/can_anyone_explain_the_technical_aspects_of_this/">Reddit</a>)</li>
<li><a href="https://go.bsky.app/QV2VZNn">Emacs On Bluesky</a></li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="http://yummymelon.com/devnull/announcing-casual-calendar.html">Charles Choi: Announcing Casual Calendar</a></li>
<li><a href="https://fosstodon.org/@e11bits/113541584003607372">Tip about using world-clock when scheduling a meeting</a></li>
<li><a href="https://fosstodon.org/@robjperez/113510632114548607">Elisp snippet: open-line-above-and-indent</a></li>
<li><a href="https://emacs.dyerdwelling.family/emacs/20241118102423-emacs&#45;&#45;copying-buffer-to-kill-ring/">James Dyer: Reducing Friction when Copying Whole Buffer To Kill Ring</a></li>
<li><a href="https://github.com/TOTBWF/lyndon-mode">TOTBWF/lyndon-mode: Display the lyndon factorization of an emacs buffer</a> (<a href="https://types.pl/@totbwf/113518215727969501">@totbwf@types.pl</a>)</li>
<li><a href="https://indymnv.xyz/posts/2024_11_23_emacs_church/">¿Deseas Unirte a la Iglesia de Emacs? | Hanabi Factory</a> (<a href="https://fosstodon.org/@indymnv/113543313224149034">@indymnv@fosstodon.org</a>)</li>
<li><a href="https://lmno.lol/alvaro/toggle-macos-menu-bar-from-you-know-where">Alvaro Ramirez: Toggle macOS menu bar from you know where</a> (<a href="https://www.reddit.com/r/emacs/comments/1gx625l/toggling_macos_setting_menu_bar_auto_hide/">Reddit</a>)</li>
<li><a href="https://lists.gnu.org/archive/html/emacs-devel/2024-11/msg00550.html">Discussion about Elisp licensing (GPLv3+ recommended)</a></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=902696c3ae3ed046208c57de923362bb609da6df">Rust ts: fontify as type the possible suffix of number literals</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=097b685aa1c781afc298062f1cc76ab058cdb1a1">New option 'flyspell-delay-use-timer'</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=c66c0942ea9ac10e6d6324e472150de403a03b69">Use prefix argument in 'package-install-selected-packages'</a></li>
<li><a href="https://git.savannah.gnu.org/cgit/emacs.git/commit/etc/NEWS?id=b4e2d9a3af3dbd0ac7fa944e9386f667feb1c124">Add noconfirm to 'package-autoremove'</a></li>
</ul></li>
<li>New packages:
<ul class="org-ul">
<li><a target="_blank" href="http://melpa.org/#/imgur">imgur</a>: Imgur client (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/org-auto-export-pandoc">org-auto-export-pandoc</a>: Add org auto export with pandoc (MELPA)</li>
<li><a target="_blank" href="http://melpa.org/#/ox-typst">ox-typst</a>: Typst Back-End for Org Export Engine (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://www.reddit.com/r/planetemacs">r/planetemacs</a>, <a href="https://mastodon.social/tags/emacs">Mastodon #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://communick.news/c/emacs?dataType=Post&amp;page=1&amp;sort=New">communick.news</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="http://lists.gnu.org/archive/html/emacs-devel/2024-11">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/2024/11/2024-11-25-emacs-news/index.org">View org source for this post</a></div>]]></description>
		</item><item>
		<title>Remove filler words at the start and upcase the next word</title>
		<link>https://sachachua.com/blog/2024/11/remove-filler-words-at-the-start-and-upcase-the-next-word/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Thu, 21 Nov 2024 18:06:10 GMT</pubDate>
    <category>audio</category>
<category>speechtotext</category>
<category>emacs</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2024/11/remove-filler-words-at-the-start-and-upcase-the-next-word/</guid>
		<description><![CDATA[<div class="update" id="org3eab07d">
<p>
<span class="timestamp-wrapper"><span class="timestamp">[2024-11-21 Thu]</span></span>: Fixed the second filler words regexp, and make it work at the start of lines too. Thanks to <a href="https://mastodon.online/@arialdo/113522591084370172">@arialdo@mastodon.online</a> for the feedback!
</p>

</div>

<p>
Like many people, I tend to use "So", "And", "You
know", and "Uh" to bridge between sentences when
thinking. WhisperX does a reasonable job of
detecting sentences and splitting them up anyway,
but it leaves those filler words in at the start
of the sentence. I usually like to remove these
from transcripts so that they read more smoothly.
</p>

<p>
Here's a short Emacs Lisp function that removes
those filler words when they start a sentence,
capitalizing the next word. When called
interactively, it prompts while displaying an
overlay. When called from Emacs Lisp, it changes
without asking for confirmation.
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defvar</span> <span class="org-variable-name">my-filler-words-regexp</span> <span class="org-string">"</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">\\. </span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">^</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(?:</span></span><span class="org-string">So?</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">And</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">You know</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">Uh</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(?:</span></span><span class="org-string">,</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">\\.\\.\\.</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">? </span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">"</span>)
(<span class="org-keyword">defun</span> <span class="org-function-name">my-remove-filler-words-at-start</span> ()
  (<span class="org-keyword">interactive</span>)
  (<span class="org-keyword">save-excursion</span>
    (<span class="org-keyword">let</span> ((case-fold-search nil))
      (<span class="org-keyword">while</span> (re-search-forward my-filler-words-regexp nil t)
        (<span class="org-keyword">if</span> (<span class="org-keyword">and</span> (called-interactively-p) (not current-prefix-arg))
            (<span class="org-keyword">let</span> ((overlay (make-overlay (match-beginning 0)
                                         (match-end 0))))
              (overlay-put overlay <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">common-edit</span> t)
              (overlay-put
               overlay <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">display</span>
               (propertize (concat (match-string 0) <span class="org-string">" -&gt; "</span>
                                   (match-string 1)
                                   (upcase (match-string 2)))
                           <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">modus-themes-mark-sel</span>))
              (<span class="org-keyword">unwind-protect</span>
                  (<span class="org-keyword">pcase</span> (<span class="org-keyword">save-match-data</span> (read-char-choice <span class="org-string">"Replace (y/n/!/q)? "</span> <span class="org-string">"yn!q"</span>))
                    (?!
                     (replace-match (concat (match-string 1) (upcase (match-string 2))) t)
                     (<span class="org-keyword">while</span> (re-search-forward my-filler-words-regexp nil t)
                       (replace-match (concat (match-string 1) (upcase (match-string 2))) t)))
                    (?y
                     (replace-match (concat (match-string 1) (upcase (match-string 2))) t))
                    (?n nil)
                    (?q (goto-char (point-max))))
                (delete-overlay overlay)))
          (replace-match (concat (match-string 1) (upcase (match-string 2))) t))))))
</pre>
</div>


<div class="note">This is part of my <a href="https://sachachua.com/dotemacs#filler-start">Emacs configuration.</a></div><div><a href="https://sachachua.com/blog/2024/11/remove-filler-words-at-the-start-and-upcase-the-next-word/index.org">View org source for this post</a></div>]]></description>
		</item><item>
		<title>Wednesday weblog: week ending November 20, 2024</title>
		<link>https://sachachua.com/blog/2024/11/weekly-review-week-ending-november-20-2024/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Wed, 20 Nov 2024 18:58:10 GMT</pubDate>
    <category>weekly</category>
<category>weblog</category>
<category>review</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2024/11/weekly-review-week-ending-november-20-2024/</guid>
		<description><![CDATA[<ul class="org-ul">
<li><p>
<a href="https://social.sachachua.com/@sacha/statuses/01JCYBMES00AR5GY2QDQPTX444">Reflection on writing style - 2024-11-18T00:44:18.080Z</a>
</p>
<blockquote>
<p>
I notice that I have a lot more fun writing tiny workflow tweaks (mostly
<a href="https://social.sachachua.com/tags/emacs">#Emacs</a> ) and sharing them
on my blog versus, say, insightful reflections developed over a longer
period of time. I think it's the payoff of being able to enjoy those
tweaks. Sometimes abstract thoughts help me come to realizations that I
can then try to use to change my concrete behaviours, but it's a lot
less straightforward.
</p>

<p>
Also, I notice that I prefer to write with a curious, exploratory tone
instead of an authoritative one, which is probably also related to my
focus on "I" rather than "you". Kinda like: here's what I'm
experimenting with, sharing in case it's helpful (and also because I
want to be able to find it again), everyone's different and that's
awesome, curious about what works for you. :) I'm glad other people can
pull off being authoritative/persuasive, though.
</p>

<p>
23+ years <a href="https://social.sachachua.com/tags/blogging">#blogging</a> and still learning more!
</p>
</blockquote></li>
<li><p>
<a href="https://social.sachachua.com/@sacha/statuses/01JCXNMD7JS3673M56VCHC7D1V">Sketchnote blogs - 2024-11-17T18:19:47.826Z</a>
</p>
<blockquote>
<p>
I'm surprised by how few active blogs I could find about
<a href="https://social.sachachua.com/tags/sketchnotes">#sketchnotes</a> (or had
a category feed for sketchnotes). It's mostly <a href="https://rohdesign.com/weblog">rohdesign</a> and <a href="https://verbaltovisual.com/blog/">Verbal to
Visual</a>, I think. <a href="https://sketchnotearmy.com/">Sketchnote Army</a> still comes out with episodes, but the
posts themselves don't seem to be very visual, so people have to click
through to the person's website. I guess a lot of people are on
Instagram, but that doesn't seem to support RSS any more, and I'm not
really keen on scrolling through that. Ah well!
</p>
</blockquote></li>

<li><p>
<a href="https://social.sachachua.com/@sacha/statuses/01JCNEFSKDYD8PZVSH2ETSV714">dark mode sketch filter - 2024-11-14T13:41:01.165Z</a>
</p>
<blockquote>
<p>
I tweaked my dark-mode sketch CSS rule thanks to stefanvdwalt's comment.
Now I've got
</p>


<div class="org-src-container">
<pre class="src src-css">  <span class="org-builtin">@media</span> (prefers-color-scheme: dark) {
  <span class="org-css-selector">.sketch-full img, .gallery img, .left-doodle, .right-doodle,</span>
<span class="org-css-selector">  .center-doodle</span> { <span class="org-css-property">filter</span>: invert(1) hue-rotate(180deg) brightness(150%)
  contrast(0.9); }
  }
</pre>
</div>


<p>
Updated:
<a href="https://sachachua.com/blog/2024/11/using-a-coloured-template-on-my-supernote-a5x/">https://sachachua.com/blog/2024/11/using-a-coloured-template-on-my-supernote-a5x/</a>
</p>
</blockquote></li>
<li>Researched BBB hosting options and compared the costs with self-hosting on Linode.</li>
<li>Checked the shell scripts to make sure that hosts can start the videos by using shortcuts.</li>
</ul>
<div id="outline-container-orgccf3cc2" class="outline-2">
<h2 id="orgccf3cc2">Quotes</h2>
<div class="outline-text-2" id="text-orgccf3cc2">
<ul class="org-ul">
<li><p>
<a href="https://social.sachachua.com/@sacha/statuses/01JD27NZZ67X75RAE61KHW8SP0">Excerpts from Rebecca Solnit's "A Field Guide to Getting Lost" (2006) - 2024-11-19T12:52:11.878Z</a>
</p>
<blockquote>
<p>
One of the books that has just arrived from the library is "A Field
Guide to Getting Lost" (Rebecca Solnit, 2006), which was recommended to
me by <a href="https://emacs.ch/@janoli">@janoli</a> .<br>
<br>
Here are some snippets that have resonated with me so far:<br>
<br>
p5. Love, wisdom, grace, inspiration&#x2013;how do you go about finding these
things that are in some ways about extending the boundaries of the self
into unknown territory, about becoming someone else?<br>
<br>
p10. and there's another art of being at home in the unknown, so that
being in its midst isn't cause for panic or suffering, of being at home
with being lost.<br>
<br>
p14. The historian Aaron Sachs, about explorers: "In my opinion, their
most important skill was simply a sense of optimism about surviving and
finding their way."<br>
<br>
p80. Even in the everyday world of the present, an anxiety to survive
manifests itself in cars and clothes for far more rugged occasions than
those at hand, as though to express some sense of the toughness of
things and of readiness to face them. But the real difficulties, the
real arts of survival, seem to lie in more subtle realms. There, what's
called for is a kind of resilience of the psyche, a readiness to deal
with what comes next.<br>
<br>
p99. Probably it had its origins in protective urges, but it had gone
sour long ago.
</p>
</blockquote></li>

<li><p>
<a href="https://social.sachachua.com/@sacha/statuses/01JD25SNPP0XBPMD2MAYYCPMJ8">Excerpts from Bill Watterson's speech at Kenyon College in 1990 - 2024-11-19T12:19:15.286Z</a>
</p>
<blockquote>
<p>
Thanks to <a href="https://mas.to/@kims">@kims</a> for sharing Bill Watterson's
speech at Kenyon College, Gambier Ohio, to the 1990 graduating class
(<a href="https://web.mit.edu/jmorzins/www/C-H-speech.html">https://web.mit.edu/jmorzins/www/C-H-speech.html</a>)<br>
<br>
This section particularly resonated with me: "Creating a life that
reflects your values and satisfies your soul is a rare achievement. In a
culture that relentlessly promotes avarice and excess as the good life,
a person happy doing his own work is usually considered an eccentric, if
not a subversive. Ambition is only understood if it's to rise to the top
of some imaginary ladder of success. Someone who takes an undemanding
job because it affords him the time to pursue other interests and
activities is considered a flake. A person who abandons a career in
order to stay home and raise children is considered not to be living up
to his potential-as if a job title and salary are the sole measure of
human worth."<br>
<br>
I also appreciated his resistance to commercializing Calvin &amp; Hobbes:<br>
"Selling out is usually more a matter of buying in. Sell out, and you're
really buying into someone else's system of values, rules and rewards.<br>
The so-called 'opportunity' I faced would have meant giving up my
individual voice for that of a money-grubbing corporation. It would have
meant my purpose in writing was to sell things, not say things. My pride
in craft would be sacrificed to the efficiency of mass production and
the work of assistants. Authorship would become committee decision.
Creativity would become work for pay. Art would turn into commerce. In
short, money was supposed to supply all the meaning I'd need.<br>
What the syndicate wanted to do, in other words, was turn my comic strip
into everything calculated, empty and robotic that I hated about my old
job. They would turn my characters into television hucksters and T-shirt
sloganeers and deprive me of characters that actually expressed my own
thoughts."<br>
</p>
</blockquote></li>
</ul>
</div>
</div>
<div id="outline-container-orgb741c1a" class="outline-2">
<h2 id="orgb741c1a">Other links</h2>
<div class="outline-text-2" id="text-orgb741c1a">
<ul class="org-ul">
<li>I was thinking about making a treemap visualization of my Org subtrees to help with noticing topic clusters.
<ul class="org-ul">
<li><a href="https://github.com/nikolaydubina/treemap">nikolaydubina/treemap: 🍬 Pretty Treemaps</a></li>
<li><a href="https://cs.lnu.se/isovis/courses/spring07/dac751/papers/TreemapLayoutInfoVis2001.pdf">Ordered Treemap Layouts</a></li>
<li><a href="https://www3.cs.stonybrook.edu/~mueller/teaching/cse591_visAnalytics/treeMaps.pdf">TreeMap layouts</a></li>
</ul></li>
<li>Eleventy:
<ul class="org-ul">
<li><a href="https://postgraph.rknight.me/">Eleventy Post Graph</a> - calendar heat map view of Eleventy posts</li>
<li><a href="https://hamatti.org/posts/search-webmentions-and-microformats/">Search, Webmentions and microformats : Juha-Matti Santala</a> - I'd like to add this sometime</li>
</ul></li>
<li>Other:
<ul class="org-ul">
<li><a href="https://www.tannerchristensen.com/notes/using-a-work-journal-to-create-design-case-studies">Using a work journal to create design case studies - Tanner Christensen's notes</a></li>
<li><a href="https://82mhz.net/posts/2024/11/a-very-cool-internet-thing/">YouTube RSS</a></li>
<li><a href="https://stackoverflow.com/questions/63034993/replace-a-color-in-a-rectangular-region">imagemagick - Replace a color in a rectangular region - Stack Overflow</a> - I want to select a rectangle and change a specific colour inside it, based on <a href="https://sachachua.com/blog/2024/11/emacs-extract-part-of-an-image-to-another-file/">Emacs: Extract part of an image to another file</a></li>
<li><a href="https://sketchnotearmy.com/blog/2019/12/10/visual-calendar">The Visual Calendar from Tanny McGregor — Sketchnote Army</a> - hmm, might try this for my daily moments</li>
</ul></li>
</ul>
</div>
</div>
<div><a href="https://sachachua.com/blog/2024/11/weekly-review-week-ending-november-20-2024/index.org">View org source for this post</a></div>]]></description>
		</item><item>
		<title>Updating my audio braindump workflow to take advantage of WhisperX</title>
		<link>https://sachachua.com/blog/2024/11/updating-my-audio-braindump-workflow-to-take-advantage-of-whisperx/</link>
		<dc:creator><![CDATA[Sacha Chua]]></dc:creator>
		<pubDate>Tue, 19 Nov 2024 13:33:59 GMT</pubDate>
    <category>emacs</category>
<category>speechtotext</category>
<category>org</category>
		<guid isPermaLink="false">https://sachachua.com/blog/2024/11/updating-my-audio-braindump-workflow-to-take-advantage-of-whisperx/</guid>
		<description><![CDATA[<p>
I get word timestamps for free when I transcribe
with <a href="https://github.com/m-bain/whisperX">WhisperX</a>, so I can skip the Aeneas alignment
step. That means I can update my <a href="https://sachachua.com/blog/2023/12/audio-braindump-workflow-tweaks-adding-org-mode-hyperlinks-to-recordings-based-on-keywords/">previous code for
handling audio braindumps</a> . Breaking the transcript up into sections  Also, I recently
updated <a href="https://github.com/sachac/subed/blob/main/subed/subed-word-data.el">subed-word-data</a> to <a href="https://sachachua.com/blog/2024/11/yay-emacs-7-using-word-timing-in-caption-editing-with-subed-word-data/">colour words based on
their transcription score</a>, which draws my
attention to things that might be uncertain.
</p>

<p>
Here's what it looks like when I have the post,
the transcript, and the annotated PDF.
</p>


<figure id="orgbe95f63">
<a href="https://sachachua.com/blog/2024/11/updating-my-audio-braindump-workflow-to-take-advantage-of-whisperx/2024-11-17_20-44-30.png"><img src="https://sachachua.com/blog/2024/11/updating-my-audio-braindump-workflow-to-take-advantage-of-whisperx/2024-11-17_20-44-30.png" alt="2024-11-17_20-44-30.png"></a>

<figcaption><span class="figure-number">Figure 1: </span>Screenshot of draft, transcript, and PDF</figcaption>
</figure>

<p>
Here's what I needed to implement <code>my-audio-braindump-from-whisperx-json</code> (plus some code from  <a href="https://sachachua.com/blog/2023/12/audio-braindump-workflow-tweaks-adding-org-mode-hyperlinks-to-recordings-based-on-keywords/">my previous audio braindump workflow</a>):
</p>


<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span class="org-keyword">defun</span> <span class="org-function-name">my-whisperx-word-list</span> (file)
  (<span class="org-keyword">let*</span> ((json-object-type <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">alist</span>)
         (json-array-type <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">list</span>))
    (seq-mapcat (<span class="org-keyword">lambda</span> (seg)
                  (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">words</span> seg))
                (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">segments</span> (json-read-file file)))))

<span class="org-comment-delimiter">;; </span><span class="org-comment">(seq-take (my-whisperx-word-list (my-latest-file "~/sync/recordings" "\\.json")) 10)</span>
(<span class="org-keyword">defun</span> <span class="org-function-name">my-whisperx-insert-word-list</span> (words)
  <span class="org-doc">"Inserts WORDS with text properties."</span>
  (<span class="org-keyword">require</span> <span class="org-highlight-quoted-quote">'</span><span class="org-constant">subed-word-data</span>)
  (mapc (<span class="org-keyword">lambda</span> (word)
            (<span class="org-keyword">let</span> ((start (point)))
              (insert
               (alist-get <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">word</span> word))
              (subed-word-data&#45;&#45;add-word-properties start (point) word)
              (insert <span class="org-string">" "</span>)))
        words))

(<span class="org-keyword">defun</span> <span class="org-function-name">my-audio-braindump-turn-sections-into-headings</span> ()
  (<span class="org-keyword">interactive</span>)
  (goto-char (point-min))
  (<span class="org-keyword">while</span> (re-search-forward <span class="org-string">"START SECTION </span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">.+?</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string"> STOP SECTION"</span> nil t)
    (replace-match
     (<span class="org-keyword">save-match-data</span>
       (format
        <span class="org-string">"\n*** %s\n"</span>
        (<span class="org-keyword">save-match-data</span> (string-trim (replace-regexp-in-string <span class="org-string">"^[,\\.]</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">[,\\.]$"</span> <span class="org-string">""</span> (match-string 1))))))
     nil t)
    (<span class="org-keyword">let</span> ((prop-match (<span class="org-keyword">save-excursion</span> (text-property-search-forward <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">subed-word-data-start</span>))))
      (<span class="org-keyword">when</span> prop-match
        (org-entry-put (point) <span class="org-string">"START"</span> (format-seconds <span class="org-string">"%02h:%02m:%02s"</span> (prop-match-value prop-match)))))))

(<span class="org-keyword">defun</span> <span class="org-function-name">my-audio-braindump-split-sentences</span> ()
  (<span class="org-keyword">interactive</span>)
  (goto-char (point-min))
  (<span class="org-keyword">while</span> (re-search-forward <span class="org-string">"[a-z]\\. "</span> nil t)
    (replace-match (concat (string-trim (match-string 0)) <span class="org-string">"\n"</span>) )))

(<span class="org-keyword">defun</span> <span class="org-function-name">my-audio-braindump-restructure</span> ()
  (<span class="org-keyword">interactive</span>)
  (goto-char (point-min))
  (my-subed-fix-common-errors)
  (org-mode)
  (my-audio-braindump-prepare-alignment-breaks)
  (my-audio-braindump-turn-sections-into-headings)
  (my-audio-braindump-split-sentences)
  (goto-char (point-min))
  (my-remove-filler-words-at-start))

(<span class="org-keyword">defun</span> <span class="org-function-name">my-audio-braindump-from-whisperx-json</span> (file)
  (<span class="org-keyword">interactive</span> (list (read-file-name <span class="org-string">"JSON: "</span> <span class="org-string">"~/sync/recordings/"</span> nil nil nil (<span class="org-keyword">lambda</span> (f) (string-match <span class="org-string">"\\.json\\'"</span> f)))))
  <span class="org-comment-delimiter">;; </span><span class="org-comment">put them all into a buffer</span>
  (<span class="org-keyword">with-current-buffer</span> (get-buffer-create <span class="org-string">"*Words*"</span>)
    (erase-buffer)
    (fundamental-mode)
    (my-whisperx-insert-word-list (my-whisperx-word-list file))
    (my-audio-braindump-restructure)
    (goto-char (point-min))
    (switch-to-buffer (current-buffer))))

(<span class="org-keyword">defun</span> <span class="org-function-name">my-audio-braindump-process-text</span> (file)
  (<span class="org-keyword">interactive</span> (list (read-file-name <span class="org-string">"Text: "</span> <span class="org-string">"~/sync/recordings/"</span> nil nil nil (<span class="org-keyword">lambda</span> (f) (string-match <span class="org-string">"\\.txt\\'"</span> f)))))
  (<span class="org-keyword">with-current-buffer</span> (find-file-noselect file)
    (my-audio-braindump-restructure)
    (save-buffer)))
<span class="org-comment-delimiter">;; </span><span class="org-comment">(my-audio-braindump-from-whisperx-json (my-latest-file "~/sync/recordings" "\\.json"))</span>
</pre>
</div>


<p>
Ideas for next steps:
</p>

<ul class="org-ul">
<li>I can change my processing script to split up the Whisper TXT into sections and automatically make the PDF with nice sections.</li>
<li>I can add reminders and other callouts. I can style them, and I can copy reminders into a different section for easier processing.</li>
<li>I can look into extracting PDF annotations so that I can jump to the next highlight or copy highlighted text.</li>
</ul>

<div class="note">This is part of my <a href="https://sachachua.com/dotemacs#writing-and-editing">Emacs configuration.</a></div><div><a href="https://sachachua.com/blog/2024/11/updating-my-audio-braindump-workflow-to-take-advantage-of-whisperx/index.org">View org source for this post</a></div>]]></description>
		</item>
	</channel>
</rss>