Shared posts

09 Mar 01:30

Emacs Redux: Customizing Font-Lock in the Age of Tree-sitter

by Emacs Redux
Tom Roche

EXCELLENT detailed summary

I recently wrote about building major modes with Tree-sitter over on batsov.com, covering the mode author’s perspective. But what about the user’s perspective? If you’re using a Tree-sitter-powered major mode, how do you actually customize the highlighting?

This is another article in a recent streak inspired by my work on neocaml, clojure-ts-mode, and asciidoc-mode. Building three Tree-sitter modes across very different languages has given me a good feel for both sides of the font-lock equation – and I keep running into users who are puzzled by how different the new system is from the old regex-based world.

This post covers what changed, what you can control, and how to make Tree-sitter font-lock work exactly the way you want.

The Old World: Regex Font-Lock

Traditional font-lock in Emacs actually has two phases. First, syntactic fontification handles comments and strings using the buffer’s syntax table and parse-partial-sexp (implemented in C) – this isn’t regexp-based at all. Second, keyword fontification runs the regexps in font-lock-keywords against the buffer text to highlight everything else: language keywords, types, function names, and so on. When people talk about “regex font-lock,” they usually mean this second phase, which is where most of the mode-specific highlighting lives and where most of the customization happens.

If you wanted to customize it, you’d manipulate font-lock-keywords directly:

;; Add a custom highlighting rule in the old world
(font-lock-add-keywords 'emacs-lisp-mode
  '(("\\<\\(FIXME\\|TODO\\)\\>" 1 'font-lock-warning-face prepend)))

The downsides are well-known: regexps can’t understand nesting, they break on multi-line constructs, and getting them right for a real programming language is a never-ending battle of edge cases.

The New World: Tree-sitter Font-Lock

Tree-sitter font-lock is fundamentally different. Instead of matching text with regexps, it queries the syntax tree. A major mode defines treesit-font-lock-settings – a list of Tree-sitter queries paired with faces. Each query pattern matches node types in the parse tree, not text patterns.

This means highlighting is structurally correct by definition. A string is highlighted as a string because the parser identified it as a string node, not because a regexp happened to match quote characters. If the code has a syntax error, the parser still produces a (partial) tree, and highlighting degrades gracefully instead of going haywire.

There’s also a significant performance difference. With regex font-lock, every regexp in font-lock-keywords runs against every line in the visible region on each update – more rules means linearly more work, and a complex major mode can easily have dozens of regexps. Poorly written patterns with nested quantifiers can trigger catastrophic backtracking, causing visible hangs on certain inputs. Multi-line font-lock (via font-lock-multiline or jit-lock-contextually) makes things worse, requiring re-scanning of larger regions that’s both expensive and fragile. Tree-sitter sidesteps all of this: after the initial parse, edits only re-parse the changed portion of the syntax tree, and font-lock queries run against the already-built tree rather than scanning raw text. The result is highlighting that scales much better with buffer size and rule complexity.

The trade-off is that customization works differently. You can’t just add a regexp to a list anymore. But the new system offers its own kind of flexibility, and in many ways it’s more powerful.

Note: The Emacs manual covers Tree-sitter font-lock in the Parser-based Font Lock section. For the full picture of Tree-sitter integration in Emacs, see Parsing Program Source.

Feature Levels: The Coarse Knob

Every Tree-sitter major mode organizes its font-lock rules into features – named groups of related highlighting rules. Features are then arranged into 4 levels, from minimal to maximal. The Emacs manual recommends the following conventions for what goes into each level:

  • Level 1: The absolute minimum – typically comment and definition
  • Level 2: Key language constructs – keyword, string, type
  • Level 3: Everything that can be reasonably fontified (this is the default level)
  • Level 4: Marginally useful highlighting – things like bracket, delimiter, operator

In practice, many modes don’t follow these conventions precisely. Some put number at level 2, others at level 3. Some include variable at level 1, others at level 4. The inconsistency across modes means that setting treesit-font-lock-level to the same number in different modes can give you quite different results – which is one more reason you might want the fine-grained control described in the next section.1

It’s also worth noting that the feature names themselves are not standardized. There are many common ones you’ll see across modes – comment, string, keyword, type, number, bracket, operator, definition, function, variable, constant, builtin – but individual modes often define features specific to their language. Clojure has quote, deref, and tagged-literals; OCaml might have attribute; a markup language mode might have heading or link. Different modes also vary in how granular they get: some expose a rich set of features that let you fine-tune almost every aspect of highlighting, while others are more spartan and stick to the basics.

The bottom line is that you’ll always have to check what your particular mode offers. The easiest way is M-x describe-variable RET treesit-font-lock-feature-list in a buffer using that mode – it shows all features organized by level. You can also inspect the mode’s source directly by looking at how it populates treesit-font-lock-settings (try M-x find-library to jump to the mode’s source).

