n.b. I'm a C# developer that has accepted my fate and use Visual Studio to earn a living, though I've made sure I know my tool, flaws and merits, better than most developers I've met/worked with. My first job as a programmer was writing C++ code in Emacs and can't remember anything negative about that experience (other than getting used to ctrl+x, ctrl+s for saving and, by reflex, doing the same in Excel, and losing a big part of the document that I had just selected to move, because Excel couldn't undo past last save).
Reading the (at the time I'm writing this) 13 comments on this post I see mentions of at least three lightweight programs that does this. What other than "the mountain is there" makes someone think Emacs would be the tool for this? As a Resolve user I know what tool I'd reach for even if using a multi GB, Hollywood grade, non linear editor, compositor and color grader for trimming a short video clip is about as ridiculously overpowered as using a sledge hammer to press a key (and I did exactly that just a few days ago).
Like I said, I'm most likely not "getting it", on multiple levels. Please educate me, why would I use Emacs for this or any of the page upon page of "strange" use cases you find if you search for "Emacs" here on HN. I know Emacs is a powerful editor but I can't for the life of me understand why I would use it to trim video clips.
In Emacs, I have all the tools I need for dealing with text - thesaurus, spell-checking, definition and etymology lookup, search engines, translation, LLMs, etc. Why, oh why, wouldn't I ever try typing anything longer than two words in anything else?
Like, for example, while typing this very comment, I may come across a thought: "I think I already made a similar comment some time ago, let me find it..." What would a regular user do? They'd switch to the browser, navigate to HN, scroll to the bottom, type search query, lookup on the page, jump to the next, keep paging until they find it, copy, switch back, paste... What would an experienced Emacs user do? They'd search for it without ever leaving their editor, grab the stuff from the buffer and paste it - all within just a few keystrokes. Or if I need to find a url in my browser history - I'd just search for it and insert in-place - two keystrokes+search query.
It's not just faster - it is profoundly satisfying and liberating. It gives you the feeling of being in control. You don't have to deal with the quirks of specialized apps; you don't need to memorize tons of their specific keybindings; it gives you a straight path to extracting or injecting plain text.
That's why those who never made a wholehearted attempt to use Emacs just never get it. And those who have, never can understand why others don't even try to recognize the value.
One's personal transformation, changed perspectives, or new capabilities are real empirical evidence - just not the kind that satisfies scientific methodology's requirements for generalizability.
I never even hinted at attempting to prove it to be universally paradigm-shifting for everybody, but I can certainly vouch for its profound impact on thousands of users based on their direct experience.
It isn't a hobby, because Vim and Emacs allow me to perform in a way that I consider far more enjoyable, productive and satisfactory than I ever had before them. That is of course on a personal empirical basis - I cannot promise them having the same effect on anyone else.
In my opinion, after many years using many different tools, techniques, ideas and methodologies, frameworks, approaches, systems, platforms, workflows, philosophies, paradigms, strategies, practices, concepts, models, theories, and experiments, I personally find these two to be exactly the paradigm shift — in comparison to my prior experience when I didn't have them.
But let me be more specific - the paradigm shift I see is not in Emacs or Neovim as tools themselves. The paradigm shift I sense is in the grand ideas behind these tools - modal navigation and Lisp.
I honestly don't know why more people don't gravitate towards these ideas. Perhaps, because these ideas are kind of like 'meditation' - people say one can only experience the mind shift after practicing it for some time. I wouldn't know - I never practiced mediation for long. And that time required to see the shift can differ for every person - some may grok it quickly, for some, it may take decades without ever even clicking.
Also, you're wrong about "upgrading one's workshop" - it's a misconception that longtime Emacs users constantly have to tweak their configs. My config for example is pretty stable; I often make changes to it not because I have no choice, but because the task at hand calls for it. I write a lot of Lisp because it's an instrument for achieving specific goals and solving specific puzzles - work for which I get paid real amounts of real money. I get paid to use Emacs, not the opposite. So, no: definitely not a hobby.
They would if there was a bit more GUI introduction. Seriously functional menus and visual indication of modes. With hints from graphical to the faster keyboard sequences.
> I honestly don't know why more people don't gravitate towards these ideas. Perhaps, because these ideas are kind of like 'meditation' - people say one can only experience the mind shift after practicing it for some time.
idk this reads a lot like tl;dr: it's a hobby.
What's a "hobby" anyway? As the one you commented on, I have also been programming for a very long time. And why do I continue to do that, instead of changing to some management role? The answer to that is that I enjoy programming. I enjoy making tools to make the tools to create the thing I want to create, and to have enough stuff I want to create, I have a job which provides that in abundance. There are no hard borders between "hobby" and "job". It's a useless distinction in this case.
You know what really makes Emacs different than other editors and IDEs? Consider many ways one can transform selected text in VSCode. Let's say there are maybe 3-4 ways, with some extensions it can get to, I dunno a dozen?
Now consider that Emacs allows you virtually unlimited ways of doing the same thing. Because there are virtually unlimited ways to program that behavior.
In VSCode, you'd be clicking buttons and using shortcuts. Imagine if you had virtually unlimited number of buttons there? For different ways of running a command. That would be insane, right?
Well, here comes the argument if VSCode's (default) way maybe actually better? Some may argue about cognitive overhead - flexibility isn't free after all. Some programmers prefer tools to be tools rather than clay, yeah?
That's totally okay, I'm fine with all that. I'm just seriously baffled as to why Emacs is such an underrated and misunderstood tool. Why don't more programmers even attempt to try it? If you are a programmer, for sure, you should be, at least to a certain degree, curious about the ultimate programmable environment, no?
And don't bring the argument that non-emacs things are also "extendable". In virtually none of them can I open a buffer and add yet another way to transform selected text. Right there, without even saving that code in a file.
For an example of a system that I think is probably just as extensible as emacs, look at TiddlyWiki. If you really want to, you can add in arbitrary JS and even the main tiddler edit form is itself a tiddler that can be customized as much as you want.
Anything that runs on a computer is a program; by definition it is a "programmable" entity. It's only a matter of the degree of intentional programmability - exposed interfaces, APIs, scripting languages, or configuration systems that make modification practical and supported.
From my perspective as an Emacs user, where I can extend virtually any part of my running system by simply evaling some code in a buffer, without having to save, lint, link, compile, publish or restart - an extreme degree of intentional, designed programmability.
From that perspective, VSCode in comparison pales into looking rather constrained and bureaucratic, making it, personally for me, virtually not extendable - I have close to zero incentive to even try. Don't get me wrong, I would use it for certain tasks; it is an excellent tool, but I don't think it ever would become my main instrument - it will just annoy me to death to deal with it on daily basis. Joyride looks promising for making the experience smoother; still, it feels more like a band-aid.
So, yes, once you truly experience the genuine extensibility of the malleable nature of a Lisp-based system, you would completely rethink your entire understanding of programmability of things. I write code, my main instrument must be easily extendable through Turing complete coding mechanisms, not through structured data in json or xml; nor through clicking buttons or dragging boxes around.
First definition says "it's a horse", then there's another:
> Any favorite object, pursuit, or topic; that which a person persistently pursues or dwells upon with zeal or delight, as if riding a horse.
Sure, in that sense it can be characterized as a hobby. What's the opposite of a hobby? Well, it's either "work", "chore" or "obligation"— all three kind of fit for my example. I use Emacs at work, for work, to do stuff I get paid for - check! It sometimes feels like a chore - well, what tool you use everyday doesn't? Sometimes you need to update it, delete stale cache files, reinstall, fix dependencies, etc, so can feel like a chore - check! Whenever I open-source some piece of code that extends Emacs, I have an obligation not to break it, etc. So the third one fits too. So, like I said - not a fucking hobby.
Shall we continue quibbling over words, how what reads to you is not what I meant and maybe even discuss how semantic meaning of words may change due to interlocutors' backgrounds, age, mood or the current lunar phase, or do you have some other kind of nitpicking in mind?
I guess the path to Emacs was more of a possibility/probability earlier in my career and I might find it later but for now I'll alt+tab to the browser and/or open a new tab when I need to look up any etymology and stick to navigating around Visual Studio like a pro while they still pay me to do it.
Like you, though, I work in orgs that are very Windows heavy, so I tend to use it more for my personal stuff rather than in my day job
Well, just like I said - you're not getting it, we're talking past each other. It isn't about a "single interface" - not about cramming everything into one window, it's rather about seamless workflow integration. It's like having a command center that orchestrates your existing tools, rather than replacing them. The power isn't in the interface - it's in the programmable glue between your tools.
You say: "I'd open a new tab if I need etymology..." Sure, on the surface it feels like a fair point. However, when you have the ability to request something from any tool or service "at-point", right in the middle of typing a sentence or solving a specific task - it simplifes so many things, and you tend to use those tools more. It's basic psychological phenomenon called 'convenience effect'.
But that's the only half story of it. Here's the practical example I often use as an evidence. I use Google Translate, alright? On its own there's nothing special about it - other editors and IDEs, also probably have integrations like that if not even nicer with GTranslate or some other translating service, right? Yet check this out. I'm learning Spanish, and when I want to translate something like "Colonel was born in 1968", what would GTranslate do? It would translate the text leaving the numbers intact, and that's totally expected. But guess what? I am trying to gain better familiarity with numbers in Spanish, I really do need to see them in their written form.
How long do you think it took me to solve that little personal discomfort? No longer than fifteen minutes. First, I needed to find out what actually was sending the payload to GTtranslate endpoints. I launched Emacs' built-in profiler and performed a task of translation. I found the function. Then I advised it. Advising is an Emacs Lisp mechanism to prepend, append or override the behavior of any given function - built-in or third-party. So, I figured that if I convert the numbers to text first, then send the payload with that text instead of numbers, it will work exactly as I wanted.
I couldn't even find an implementation of numbers-to-word in Elisp, and I didn't want to spend any time trying to write one. So I delegated the task to an npm package. Now, my advising function adjusts the behavior of 'translate' function (that sends the payload) by detecting the numbers in the text and then runs nodejs, changing the payload, so GTranslate spits out: "Coronel nació en mil novecientos sesenta y ocho"
Did I have to write my own browser extension for that? Nope. Did I have to figure out how GTranslate endpoints work? Nope - I didn't even have to open their documentation page. Did I have to re-implement the entire command that sends the payload? Nope - I just needed to tweak one, specific aspect of it, with extreme granularity - the body of the function is ten lines long. If that's not some blackmagickfuckery, I don't know what that is. Maaaan, I wish someone has showed me some shit like that when I was much younger.
> Perhaps I'm just a little too lazy to learn that stuff
Here's a thing about ideas - and don't consider Emacs as a concrete tool, a mere editor, but think of the fundamental idea behind it. You don't need to "learn" ideas. You just have to cultivate some level of curiosity about them. Sure, you may later have to spend considerable time learning the concrete tools behind those ideas, but absorbing the idea is the first step.
And grokking basic fundamentals about the idea of Lisp is pretty trivial - one just needs to learn mainly two things - structural editing and REPL-driven development. Some may argue that even those are not specifically necessary to begin the journey.
You know how the "do" in Taekwondo, Judo, Aikido, Karate-do stands for "path" or "way"? There's no truly "learning" Aikido, you either practice it or you don't. It's a lifelong practice rather than something you "master" or "complete." The idea of Lisp is similar - it's not really something you "learn" in the traditional sense and then move on from. You practice thinking in Lisp.
The fundamental principles of Lisp - code as data, the power of the REPL, recursive thinking, functional approaches - these aren't just techniques you acquire. They become a way of approaching problems, a mindset you cultivate through practice. The practice never really ends - it just deepens.
I haven't done any martial arts, so I'm just spitting words here, but I bet, if I ask anyone who practiced Aikido for a long time if it makes their lives any better, I bet they'd tell me some koans about zen master pouring tea or some other shit that I'd immediately dismiss as complete bullshit, so I wouldn't blame you if you take my words the same way.
> I guess the path to Emacs was more of a possibility/probability earlier in my career
Just like Aikido welcomes practitioners at any age or stage of life, Lisp is always ready for new practitioners. The fundamental principles align here in more ways than one could imagine - "the journey is the destination", "wisdom over athleticism", etc. Many people discover their deepest appreciation for Lisp (or Aikido) later in life, when they have the patience and perspective to appreciate the subtleties. The best time to start is always now.
FWIW, Org Mode is what a native Emacs user might reach for as alternative to Jupyter notebooks: https://michaelneuper.com/posts/replace-jupyter-notebook-wit... That doesn’t imply that you should both try Emacs and replace Jupyter! Just be aware that if either you are using Jupyter for your own reasons or working with like-minded team there is an alternative which may be preferable for your use-case.
You could probably get it working locally for yourself but in corporate environments it can be annoyingly hard.
org-mode is a better choice, but note that it's not specialised for Python (which is good and bad) so you may need to wire up some stuff (I mostly use R for personal stuff and that works very well).
I haven't used terra.bio, but this works for any text box, so should just work.
Of course, emacs has modes for Jupiter and other notebooks, as well a Org Mode and a way to run code from Org Mode to function similarly to such notebooks, just you can execute code in any language, not just python, and can then immediately use the results in the rest of your file, including tables. You can even reference tables in your code blocks.
https://www.youtube.com/watch?v=ud3Gmxg5UZg - Browsing Reddit and HackerNews In Emacs (7 minutes).
If you don't want to watch it:
https://github.com/thanhvg/emacs-hnreader - for browsing HN.
https://github.com/thanhvg/emacs-reddigg - for browsing Reddit.
https://github.com/agzam/consult-hn - for searching through HN.
https://github.com/agzam/browser-hist.el - for browser history.
It saddens me how people of Emacs often reject vim navigation outright, just as the broader programming community tends to dismiss the fundamental ideas that drive Emacs.
Neither represents a dogmatic religion, nor do they embody fundamental, conflicting truths about computing. No one needs to choose one and commit to it exclusively - they are simply tools, built upon some brilliant foundational concepts. Understanding and utilizing the ideas behind them may literally transform your life in mind-blowingly positive ways. I wish more people contemplated this profound truth, instead of thinking they have to stick with one, particular way of things.
Here's one thing about vim-navigation. Gary Bernhardt (the WAT talk guy) once said: "There's no vim-mode there's only Vim" and he was right - to a certain degree. All the different extensions and attempts to bring vim-navigation to non-vim editors have glaring deficiencies - all of them - VSCode doesn't fully vim, IntelliJ doesn't do it comprehensively, Sublime can't properly vim, etc. With one notable exception. Emacs actually vims better than vim/gvim/neovim. I'm saying this with the full-blown confidence of a die-hard vimmer.
The way Emacs implements Evil-mode and its extensions is the ultimate compliment to its design. If there's a model of a plane that can perform a vertical landing, yet never actually needs to use it, I would still love that model over any other planes, even if the feature is purely accidental. The fact that it can do so alone would be great evidence of amazing engineering. Evil-mode is absolutely one of the most celebrated achievements of Emacs, complementing other remarkable packages like Org, Magit and many others.
For example, I use the Verb package for making HTTP requests. So with Emacs as my HTTP client, I can do bulk HTTP request calls with keyboard macros. The HTTP requests can be stored in org-mode. I can write custom Elisp for special authentication scenarios. I can create new commands if I need them.
For this example, I can imagine (haven't used this myself) scenarios like creating a keyboard macro to shave off the first X seconds of a video usable with dired.
Some non-text-editing things in Emacs that are actually extremely useful:
- Git via Magit
- Managing files with Dired
- Media player with Emms
- RSS feeds with elfeed
and the list goes on and on...
Using a well thought-out Emacs interface for anything is one of the biggest sources of joy in my technical life.Something in your comment made me remember a DOS based file "explorer". Screen split down the middle with a folder-tree and file list on both sides. I remember hardly ever turning on the computer without starting that for one task or another. That was some serious UI pleasure, at least for the time. Ha, found it:
https://handwiki.org/wiki/Software:File_Commander
Ah, the nostalgia!
https://www.gnu.org/software/emacs/manual/html_node/emacs/Di...
For your consideration, I built a keyboard-driven menu interface for Dired called Casual to help with discovery. https://kickingvegas.github.io/casual/Dired.html
There just doesn't exist another piece of software (go ahead, prove me wrong) where you can edit your filesystem like a wiki page.
It won’t require switching to a browser. It won’t require creating an account. No going to the app store. No license consent. No dangerous program warning. No turn on notifications. No unlock premium features. No an update is available. No marketing emails. No cookies.
It’s just gonna STFU and do what it says it does in a way that makes sense. And if it is good enough, it’s good enough. It won’t add bullshit to your day.
Looking at the code for this solution (https://github.com/xenodium/dotsies/blob/main/emacs/ar/video...), it's under 400 lines (excluding the require of three very common libraries and an ffmpeg dependency). I'm not actually sure I could pull off this feature in 400 lines of JavaScript (and the binding logic for going from node to ffmpeg isn't going to come to my fingertips nearly as fast as the logic for emacs LISP, although I know that varies from person-to-person).
Plus, once it's in emacs it can glue to other things. If I want to grab video from an email and trim it, I have tools in emacs to fetch particular emails, etc.
I think the most reasonable way to think about emacs hacks like this is "I could do this in a shell script... But why would I when emacs gives me interactivity, a REPL, and the advantages of buffer manipulation as a metaphor?"
[0] recent example from here: a proto social network that runs via org-files-over-http (as if we didn't have a markup language designed for http already) https://news.ycombinator.com/item?id=44889354
Org-mode is far more than just a markup. It is executable - you can have executable code-blocks (in different languages) that interact with one another. It is interactive - there are TODO items, agendas, and scheduling that integrate with your workflow. It has built-in calendar, deadlines, and habit tracking. It has spreadsheets with calculations, like in Excel. It is insanely programmable. I use it for various things, even some unexpected like managing my dotfiles - simpler and more predictable than Nix or Stowed, org-mode creates an 'immutable' version of my system.
Sure, it is also a markup, but the markup is just the interface to a much richer computational document model.
So, what you're finding to be weird is only because you are unfamiliar with it. It is in fact highly pragmatic, and there's nothing weird about it; you just have not experienced that firsthand, and that's alright.
I think Emacs is basically an elisp runtime that happens to have primitives like buffers, windows, etc upon which a text editor happened to be implemented.
It's more like a programming environment than a text editor. Sort of like Pharo Smalltalk, for example.
You can implement an HTTP server in elisp. You can render SVG, HTML, PDF. All kinds of things.
Emacs isn't an editor. It has an editor. And a bunch of other stuff. The core is written in C, but that's mostly a Lisp runtime and a display system. Everything else is written in elisp. If the runtime doesn't give you what you need, you can load dynamic libraries to extend its functionality.
I found for me that the epiphany came when I realised three things:
1. Key bindings are just calling Emacs functions in the current runtime, which you yourself can call from Elisp
2. Holy shit, you mean every keystroke is ALSO just a function that you can call yourself meaning you can automate everything with Elisp?!!
3. Wait. Emacs is just an Elisp runtime where some of the functions can edit text buffers!!!!
Why is this cool? Because it means that Emacs is NOT an editor - it’s a virtual machine holding libraries of functions that do useful things, which YOU then customise into YOUR editor.
In other words - Emacs is a toolkit that allows you creator your own editor/environment, customised to your specific workflow. And if you don’t like it, you have the power to fix it yourself, which is in contrast to every other editor I know of which was built by the editor developers with their own idea of how you should edit text
If only that ease of hood-popping were more common.
I’m a Rust dev so Zed looked like a win for me (my Elisp ain’t that good), but it doesn’t have the same immediate extensibility that you get used to… and sadly it doesn’t run inside containers because it needs accelerated video :sad face:
The operations you can do on a buffer include not just the usual string primitives like insertion and deletion of text, but _any_ editing command that you could use as a user as well. For example, if you want to move the cursor to the beginning of the line, call `beginning-of-line`. This is exactly the same function that is bound to `C-a`. Want to move to the next line? That’s `next-line`, which is bound to the `down` key by default. Want to drop the mark at the cursor position? Call `set-mark`. Want to search for something? `re-search-forward`. Now that you’ve found what you were looking for, you want to remove it from the buffer? Call `kill-region`, same as if you had typed `C-w`.
And commands build on other, more primitive, commands to give you complex behaviors. There are commands for creating, parsing, and sending emails, making HTTP requests and parsing HTTP responses, creating and parsing JSON, XML or HTML, etc, etc. You can create some JSON in the current buffer, send it off to the server via HTTP, and when the response comes back it swaps you over to a new buffer with the response. Or you can ask it to parse the response and just give you the body, etc. Basically any command you could interactively use as an Emacs user will work as part of a new Elisp program simply by virtue of the fact that it works on the current buffer. And the new Elisp programs you write can be used as commands by the user, and as parts of the user’s next Elisp program.
And switching buffers it not slow; all the buffers are in memory at the same time and the “current” buffer is just a pointer. The only quirk is that the pointer is stored in a variable instead of being passed as an argument to every single command you run. And that’s a good thing, because you would soon get tired of passing the current buffer to every single function you call!
... What a nightmare. Everything is an object. A header is an object. A paragraph is an object. There's a three-deep hierarchy to start talking about the current document. Yes, it's nice and namespaced and in that sense is well-defined, but the "hello world" of inserting text at the current cursor position is an absolute nightmare. And if you want to insert something more complex, like a couple headers and a paragraph and maybe a table? Get ready to build a factory function that creates a bunch of stuff and glues it together like you're writing a UI in Java AWT. And then it's not even in the doc yet, you have to go find your cursor, find the doc element the cursor is in, and only then can you insert content via a reparenting operation.
In emacs, you could do all of that with repeated "insert" calls, nearly literally touching the same keys you'd use to do it in the editor. It's an almost 1-to-1 metaphor mapping. If you know how to write text in emacs you know half of what you need to script emacs.
First of all, macOS doesn't "support Emacs keys" - those are readline/bash keybindings (C-a, C-e, C-k, etc.), not even partial Emacs navigation. The distinction matters. Emacs is inherently a modal editor, and no OS provides that aspect out of the box.
Secondly, although it sounds reasonable in theory, in practice it just doesn't manifest to the same level - because of the enormous context switching cost. While Python/Ruby/JS are excellent languages, using them for workflow automation typically means:
- Fragmented toolchain: Editor → terminal → file manager → browser → back to editor
- State loss: Each tool maintains separate state, history, and context
- Interface friction: Different keybindings, different ways to access data
Emacs provides unified state and interface - your scripts can directly manipulate buffers, access file system, interact with running processes, and integrate with your editing session. The "programming environment" aspect means your automation tools live in the same space as your work.
The fallacy is treating this as purely a language comparison when it's really about environmental integration. A Python script that opens files is fundamentally different from an Emacs function that operates on buffers you're already working with.
For personal workflow automation where you're already living in Emacs, the integration advantage is real.
Here some practical examples that would be just outright painful to achieve with a general-purpose PLs.
- Grab url from browser, insert formatted markdown link at point
- Extract all TODO items from project files, create agenda in new buffer (I can probably do it in fewer than 15 lines of Elisp without ever having to save, lint, compile that code)
- You're editing a CSV, write a function that operates on the current line/region and transforms it in place
- Mid-email composition, grab a code snippet from the adjacent buffer, format it, and insert
- While reviewing a log file, extract error patterns and automatically open related source files
Your automation remembers what files you had open, your cursor positions, your window layout. Scripts can modify your current work context rather than creating separate outputs
With Python/shell scripts, you'd need complex IPC, temporary files, external tools to achieve similar seamless integration with your active work session. That's why majority of programmers just don't even bother to think to try. Experienced Emacs hackers wouldn't even blink - they'd start whipping up Elisp like a chef would crack eggs to make an omelette.
I also believe that buffer as an abstraction strictly makes many harder things easier, to the point I often wonder about creating a native library based on elisp buffer manipulation APIs alone that could be embedded in other runtimes instead. So the without touching buffer is a premise/constraint I don't quite understand to begin with.
"But that's like opening a document every time I want to glue two strings together!"
Not at all. A buffer is just a fancy blob of RAM. It's not file-backed unless you make it file-backed. They do take up RAM, but you're programming on a modern computer, not a PDP-11; if you're comfortable with Python using a whole in-memory object to represent an integer, you're comfortable with buffers.
"But it's messy to leave them lying around."
It's a feature. Yes, buffers aren't well-encapsulated and if your program crashes mid-run they get left open. That's by design. You don't need encapsulation because you're not doing multithreading here (and if you are, there are primitives for that and they take a bit more work to use); emacs is for editing and there's only one you, so if the current program is creating buffers and has no way to run two copies of itself at once, who cares. And your program crashing leaving buffers around is a feature; you can inspect the buffer and see what it looked like at crash-time, or set up the buffers the way you want them before firing off the program to get the desired effect (try those tricks with most languages without slapping on a debugger). And there are scripting blocks to create temp buffers and clean up your buffers for you anyway.
"But it's weird to have two ways to talk about strings in the language!"
That's true; it's a bit weird to have the string primitives and also buffers. But that's a pretty common flavor of weird; Java has strings and also has StringBuilder. My rule of thumb is "any time I'd reach for StringBuilder in Java, I should probably consider using a buffer in elisp."
Buffers are quite good as a primitive: almost every kind of information snapshot can fit in a buffer. It’s kind of a blackboard in a math room.
Well, because it ain't. it isn't a general-purpose language. It serves a single, specific purpose and excels at that function remarkably well.
> if you want to do anything complicated
Then you'd delegate the task to more specialized tools, possibly written in general-purpose PLs. Which Elisp is not.
Emacs does provide some OS-like features - process management, file system interface, window management, runtime environment, but it lacks tons of other things to be even close to an OS - there's no direct hardware control, no memory protection between different parts, no multi-user support with security isolation, no device drivers, no network stack management, etc.
The "lacks a decent text editor" part is more unfair than the OS comparison. Emacs objectively has a very capable editor - stating otherwise is a sign of unfamiliarity and ignorance about it.
The joke is a relic from the 1990s and it's aimed to capture how Emacs (used to) prioritize power and extensibility over immediate usability - making it simultaneously impressive and frustrating - back in the day.
The joke is hilariously outdated along with another one - "8MB and constantly swapping" - Emacs went from resource hog to surprisingly lightweight without changing much - the world just got more bloated around it.
I'm just baffled why programmers are so notorious for holding onto outdated conventional beliefs that no longer hold any truth about them. Especially for cases like this, when it was clearly a joke. A joke that has not aged well at all.
It's not an OS. The text editor is great.
I was just using it to illustrate a point.
A well-tuned emacs install is comfortable. I have my keybindings that do what I want them to do. I can visually organize my emacs frame (what is now called a GUI window) exactly how I want, with files taking up the parts of the screen that I want. I can be reading the README of some project I checked out and be curious about some terms, then just select it and send it off to my LLM. It's trivial to switch between Claude, OpenAI/ChatGPT, and Gemini depending on how much context I need to give.
It's like having personal space organized to your tastes. For some, their personal space can seem on the outside as a warzone of stuff, for others it's meticulously organized and labelled, but the key commonality is that it's personal space and that the owner of the space is comfortable in it. That's what emacs is. I don't need to learn a new set of keybindings or mouse clicks to unlock new functionality, I can just bring it into emacs.
That is, it isn't like emacs is the thing that is doing the trimming. It is just providing convenient access to ffmpeg to do that. That it is able to do this using roughly 300 lines of code is quite impressive and largely speaks to why people love doing things in emacs.
It would be one thing if this was code golfed to get to a working state. Reading the code, it is remarkably straight forward interactions with ffmpeg.
Is it an REPL? use comint.
Is it a tool that act on text files (lint, test,...)? Use compile
Do you need input with completion? Use the minibuffer.
Do you need multichoice selection? Use a buffer and mark stuff (there's a mode that you can extend from if you need to display tabulated data).
Do you need to define flags on the fly? Use transient.
Network request? Calling shell command? A combination of all the above? Emacs got your back.
And because it's a live programming environment, you can start quickly with a prototype (or just altering stuff) and then tweak things until you have a proper package.
What do you mean by "non-text things"? You are dealing with the computer, it's all about text and mostly text. Sure, it might be encoded and digitized, but even structured binary - is all just text. Even when you give a computer voice commands - they are just synthesized audio form of fucking text. Even with "turtles all the way down" - it's all turtles made of text.
Have you seen the gif in the blogpost? With the transient that has "Move Forward/Backward", "Increase", etc. commands? The commands that you'd have to send to the specialized app anyway - Emacs or not. In what form? Fucking text, of course.
Boy, are you going to be blown away by Pac-Man.
It's like arguing that "all books are just sequences of letters". That's technically true, but meaningless without understanding grammar, semantics, and context.
What I'm saying is akin to: "First step to understanding all the books starts with understanding letters..."
Anyway, emojis are of course text - even though they are stored as encodings. For example, LLMs process them exactly like any other text characters - they're tokenized, embedded, and handled through the same mechanisms as words. I should've use a different analogy to make my point clear, but you know what I meant.
Similarly, when the emulator broadcasts current coordinates for pieces, or sprites of them - they still can be reduced to plain text.
As a matter of fact, if you want to play Pacman in Emacs... you can just play Pacman in Emacs: https://github.com/emacsmirror/pacmacs
you can't do it >:( that reddit post is so annoying to me, the only bit of that which was "pregnancy test" was the plastic shell, everything else was replaced, but everyone keeps going "hey did you know they ran doom on a pregnancy test?"
(and breathe...)
Emacs users typically have a whole pile of customizations, macros, and workflow automations they've written up over the years.
And for things that are text oriented, the ability to work the buffers emacs-style between emacs windows is a joy.
There's a lot of advantages to keeping everything inside emacs.
You can, see the command subed-crop-media-file.
https://github.com/sachac/subed/blob/main/subed/subed-common...
They don't work in isolation, though, and I bet you can easily think up a bunch of usecases for either. They're scriptable and they compose well, after all, so the tradeoff is worth it. You put up with the headache to automate that batch job of changing the intro sequence of the thousand video files and generate new thumbnails and put the new subtitles in one go.
In emacs, everything tends to be composable and scriptable. You are in GUI land but things feel powerful like in CLI land, except discoverable. It's the "vim is the text editor of the unix IDE" idea, except they put the whole unix into your editor. When people jokingly claim it's an OS they're only half joking. It's malleable. You are already running it. You are already familiar with the way it works, with the way you discover features, get help etc. Why start another program for a task like this?
If you can turn that text directly into clips without switching to a separate video editor, it’s surprisingly efficient. Of course, this only makes sense if you already live in Emacs, then it reduces context switching, helps to keep the flow. If you don’t, it just looks odd. But it’s not about making a meme out of "doing everything in Emacs" - it is just a small tool that fits the workflow of people who are already in that environment.
I don't really use Emacs but I love that people use it for everything; next step is a non-linear video editor.
1. keyboard driven
2. programmable
3. within an ecosystem they are already within (lightweight, cross-platform, etc).
Shameless plug for further ideation and discussion: https://news.ycombinator.com/item?id=44025635 - it's a long video - ~1hr, it's unscripted and unedited. I guess I just couldn't fit all my Transient use cases in a smaller one. I have a lot of these bad boys in my Emacs.
Given enough time, any actively maintained application will
become an operating system.
This has held for emacs, Microsoft Excel, Microsoft Word, and probably vim as well.Honorable mentions for AutoCAD, Blender, and Eclipse too.
:-)
Checked the source and it seems to make a lot of assumptions on the output format, codec and quality.
So I created Emacs shortcuts for Davinci Resolve. (I create a lot of videos, and every time I've attempted to outsource editing, it has always been more work to review and give feedback than to just do it myself. I have a routine using the AI transcription features of Resolve that lets me edit video very fast. Editing a one-hour video might take 2-3 hours).
I have a Resolve Speed Editor panel but just found that to be far slower than the keyboard.
If this isn’t your _daily_ use case and you only need to edit video from time to time, just ask your preferred LLM to give you the FFmpeg commands to cut, speed up, mute, flip, add text, etc. This has worked quite well for me with simple use cases, and well no need to learn Emacs.
Especially if you don’t do this regularly, a GUI makes much more sense and saves you the frustration of having to sift through potentially wrong commands and figuring out what exactly to edit to fix the mistakes.
Sometimes I have movie clips A, B, and C. I want to trim part of A at the beginning and end, then stitch clip B to it while speeding it up by 2x, and finally add clip C at the end, also trimmed a bit. After that, I want to add some text at specific times for a specific duration. In the end, I’ll export everything in 1080p.
I know all of this can be done with Final Cut or any other video editing app using a GUI, or the cool Emacs tool above...
But for me this would mean (GUI example) downloading the app and watching YouTube tutorials just to learn what to click.
For simple video editing (and other tasks), I sometimes need to get the job done quickly without wanting to learn a whole new tool.
I found out that I can achieve sufficiently advanced video edits with FFmpeg commands produced step by step from a LLM.
If you think this is awful, ok. I thought it was neat and wanted to share the idea.
If you ever needed to do that more than once, using a basic video editor (of which there are many, free and open-source, no need for a commercial behemoth like Final Cut), playing with it for ten minutes once would give you all the knowledge you need forever, even when you are without access to your LLM. And you can keep the app installed, you don’t need to download it every time. There’s also no need to watch YouTube videos, most of these basic editors have evident interfaces that anyone could figure out on their own for simple tasks. People did figure out things before YouTube tutorials. Or hey, if you’re that keen on LLMs, ask them where the option you want is.
Furthermore, you have not addressed at all the crux of the point. How are you even getting the exact time stamps to give to the LLM of FFmpeg for the cut? Or how do you decide that 2x is the exact speedup you need? Or how do you know what size and position and text font and colour even make sense?
All of those are visual decisions which need confirmation because video is visual. It doesn’t make sense to blindly run lengthy FFmpeg commands over and over to see if the result is any good.
Not all video work is visual-first storytelling. In engineering/lab contexts you often just need “good enough” trims, concatenation, speedups, and a few labels to document an experiment. As I said in another comment, I usually get the timestamps by noting them down while watching the video, or in rarer cases from timestamped sensor data.
Sorry if my explanation wasn't good enough...
Not the OP, but ffmpeg's documentation is pretty awful to navigate if you aren't an expert in it. It is very technical and exact, but fails to provide examples for most options.
For example, the fpsmax option says you can set the maximum frame rate using "Hz value, fraction or abbreviation." So now the user has to search for how any of these things are to be specified (does a bare 60 mean 60hz? Do you need to include Hz? Is it case sensitive? What are the abbreviations? What is the fraction a fraction of?). And that's a random option I found in the pile of documentation it has.
Maybe it's useful if you use it every day, but I completely understand why people use GUIs whose purpose is to construct the command. Or even LLMs to do the same thing.
We've already migrated (via StackOverflow) far past 'RTFM' as the go-to answer, and LLMs seem the next logical step there: a machine to read all the sources and boil them down for you.
I know there are options for everything in FFmpeg, and I’m thankful to the community and maintainers for providing such a powerful and well-documented tool. I sometimes just want a quick video edit that doesn’t involve reading the man pages for minutes or hours.
https://xenodium.com/emacs-as-your-video-trimming-tool/
Is fixed and also fix various typo in the blog post. Bbut has other bugs, for example, the title link redirect to the bugged URL.
But (the bugged URL):
https://xenodium.com/emacs-as-your-video-trimming-tool Have the problems with relative links you talked about.
any other light weight trimming people have?
Essentially, I already use mpv as my video player, which in addition to being very fast also allows seeking frame-by-frame, saving and returning to positions, and running Lua scripts. So I wrote some Lua which reacts to a specific key press by saving the current video timestamp. Press it again and it records a second timestamp, then it fires off Handbrake CLI (FFmpeg could also work) to do the cutting and save the trimmed file.
If you search online for “mpv cut video” you should find some plugins with that same idea. I have never used them so I can’t attest to how good or bad they are. All the ones I found are larger than my approach, but then again I just made mine do exactly what I want without customisation so that’s to be expected.
One specific advice I’ll give, if you go this approach and are on the Apple ecosystem: Use the Handbrake CLI instead of FFmpeg to do the cutting. FFmpeg was super frustrating and I was unable to get a result where the output video worked properly in Quick Look and sending through iMessage; after too long trying to get it to work and messing with a myriad flags, I switched to Handbrake with no weird settings and it’s been working flawlessly ever since.
I'm a big fan of ScreenFlow, but light it is not ;) If you just want to trim and assuming you are on macOS, QuickTime's "Edit > Trim..." does the job. It's what I used before doing the Emacs thingy.
But haven't worked on it in months. Usable for now if you don't need audio
https://en.wikipedia.org/wiki/Shotcut
P.S. What's great about tools like emacs or ffmpeg is their usability via a command line and thus scripting. Which even works on an Android device running inside Termux.
And many share their hard work with the world for absolutely nothing in return. Imagine if someone said: "Why should Tolstoy be entitled to get paid for writing 'War and Peace'? After all, he's an aristocrat, a Count..."
Well, Tolstoy did later in his life reject copyright on many works, believing literature should be free, and his wealth allowed him to write "for fun, not profit," but honestly, wouldn't you feel honored to "buy the guy a coffee" back in the day - given that you really appreciated his work? Or you'd immediately put him in the same position as Onlyfans influencers if the epilogue of his book ended with: "You can send your support to ..."
Wow. Is this because I wrote the following on my blog?
"Find video-trimmer-mode useful? Want me to publish to MELPA? Enjoying this blog or my projects? I am an indie dev. Help make my work sustainable by sponsoring.
Need a blog? I can help with that. Maybe buy my macOS/iOS apps too ;)"
If I were buying rather than donating, it wouldn't factor in at all.
I build software. If I build useful things, there's a demand.
TIL where I live is now relevant to some.
Why would anyone do that? Because plain text rocks.
> There is no equivalent in any other communication technology for the social, communicative, cognitive and reflective complexity ¹
And there's simply nothing better today than Emacs for dealing with the plain text. Neovim comes close, but still can't match it.
__
¹ Graydon Hoare: Always bet on text https://graydon2.dreamwidth.org/193447.html
I was convinced too, but after the amount of work required to convince terminal, tmux and neovim to be friends I thought “It would be nice if all of it would be in one sane configuration language and actually debuggable!”
These days, if I need unix tools (use rg a lot) I plug them into emacs.
The Unix philosophy has limits - text pipes work great for linear data processing, but often break down for interactive stateful workflows. Many modern tasks require rich data structures, not just text streams. Also, context switching between tools loses state and mental flow.
Advocates of "Unix philosophy" often lay it out as if it's the exact opposite of the "Emacs way", which is pretty inaccurate - Emacs can actually be viewed as "Unix philosophy+" - it does do one thing well: text manipulation+extensibility.
You can still use Unix tools from within Emacs - shell commands, compilation, etc. Moreover - you can pipe the result of a command into an Emacs buffer and the content of that buffer into another command, etc. And unlike pure terminal workflows, you gain persistent state, shared buffers and unified keybindings across all operations.
Unix philosophy is brilliant for system administration and data processing, I would never try to convince anyone not to use, e.g. Neovim, I myself reach for it when I see the need. Emacs philosophy is brilliant, for example, for knowledge work and creative tasks, like the example in the OP's blogpost.
These tools - Emacs, Neovim, and Unix - embody some of the greatest ideas in computer science throughout its relatively short history. One would have to be extremely short-sighted not to recognize the immense value in any of them. Frankly, mastering all three of them may make you feel like the Chuck Norris of computing.
I don't think the comment above justified characterizing it as a "stick", but I suppose that is something you wanted to say to me long ago, and I appreciate your veracity. If you give me more constructive suggestions for changing my rhetoric, I may even promise to consider changing my narrative, but at this point, I don't even see what's wrong with it, really.