> Not having a general text editor at your disposal for when you have to input/manage loads of text is like being a carpenter and only having a hammer in the toolbox.
Once I learned Emacs to the sufficient level, I felt that. Today, I can't even imagine typing any text in anything else but Emacs. Having all the tools you need at your disposal - spellchecking, thesaurus, dictionary, word lookup, translation, etc., feels extremely empowering.
My work machine is a Mac. I have written this¹, mainly to integrate with Emacs. Whenever I need to type anything longer than four words, in any program, I use that. The idea is simple - to copy existing text, call emacsclient, it invokes a function that opens a buffer and pastes the text into it. Then you edit the text in Emacs, press dedicated key-sequence - it grabs the text, switches back to the program, pastes the text back in there. It works surprisingly well. I can for example, open Browser Dev Tools; invoke Emacs; switch to js-mode, have all the bells and whistles: syntax-highlighting, autocomplete, etc.; write some javascript; finish editing and it would paste the code back into the Dev Tools console.
Sometimes I use Linux with EXWM. When I first discovered it, I got very excited. Not because now I could manage all windows through Emacs, but mostly because EXWM can "translate" and "simulate" the keys. So, for example, you can use same key-sequences that you use on Mac, but they'd translate into Linux native keys. There's no "context switching", you don't need to re-adapt to the keys all the time. It took me a few hours to learn EXWM and configure it, next day I wrote exwm-edit² Emacs package.
Being able to write any kind of text in your favorite editor is truly liberating. I highly recommend trying. Be warned though - it's impossible to live without that later. The only reason I don't much use Windows these days - because I haven't yet figured out the way of doing this in Windows. Someday I will.
---
I gave Emacs another good-faith effort recently, via Spacemacs. I really bought into it, wanted to make it work, and forced myself to use it for all text editing. But despite every intention of working through all of the quirks and oddities and endless customization, and with the stated goal of reaching Emacs enlightenment, I gave up after a month or so, deleted it from my machine and resolved never to try again.
It feels silly saying this about a piece of time-tested software that many people love, but as someone who believes in the idea of Emacs, in my opinion the reality of Emacs is that it just doesn't work very well. It's slow, it's clunky, it gets in your way at every opportunity, it's documented in a very puzzling style, the add-on packages often interfere with each other in inscrutable ways, and the user experience is on the whole, terrible.
At least that's how I felt coming back to Emacs after using modern IDEs the past few years.
I hate to tell you this, but it's not Emacs that's slow and clunky, it's Spacemacs. I dumped Spacemacs and spent a couple days building a new config with everything I used from Spacemacs and it is a good 10x faster.
It shouldn't be surprising, seeing as Spacemacs development ground to a complete halt (no new releases) something like two years ago.
Spacemacs is a neat demo of what is possible with Emacs but it adds a TON of complexity and bloat. I found it much harder to troubleshoot and it didn't keep up with the rest of the ecosystem, and it's the rest of the ecosystem (and Emacs Lisp) that make Emacs so special.
Agreed. I started with Spacemacs, which showed what is possible in Emacs. But it is so horribly slow and breaks so often that I couldn't use it more than a few weeks. Then I started with a blank init.el and just added packages (with use-package) as needed. Now it's fast and it still has the functionality that I need, things also rarely break (and thanks to Nix I can always roll back). The main idea that I stole from Spacemacs is the use of spacebar shortcuts (via general.el).
The thing about Spacemacs many people don't get - it does not liberate you from learning Emacs internals. The good thing about Spacemacs that it simplifies one of the most challenging things about Emacs - discoverability.
The hardest part of Emacs is to learn what Emacs can do, what it offers. And many gems are hidden under so many layers, that people may not even know about them after decades of using Emacs every single day.
And Spacemacs can be fast and predictable. But you need to know where and how to tweak it to make it so. For the past few years of me using Spacemacs, I had maybe three of four incidents when after updating things, something would break in a way that it would take me longer than ten minutes to find a workaround.
> The hardest part of Emacs is to learn what Emacs can do, what it offers.
Nah, for me the hardest part is finding out about all the things it doesn't do. Unless you code it. Maybe you find some half-arsed packages, but they might just make you more frustrated.
For example, I still haven't found a way to do vim-like completion. I still haven't got a good cscope interface that doesn't crap all over my windows (a common problem for many things in emacs, not just xcscope). I still haven't found a way to make my custom keybindings just work everywhere; every so often I happen to end up with focus in a window where, for example, my normal window navigation bindings don't work and I'd have to go out of my way to fix it.
> I still haven't found a way to make my custom keybindings just work everywhere; every so often I happen to end up with focus in a window where, for example, my normal window navigation bindings don't work and I'd have to go out of my way to fix it.
The easiest way to do this is to use `bind-keys' (specifically, the one with an asterisk after it, which HN markup won't seem to let me use without creating italics instead), which creates a global map for your personal key bindings that override other bindings (so, use it thoughtfully, and remember that `describe-personal-keybindings' will list them). It's best used in the `use-package' macro, like:
(use-package ace-jump-mode
:bind* ("C-." . ace-jump-mode))
My bindings need to be state-aware, because they are evil. So a simple global override is actually not quite enough..