For example, clojure-ts-mode defines:

Level Features
1 comment, definition, variable
2 keyword, string, char, symbol, builtin, type
3 constant, number, quote, metadata, doc, regex
4 bracket, deref, function, tagged-literals

And neocaml:

Level Features
1 comment, definition
2 keyword, string, number
3 attribute, builtin, constant, type
4 operator, bracket, delimiter, variable, function

The default level is 3, which is a reasonable middle ground for most people. You can change it globally:

(setq treesit-font-lock-level 4)  ;; maximum highlighting

Or per-mode via a hook:

(defun my-clojure-ts-font-lock ()
  (setq-local treesit-font-lock-level 2))  ;; minimal: just keywords and strings

(add-hook 'clojure-ts-mode-hook #'my-clojure-ts-font-lock)

This is the equivalent of the old font-lock-maximum-decoration variable, but more principled – features at each level are explicitly chosen by the mode author rather than being an arbitrary “how much highlighting do you want?” dial.

Note: The Emacs manual describes this system in detail under Font Lock and Syntax.

Cherry-Picking Features: The Fine Knob

Levels are a blunt instrument. What if you want operators and variables (level 4) but not brackets and delimiters (also level 4)? You can’t express that with a single number.

Enter treesit-font-lock-recompute-features. This function lets you explicitly enable or disable individual features, regardless of level:

(defun my-neocaml-font-lock ()
  (treesit-font-lock-recompute-features
   '(comment definition keyword string number
     attribute builtin constant type operator variable)  ;; enable
   '(bracket delimiter function)))                       ;; disable

(add-hook 'neocaml-base-mode-hook #'my-neocaml-font-lock)

You can also call it interactively with M-x treesit-font-lock-recompute-features to experiment in the current buffer before committing to a configuration.

This used to be hard in the old regex world – you’d have to dig into font-lock-keywords, figure out which entries corresponded to which syntactic elements, and surgically remove them. Emacs 29 improved the situation with font-lock-ignore, which lets you declaratively suppress specific font-lock rules by mode, face, or regexp. Still, the Tree-sitter approach is arguably cleaner: features are named groups designed for exactly this kind of cherry-picking, rather than an escape hatch bolted on after the fact.

Customizing Faces

This part works the same as before – faces are faces. Tree-sitter modes use the standard font-lock-*-face family, so your theme applies automatically. If you want to tweak a specific face:

(custom-set-faces
 '(font-lock-type-face ((t (:foreground "DarkSeaGreen4"))))
 '(font-lock-property-use-face ((t (:foreground "DarkOrange3")))))

One thing to note: Tree-sitter modes use some of the newer faces introduced in Emacs 29, like font-lock-operator-face, font-lock-bracket-face, font-lock-number-face, font-lock-property-use-face, and font-lock-escape-face. These didn’t exist in the old world (there was no concept of “operator highlighting” in traditional font-lock), so older themes may not define them. If your theme makes operators and variables look the same, that’s why – the theme predates these faces.

Adding Custom Rules

This is where Tree-sitter font-lock really shines compared to the old system. Instead of writing regexps, you write Tree-sitter queries that match on the actual syntax tree.

Say you want to distinguish block-delimiting keywords (begin/end, struct/sig) from control-flow keywords (if/then/else) in OCaml:

(defface my-block-keyword-face
  '((t :inherit font-lock-keyword-face :weight bold))
  "Face for block-delimiting keywords.")

(defun my-neocaml-block-keywords ()
  (setq treesit-font-lock-settings
        (append treesit-font-lock-settings
                (treesit-font-lock-rules
                 :language (treesit-parser-language
                            (car (treesit-parser-list)))
                 :override t
                 :feature 'keyword
                 '(["begin" "end" "struct" "sig" "object"]
                   @my-block-keyword-face))))
  (treesit-font-lock-recompute-features))

(add-hook 'neocaml-base-mode-hook #'my-neocaml-block-keywords)

The :override t is important – without it, the new rule won’t overwrite faces already applied by the mode’s built-in rules. And the :feature keyword assigns the rule to a feature group, so it respects the level/feature system.

Note: The full query syntax is documented in the Pattern Matching section of the Emacs manual – it covers node types, field names, predicates, wildcards, and more.

For comparison, here’s what you’d need in the old regex world to highlight a specific set of keywords with a different face:

;; Old world: fragile, doesn't understand syntax
(font-lock-add-keywords 'some-mode
  '(("\\<\\(begin\\|end\\|struct\\|sig\\)\\>" . 'my-block-keyword-face)))

