~miguelbernadi

Four years in Emacs

Last June it made the fourth year I’ve been using Emacs, so I felt it worth going a bit down memory lane. This post is basically my account of how I found and started to use Emacs, exposing the good and bad of it all. I still use Emacs everyday and I’m likely to continue further with all the warts I know it has.

I started shortly before joining Devex in August 2016, once I had already accepted the offer and was spending the vacation days I had accrued at my former workplace.

I had been using terminal environments intensively in my daily job, continuously SSH-ing to remote machines and doing things there. For that, I had started to use Vim (pretty standardly available everywhere) and also started learning it.

I never devoted much directed effort into knowing it, so my usage was very superficial but it showed me the huge power in text-based interfaces.

I didn’t customize anything in Vim as I was always changing users and machines. The best approach was to rely simply on the default installation so I could ensure everything was on hand anywhere I needed it.

But this new job was different. At Devex I was going to control the fleet of machines we’d interact with, and it would be my user all the time (no jumping into other people’s). Also, most of my job would be done locally in my machine, committed into Git and then distributed via configuration management tools wherever it was needed. And my new coworker had recently switched to Spacemacs.

I had seen a talk fairly recently evangelizing Emacs, showing Tramp to access remote machines and open terminals there without leaving the local configuration, and about the power of Org-mode. And specially Org-mode resonated deeply with me. It was the time to test it out, and to do it on the job!

That time before I used Spacemacs #

Many people use Spacemacs as a first introduction to Emacs, and that’s specially true for those very familiar with Vim as it leverages Evil-mode to allow for an experience very close to that of Vim. I would end up using Spacemacs for a while, but my first take was vanilla Emacs.

Following internet recommendations, I did the tutorial for Emacs and tried to start using it. I was on vacation, so I really didn’t have anything worth doing to keep me focused. But the feature that had enticed me the most was Org-mode, and I still had to write down documentation for my soon-to-be former coworkers and the format was “free”. So I chose to use Org for it.

The experience was very meh. It wasn’t hard to use but I couldn’t leverage much of the functionality either. Org has the outline functionality enabled by default, and the kill-ring is quite powerful and intuitive for a newbie. So I was using Emacs as I would nano, but with text folding.

I could feel the potential, but it was all very far from my fingertips, behind walls of documentation and outdated internet tutorials. And I was going to be changing laptops and companies, so not much point to try to build something if it’s going to be lost soon.

That time I used Spacemacs #

When I joined Devex they gave me a MacBook Pro due to a miscommunication between me, my new coworker and my boss. It’s not a secret that I don’t like Apple products in general, and using a Macbook Pro for work for over 3 years hasn’t improved my opinion much.

I suddenly had too many new things on my hands, on top of the new job, and I needed to simplify things fast. Emacs has a reputation to be hard to learn and I had seen how big the initial effort was going to be just a few weeks prior. I was not going to get to my mild Vim productivity nor tap into Emacs’ promises any time soon if I kept it vanilla, and my coworker was not using vanilla Emacs either.

Spacemacs is a distribution of Emacs packages designed to be immediately appealing and show the power of Emacs. And it was close to Vim. And it was what my friend was using. So… Spacemacs it is!

Installing Spacemacs is trivial (if you are friendly with terminal and git) as it’s simply a bunch of configurations and packages on top of Emacs. Suddenly, I had Magit, and Evil, and smartparens and support for plenty of programming languages. I had a useful tool that I could work with.

So what’s the drawback? Well, it still required quite a lot of documentation with the added drawback of having plenty of things ready to use, cluttering the space. Usability improvements like which-key, helm and hydra could be overwhelming at times. It was too big to understand, too custom to reference the upstream documentation and blog posts, and too undocumented to customize.

To this day I still recommend Spacemacs as a first approach, a demo stage if you prefer. And I also recommend it if their defaults fit your use case specifically. If you need to tweak things… I didn’t like being there.

Back to vanilla Emacs and growing my own configuration #

In total, I probably spent 6-9 months with Spacemacs before ditching it again for vanilla Emacs. It was a big setback. With Spacemacs I had been able to somewhat keep my Vim proficiency and added huge boosters like Magit. I had left a bloated tool I couldn’t understand but I could somewhat use for a tool that did next to nothing by default. I had to rebuild all my productivity.

The main difference was knowledge. Seeing how the environment worked, what packages were out there and which ones had proven useful to me was a huge game changer. Now I could make sense of the documentation much more easily, and knew where and how to search. And knew what I sorely needed and the rest could grow afterwards.

And it did! I started copying snippets from the internet, then understanding part of those snippets. I found use-package and learned how to use it to make the configuration resemble some kind of order. I started using some packages, then replaced them with others and then abandoned them because it didn’t make sense to use them. And I eventually moved my configuration to a versioned and somewhat commented Org file that gets tangled into the config files when Emacs boots up.

Conclusion #

To this day I still don’t use most of the features my configuration brings me and there’s plenty things I could do better, but I have some control over where am I in this vast sea, and how to get where I want to be.

The ideas behind Emacs still resonate with me. I like to have images and to be able to use the mouse to explore and discover, but text is always the most efficient way of interaction to me. I think that for specialized tasks a text interface trumps all others and Emacs provides it to me for most specialized tasks I do.

I use graphical Emacs, because I want to be able to see images. Text-interface doesn’t have to be a teletype printed output. And software like Emacs can be a good solution to that use case.

But it’s not all good. Emacs is a very ancient program written by brilliant minds (at times) and sophisticated thinkers (also at times). But it has grown organically, without much of a vision, and without much consistency. It has accrued a mountain of technical debt that could well be insurmountable. And still has issues on deciding what are the priorities and agreeing on a vision of what it should be.

Emacs’ issues may well kill it at some point. But it’s not the idea of Emacs that’s at fault, but the implementation. The good thing is that we can reimplement the same ideas, inside Emacs or outside it.

Thanks #

I couldn’t have made these 4 years without the very nice people that take time to write about Emacs and their experience. That release nuggets of knowledge and configuration and are willing to answer new users with the same questions again and again. Thank you a lot.

I’d also like to thank the people maintaining Emacs to this day and those who fight in their mailing lists to reach consensus and advance the implementation of these ideas forward. We’ve recently had very nice news in the recently released Emacs 27 and there’s lots of promise in the upcoming Emacs 28.

Also a huge thanks for all the people that keep developing packages for Emacs and trying to foster a wider vision for this ancient editor (or should I say… userspace). Hopefully tomorrow’s Emacs will be better than today’s for us all.

COMMENTS

Have a comment on this article? Start a discussion in my public inbox by sending an email to ~miguelbernadi/public-inbox@lists.sr.ht [mailing list etiquette] , or see existing discussions.