Atom editor setup for Clojure(Script) development in 2020

Emacs has a built-in tutorial which covers the basic keybindings, when you open it without any configuration, it will show you a startup page.
But Emacs itself is complex and old fashion, you have to spend a lot time before you feel comfortable with it.

Ya, I feel like it’s not that complex, though it definitly is old fashion. The thing is, working with Emacs is like learning to work on a new code base. You need to learn about how the code implements things, how to make code changes to it, how to test your changes, how to evaluate emacs code, etc. It basically expects you to be an Emacs dev to use Emacs. The thing is, it makes that really rewarding and actually easy. Emacs is like the most documented code base you’ll ever see and it gives you a great set of tools to work on Emacs as well.

The downside is, it kind of expects you to be a developer. You can use it without knowing the code base, but then you’ll struggle to find your way around, and since the starting UX sucks, ya, you’ll have a hard time :rofl:

I’m not so sure… I got by for a few years with no knowledge of elisp (just copy/pasting snippets here and there to get e.g, the scroll-wheel working, those were the times!), and with a basic set of commands (open/find-file, save, search, replace-regex, and some region basics). Still at that basic level, Emacs was better than most of the other editors I’d tried before.

At some point (probably when I started writing LaTeX with it), I started learning more, and I still haven’t stopped. Along the line, I started using Evil (first with my own config, nowadays with Spacemacs as a base) because it makes better sense as an editing tool, but what keeps me on Emacs nowadays is its sheer power and the uniformity of how it works. I can use my Emacs-fu for everything from coding to taking notes to doing mail, etc. So in that sense, learning to use it was a worthy investment, especially when it comes to writing any Lisp code.

That’s great if you did! I do think a lot of people use it like that and its great if that works well as is. I do feel learning Emacs Lisp can be a game changer for using Emacs though, so if people have the time or interest, I’d recommend giving it a try. It really turns Emacs from a trial and error process, to something that you can approach logically. For example, I often pretty quickly can identify why something doesn’t work, I can write a patch to fix it myself add it to my config and eval it, no need to even restart Emacs. And if you know Clojure, learning Emacs Lisp is pretty straightforward, like going from C# to Java.

As a side note, I don’t use Evil, even though I use Spacemacs :stuck_out_tongue: I find myself more productive with my own custom bindings operating in a non modal setting. Especially for Lisp editing (Clojure et al.), since Vim is really tailored around line based editing, yes, I find, even with SPC-k being there.

I’ve used VIM and Evil for a few months, and though its nice to keep to the home row for navigation, overall, most of my most often used commands were made more complicated involving more key-strokes and mode switching, and gesturing. To each their own.

I completely agree, but I think some people make it out to be a requirement for using Emacs effectively (and so there are all these recommendations about using some other editor to learn Clojure, since Emacs is “so complicated”, which to me is BS), and it’s not.

Regarding the Vim bindings… I do use structural editing for Lisps, but I find the Vi(m) “language” much more ergonomic for everything else. The thing that made me look seriously into it was this SO post: vi - What is your most productive shortcut with Vim? - Stack Overflow

That’s fair. I think it’s more that emacs is hard to discover how to do things, since its all mostly keyboard driven, and common commands have different bindings then what people are used too. There’s not a lot of visual feedback or contextual help, until you learn the help commands. So I’d say Emacs is easy, but that still can be hard to learn, since it’ll require more effort, as you can’t leverage your existing X years of computer usage. Well unless you use my Noob bindings :laughing:

I mostly use Emacs for writing Lispy things, so Vim was slowing me down. Like the SO post mentions, its designed for line based, block based editing mostly, which would be perfect in say Java. And when it comes to non code, I find I spend way more time typing then navigating, so switching modes just annoys me. Anyways, I think its all very personal. I just want to say, since often people compare Emacs vs Vim bindings. I think that’s unfair. Emacs bindings do suck for the most part, but Emacs expect that you’ll customize them to your liking. So to me its much more about modal vs non modal. And I prefer non-modal personally.

That can be true, if you’re not using something like smex, which helps a lot with discoverability, basically you can do M-x and start typing, and you’ll get all fuzzy-matching commands. I think I actually use that more than actual keybindings for stuff not in my top 20 commands or so. No point in memorizing bindings you don’t use often.

TLDR:

  1. Emacs experience on Linux is quite different from the experience on macOS, so we shouldn’t just refer to “Emacs” alone, when we talk about our experiences
  2. Depending on the amount of features we expect from Emacs, it can indeed come across as daunting to learn it. Our expectations highly depend on our past experiences, so our judgements of Emacs will highly differ too.
  3. It is NOT categorically BS that “Emacs is complicated”

Long version:

I think it’s a mistake to just talk about Emacs without noting which implementation are you using. There are 2-3 forks of the official GNU Emacs for macOS and you will experience different issues with them.

Under Linux, the situation is a lot more clean cut. Emacs feels a lot snappier. There are no strange screen flashes. The per-user emacs server process is “nicely” managed by systemd (at least under NixOS), etc etc.

The we haven’t even talked about the differences between the graphical and character mode versions. They are supposed to behave the same, but in practice, they are not… Eg. the spacemacs menu was not popping up under the terminal version (after pressing space), being connected to the same emacs server with a graphical emacs frame, it worked.

So, in my experience, it matters a LOT which OS are you running Emacs on and it is NOT BS that Emacs is so complicated. The complication stems from the fact that even the simplest operations are done differently than in many other popular editors and it’s quite some effort to discover, understand, remember and get used to all these differences.