The regex version looks simpler, but it’ll match begin inside strings, comments, and anywhere else the text appears. The Tree-sitter version only matches actual keyword nodes in the syntax tree.

Exploring the Syntax Tree

The killer feature for customization is M-x treesit-explore-mode. It opens a live view of the syntax tree for the current buffer. As you move point, the explorer highlights the corresponding node and shows its type, field name, and position.

This is indispensable when writing custom font-lock rules. Want to know what node type OCaml labels are? Put point on one, check the explorer: it’s label_name. Want to highlight it? Write a query for (label_name). No more guessing what regexp might work.

Another useful tool is M-x treesit-inspect-node-at-point, which shows information about the node at point in the echo area without opening a separate window.

The Cheat Sheet

Here’s a quick reference for the key differences:

Aspect Regex font-lock Tree-sitter font-lock
Rules defined by font-lock-keywords treesit-font-lock-settings
Matching mechanism Regular expressions on text Queries on syntax tree nodes
Granularity control font-lock-maximum-decoration treesit-font-lock-level + features
Adding rules font-lock-add-keywords Append to treesit-font-lock-settings
Removing rules font-lock-remove-keywords treesit-font-lock-recompute-features
Suppressing rules font-lock-ignore (Emacs 29+) Disable features via level or cherry-pick
Debugging re-builder treesit-explore-mode
Handles nesting Poorly Correctly (by definition)
Multi-line constructs Fragile Works naturally
Performance O(n) per regexp per line Incremental, only re-parses changes

Closing Thoughts

The shift from regex to Tree-sitter font-lock is one of the bigger under-the-hood changes in modern Emacs. The customization model is different – you’re working with structured queries instead of text patterns – but once you internalize it, it’s arguably more intuitive. You say “highlight this kind of syntax node” instead of “highlight text that matches this pattern and hope it doesn’t match inside a string.”

The feature system with its levels, cherry-picking, and custom rules gives you more control than the old font-lock-maximum-decoration ever did. And treesit-explore-mode makes it easy to discover what’s available.

If you haven’t looked at your Tree-sitter mode’s font-lock features yet, try M-x describe-variable RET treesit-font-lock-feature-list in a Tree-sitter buffer. You might be surprised by how much you can tweak.

  1. Writing this article has been more helpful than I expected – halfway through, I realized my own neocaml had function banished to level 4 and number promoted to level 2. Physician, heal thyself. 

06 Mar 19:40

The News Quiz: Ep8. Flight risks and fly-tips

Tom Roche

