03 Aug 2026
Announcing now-playing.el, an Emacs interface for the macOS Music app
For me, listening to music whenever I’m working on a computer is a commonplace, daresay essential activity. Much of my work is done using Emacs, so the idea of having it control music playback to mitigate an app switch seemed reasonable. Such was the motivation for my latest project, now-playing.el, a Transient interface for the macOS Music (nee iTunes) app.

now-playing.el takes inspiration from the many mini-client interfaces provided by Apple to control the Music app. The idea was to have a compact and simple interface:
- Show what is currently playing (song, artist, album)
- Offer basic controls (play/pause, next/previous track, volume control)
- Optionally log what was played.
now-playing.el takes advantage of AppleScript support in the Music app, providing the needed controllability and observability of it from Emacs. The sequence diagram below illustrates how these programs relate to each other by showing a request/response transaction between Emacs and the Music app using the osascript command line tool.
If Emacs is built with NextStep (NS) support, then Emacs can send a direct AppleScript message to the Music app via ns-do-applescript to avoid making a shell call to osascript.
State synchronization for now-playing.el is fairly simple, with client updates done in a pull fashion. More details about what now-playing.el can do can be found in the now-playing.el User Guide.
Closing Thoughts
It is not coincidental that writing this mini-client for the Music app works into my recent explorations and musings on malleable computing with Emacs. As of this writing, now-playing.el weighs in at 326 lines of code (cloc measured), taking full advantage of Elisp libraries to construct the following client subsystems:
- UI: Transient for menu,
cus-edit.elfor customization UI - Client Edge:
shell-command-to-stringtoosascript,ns-do-applescript - Local Database: Elisp variables
now-playing.el explores integration with AppleScript, itself a mechanism to allow for orchestration between Cocoa applications. Expect some future posts documenting my explorations in this area, particularly with the more contemporary Apple Shortcuts and Intents.
now-playing.el v1.0 is now available on MELPA.
Past Articles
| 22 JUL 2026 |
Malleable Computing, Emacs, and YouSome musings on malleable computing using as an example a GitHub issues browser in Emacs. read more |
| 9 JUL 2026 |
In Emacs, Everything Looks Like a ServiceNo, Emacs is not an operating system but this post scrutinizes why some might say that. read more |
| 24 JUN 2026 |
Scheduling Future Tasks in EmacsIf you miss using |
| 4 JUN 2026 |
Revisiting Emacs Keyboard Macros with a MouseYes, recording an Emacs keyboard macro with a mouse is a thing. read more |
| 1 JUN 2026 |
Opening macOS Finder Folders in Emacs with ScrimFinder fun with the Scrim custom URL scheme and some musings on software orchestration. read more |
| 28 MAY 2026 |
Anju v1.5.0 UpdateAnju v1.5.0 update out in the wild. Lots of goodies in it. read more |
| 18 MAY 2026 |
Using the Mouse for Emacs Rectangle CommandsNever look up Emacs rectangle commands in the manual again. Announcing support for rectangle commands in Anju v1.4.0 update. read more |
| 11 MAY 2026 |
Enhancing Elisp Development with Context MenusAnnouncing support for Elisp development in the Anju v1.3.0 update. read more |
| 29 APR 2026 |
Bulk Search & Replace Commands for Files and Buffers in EmacsAn inventory of bulk commands to search and/or replace multiple files or buffers in Emacs. read more |
Page 1 / 19 >