Just take @mvalera’s last comment as an example:

Just think about it how much time it takes for the first time to figure out that you probably want “something like smex”? M-x is also different, from having Cmd-Shift-P working in TextMate, Sublime Text, Atom, VS Code or Cmd-Shift-A in IntelliJ out of the fckin box?!

Plus smex (or even whatever doom emacs or spacemacs is using) looks like utter shit compared to the default Cmd-Shift-P/A experience, because the options you are offered are either tightly vomited after each other, or ordered into narrow columns, where a lot of the text is truncated and you need to learn a mini-language again just to get around them, as opposed to just using (page)up/dn…

Which brings me to my 2nd point, why I think “Emacs is complicated”: people just have very different expectations from an editor, because they are accustomed to great conveniences and affordances in other editors and they want those back right away! And that IS complicated to achieve unfortunately.

I’m saying all this after using all of the above mentioned editor for several months actively at work (and vim for 7yrs). I sunk weeks of net time into GNU/mitharu?/d12frozen?/1more Emacs combined with vanilla setup or Doom Emacs or Spacemacs. I’ve watched countless hours of videos about Emacs itself, org-mode, magit and even deep-dives about smex and ido-mode. So I really wish to learn Emacs, but it just took the fraction of that time to get really professional with IntelliJ for example…

I’m not completely happy with IntelliJ either of course, but overall it’s a lot better compromise than Emacs, for someone who is mostly writing production code and some documentation in markdown, commits to master (no need for magit because of constant branch fiddling and merge resolution), reads email once or twice a week (no need for notmuch mail client), doesn’t manage massive task lists nor have a busy, complicated calendar (no need for org mode). I log what I read into Joplin (so no need for org capture either).

That being said, I’m attracted to Atom, because - as Chlorine demonstrates it - it’s possible to extend it using ClojureScript. It doesn’t require a license. It’s cross-platform, but based on a foundation (“browser”), which is a lot more battle-tested (though magnitudes more complex than Emacs). It has vim mode, which holds out hope for having a unified keyboard layout across Win/Lin/Mac (see Proton: Sunsetting Atom - The GitHub Blog).

I don’t think that’s a fair reason to say something is complicated. Cars in the UK are not more or less complicated just because the wheel is on the right side and therefore I’m not familiar and can’t easily drive them as someone who learned a different interface.

I mean, yes, Emacs from a UX perspective is complicated, not gonna say it isn’t. The UX is messy and there’s not a lot of visual cues for anything. And there are certain things within Emacs own model and implementation that is a bit more complicated as well, the way the UI toolkit is rendered for different platforms for example, running both in terminal and with UI, etc. That said beyond UX and a few of those compatibility aspect things, like working in different environment and different platforms, Emacs is actually quite simple. It is a pretty elegant model for putting together an editor environment and that’s why it has survived so long, customizing and extending Emacs is actually quite simple and easy once you learn it.

What do you mean? Isn’t it a similar idea pretty much? Or you mean in the UX again? Default M-x has bad UX for sure, it doesn’t list things out, it doesn’t search as you type, it doesn’t show doc alongside results, it doesn’t have any sort of preview, it doesn’t even have pretty user names for the commands. I agree with all that, just not sure if you mean that or something different?

My personal recommendation is to learn Emacs Lisp, not Emacs. Starting with this: GNU Emacs - Guided Tour - GNU Project and reading further into the Emacs manual itself: Top (GNU Emacs Manual)

That’s how I learned. After going through the manual, I started to have a better understanding not of the UX of Emacs, because like I said, I do believe its UX sucks, especially the default install. But of the mental model of Emacs and how Emacs itself is implemented.

Understanding what is a frame, buffer, window, file, minibuffer, what are commands vs functions vs variables, how commands map to keybindings, how major and minor mode and their hooks work, and then starting to realize how Emacs Lisp itself works, how to call Emacs Lisp code from Emacs and how to inspect and modify Emacs Lisp from within Emacs.

In a sense, it’s best to think of Emacs as a framework for making editors. And what everyone does isn’t use Emacs as an editor, but use Emacs to create themselves a personal editor.

I’m actually surprised no one ever went that route. Like use Emacs as a base for making another editor over. I think the GNU FSF affiliation and GPL license might have a discouraging effect to that.

I’ve been thinking though about making a Clojure focused distribution of emacs. Something you could install and it already all be setup to get going with Clojure. One could retrofit a better UX on it as well, more familiar key bindings, add more UI elements. Things like that… Just a thought, dunno if I’d ever actually attempt doing so.

2 Likes

But that’s pretty much what most people end up doing. My Emacs config is pretty tailored to my needs and preferences (same goes with i3, Firefox, etc., only with Emacs the personalization is deeper).

I think you can get 85% of the way there if you use Spacemacs or Doom (or probably @bbatsov 's prelude, but I haven’t used that so I don’t know) and add CUA mode support. Just having which-key and some decent bindings for CIDER will get you up and running (for the user coming from IDEs, who will be mousing around, you don’t even need to learn the bindings, just keep the menu visible)

No need to spend hours in deep dives of anything, really.

1 Like

Perhaps weirdly Atom has been troublesome in both Linux and MacOS for me. For example out of curiosity I reinstalled it on MacOS, then naturally tried searching for chlorine and got this:

Searching for “chlorine” failed.Hide output…

i.filter is not a function [object Object]

Cool, ok - lets try the website, I search the plugin db like this:

HTTP response status code 500…

Can’t believe I’m saying this but I never had such issues with emacs.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.