I've been a happy ready-player user for some time now. I consider the Emacs package fairly feature-complete, for my needs anyway. Well almost. While I've successfully migrated most of my music-listening to offline playback, there are the odd times when I enjoy streaming YouTube a … | Continue reading
It's been a little while since my last agent-shell update, so let's go through the latest highlights as of v0.55. What's agent-shell? agent-shell is a native Emacs mode to interact with AI agents powered by ACP (Agent Client Protocol). Picking up where I left off If you noticed s … | Continue reading
The other day, my partner and I went into the hospital as two and came out as three. This week, I became a father. From the second I cuddled this little fella, I felt like I'd known him my entire life. I love him so much. Since going indie dev full-time, I've enjoyed a great deg … | Continue reading
We got quite a few agent-shell additions since the last post, so let's go through the highlights as of v0.47.1. What's agent-shell? Agent shell is a native Emacs mode to interact with LLM agents powered by ACP (Agent Client Protocol). Your employer can make a difference agent-she … | Continue reading
Time for a new Bending Emacs episode. This one is a follow-up to Episode 12, where we explored Claude Skills as emacs-skills. Bending Emacs Episode 13: agent-shell + Claude Skills + Charts This time around, we look at inline image renderi … | Continue reading
Time for a new Bending Emacs episode. This one is a follow-up to Episode 10, where we introduced agent-shell. Bending Emacs Episode 12: agent-shell + Claude Skills This time around, we explore Claude Skills and how to use them to teach ag … | Continue reading
At times, even purchased music excludes album covers in track metadata. For those instances, ready-player-mode offers M-x ready-player-download-album-artwork, which does as it says on the tin. The interactive command offers a couple of fetching providers (iTunes vs Internet Archi … | Continue reading
I recently built a little package to flash Emacs windows as you switch through them, so I might as well showcase it in a new Bending Emacs episode, so here it goes: Bending Emacs Episode 11: winpulse In addition to showcasing winpulse, we … | Continue reading
Hard to say officially, but I've been primarily using Emacs for roughly a couple of decades. Maybe my eyesight isn't what it used to be, or maybe I've just been wanting a stronger visual signal as I navigate through Emacs windows. Either way, today's the day I finally did somethi … | Continue reading
I've been somewhat chaotically "bookmarking" things to watch for some time. The info typically goes straight to an Emacs org file primarily via Journelly. I'm fairly forgiving in my input form. I often link to Reddit discussions, IMDB/Letterboxd links, or at times simply write mo … | Continue reading
12 Monkeys (2015) tv · adventure · drama · mystery United States 2149: The Aftermath (2021) sci-fi Canada · Benjamin Duffield 3 Body Problem (2024) tv · adventure · drama · fantasy United Kingdom 964 Pinocchio (1991) horror · sci-fi Japan · Shozin Fukui A Scanner Dark … | Continue reading
Back in 2023, I toyed with the relevant iOS dev tools needed to create a custom Tesco Clubcard pkpass, and even showed how to scan a QR code from our beloved Emacs (of course). Neither my friend Vaarnan nor I are strangers to the iOS ecosystem, yet we both agreed the above approa … | Continue reading
I've just uploaded a new Bending Emacs episode: Bending Emacs Episode 10: agent-shell You may have seen some of my previous posts on agent-shell, a package I built offering a uniform user experience across a diverse set of agents. In this … | Continue reading
A new year, a new Bending Emacs episode, so here it goes: Bending Emacs Episode 9: Time around the world Emacs comes with a built-in world clock: M-x world-clock To customize displayed timezones, use: (setq world-clock-list '(("America/Ne … | Continue reading
In 2024, I took the leap to go indie full-time. By 2025, that shift enabled me to focus exclusively on building tools I care about, from a blogging platform, iOS apps, and macOS utilities, to Emacs packages. It also gave me the space to write regularly, covering topics like Emacs … | Continue reading
Journelly 1.3 available on the App Store What is Journelly? Journelly feels like tweeting but for your eyes only. A fresh take on frictionless note-taking or journaling for iOS, powered by plain text (Markdown + Org). Save cooking recipes, movies, music, restaurants, coffee sho … | Continue reading
It's been a little while since the last agent-shell blog post detailing changes, so we're naturally due another one detailing the latest features. What's agent-shell? A native Emacs shell to interact with any LLM agent powered by ACP (Agent Client Protocol). ✨ Sponsor agent-shell … | Continue reading
Nearly a couple of weeks since the last Bending Emacs episode, so here's a new episode: Bending Emacs Episode 8: completing-read In this video, we take a look at the humble but mighty completing-read function. We can use it to craft our p … | Continue reading
While in the mood to goof around with Emacs, CLI, and image rendering, I've revised an idea to generate some sort of art from your codebase (or any text really). That is, given an image, generate a textual representation, potentially using source code as input. With that, here's … | Continue reading
With my recent rinku post and Bending Emacs episode 6 both fresh in mind, I figured I may as well make another Bending Emacs episode, so here we are: Bending Emacs Episode 7: Eshell built-in commands Check out the rinku post for a rundown … | Continue reading
In my last Bending Emacs episode, I talked about overlays and used them to render link previews in an Emacs buffer. While the overlays merely render an image, the actual link preview image is generated by rinku, a tiny command line utility I built recently. Rinku leverages macOS … | Continue reading
The Bending Emacs series continues with a new a new episode. Bending Emacs Episode 6: Overlays Today we had a quick intro to overlays. Here's the snippet I used for adding snippets: (save-excursion (goto-char (point-min)) (when (searc … | Continue reading
While there are plenty of messaging alternatives out there, for better or worse, WhatsApp remains a necessity for some of us. With that in mind, I looked for ways to bring WhatsApp messaging to the comfort of my beloved text editor. As mentioned in my initial findings, WhatsApp o … | Continue reading
Like it or not, WhatsApp is a necessity for some of us. I wish it weren't the case, but here we are. Given the circumstances, I wish I could use WhatsApp a little more on my terms. And by that, I mean from an Emacs client, of course. Surely I'm not the only one who feels this way … | Continue reading
I'm now a bit over a month into my Emacs video-making journey. Today I bring a new episode. Bending Emacs Episode 5: Ready Player Mode Having migrated to mostly playing offline music, in this episode I show how to use Ready Player Mode (a … | Continue reading
While it's only been a few weeks since the last agent-shell post, there are plenty of new updates to share. What's agent-shell again? A native Emacs shell to interact with any LLM agent powered by ACP (Agent Client Protocol). Thank you sponsors Before getting to the latest and gr … | Continue reading
A little over a week ago, I introduced time-zones, an Emacs utility to easily check city times around the world. Today, I'm happy to report, the package has been accepted into MELPA. It's been wonderful to see how well time-zones was received on Reddit. ✓ You asked for MELPA pub … | Continue reading
I'm now a few weeks into my Bending Emacs series. Today I share a new episode. Bending Emacs Episode 4: Batch renaming files In this video, I show a few ways of batch renaming files. The covered flows are: Dired editable buffers. Multipl … | Continue reading
Emacs ships with a perfectly functional world clock, available via M-x world-clock. Having said that, there are two things I wish it had: A quick way to interactively add any city (bonus points for fuzzy search). An easy way to shift the time back and forth. As far as I can tel … | Continue reading
Continuing on the Bending Emacs series, today I share a new episode. Bending Emacs Episode 03: Git clone (the lazy way) In this video, I show my latest iteration on an expedited git clone flow. If this topic sounds familiar, I covered it … | Continue reading
While it's only been a few weeks since introducing agent-shell, we've landed nearly 100 commits and enough improvements to warrant a new blog post. More agents agent-shell now includes support for two additional ACP-capable agents: Claude Code Codex via codex-acp (new) Gemini CL … | Continue reading
While still finding my footing making Emacs videos, today I'm sharing my second video. Bending Emacs Episode 02: From vanilla to your flavor The video is a little longer than I intended at 14:37, so plan accordingly. In this video, I show some of my favorite UI customizations, wi … | Continue reading
While most of the content I share is typically covered in blog posts, I'm trying something new. Today, I'll share my first episode of Bending Emacs. This video focuses on how I like to apply (or batch-apply) command line utilities. While … | Continue reading
Not long ago, I introduced acp.el, an Emacs lisp implementation of ACP (Agent Client Protocol), the agent protocol developed between Zed and Google folks. While I've been happily accessing LLMs from my beloved text editor via chatgpt-shell (a multi-model package I built), I've be … | Continue reading
I recently shared my early Emacs experiments with ACP, the Agent Client Protocol now supported by Gemini CLI and Claude Code LLM agents. While we can already run these agents from Emacs with the likes of vterm, I'm keen to offer an Emacs-native alternative to drive them. To do th … | Continue reading
Last week, I was delighted to see the Zed editor shipping beta support for their Claude Code integration. Being an Emacs enthusiast, you may wonder about my excitement. In their demo, the Zed team mentioned the integration is now possible thanks to Agent Client Protocol (ACP), wh … | Continue reading
James Dyer and I both ran into the same workflow snag when fixing source indentation. He explains it best: You’re working in a file with inconsistent indentation You want to fix the entire buffer’s formatting You run C-x h (select all) followed by M-x indent-region Your mark is … | Continue reading
I had an annoying chatgpt-shell bug where sometimes the compose buffer's svg header would disappear while text was streaming into the Emacs buffer. There are a number of things that could have gone rogue when streaming and post-processing buffer text, so I wasn't quite sure where … | Continue reading
It's been well over a year now since I've moved most of my music consumption away from streaming. I started purchasing music again, just so I can play offline at any time (and on my terms). That's not so say I don't stream, but that's now purely reserved for discovery. Most playb … | Continue reading
On a whim, after seeing a random brisket picture online, I decided today was the day to make my first brisket. Ingredients 15g Kosher salt (coarse) 15g Black pepper (coarsely ground) 10g Smoked paprika 5g Chipotle powder 5g Onion granules 5g Garlic granules 2g Cumin seeds, to … | Continue reading
A little while ago, I added an info header to chatgpt-shell's compose buffer. It displays the current model's icon, using the lovely Lobe Icons 🥨. With that in place, it was only a matter of time until M-x chatgpt-shell-swap-model got a similar upgrade in my Emacs package … | Continue reading
Me: Have you heard of Emacs? Me: On the surface, it looks like a text editor… Me: But really, it's more like a gateway to a world moulded to your needs. Me: Emacs ships with an RPN calculator and even a doctor. Me: Naturally, it doesn't do everything I want it to do nor how I wan … | Continue reading
Marcin ‘mbork’ Borkowski has a nice post showing us how he trims video clips from our beloved editor. Trimming clips is something I do from time to time, specially when posting a screencast of sorts. Since I don't need much, I typically resort to QuickTime Player's trimming funct … | Continue reading
macOS apps typically benefit from built-in voice dictation input (included as a macOS freebie), with little to no additional work required from app developers. Emacs had supported this capability until relatively recently, when we began seeing reports that dictation was no longer … | Continue reading
While I missed Emacs Carnival's Take two, with this month's prompt being Writing Experience, I figured I may have a thing or two to share about my Org adoption. Org mode is often regarded as one of the indispensable Emacs features. A Swiss army of sorts enabling outlining, presen … | Continue reading
Redditor sauntcartas offers a nice solution for getting Emacs dired filenames in an arbitrary order. I have to say, while relatively rare, this is something I need from time to time. You see, I like to apply batch file operations from the comfort of dired buffers (via dwim-shell- … | Continue reading
Patching and building Emacs from source on macOS is fairly straightforward, but what if I'd like to patch my Emacs Plus Homebrew builds? Let's cover both ways of patching our favourite editor… Patching Emacs upstream sources If you'd like to build from the master branch, you can … | Continue reading
Back in February, I asked folks on the Fediverse if I should try to contribute native macOS sharing to Emacs upstream. While folks were keen on the sharing feature, there were reservations about whether or not a macOS-only patch would be welcome upstream. While my chances of succ … | Continue reading