EXCELLENT--NQ (esp Zoe Lyons) returns to amusing form ... just in time for a 6-week break :-(

Joining Andy for the final episode of this series are Simon Evans, Zoe Lyons, Cindy Yu and Ahir Shah and not one of them can be deemed a flight risk. Along with the latest on Peter Mandelson’s arrest they discuss how UK politics is no longer a two-party system with the Greens and Reform taking centre stage in Gorton and Denton, why Trump’s State of the Union address could have been mercifully shorter and why the Chagos Islands are off limits.

Written by Andy Zaltzman.

With additional material by: Mike Shephard and Pravanya Pillay Producer: Georgia Keating Executive Producer: Richard Morris Production Coordinator: Giulia Lopes Mazzu Sound Editor: Marc Willcox

A BBC Studios Production for Radio 4.

06 Mar 15:44

Episode 555 - The Iran/Epstein Connection (w/ Aaron Good & Tonery Rose)

Tom Roche

VERY EXCELLENT, very informative (much like any given episode of [/American Exception/](https://feed.podbean.com/aarontgood/feed.xml))

Political scientist, author of American Exception: Empire & The Deep State, & host of the American Exception podcast returns to Bad Faith with independent researcher focused on diplomatic history, Tonery Rose, to discuss Epstein, Iran Contra, Les Wexner, & th Zionist takeover of the deep state that helped lead to the current war against Iran.

Subscribe to Bad Faith on YouTube for video of this episode. Find Bad Faith on Twitter (@badfaithpod) and Instagram (@badfaithpod).

Produced by Armand Aviram.

Theme by Nick Thorburn (@nickfromislands).

04 Mar 16:45

E239 - Iran and the End of Restraint w/ Trita Parsi and Akbar Shahid Ahmed

Tom Roche

EXCELLENT (minus the pre- and inter-audio ads)

Subscribe now⁠ to skip the ads and get all of our episodes.

Danny and Derek are back with a two-part episode on the war with Iran. First, they speak with Trita Parsi of the Quincy Institute about the Trump administration’s decision to go to war, the belief that assassinating Ayatollah Khamenei would cause the regime to implode, the structure and failure of pre-war negotiations, the influence of Israeli officials and hawks, the potential for sending in ground troops, and the impact on Iranian society. They then speak with Akbar Shahid Ahmed, Senior Diplomatic Correspondent at HuffPost, about the erosion of rules of engagement, the alignment of U.S. and Israeli military strategy, congressional inaction, compliant allies, and whether any realistic off-ramps remain.

Read Akbar’s piece “Trump Says He Brought 'Justice' To Iran. His War Boosts Fears The U.S. Has Gone Rogue.”

Keep up with Quincy’s work at Responsible Statecraft and Always at War.

Learn more about your ad choices. Visit megaphone.fm/adchoices

03 Mar 03:59

NATO Cheerleading Squad

Tom Roche

excellent despite no Ciarán

We talk about the transformation of the Munich Security Conference and Israel and the USs strikes on Iran

02 Mar 17:14

Irreal: A Diff Preview Of A Regex Replace

by Irreal
Tom Roche

pullquote (lightly edited):
> [Suppose you] want to do a query-replace-regexp on a large file—or even multiple files—but you’re a bit nervous[. In] Emacs 30 [`replace-regexp-as-diff` is a new command] that runs the regexp replace process but instead of actually making the changes, it produces a diff file in a separate buffer. That way you can see all the changes that would be made. If you’re happy with them, you can simply apply the diff buffer as a patch with diff-ediff-patch to apply them. If you’re not happy, you can simply delete the diff buffer.

When it rains, it pours. Sometimes I find it hard to find an interesting topic to write about. Other times, like today, four or five topics pop up. The problem is that today is Sunday and tomorrow Sacha will be publishing her weekly Emacs News. I generally try not to write about things that she’s already covered but I may have to break that rule for some of these interesting topics.

For me, the most exciting thing I’ve found today is Bozhidar Batsov’s post on Preview Regex Replacements as Diffs. It addresses a problem we’ve all had. You want to do a query-replace-regexp on a large file—or even multiple files—but you’re a bit nervous that maybe your regex isn’t quite right and the command might make a change you don’t want. So you step through each change, which is time consuming and a pain.

As Batsov explains, that got a lot easier in Emacs 30. There’s a new command, replace-regexp-as-diff that runs the regexp replace process but instead of actually making the changes, it produces a diff file in a separate buffer. That way you can see all the changes that would be made. If you’re happy with them, you can simply apply the diff buffer as a patch with diff-ediff-patch to apply them. If you’re not happy, you can simply delete the diff buffer.

There are two related commands: multi-file-replace-regexp-as-diff and dired-do-replace-regexp-as-diff for handling multiple files. The Dired variety is probably the easiest to use because you can simply mark the files you want to change in a Dired buffer and call dired-do-replace-regexp-as-diff to generate a diff for them all.

Batsov speculates that in the age of AI, people won’t be as interested in this type of command. I disagree strongly. It’s useful not only for coding but for writing pose or any other text-based file that you might want to edit.

If you’re an Emacs user, I urge you to take a look at Batsov’s post. It’s about a really useful new(ish) feature of Emacs that you can probably make good use of.

01 Mar 20:47

#694 - The Kevin Who Refused

Tom Roche

EXCELLENT analysis of both art and political economy--MU doing its thing

What would happen if the Christian movie industry tried to make its own Everything Everywhere All at Once? Brother, you don't have to imagine! We discuss Angel Studios' THE SHIFT (2023), starring our favourite actor, Neal McDonough. PLUS: We check Keir Starmer's pulse after last week's UK by-election, and assess the looming Warner/Paramount merger. Join us on Patreon for an extra episode every week - https://www.patreon.com/michaelandus "The Ground Game is Back" by Grace Blakeley - https://substack.com/home/post/p-189343412 "Starmer is Driving Labour to Disaster" by Jon Trickett - https://tribunemag.co.uk/2026/02/starmer-is-driving-labour-to-disaster
01 Mar 17:19

Epstein Fallout - Gumby and Bryce Greene (AE233)

Tom Roche

excellent, but only ~14 min content (hard truncate)

To hear this episode in it's entirety, subscribe to our Patreon at https://patreon.com/americanexception

Gumby joins Bryce and Aaron to discuss the life and times of Jeffrey Epstein as portrayed in the latest government releases.

American Exception followers on Patreon get first access to new episodes, and paid subscribers enjoy the entire library of the best historical analysis of deep events on the American Exception podcast. 

Subscribe to our Patreon at https://patreon.com/americanexception

We are also on youtube at https://www.youtube.com/@americanexception9407

Music: "I Can't Seem To Think" by Mock Orange

Special thanks to Dana Chavarria for producing the episode!!

28 Feb 18:18

Irreal: Harp: A Private Health Records App

by Irreal
Tom Roche

pullquote:
> [Harp](https://lepisma.xyz/2026/02/24/harp/#fnr.1) [is] Android app that should soon be available on the Play Store, [currently] available for free on F-Droid. You can also checkout the source at [Sourcehut](https://git.sr.ht/~lepisma/harp-kmp). Finally, you can find out more about Harp [here](https://docs.lepisma.xyz/harp/).

Abhinav Tushar likes to curate what he calls macro health data. That means things like ailments, aches and pains, and other symptoms one might want to mention to the doctor during an appointment. After researching the currently available apps, he realized there was nothing that met his needs so he decided to roll his own. The result is Harp, an Android app that should soon be available on the Play Store. It’s also available for free on Fdroid. You can also checkout the source at Sourcehut. Finally, you can find out more about Harp here.

Like my favorite app Journelly, Tushar decided to keep his data in Org Mode. That, of course, brings the immediate benefit of making the data viewable and editable in Emacs or any other editor for that matter. It’s one of the reasons I’m so fond of Journelly. A couple more apps like these and we could see Org markup evolve into a sort of universal app data storage language.

Right now, only an Android version of Harp exists but his near term plans include an iOS version. That good news for those of us in the Apple camp. The main difficulty appears to be navigating the Apple App Store submission maze, which is well known for its opaque rules.

Take a look at Tushar’s post for some more of his short term goals. It looks like a handy app—and, of course, one that keeps its data in Org mode—so it’s definitely worth trying out. I’ll probably give it a try when the iOS version appears and will let you know what I think of it then.

28 Feb 03:43

Radio War Nerd EP 584 — World of Wars: US/UK Grotesque, Looming Iran War

by mail@yashalevine.com (Gary Brecher)
Tom Roche

good enough, but just bant

Co-hosts John Dolan & Mark Ames
28 Feb 01:59

Huckabee Admits Insanity of Christian Zionism on Tucker: Israel Can Take ‘All’ of Middle East

Tom Roche

EXCELLENT

Mike Huckabee’s reference to borders stretching “from the Euphrates to the Nile” has sparked a diplomatic firestorm across the Middle East.

Even governments that normalized relations with Israel — including the UAE — publicly condemned the remarks. Why did this rhetoric hit such a nerve? And is it really new, or just unusually blunt?

At the same time, tensions between Israel and Saudi Arabia are rising, fractures between Riyadh and Abu Dhabi are deepening, and the risk of a U.S.–Iran war looms in the background, a conflict that could drag Gulf states into a confrontation they don’t control.

What does this moment reveal about the future of normalization, regional alliances, and the possibility of a wider war?

Rania Khalek was joined by Giorgio Cafiero on Dispatches to break it all down.

🎥 The full episode is available to Breakthrough News members.
Become a member at: https://www.patreon.com/BreakthroughNews

27 Feb 23:04

The News Quiz: Ep7. The worst birthday ever

Tom Roche

amusing--better than past few weeks--mostly due to the always-reliable Mark Steel

Top of the agenda this week is some royal breaking news - who got a special birthday visit from the police? We’ll be analysing yet another government U-turn and see who’s emerged from the shadows for Nigel Farage’s proposed ‘shadow cabinet'. Plus a couple of stories on robots and aliens - something for everyone.

Joining Andy this week is Mark Steel, Daliso Chaponda, Coco Khan and Bella Hull.

Written by Andy Zaltzman.

With additional material by: Jade Gebbie, Ruth Husko and Peter Tellouche. Producer: Georgia Keating Executive Producer: Pete Strauss Production Coordinator: Giulia Lopes Mazzu Sound Editor: Marc Willcox

A BBC Studios Production for Radio 4.

27 Feb 21:11

Episode 553 - AOC, Zohran & The Left's Labor Pains (w/ Kshama Sawant)

Tom Roche

Sawant VERY EXCELLENT as usual

Subscribe to Bad Faith on Patreon to instantly unlock our full premium episode library: http://patreon.com/badfaithpodcast

Washington Congressional candidate & former Socialist Seattle City Councilmember Kshama Sawant returns to Bad Faith to give her no-holds-barred assessment of left elected officials as they navigate the Democratic Establishment, to weigh in on the Epstein files -- including Chomsky's involvement --, and to provide a clear blueprint for how the left should resist. She also weighs in on the limits of labor given business unionism capture and strategies to overcome it, while updating us on the progress of her Congressional campaign against Zionist corporatist Adam Smith.

Subscribe to Bad Faith on YouTube for video of this episode. Find Bad Faith on Twitter (@badfaithpod) and Instagram (@badfaithpod).

Produced by Armand Aviram.

Theme by Nick Thorburn (@nickfromislands).

25 Feb 19:50

Reconsidering Late R.E.M.

Tom Roche

not sure if this SO ep#=1055 is /quite/ excellent. but will probably be worth listening for REMheads--and for SOheads, has an unusual amount of friction between hosts and guest

Hosts Jim DeRogatis and Greg Kot discuss the music, history and legacy of R.E.M. with biographer Peter Ames Carlin. The hosts share their own personal experiences covering the band over the years.

Join our Facebook Group: https://bit.ly/3sivr9T

Become a member on Patreon: https://bit.ly/3slWZvc

Sign up for our newsletter: https://bit.ly/3eEvRnG

Make a donation via PayPal: https://bit.ly/3dmt9lU

Send us a Voice Memo: Desktop: bit.ly/2RyD5Ah  Mobile: sayhi.chat/soundops

 

Featured Songs:

R.E.M., "Losing My Religion," Out of Time, Warner Bros., 1991

The Beatles, "With A Little Help From My Friends," Sgt. Pepper's Lonely Hearts Club Band, Parlophone, 1967

R.E.M., "It's the End of the World As We Know It (And I Feel Fine)," Document, I.R.S., 1987

R.E.M., "Orange Crush," Green, Warner Bros., 1988

R.E.M., "The One I Love," Document, I.R.S., 1987

R.E.M., "Radio Free Europe," Murmur, I.R.S., 1983

R.E.M., "Begin the Begin," Lifes Rich Pageant, I.R.S., 1986

R.E.M., "Low," Out of Time, Warner Bros., 1991

R.E.M., "Bittersweet Me," New Adventures in Hi-Fi, Warner Bros., 1996

R.E.M., "Everybody Hurts," Automatic for the People, Warner Bros., 1992

R.E.M., "Imitation of Life," Reveal, Warner Bros., 2001

R.E.M., "Shiny Happy People," Out of Time, Warner Bros., 1991

R.E.M., "Strange Currencies," Monster, Warner Bros., 1994

R.E.M., "What's the Frequency, Kenneth?," Monster, Warner Bros., 1994

R.E.M., "Man on the Moon," Automatic for the People, Warner Bros., 1992

Beach Bunny, "Big Pink Bubble (Live on Sound Opinions)," Tunnel Vision, AWAL, 2025

See Privacy Policy at https://art19.com/privacy and California Privacy Notice at https://art19.com/privacy#do-not-sell-my-info.

25 Feb 00:28

'One Battle After Another' and Liberal Fantasy Fiction (AE232)

Tom Roche

/very/ short (< 17 min content), very truncated (particularly, never gets to the advertised topic=[One Battle After Another](https://www.onebattleafteranothermovie.com/home/)), just bant, not actually bad but quite skippable

To hear this episode in it's entirety, subscribe to our Patreon at https://patreon.com/americanexception

Aaron and Max Arvo discuss One Battle After Another —the 2025 film directed by Paul Thomas Anderson, starring Leonardo DiCaprio, and based on the 1990 novel, Vineland by Thomas Pynchon. We recommend that people watch the film before listening since we don’t attempt to give any real synopsis, nor do we avoid spoilers. Listen at your own risk!

Follow and support Max Arvo on Substack!

American Exception followers on Patreon get first access to new episodes, and paid subscribers enjoy the entire library of the best historical analysis of deep events on the American Exception podcast. 

Subscribe to our Patreon at https://patreon.com/americanexception

We are also on youtube at https://www.youtube.com/@americanexception9407

Music: “Old Movies” by Mock Orange

Special thanks to Dana Chavarria for producing the episode!!

24 Feb 20:00

1013 - Your Podcast feat. Jonathan Shainin (2/23/26)

Tom Roche

delightful deepdive into UK-political doodoo

Jonathan Shainin returns to Chapo after ten years to talk about what the hell is going on in the United Kingdom. We talk about Keir Starmer’s and Labour collapse, his wildly unpopular policies and austerity regime, the rise of the Green Party, and Jeremy Corbyn’s bizarre Our Party. We then talk about Shainin’s new magazine Equator and their pieces on the end of liberal Zionism and the Long 90s. Check out Equator: https://www.equator.org/ Few tickets left for our April 3rd live show at the Palace Theater in LA: https://www.ticketmaster.com/event/0900643BE404F182
24 Feb 17:00

Eruorp sent from my iPhone

Tom Roche

amusing

Reluctantly, Nick and Ciarán talk about the latest Esptein files

20 Feb 16:16

Radio War Nerd EP 576 — Deconstructing "Munich 1938" Pt. 1: 1919-1933, feat. Annibale

by mail@yashalevine.com (Gary Brecher)
Tom Roche

another EXCELLENT Annibale series, this time on Munich myth, reality, and lessons for 2026

Co-hosts John Dolan & Mark Ames
20 Feb 16:15

Radio War Nerd EP 578 — Deconstructing "Munich 1938" Pt. 2: 1933-39, feat. Annibale

by mail@yashalevine.com (Gary Brecher)
Tom Roche

another EXCELLENT Annibale series, this time on Munich myth, reality, and lessons for 2026

Co-hosts John Dolan & Mark Ames
20 Feb 16:15

Radio War Nerd EP 582 — Deconstructing "Munich 1938" part 3: 1939 - present, feat. Annibale

by mail@yashalevine.com (Gary Brecher)
Tom Roche

another EXCELLENT Annibale series, this time on Munich myth, reality, and lessons for 2026

Co-hosts John Dolan & Mark Ames
20 Feb 16:13

A Bad Case of Hype-itis, 2026.02.02

Tom Roche

excellent

Move over Dr. Google, Dr. ChatGPT is here, and it's even worse as a medical intervention! Alex and Emily scrub in to slice up some harmful new nonsense in the world of "AI" for medicine. What's the cure for an expensive and inaccessible health care system? One thing's for sure — it's not AI hype.

References:

Also referenced:

Fresh AI Hell:

Check out future streams on Twitch. Meanwhile, send us any AI Hell you see.

Find our book The AI Con here, and MAIHT3k merch here.

Subscribe to our newsletter via Buttondown.

Follow us!

Emily

Alex

Music by Toby Menon.
Artwork by Naomi Pleasure-Park
Production by Ozzy Llinas Goodman.

20 Feb 01:14

1011 - National BurgerReich Association feat. Pablo Torre (2/17/26)

Tom Roche

excellent

1011 - National BurgerReich Association feat. Pablo Torre (2/17/26) by Chapo Trap House
19 Feb 19:50

Irreal: Using –init-directory To Debug

by Irreal

The standard advice people get when they complain about some bug or difficulty with Emacs is to restart it with -q or -Q to see if the problem persists. The problem with that advice is that the difficulty may be with a package. In that case you want to load at least the offending package and its configuration. That used to involve moving or renaming your init.el so that you could install the minimal init.el that produced the problem. As of Emacs 29 that got easier with the introduction of the --init-directory parameter that tells Emacs to load it’s configuration from a different directory.

Protesilaos Stavrou (Prot) has a nice post that explains how to use this feature when you experience a problem and want to file a bug report. The main problem, of course, is what to put in your new init.el. Prot recommends using use-package with :ensure t (and whatever configuration you’re using) to load the package.

Sometimes you might have to build the package from source rather than simply loading it from one of the ELPA repositories. Prot discusses how to do this using package-vc-install to grab the source directly from its git repository. He has some sample code showing how to do this.

Finally, he has some general recommendations that you can use to make the developer’s life a bit easier. On the other hand, if you are the package developer, the --init-directory trick can save a lot of time in locating bugs. In either case, take a look at Prot’s post. There’s a lot of good information in it.

17 Feb 18:21

#691 - Jesus Didn't Uber

Tom Roche

amusing

Energized by Turning Points USA's Kid Rock-led alternative Superbowl Halftime Show, we turn our attention to a slightly more mainstream example of conservative art: Tim Allen's new sitcom SHIFTING GEARS. Join us on Patreon for an extra episode every week - https://www.patreon.com/michaelandus "The Hilarious Decline of MAGA's Brief Cultural Relevance" by Alex Shephard - https://newrepublic.com/article/206276/trump-super-bowl-kid-rock-decline-maga-cultural-relevance
16 Feb 21:57

A fluid can store solar energy and then release it as heat months later

by Jacek Krywko
Tom Roche

interesting-sounding-but-paywalled [paper](https://doi.org/10.1126/science.aec6413) on molecular solar thermal (MOST) energy storage using pyrimidone

Heating accounts for nearly half of the global energy demand, and two-thirds of that is met by burning fossil fuels like natural gas, oil, and coal. Solar energy is a possible alternative, but while we have become reasonably good at storing solar electricity in lithium-ion batteries, we’re not nearly as good at storing heat.

To store heat for days, weeks, or months, you need to trap the energy in the bonds of a molecule that can later release heat on demand. The approach to this particular chemistry problem is called molecular solar thermal (MOST) energy storage. While it has been the next big thing for decades, it never really took off.

In a recent Science paper, a team of researchers from the University of California, Santa Barbara, and UCLA demonstrate a breakthrough that might finally make MOST energy storage effective.

Read full article

Comments

14 Feb 19:59

The News Quiz: Ep5. The Prince of Darkness

Tom Roche

subpar

Is there a way out for Keir Starmer after the Peter Mandelson scandal? Who fled ‘under the cover of darkness’ from their royal lodgings? What exactly is a humble address? And why are iguanas falling out of trees? Helping Andy answer some of the big questions of the week are Desiree Burch, Pierre Novellie, Daniel Finkelstein and Catherine Bohart.

Written by Andy Zaltzman.

With additional material by: Cody Dahler, Eve Delaney and Sarah Mills Producer: Georgia Keating Executive Producers: Richard Morris and James Robinson Production Coordinator: Giulia Lopes Mazzu Sound Editor: Marc Willcox

A BBC Studios Production for Radio 4.

12 Feb 17:42

Democracy Now! 2026-02-12 Thursday

Tom Roche

excellent headlines and Rabbani, rest skippable

Democracy Now! 2026-02-12 Thursday

  • Headlines for February 12, 2026
  • "Massive Cover-Up": Rep. Jayapal Slams AG Pam Bondi over Epstein Files & Spying on Lawmakers
  • Netanyahu Seeks to Kill U.S.-Iran Talks to Start Another War: Mouin Rabbani
  • Oscar-Nominated Filmmaker Jafar Panahi Speaks Out on Jailing of Screenwriter Mehdi Mahmoudian in Iran
  • "I Was Just So Disgusted": Jewish Rep. Balint Walks Out of Hearing After Bondi Calls Her Antisemitic

Download this show

11 Feb 19:44

The Epstein-Mexico Connection: New Documents Implicate Former US Ambassador

by Soberanía Podcast
Tom Roche

excellent

In episode 94 of Soberanía, hosts José Luis Granados Ceja and Kurt Hackbarth dive into the Mexico connections in the Jeffrey Epstein files, focusing on serious allegations against a former U.S. ambassador and the impunity that protects powerful figures. Next, they provide an urgent update on U.S. efforts to strangle Cuba with an oil blockade, examining Mexico's diplomatic response and the looming humanitarian crisis. Finally, the hosts celebrate a major domestic achievement: the full inauguration of the "El Insurgente" commuter train, a symbol of infrastructure progress and national priorities.The episode concludes with a special segment of "Can I Borrow You For A Minute?" featuring an insightful interview with the hosts of the Blowback podcast on U.S. imperialism and global resistance.

11 Feb 19:43

On-the-Ground in Iran as US Prepares New Bombing Campaign

Tom Roche

excellent

The United States is mobilizing for a new war on Iran — repositioning military forces, floating assassination threats, and insisting on negotiations at the same time.

As this military buildup intensifies, Western media is reviving a familiar propaganda narrative: that Iran is collapsing, its government has lost control, and foreign intervention might actually help.

To cut through the noise, Rania Khalek is joined by Navid Zarrinnal, an Iranian-American academic and host of The Colony Archive, speaking from inside Tehran. Navid breaks down what’s actually happening on the ground — from internal debates over negotiations, to Iran’s potential military retaliation, to why the myth of Iran’s imminent collapse keeps getting recycled.

They also discuss the end of Iran’s so-called “strategic patience,” the reality of U.S. hybrid warfare, the role of foreign intervention in recent protests, and the dangerous push to fracture Iran along ethnic and sectarian lines — a policy openly floated by Western elites.

Finally, Navid explains why the nuclear deal failed, why sanctions and regime-change politics won’t bring justice, and what the Western Left should actually be focusing on.

Read Navid’s Breakthrough News article here; https://breakthroughnews.org/irans-protests-explained-a-diary-from-tehran/ 

11 Feb 19:42

Economic war: US boasts of "collapsing" Iran's economy with sanctions

Tom Roche

excellent

The United States is waging medieval economic war. Donald Trump's "maximum pressure" campaign on Iran is "designed to collapse its already buckling economy", boasted Treasury Secretary Scott Bessent. Ben Norton explains how the US is trying to suffocate Iran, Venezuela, and Cuba by collapsing their currencies and causing extreme inflation, using illegal sanctions and blockades. VIDEO: https://www.youtube.com/watch?v=9AQWr6Rtybg Topics 0:00 Economic war 1:02 USA has sanctioned 1/3rd of countries 1:40 Sanctions kill 560,000 people per year 2:46 US sanctions on Iran 3:54 Trump threatens to bomb Iran (again) 5:20 Map of US troops in Middle East 6:58 Economic war against Iran 8:21 (CLIP) Scott Bessent: "Collapse" Iran 10:17 (CLIP) Bessent: Crash Iran currency 11:13 (CLIP) Bessent: Stop Iran oil exports 11:34 Dollar hegemony & financial system 12:33 "Making Iran broke again" 13:09 Blackstone CEO Stephen Schwarzman 14:20 Inflation & US sanctions on Iran 20:40 Goal: "hunger, desperation and overthrow" 22:25 "Make the economy scream" 23:15 More US sanctions 23:50 UN experts: US sanctions are illegal 25:25 How to help the Iranian people 26:29 Outro