2. Click extensions and install language specific plugin
3. Work
New employee 2 workflow at company X:
1. Install emacs
2. Try to install some source code indexing tool
3. Tool is missing 13 dependencies, so spend 4 hours finding, installing and configuring the dependencies.
4. Spend another couple hours reading non-existent to terrible documentation (documentation so bad in places that even Stallman finds it useless) across 3 packages and editing .emacs to configure an otherwise unusable result. It looks like source code indexing is working! It isn’t...
5. Go home
6. The next morning, find the default color theme garish and spend another 4 hours installing themes and theme managers, reading more terrible documentation, and finding that obscure TTY settings must be tweaked for emacs to decide that it can use a theme (even though it has no problem displaying the colors in the first place)
7. Spend the rest of your tenure constantly hitting code indexing and highlighting bugs that need constant tweaking and workarounds. You often find yourself using find/grep because it’s often faster than debugging the latest indexing bug.
8. Discover that the vaunted ‘lightening fast editing’ with ‘multiple cursors!’ and this mode or that mode don’t matter because the slowest part of the creative process is the creativity and not your typing.
Emacs is a terrible experience with defaults suitable for a 70s TTY. That you can change it misses the point. The fact that everyone has to have a non-empty, non trivial .emacs file means it is maximally unsuitable - for everyone.
In a few years, VS Code has achieved better out of the box functionality for working professionals than emacs has in 40 years.
3. Spend 2 - 4 hours googling interesting Emacs packages, in each case going to their GitHub repo to read the directions, adding a use package form to your config with the settings that seem best from reading the directions and testing it to see if you like it until you have a useful set of functionality
4. Work
You can probably spend plenty of additional time tweaking emacs to be everything from your mail client, your music player, your IRC client, insert task here but if you do this in the time you would be watching Netflix instead of the time you are supposed to be working you probably wont have trouble getting your work done.
I literally have no idea what you are talking about insofar as TTY settings, themes, indexing bugs highlighting bugs, or constant workarounds. I installed Emacs the graphical application, opted to spend 2 hours reading a book wherein I learned how to use emacs and picked a theme by searching for the string emacs theme and picking one that looked cool. I ran package-install typed the name of the theme, hit enter and evaluated (load-theme 'theme) in my config.
I have no idea why you would be running Emacs in a terminal in the first place.
2. Observe a flurry of errors every time you start emacs. Ignore and hope it works because no idea how to fix any of it.
3. Find, among a million others, the command that seems to do what exactly what you want. Command gives an error. Dunno how to debug.
4. Watch emacs features that should work ootb not work because spacemacs or evil or one of the three bazillion packages did something that broke it. Dunno how to debug.
5. Complain on HN, get told you need to be using the master/develop version of packages because upstream devs don't care about maintaining stable releases.
6. Use unstable packages. Observe new errors whenever you update or do anything. Hope it doesn't break more than it's already broken.
While Spacemacs is an admirable effort, I think it misses the point: Emacs is an editor for power users from another era, so it requires huge effort by the user to become truly productive by todays standards. Trying to create layers upon layers of "friendlines" and eye candy is not going to solve the complexity.
I've always said that it's better to grasp Emacs with a vanilla config or a small starter kit and see if you can make it grow step by step in a journey that takes years.
vim is a similar rabbit hole, maybe less deep.
The real question is: can VS Code make you productive enough in less time?
Pretty much, yeah, from what I've seen. Against the shockingly low ambient baseline of "editors that aren't Vim
or Emacs", VS Code's highly usable OOTB experience and broad extension ecosystem are enough of an improvement to constitute a real win despite being so poor by comparison with a thoroughly evolved configuration of either of the Two True Editors.
I stick with Emacs because, now having invested more than a decade in learning to get the most out of it, I can do a lot of things in seconds that take VS Code users minutes or hours. But the converse is also true, and I think will only become more so. Especially in the realm of remote collaboration and mentorship, which has never been more important than it is today, VS Code does things that Emacs simply can't, and almost certainly never will.
That's fine, of course. That different tools should specialize in different things is perfectly reasonable, and I don't have the kind of emotional attachment to Emacs that would give me cause to be upset with its dwindling user share or its lack of broad appeal. It serves me very well, but it's not something I advocate, although of course I mentor those who take an interest.
I am looking at picking up VS Code, with suitably Emacs-esque keybindings, for the mentoring-in-programming aspect of my role. That's where pretty much everyone else is, or is going. And in that context, its less fluent and less extensible user interface is probably a boon, once I get over being frustrated by it. In the context of teaching someone less experienced, acting with the speed of thought is really best avoided; if you don't explain why you're doing what you're doing, or offer the chance for questions and discussion, essentially the entire point is lost.
Ahh, that's not what I was going for. I'm actually just curious. I'm willing to give emacs a try, but it just seems like it has kind of a steep learning curve, so want some strong reasons to know if it's worthwhile. This was the best I could find googling: https://www.reddit.com/r/emacs/comments/8h1cxa/any_long_time...
I mean, a lot of it is just the kind of complex one-off text transformations that would normally require a throwaway script or program to express. (They do in Emacs too, but you can write it as inline Lisp forms in the replacement side of a PCRE find-and-replace, and not deal with any boilerplate.) Refactors and stuff like that all happen through LSP providers, just like in VS Code.
If you're looking for a strong reason to think Emacs is worthwhile as a totally new user, I'd point instead to Magit, an extremely powerful and comfortable git porcelain, and Org-mode, which is simply the most powerful and flexible single-user notetaking/outlining/live code notebook tool yet created. Those are the two Emacs features I see most often mentioned as the subject of sentences like "I don't use Emacs for anything else, but I do use it for X because nothing else comes close".
That said, as I mentioned above, I'm not really here to evangelize Emacs. It definitely does have a steep learning curve, enough so that unless you see a clear killer feature (in my case, TRAMP's transparent remote file editing, since I edited remote files a lot in those days), it's not likely to be worth the trouble.
This. After having fiddled around with Emacs over the weekend, having tried out Spacemacs and Doom and working through some tutorials, I concluded that I definitely won't replace VSCode with Emacs for coding any time soon.
As a Git & PIM-Tool, it seems to be useful though.
> I've always said that it's better to grasp Emacs with a vanilla config or a small starter kit and see if you can make it grow step by step in a journey that takes years.
I moved to Spacemacs becaues I wanted to write clojure without maintaining my own Clojure IDE in vim+tmux (this was around 2014, maybe 2015). I was productive in Spacemacs in around 10 minutes. I went from never using Emacs to fixing bugs and writing extensions in Emacs in less than two weeks because Spacemacs pervasively uses which-key to provide discoverability and had vim-style shortcuts I could use for real work (rather than learning a new set of keybindings). The groupings of things into layers makes studying what ecosystem packages provide what functionality much easier than blindly googling "how to do X in emacs" and getting 3000 "unique" (read: half-baked if you're lucky) solutions.
This idea that you should suffer for hours/days/weeks building your init.el from scratch while adapting to terminology, keybindings, and a lack of familiarity with the ecosystem is absolutely insane. If you can use vi, you're better off with Spacemacs.
As a counterexample to that somewhat... I initially tried learning emacs with spacemacs, and the amount of customization in spacemacs’s config made it difficult for me to compare it to much of the emacs documentation out there. Whatever documentation spacemacs had at the time was confusing enough to me that it wasn’t quite enough.
I later ended up starting with a stock config, and I probably could pick up spacemacs now if I wanted to, but at this point I don’t feel the need.
Vim was for a long time and still pretty much is mostly a text editor. It is light, work well with large files and is installed on most Unix machines. I don't think trying to turn it into an IDE makes much sense but if you want to develop with it, installing a language server client takes two minutes and you don't need much more.
As a text editor, Vim is really nice. Modal editing can be very pleasant if it clicks with you.
If you install Spacemacs from develop branch, don't change the defaults and enable just the git plugin, it's pretty much always going to work just fine unless elpa is down or something.
I install Spacemacs in every machine for the sole reason of using Magit with vim bindings. It's so far beyond all other git clients it's even hard to explain to others sometimes. If Magit existed as a native standalone app, I would be happy to pay €50-100 for it, right away. But, but... :/
I cannot recommend Spacemacs enough. I was a pretty dedicated Vim user for years but grew tired of the brittle tooling and subpar extensibility and decided to give Emacs a try. My first experience with Emacs was dreadful - the default keybinds were counter-intuitive and hard to use (no, I should not have to remap my control key to caps lock just to avoid carpal tunnel), basic features were absent yet included was a web browser, mail client, etc.
A month or two later I gave Spacemacs a try, and I've been using it ever since. Not only does it have sane defaults like evil-mode for Vim emulation, but a lot of terrific packages like Magit and Org-mode are builtin. I also use the Spacemacs docs as my first resort when I want to install something new or fiddle with settings, rather than the subpar GNU Emacs documentation which never quite tells me the exact information I'm looking for.
+1 I was really attached to my vim config but decided to try out SpaceVim [1] (the vim version of SpaceMacs) after a stint using VSCode and after reinstalling my OS (before pulling in my usual vim .git) and I was surprised it was almost the same as what I spent years perfecting but with a far better and logical key mapping scheme that fit neatly across plugins + a nice programming language extension/layer scheme.
It's the oh-my-zsh of vim/emacs.
After a year of SpaceVim, when I finally found time, I ended up switching back to my more lightweight and stripped down version of NeoVim but copied the keymapping approach and some of the individual configs. It was a great starting point.
If you're a) new to vim/emacs or b) tired of maintaining your own config for w/e reason, Space[x] is entirely usable in it's default state with good documentation. It also updates often and stays on the cutting edge of various plugins and progression in the community, but with the stability of a larger community.
It defeats a lot of the learning/config curve arguments again vim/emacs.
Well, sort of. Something like spacevim requires some dependencies I imaging. Docker is sort of a package manager, so it makes sense to run the 1.1G docker image to see what you're getting into.
Anyway, this way I saw an issue early on that stopped me from going any further, and saved me much time and heart ache.
Sorry, but that's not true anymore. The spacemacs project has kind of gone off the rails and it doesn't seem like they have any idea about what they really want to do.
The next release has been coming for several years and it's not yet there. This means that you can either choose between the master branch and get hopelessly outdated stuff or the development branch which is so chaotic that you better be ready for things to break constantly.
I used spacemacs for years, then I tried doom emacs and it took me all of 15 seconds to realize that I should switch.
New employees 4 and 5 are completely fictitious and only exist in your imagination/reality bubble. In the real world no mortal has ever learned how to use Emacs in 2 hours to be able to work effectively. And like the OC said the documentation for extra packages are horrible, full of bugs and may take additional week to understand how to use effectively.
It's a text editor. You can work when you know enough do common textual operations to add remove and modify text, search through existing text, jump around to different files in the project, and run whatever constitutes a build.
More sophisticated ide like features normally constitute reading the documentation for a particular project like cider for clojure.
I have no idea why you consider 4 and 5 fictitious. One can read the entirely of mastering emacs and the cider docs in a reasonable period of time for example.
> You can work when you know enough do common textual operations to add remove and modify text, search through existing text, jump around to different files in the project, and run whatever constitutes a build.
It is one thing to know enough and quite other to be proficient in using them effectively. With the horrible and unintuitive default keybindings it takes even longer to develop muscle memory.
> One can read the entirely of mastering emacs and the cider docs in a reasonable period of time for example.
Yes one can in theory. But again if everybody could become proficient in something just by reading manuals then we could shut down our expensive schools and colleges and any sort of practical training. Also, everyone could then program in `ed` or TECO.
Curious, have you actually met any other person who's not an emacs user in real life, like ever? Here's an experiment, go to any decent software company and ask 5 new hires who've never used Emacs, give them the manual and see how long it takes them to actually do something significant? Then give them VSCode and compare notes.
Did you mean to ask if I'd ever met an Emacs user? I'm pretty sure we both pass people who haven't heard of any text editor or IDE all the time.
I'm not likely to meet many Emacs users regularly as I don't work in tech I'm just interested in it. I've met Emacs and vim users at a clojure meet up but that isn't exactly shocking.
Disclaimer: mostly vim guy. I agree that Emacs is super powerful for power users, don't agree that it's intuitive or easy for new users. Also I found spacemacs to be pretty brittle when I last tried it a year ago.
Agreed on Spacemacs. Seems like a lot of stuff I had to switch to the Develop branch for it to work right. Supposedly the next release is coming out soon which will fix a lot. I’ve since switched to Doom which I like better anyways though.
Think they key here is you read a book whilst the prev op just assumed reading random guides on the Internet would be an appropriate way to learn a piece of software for professional use.
This view is obviously biased against Emacs, but I don't disagree completely with the premise.
As an Emacs user, being "immediately productive" (whatever that means) is not your topmost priority. You mold your Emacs to a workflow unique to you, notice things you are doing often, add elisp functions to change it to make those things easier, and carry them with you from job to job. As your job evolves and changes, you maintain and grow your Emacs files over decades, and borrow from someone else's workflows. In a a much better way than I can put it, Emacs users are like Igors [1]. You can be a productive individual contributor writing Clojure inside Emacs, or a productive CEO managing todos in org-mode [2] – it works equally well once you figure out how you mold your editor. VSCode "plugins" and Emacs packages are just not the same, with Emacs you can be far more flexible about changing the behavior of the plugin in specific modes or activating things given specific conditions. You revel in the effectiveness of using one of the last remaining vestiges of the Lisp Machines of Old Valyria.
Meanwhile company X will just slot in cookie cutter developer 1 and ask them to use VSCode because they are eager to get the developer to be "productive" on Day 1 for some reason. You would think that giving an employee a week for setting up and tuning their workflow should be totally normal if you want them be there for several years and be maximally productive over time. More power to them I guess.
> You mold your Emacs to a workflow unique to you, notice things you are doing often, add elisp functions to change it to make those things easier, and carry them with you from job to job. As your job evolves and changes, you maintain and grow your Emacs files over decades, and borrow from someone else's workflows.
I've been writing software for ~24 years, and I can understand the need for this in the past.
Now, I just don't get it. What are emacs users customizing so intensely that no other environment can match it?
I've found that JetBrains IDEs with a few plugins do 100% of what I want, including some really advanced refactoring and useful GUI integration with CLI hinters/linters. VS Code takes more setup, but it's similar.
The level of customization that emacs supports seems unnecessary to me. Can you talk about a few use cases where emacs is just better than an IDE could be?
> Can you talk about a few use cases where emacs is just better than an IDE could be?
I don't use Emacs at present (Neovim instead), but I find TTY based programs to be genuinely more productive and flexible once you make it past the initial learning curve. Using tmux and ssh to seamlessly float between devices with an ongoing complex editing session immediately comes to mind. I've also used both Eclipse and Visual Studio at different times and distinctly recall what I can only describe as lumbering startup times. Ranger via ssh is often much more straightforward to use (for basic operations and browsing) than trying to click through a bunch of menus and sort out network mounting issues.
Neovim does lack advanced refactoring tools out of the box, and I've never gone looking so I can't comment. I suspect Language Server Protocol may change that in the near future though.
Regarding the possibilities afforded by the sheer level of customization, vim-fugitive comes to mind though I'm sure there are better examples. (https://github.com/tpope/vim-fugitive)
I have multiple machines, running Docker, running multiple tux sessions, for different projects. I can’t even begin to think how I’d pick up where I left off when switching between projects if I wasn’t using Vim
You can do one thing in JetBrains: edit code. That's it.
In Emacs, I read my mail, I organise my agenda, I write technical reports, blog posts, I wrote my entire thesis in org-mode. I collect research notes in Emacs, and a journal. I do my bookkeeping and accounting in Emacs. I write Confluence articles, so I don't have to deal with Confluence's shitty interface. I edit remote files, I edit files via sudo on my machine. I control git. Yes, JetBrains can do git, too. My colleagues sometimes use it. Actually, they use an unholy mix of JetBrains, GitKraken and the command line on Linux, and Tortoise, SourceTree, JetBrains and the command line on Windows. Not different people. Everybody individually! Why? Because they know how to do different things in different tools. Meanwhile, I just use magit. Magit is absolutely fantastic, there is no better git interface, and I've tried many. Even for our backend Kotlin code, which I have to use IntelliJ for, I jump back to Emacs to use git, and edit yaml/graphql/etc files.
I've probably forgotten a couple of things here. And the cool part is that Emacs now supports LSP very well, and LSP is starting to support a lot of languages very well. So I don't even miss IDE features, such as refactoring. Add to that block selection, the best undo mode, actually robust modal editing (evil!) fantastic documentation, great flexibility, keyboard macros (I use them ~2-3 a week, and they're great every time)
… the list goes on. I've been a dev for less time than you have by about 6-7 years, but I can honestly say that no other tool could even come close to replacing Emacs.
> You can do one thing in JetBrains: edit code. That's it.
You can also takes notes in markdown docs and/or code comments (it has a built-in TODO detector and organizer).
> they use an unholy mix of JetBrains, GitKraken and the command line on Linux, and Tortoise, SourceTree, JetBrains and the command line on Windows
I just use SmartGit for git. It's configurable with workflows (or custom commands), navigable with a keyboard, visual, clickable, and actually "smart" -- it warns you if it thinks you're about to do something stupid, like overwrite a repository's history.
> In Emacs, I read my mail, I organise my agenda, I write technical reports, blog posts, I wrote my entire thesis in org-mode. I collect research notes in Emacs, and a journal. I do my bookkeeping and accounting in Emacs. I write Confluence articles, so I don't have to deal with Confluence's shitty interface.
This is good info. These are all things I really, really don't want to do in my IDE. I want my IDE to be a good IDE, and I want my other tools to be purpose-built as well.
Switching apps is not painful to me at all. I often have a screen with a git GUI, IDE, browser, and DB GUI all open at the same time.
I get it, not everybody has the mindset of living in one tool — I didn't either, before I converted to Emacs, which is a relatively recent development. Maybe 3-4 years, though I did use it ~7 years ago once, and then even further back, probably around 12 or so years ago. I don't quite remember.
But I came back to it, and stayed for good, because Emacs is really an OS with a nice editor. So you can have the same approach of do one thing and do it well, but you have different packages instead of different programs. And they synergize nicely. So it's not only an IDE. Everything I use is purpose-built for that one task, including ledger (accounting), mu4e (mail), lsp (IDE-features), org (agenda, research, documentation) magit (git) etc. None of these things are "plugins". They're programs in their own right, just like ls and mutt, and git themselves.
> This is good info. These are all things I really, really don't want to do in my IDE
The point of Emacs is that it's a text-editor, and as someone editing text all day (code, documentation, etc) I want the best, most consistent text-editing and text-process possible, without having to jump from tool to tool.
With Emacs, you can mold everything you do to be consistent across all dimensions you can imagine. Once you get used to it, it is very weird (unthinkable?) to go back to other tools.
What are your favourite features about magit? I switch between Pycharm and Vs code and terminal for my git usage. I find Pycharm has a really great git blame ui that makes it easy to walk back in time and investigate changes. It lets you toggle "Annotations" next to the line number, that display the SHA. From there, you can right click > show diff, from which you can _also_ show annotations, and continue jumping back ad infinitum. Vs code has a plugin which does something similar, but I find the UX to be not as elegant (the annotations are way too wide; every option is hidden behind cryptic icons like "<<"; diffs open in new tabs, which makes things cluttered; and instead of right click menus they have really large hover menus which I find are super finicky to use). VS Code's conflict resolution is a little easier to use for me. Pycharm's approach is a little overly UI'd, whereas Vs code treats everything as text with helpful little overlays for quickly selecting one vs the other. Also when viewing local changes as a diff, Vs code's highlight change > right click > "stage selected lines" is more flexible then Pycharm which only shows a little checkmark near "chunks" of the diff for staging. Both editors also have a lovely feature that lets you highlight text and copy the GitHub link to the chunk or the entire file. Makes sharing really easy.
I use the git terminal for everything else; branching, checkouts, rebasing, pulling, pushing. Actually I use vim for interactive rebasing because it's fast/quick there.
For a similarly complex task, there is no program with a better UI.
Magit manages to optimize for both, speed and discoverability: 99% of all actions are 2-3 keystrokes away, and at each stage of that process, magit will tell you your options. For example, invoke magit, press 'b' brings up the branching menu, basically a keymap for letter -> action. Pressing 'c' for checkout then starts a new branch creation. The default branchpoint is your current branch. If that is fine, press enter, otherwise type out the branch name (tab completion for all possibilities, local and remote). Finally, you name your branch. So in 99% of the cases, it is b>c>enter>my_cool_new_feature>enter, done.
Before magit, using version control was a necessary evil (for me). Nowadays, it is so effortless, so natural, that it hardly registers in my attention -- similar to the way that you automatically save the file that you are working on after a couple of lines of writing without noticing that you are doing it.
All cli tools should have a magit interface. World peace and happiness would ensue.
> All cli tools should have a magit interface. World peace and happiness would ensue.
:) Ahhhh, I think I understand! So magit is like an autocompleting wrapper/reorganization around the git cli. That does sound great! There are some git commands which would be super annoying to do via a UI (not to mention if you add _all_ of git's features to a UI, good luck making anything discoverable :P), but in the CLI they're kind of awkward cause unless it's something I use very frequently, I forget the syntax (looking at you git bisect). This sounds like it would make those significantly easier to use, _and_ help the developer discover new git commands they might not be aware of (looking at you, git bisect :P).
> Ahhhh, I think I understand! So magit is like an autocompleting wrapper/reorganization around the git cli
It's a complete git "porcelain", in that it provides more or less full access to all git offers.
I daily rewrite git history in my feature-branches, cleaning up my commits, to provide fully atomic and clean merges back into dev.
Using magit, it's just seamless and feels immensly rewarding wrt doing a good job. Without magit? I wouldn't even bother.
Magit is not "just" a wrapper around the git CLI. It's a complete replacement, enabling you to fully exploit all of Git's power without ever leaving your editor of choice, nor exposing you to complex internals.
It's an amazing product, and I've seen people ask for a Magit-only Emacs-distro, just to replace their existing Git client.
I think incremental commits are among my favorites in magit. It's so quick and easy to stage and commit selectively.
The other thing I love about it is discoverability of git features. Did you know that you can stash index and working tree separately? I only know because of magit. Now that I know, I have actually used it to great success.
Also, I've become my team's go-to rebase monkey. What takes my colleagues minutes of thinking what to rebase where, and how, and how to deal with the conflicts, I'm usually done in seconds. Also, conflict resolution with magit is really very streamlined. Conflicts still suck, but less so.
Pushing/pulling to/from different remotes is quick and easy (happens often with github forks and PRs), merging and branching is a breeze, and you've got splendid auto-completion on branch and tag names (I use ivy.)
The blame mode you described exists in magit, too. You can annotate a file and drill back into a certain commit's history. Actually, the default way magit does it is dissimilar from what you might be used to from other GUI tools. Magit doesn't annotate the left or right, but instead inserts header lines for a commit. That way it's easier to see coherent commits. I find this way of displaying history nicer if your code's commit history actually contains chunks of lines for the files, and it's not so fragmented that practically every line is from a different commit/author. It's possible to do the margin-annotation you're used to from other blame tools, too, though.
Thanks for the examples! The magit page is a little hard for me to grok why it might be worth switching to something else.
> Did you know that you can stash index and working tree separately?
What does this mean? Can you give an example?
> Also, I've become my team's go-to rebase monkey.
Haha, hello friend. I love rebasing; it always breaks my heart a little when I see "Merged master into branch X" commits :P My main git rebase flow is `git checkout master; git pull upstream master; git checkout X; git rebase -i master` + vim. Having multiple branches that depend on a shared branch does get a little messy though. How does magit make this flow better?
> Conflicts still suck, but less so.
Hahaha, that's all you can hope for with merge conflicts!
`git status` always shows you some of three things: files not tracked by git, tracked files with modifications that are not staged, and tracked files with modifications that are staged.
You can stash tracked files with modifications, or tracked files without modifications separately! Scenario: I've staged a couple files for a commit I'm preparing, but I see that there's an unrelated change in the unstaged files that I want to do in a commit that should come first. So I stash everything I've staged. I do not stash what I haven't staged! Now I can create that new commit, and pop the stash later to come back to the commit I wanted to originally write.
I agree with all of this, especially discoverability of git features. I think using magit really helped me build a mental model of what git’s doing and what it can do vs. just using the git CLI on it’s own.
And yeah, incremental committing, the rebase workflow, working with multiple remotes... they’re all a breeze. With the GitHub style PR workflow, I typically set the main repo for a project as the “upstream” remote and my fork as “origin.” With the settings I’m used to for a project, pulling down the latest changes from upstream is two keystrokes: “F u”, and pushing back up to my fork is two more: “P p”.
Actually, I just use ox-confluence, which means I can export (narrowed) org-mode trees to confluence. It exports it to a buffer that I cut-and-paste into the web page.
I think confluence.el is no longer maintained, sadly. Maybe an interesting new side project :)
> You can do one thing in JetBrains: edit code. That's it.
No, you can do more, it's just usually people don't have the mindset to do more. And to be fair, JetBrains software is not meant to do that, so it's harder to do it, preventing the people from developing the mindset. It's a loop.
Thats just plan incorrect. JetBrains lets you do the following, out of the box:
- Edit Code
- Debug Said Code
- Run Said Code
- Manage your repo via Git, SVN, or Perforce
- Has GitHub integration built in
- Has PlantUML integration for creating UML diagrams via their markdown editor (its pretty nifty and I believe now bundled by default)
- Connect multiple SSH sessions
- Connect multiple SFTP sessions (semantics right)
and so on and son on..I can even do remote editing as if its there, righ tin front of me. you can't even tell if the filesystem is remote because of how it populates in the IDE.
So please, what doe sit not actually do again?
and via plugins, (and a plugin ecosystem that tends to be well manicured/maintained, at that), you can add an LSP or many other languages that are supported. I've tried many many editors, and JetBrain IDE plugins are some of the highest quality i've ever worked with.
>In Emacs, I read my mail, I organise my agenda, I write technical reports, blog posts, I wrote my entire thesis in org-mode. I collect research notes in Emacs, and a journal. I do my bookkeeping and accounting in Emacs.
No one cares (other than Emacs users). There are better tools designed for those purposes. There's a reason the UNIX philosophy of doing one thing well is still so popular and widely used. Rather than configuring and spending hours on buggy, poorly developed and indecipherable systems like Gnus, org-mode (it's like an Emacs with an Emacs, just ridiculous) etc people instead choose tools that are far better, more intuitive and works out of the box and everywhere.
> I edit remote files, I edit files via sudo on my machine.
Any decent editor or IDE can do that.
>I control git.
VSCode support for Git (and Github) blows everything else out there. And so also for languages like Python. Emacs support for any language which is not a Lisp dialect or C is horrible.
> I've been a dev for less time than you have by about 6-7 years, but I can honestly say that no other tool could even come close to replacing Emacs.
I very much doubt you actually tried to use anything else.
Which tool would you suggest for Org-mode?
I have been reading up on it and it almost made me want to use emacs. But if there is a better tool designed for it's purpose..
And that's already not a decent concurrent for org-mode. Not that I have a grudge against web tech, but no self-hosting of my most personal data and no offline abilities is a deal-breaker for me.
Emacs user here. I've been thinking about this lately since I switched to VSCode because Emacs doesn't have a good TypeScript React mode and to be honest, you're right.
The difference is I can make Emacs do things just the way I want it vs can it do what I need it to do? And I find that for most part I don't miss it that much (even I'm shocked) but I still open Emacs for Magit from time to time, because there's just nothing else like it, and boy is Magit slow when I have to merge big changes (probably exacerbated by Emacs Mac port's slow vfork).
Tide + https://github.com/jscheid/prettier.el + projectile + helm work wonders. Been using this for +3 years now and its one of the bigger productivity improvements in my recent years of emacs and programming practice.
At work, I actually try to get ppl away from Jetbrains IDEs because they are slow and their typescript and prettier support seems pretty buggy to me.
Unfortunately, most developers I meet these times are not the kind of hacker types that want to understand and optimize their tools but rather just to get stuff done on the surface (which is totally fine). So emacs isn't just a good fit for them.
I use emacs/tide/prettier-js, but the prettier formatting only happens on save. Do you have settings that make emacs adhere to prettier formatting as it goes along?
1. Nothing I've found comes anywhere close to Emacs support for keyboard macros. Zero latency to record. Records every keystroke. Very very consistent behavior. Infinite undo. Kill Ring. Register support.
Despite being an expert Emacs user, I'm mostly in VS Code these days because it has syntax highlighting, git support, and linting out of the the box. But I always go back to Emacs when I need to transform a bit of text.
2. Comparing two text snippets, as opposed to files.
There are a small set of use cases where you want to look at every position where something has changed. You can open two buffers in Emacs and use compare-windows to walk through them. Since the IDEs are all file-oriented, they don't work for this case well.
What are some examples of keyboard macros you use? I read a lot about people loving keyboard macros, but I can honestly say I've never thought of a use-case for them. There's already a built-in IDE automation for everything I could think to do with a macro.
If you have, say, a list on consecutive lines with a blank line in between them, and you want to delete a character after the second word, add some text at the end, and delete the blank line - with keyboard macros you record these transformations once and then apply them to the rest of the items.
First thing I notice when I use VS Code is... Do I really have to click and click and click and click to navigate from one file to another? Why does VS Code show pop ups all over the place?
I really like how I can navigate the file system from emacs using fuzzy searches when I need them, and how the same fuzzy-search approach helps me also navigate all my buffers, works remotely over tramp, etc.
Remote file-editing is also available with other editors and IDEs. Everything KDE has it out if the box for example. Vim has IIRC some protocols. VS Code got some a bit ago as I heard.
> Now, I just don't get it. What are emacs users customizing so intensely that no other environment can match it?
I thing it's a bit between exploring the possibilities of your tools, expressing yourself in some "divine art" and procrastinating under the guise of being productive. There is definitly a high amount of good customizing possible with emacs, but from my observation many end also in the trap of over-custimizing, to the point where it becomes harmful. Not to forgotten all the worthless oversmart solutions build in emacs, beacuse emacs gives them the means to do it.
> The level of customization that emacs supports seems unnecessary to me.
Emacs is a platform for textual and programatic interfaces. Similar to web-technologie. As such you can tweak little things, but also build whole apps dedicated to specific usecases with it.
> Can you talk about a few use cases where emacs is just better than an IDE could be?
It's not better than IDE, but similar level as IDE. Just that you are able to do it yourself. With an IDE, if you have a specific demand like integrating some new tool, or handling some specific filetype, you depend on the producer to build it into the IDE. Just recently IDEs have also learned to use plugins, to allow you build some stuff yourself. Ok, recently was 15-20 years ago, but emacs is 40 years old, predating them all.
I think VSCode is a very mouse-centric experience. Using Emacs I don't touch my mouse. It's a far more efficient and comfortable (less straining) experience, for me anyway. I use both Emacs and VSCode but vastly prefer the Emacs experience. I also use Emacs for much more than simply writing code.
Emacs is also more pleasant to use because it's simply faster. VSCode is slow compared. I'm not talking about application startup time, but just about every operation you do. VSCode stutters and hitches all over the place. Input latency might also be worse, but I don't know, that's just what it feels like. It also lacks many of Emacs' powerful features like helm swooping, which is of course customized just the way I like it. VSCode's "search in all files" just doesn't cut it. And symbol fuzzy search is just for symbols, not all text. Code navigation in Emacs is lightning fast, with the right setup. My Emacs config makes a distribution tailored for me.
A great advantage Emacs used to have over other IDEs and some editors was that you would use it for all/any language. Now with editors like VSCode, which has great support for many languages, it has lost this advantage.
Although the mouse centric experience thing makes sense when _writing_ code, I don't think it makes as much sense for reading/refactoring code. I'm not an Emacs user, but watching some of my colleagues navigating a codebase with Emacs looks not only slow, but also very mentally taxing. They often switch to grep searching, then select the results in order to iterate over them in Emacs. Or they have to remember full paths to files (with autocompletion, but still). Ctrl-shift-f in Vs code looks significantly faster since it displays the results in real time and let's you see the snippet and simply click on the one you want. Also ctrl-p for finding a file quickly by searching for any part of the path. Ctrl-clicking on a method name to jump to its definition. Right click > rename to rename a symbol across files. Or a feature I love in Pycharm, alt-enter to auto import a function--without having to try to remember where it's coming from (it gives a drop-down for multiple definitions). These things speed up flows enough that I think it outweighs the cost of having to remove your hands from the keyboard. And I think reading/refactoring code is as important as writing code in development.
These are exactly the things I find better and faster in Emacs. Watch video below and imagine searching that way but for all files in your project. Results in real-time, instantly taken to content when you highlight and browse results with arrow keys or further narrow down by typing.
Oh nice! That's pretty similar to the VS Code's search experience; I didn't know emacs had that built in! I have a colleague who uses emacs and he always uses grep for stuff like this and it makes my eyes bleed :P
> I think VSCode is a very mouse-centric experience
I never touch my mouse in VSCode. There's many many shortcuts that are configurable, and keyboard navigation isn't not a "second-class citizen"
> VSCode is slow compared
Yeah, probably true. Never felt like it slowed me down though
> And symbol fuzzy search is just for symbols, not all text
cmd-t on vscode. Probably not strictly equivalent to helm-swoop, but you could make your own extension in JS (which is a strong point for many people, I don't particularly want to learn a language that's specific to my editor).
So, I write a niche language server along with an adapter for VS Code. What are you frequently jumping to that isn't a symbol?
I can expose anything through the LSP api. Thinking about it, every single piece of text is covered by symbols and falling back to find all references.
The only thing that wouldn't work is trying to jump to syntax, but why would you do that?
I was going to say pong. Or fireplace. Or maybe the same experience on macos or linux or editing files on an embedded router remotely with tramp.
But really the customization is the use case.
just some examples:
I have written a few specialized diff functions. diff two directories, diff 20 files, diff what I have vs checked in. many different comment-out-a-region functions. remote compile. local compile, but build this part of a project or build it this way. every language I code in has customizations, for indent, for tabs, for colors, several "insert a debug printf".
They are all silly and redundant of no consequence. I frequently rewrite them or throw them away depending on the project I'm working on.
they are meta-silly even: f2 will rotate through editing my 3 startup files.
However - when the time gets tight and I have to do something on a schedule, I'm not grinding through some other person's decision of what is best, I'm just doing it. I also get better at it with time.
I just wrote a small function to convert Unix epoch timestamps to date-time strings. Just to be able to make sense of timestamps in some log files I was looking at.
I find this kind repetitive thing frequently comes up in the course of one's work. Not a big deal to copy and paste in a web site to convert the first few (or few hundred) times, or firing up the python interpreter. But once it becomes apparent that I will have to do this again and again it is great that Emacs gives me a way to add that small function to it.
I use an IDE for java development because the refactoring is just too useful. But Emacs macros are very useful and I haven’t found something like this in my IDE.
I wonder whether it’s possible to set up lsp-mode for my Java project.
In order to be more productive of 10s of thousands of hours one only needs to be slightly more productive to justify spending a handful of hours. 1% per 10k hours is worth 100 hours.
I appreciate what you’re saying, and I do hate being slowed down in the moment.
I’ve got a handcrafted AutoHotKey script and a 22 button gaming mouse fine tuned for 2D CAD / CAM software at work, so while I am definitely in to this sort of customisation...
If I’m honest with myself I don’t really get more work done because I end up using the time being unproductive elsewhere.
There’s definitely a certain intellectual curiosity-satisfaction to be had from customisation.
I’m just not convinced it’s a net time saver in the long run?
> because I end up using the time being unproductive elsewhere.
Isn't that literally the point? If you can do your task in 10% less time, and then end up spending that 10% procrastinating on HN, then you still win - the task gets done, and you also get to sneak in something nice. And if you find you'd rather spend that time on something else, or doing more work to finish everything faster, you can choose to do so. Optimizing work gives you choice what to do with the time saved; the default may be that you waste it, but now you have options.
I think most emacs user are overestimating the gain they are having by mastering art of emacs. Sure, it sounds useful to copy every 5th character in all lines that fits a certain regular expression but how many times you actually need it on your active development time and how much time you lose by doing that manually or using more traditional tools?
The coding is mostly typing and debugging. Visual studio (most ides really) is good enough at that. And to be honest emacs/vim complicates the typing part.
> Visual studio (most ides really) is good enough at that.
No. It's not.
Emacs's electric-indent is so close to the Right Thing when you're coding it's incredible -- getting almost perfectly formatted code as you type. Other editors have autoindent, but it never seems to do the right thing. Other editors also see fit to insert closing brackets/parens/quotes, and then miss detecting when I typed the closing punctuation so now I have three brackets/parens/quotes. It throws me off. Just highlight the opening punctuation mark when I close it, the way Emacs (and vim) does.
I've given Visual Studio Code a chance. Lots of chances really. Each time I find myself struggling with it more than I should, and needing that Emacs flexibility much more than I anticipated going in. Initially I feel more productive, but the more I worked with it the more it gets in the way, inducing friction and slowing me down. And then I want Emacs back.
> You mold your Emacs to a workflow unique to you, notice things you are doing often, add elisp functions to change it to make those things easier, and carry them with you from job to job.
In most jobs I worked for, taking files home from employer computers would be stealing from security point of view no matter what their contents are.
So it means that one has to create those configurations from scratch every single time in each new job.
It depends on the job. Certainly you can't add any company-specific tools to your overall init file.
However, most of the stuff I do isn't that specific so I have all my customisations in a git repo that I pull from github to whatever machine I'm working on.
Yeah, no bias in your comment. This is the kind of gatekeeping that is keeping Emacs from being popular. All of what you said works great in a "blog" and social media to get upvotes and +1s, but not in real world.
> Meanwhile company X will just slot in cookie cutter developer 1 and ask them to use VSCode because they are eager to get the developer to be "productive" on Day 1 for some reason.
This is not only insulting but ignorant. Have you looked at how extensible VSCode is and how most of the users are using it before you made your comment? Just because it is great outside the box, does not mean it is not extensible or the users cannot "tune their workflow".
> You mold your Emacs to a workflow unique to you, notice things you are doing often, add elisp functions to change it to make those things easier, and carry them with you from job to job.
I'm using emacs for 15 years, and it doesn't work for me. When I noticed things I'm doing often, I already have a habit of doing these things by this way. So if I wrote an elisp-function to automate things, I wouldn't use it, because my unique way doesn't include this function.
I'm trying to find a courage to migrate from emacs to some other IDE, where everything already configured, where I could create new habits relying on automation. You know, like use syntax-aware indexing software instead of "<f9> find . -name *.[ch] -exec grep -Hn something {} \; <enter>". I tried etags, but it doesn't work often enough. So my unique way is to simplify workflow and start with find/grep solution, which works in 100% of cases.
emacs is a subject of "lisp curse"[1]: it is too configurable for people to make it usable. People just hack around to make it work for them, and no one tries to make reasonable defaults, because when you set up text editor and ready to make reasonable defaults your editor already is configured and you personally doesn't need no defaults.
That, and while emacs has a reputation as being the ur-editor from which all text editing innovation stems, the reality is quite the opposite. It's stagnant and hasn't been the center of text editing innovation for at least the last decade, and probably quite a bit longer before that.
It was a particularly bad string of basic package incompatibilities that woke me from my emacs evangelist phase, but it was the realization that emacs was downstream from TextMate on several non-GUI-centric features that made me realize the entire "platform" value prop was bunk. While emacs might be excused for missing tectonic shifts (e.g. away from CLI and towards GUI), entirely text-centric features like multiple arbitrary simultaneous caret, Smith Waterman quick file/action search, powerful template substitution, parsing-based syntax highlighting, navigation, and refactor tools all developed and matured outside of emacs and then slowly and painfully found their way back in, not the other way around.
Emacs was supposed to be a fertile platform for text editing innovation, but history didn't work out that way, even if you ignore the trend towards GUI innovation, which you shouldn't.
Emacs is a gui app. You can have if you like a tool bar. A menu-bar, tabs, split windows.
If you want something slightly more like a traditional gui emacs application framework enables bidirectional communication with QT applications running in emacs frames.
Personally I use it to render HTML mail inside emacs with what amounts to embedded chrome.
Emacs is as much of an GUI-App as Window notepad is an editor. They both have the traits what justify to call them, but also are both on the absolute bottom-line in terms of ability.
The menubar is stuck in the 90s, the toolbar very very basic, even for the 90s. Window-Splitting is not even an GUI-feature and very basic. Only the tabs are somewhat modern, but also simple. COmpared to a modern GUI, emacs has barely anything that justify calling it GUI. Especially as most of those features are available in the terminal-version too AFAIK.
> If you want something slightly more like a traditional gui emacs application framework enables bidirectional communication with QT applications running in emacs frames.
Calling external apps doesn't make it a better GUI. And amount of connection between emacs and Qt is very limited. This is just a crutch to fill missing areas in emacs abilities.
> The menubar is stuck in the 90s, the toolbar very very basic, even for the 90s. Window-Splitting is not even an GUI-feature and very basic. Only the tabs are somewhat modern, but also simple
You're confusing GUI with Windows GUI API. That's like complaining that a game like Stellaris barely has any GUI, because if you force it to run in windowed mode, then maybe you'll get a context menu dropping down from the application icon in the top left corner of the window.
Emacs absolutely has a GUI. It happens to be drawn almost entirely from characters, but it's a GUI. It uses the language, can display pixel graphics (in GUI-app mode), and even supports pointer devices. The fact that 99% of that GUI is a TUI is actually a benefit (you can also use it from terminal). And with third-party plugins, it has all the sophisticated GUI controls you could dream of, except unlike in traditional GUIs, they're fully interoperable.
A good comparison may be that Emacs is the OS that ships with a tiling WM, and most people unaware of that just use it to tile notepad windows.
Windows splitting is actually quite sophisticated you can split horizontally or vertically and split successive sections of the screen. You can balance windows in one dimension or by area. You can do this automatically as you create or destroy windows if you like.
You can have new splits inherit the file you are already editing or show a blank buffer. Further closing a split doesn't kill the buffer or make you decide at that point whether to save a buffer it just destroys the view not the thing.
Native tabs interact with splits in one of two ways. Either as an array of window arrangements at top of window or an array of buffers within a particular split.
You can manually resize a split with the mouse and in fact you can create them via the file menu which also shows the key binding to activate the functionality beside the option ensuring that the 2nd through 10 millionth time you need the functionality you can just press a few buttons.
It's not opening external apps like clicking a link in your email and having your regular web browser open the url its creating a pyqt app within the space of your emacs/tab/split that you can interact with via elisp
Render images alone is too basic, that was already possible in XEmacs.
I really meant like Jupyter Notebooks, interactive images and data structures, that you can click on and change to your pleasure and plug into Elisp code to be called back.
Org-babel does this, and is less limited in language choice than Jupyter; you can use any language for which a binding exists (there are many, including Python) in any code block, irrespective of what you use in any other. The interfaces are pretty clean, and you can have inline images, although I think not interactive ones. Data structures are expressible in code or in tables.
I don't use it much these days, having less need for that sort of highly interactive exploratory analysis, but I did find Jupyter highly limiting by comparison.
Completely agree. There hasn't been any innovation from Emacs since the 90s. Instead more and more effort has gone into adding useless capabilities into emacs such as mail/news readers, organization systems and even window managers. There's some truth to the statement that "Emacs is an operating system lacking a decent text editor" except that even as an operating system it sucks.
> The fact that everyone has to have a non-empty, non trivial .emacs file means it is maximally unsuitable - for everyone.
The fact that I have a non trivial .emacs file ensures that when I switch machines, I only have to transfer a single file to enable an identical development environment.
I can't speak for VS Code, as I've only ever played with it a couple of times, but can I do the same thing there? I don't want to spend hours finding and installing packages to recreate my dev environment, or play with various GUI settings to recreate my preferred theme. With Emacs, I can `package-install-selected-packages` on a new build, and I'm using an exact clone of my usual config.
There is an integrated settings/extensions sync feature (not yet available on the main release, probably next month). [1]
Or there is a popular extension that does exactly the same thing. [2]
Or you can also do it manually, import/export your settings in JSON and generate a list of `code --install-extension x` that you run on your other machines. [3]
> The fact that I have a non trivial .emacs file ensures that when I switch machines, I only have to transfer a single file to enable an identical development environment.
I just want to pull this particular sentence out for emphasis in case anyone is reading the "New employee 2 workflow at company X" comment and thinking that it's even the least bit true.
and I don't only have my full Emacs configuration, but a full development environment with Rust, Go, etc. Though you could probably also configure VS Code that way.
Nix support for VS Code is pretty painful. Only a tiny subset of extensions are listed in nixpkgs, and those are often broken (e.g. Python) when old binary versions are pulled from the CDN.
If somebody could make a VS code extension that seamlessly pulls down other extensions by altering the nix config, it'd be perfect.
I've never needed more than 2-3 VSCode packages for a given workflow. They're usually easy to find and at the top of the list when I search for a language. Settings live in a settings.json file in your home directory and/or workspace (the latter is so that shared settings can be committed to version-control). You can have both and they get merged, with the project settings overriding user-level settings.
I'm not familiar with emacs. Does that mean that you don't need to install any supporting software like indexers, linters, syntax highlighters, etc? Does the emacs file contain all that or tell it how to download all the plugins?
If you could just copy one file and get all that, that's pretty cool.
No. It doesn’t. You still need to install and configure plenty of 3rd party packages and tools that are completely outside of emacs. For C++, things like cscope, ctags (or maybe etags or gtags), clang autocomplete tooling, etc.
These, their dependencies and layouts, typically change from machine to machine, OS to OS, distribution to distribution and version to version. So placing it in your emacs config isn’t really portable.
My experience with VS code has been a couple clicks for C++, Python (2 & 3), and a smattering of other languages and configuration files (YAML, cmake, etc.) on a fairly large (~1MLoC) enterprise code base.
Another click for remote editing over ssh.
No pain and most importantly no constant tinkering.
VS Code started very humbly a few years back and was useless to me because it only supported JavaScript and a couple other things with no plugins to speak of. It has since grown into a seriously powerful tool.
The 'one file' installs the other tools for you. At least mine does. I move between machines regularly, and when I do I just install emacs according to the recommended method for the particular OS and copy my init.el file to the new machine. All the packages I depend on are installed the first time I run emacs. And my init.el would be considered pretty basic by the standards of an advanced user.
I am not a passionate Emacs user and I strongly dislike the weird bugs that rear their heads sometimes. I was always a vim user, but switched to Emacs because it has better support for completion, etc. while having nearly perfect vi emulation. I would even go as far as saying that Evil is vi implemented in Emacs Lisp.
I try VS Code every now and then, but I always stop because of two reasons: incomplete vi(m) emulation and the latency feels really bad compared to Emacs/vi.
Would like to switch otherwise, but non-leaky vi support and good latency are essentials.
Edit, forgot to add: something as good and keyboard-driven as magit.
> but switched to Emacs because it has better support for completion, etc. while having nearly perfect vi emulation
I switched to emacs for similar reasons (plus the fact that it supported embedded repls that actually worked). But eventually switched to neovim, because it could do things like completion and repls. vim 8 can now as well.
> I try VS Code every now and then, but I always stop because of two reasons: incomplete vi(m) emulation and the latency feels really bad compared to Emacs/vi.
> Would like to switch otherwise, but non-leaky vi support and good latency are essentials.
Same. Also start-up time. I love typing `v <filename>` in a terminal and instantly getting an editor. Lower memory usage is also nice.
Not too long. I also began using Emacs with spacemacs, but it was buggy and slow. Then I just started with a completely pristine Emacs configuration and just added through use-package:
- evil for vi emulation
- general/which-key so I could define spacemacs-like
bindings that start with SPC.
- ivy for quick search of buffers, files, etc
Then I added things on a by-need basis. I would say that the most important additions were magit for Git, projectile for quickly switching between project files, and some Rust packages.
Wouldn't class myself as an experienced Emacs user.
Used it for 5 or so years. Learnt enough to get by and have my own config that works for me. Not got as far as writing my own elsip functions.
When I set up a new computer
1) Check out my emacs config from git
2) Start emacs
3) Wait for emacs to automatically download all the packages declared in my config using use-package.
If you never used Emacs before fair enough it's harder than VS Code. VS Code does let you get going knowing less by clicking buttons. It's the same as comparing any CLI app with a full blown point and click GUI.
My take on getting a new user setup... "use what ever IDE you are comfortable with, I do not care. This is the IDE I use, here is how I have it set up if you want to use it also. Person C uses this IDE instead if you want to use that, ask them for there setup. No one here uses your IDE? You are on your own setting it up but can help with any project specific questions you need to know to get your IDE of choice running".
As far as code searching goes I find myself often outside of any IDE using the silver searcher (ag) so use emacs projectile for the exact same functionality but within emacs. Sometimes the only feature I miss from a full blown IDE like InteliJ is find usages.
In the long run (now 20 years) the switch from Microsoft products to Emacs was a giant net win for me. Since I am no longer at the mercy of volatile business, but enjoy stability und functionality at its best.
The initial investment in configuration and learning had enormous dividends. Don think short term.
I would expect an experienced emacs user to have a config already that more or less "works". Was this a junior developer that just decided to start using emacs one day?
I'm not an emacs person myself, but every emacs person I have ever met already has it setup and customized and just brings their config. A new dev starting with emacs on a new job... just sounds like a bad recipe and misunderstood priorities.
> already has it setup and customized and just brings their config
You might not have seen it happen, but if my experience was any indication, they spent a lot of time crafting that config file.
I've spent less total time configuring TextMate, Sublime, IntelliJ, Atom, Jupyter, VS Code, and PyCharm than I spent back in the day trying to learn emacs lisp and get the emacs plugins for ObjC syntax highlighting and fuzzy filename matching to play nicely with each other. Meanwhile, each of those GUI editors brought considerably more impactful unique day-to-day functionality to the table than emacs ever did.
> You might not have seen it happen, but if my experience was any indication, they spent a lot of time crafting that config file.
Yes. I've spent 10 years crafting this file I'm using now. One bit at a time, every time I found something which could improve my productivity and editing experience.
And I can now bring that with me anywhere at literally zero cost.
I'm not sure why anyone would frame that as a bad thing?
Not really. The most common keybindings of GUI text editing have largely converged, and those that haven't collectively account for similar total complexity to, say, basic file/buffer management and movement in emacs.
Yes, the life of an editor nomad sometimes involves hitting the wrong key to build or occasionally forgetting which modifiers trigger block select, but those adjustment pains are typically overshadowed by the joys of high-priority platform integration that works straight out of the box, and they're downright tiny in comparison to the pain I used to experience getting half-assed platform support up and limping in emacs.
While I think you're right on the whole here about "Emacs people," but you did an interesting thing in the first sentence: you contrasted experienced Emacs user with junior developer. And I think that actually points to a problem: people who are experienced developers but not experienced Emacs users are going to be in much the same position as the OP's description.
While I know the basics of Emacs, every time I try to get serious with it and make it my One True Editor, I end up spending days screwing around with packages and configuration files to try to figure out how to have similar functionality to what I get either out of the box or with fairly minimal effort in arguably lesser editors. I'm sure Emacs can do all of what I need and nearly all of what I want, but most of the time I'm damned if I can figure out how to get there from where I'm starting.
If I was really going to try to give advice on how to make Emacs more popular, it'd center around the package/extension system. It's great that it has package repositories and a built-in management system now, and the documentation for the core editor is terrific... but the documentation for packages is wildly variable, and what's worse, packages interact with one another, depend on one another, and/or conflict with one another in ways that are just utterly mystifying to a newbie.
I don't care about making Emacs "pretty," and while it'd be nice if it used less weird terminology by today's standards, I can deal with it. What I want is sane defaults and good guidance. Spacemacs' concept of layers -- where I can just say "I would like you to install and enable all the crap that lets me smartly edit PHP files, please" -- is absolutely onto something, although I would still argue that it might need to offer a little less choice by default. Don't make me choose whether I want Helm or Ivy because I have no idea, and for God's sake, enable sensible layers/packages by default: assume that yes, I do want autocompletion and git integration and such. If you must, let me click a button to choose between "batteries included" and "advanced" configuration. This is stuff that mainline Emacs should be doing.
And, actually, that's one other thing Emacs could stand to do better: learn from VS Code's configuration system that lets you use dropdowns and checkboxes and simple text fields for nearly everything, and has a button to go into the configuration files when you need it. Yes, I know Emacs has a text-based UI for configuration, too. I've used it. It's bad. Okay? It's just bad. The controls are non-standard and weird, the organization is utterly mystifying to someone who doesn't already understand Emacsology, just... no. Start over.
As for me, well, when Spacemacs moves the LSP layer to its non-development branch, I'll probably give it a try again. Until then, I'm probably gonna keep doing my technical writing in BBEdit and my coding in Visual Code. (I'm probably gonna keep doing my technical writing in BBEdit until I die, but that's a different post.)
> Yes, I know Emacs has a text-based UI for configuration, too. I've used it. It's bad. Okay? It's just bad. The controls are non-standard and weird, the organization is utterly mystifying to someone who doesn't already understand Emacsology, just... no. Start over.
I’ve used GNU Emacs for twenty years and totally agree. I avoid the customization menus wherever I can.
I use and love Spacemacs, but their branch handling is a major PR fuckup. The last stable version should be phased out now. The develop branch works way better. They should rethink their release model.
Interesting. I switched to the develop branch the other day (yes, just to try to get LSP working!) and ran into some glitch that I didn't have the time to investigate -- a complaint about the .spacemacs file missing a variable or something. I'll probably try again this weekend.
BBEdit's indenting and completion engines just aren't as smart as other editors -- I suspect in the latter case they'll have to add LSP support on their own (right now I don't think it can even be added externally because their API doesn't expose the right event hooks), and in the former case, I have a suspicion Bare Bones Software just has a philosophical objection to context-aware indenting. With those objections aside, BBEdit is still pretty good for development.
For the technical writing, I actually wrote a comment here somewhere about that in another post; I'll have to dig it up and turn it into a blog post at some point. But I called it a "fast Swiss army knife for text." Its "open file by name via fuzzy searching" command lets you enter multiple files, its multi-file search window lets you save file filters with meaningful names (and you can save grep patterns the same way, and in BBEdit 13 there's even a "Pattern Playground" that lets you nondestructively test out complex regexes on your current document). Projects get their own persistent scratchpads and Unix worksheets. And, a bit relevant to an Emacs thread, BBEdit has a bit of Emacs-ish keybinding support over and what Mac editors normally do, although it's decidedly not an Emacs emulation layer.
Younger self used to Borland and Microsoft IDEs, when going into Xenix, DG/UX and frieds, "where is my IDE?!?".
The TA on my 2nd year university pissed off with everyone of us using Emacs as Notepad, instead of spending one hour talking about Pascal, decided to teach us how to use Emacs properly.
I was one of the few that kept with it, although I ended up moving into XEmacs, which had a much better experience.
The large majority of my fellow students decided to adopt Joe, JED instead.
After university and after a couple of years on the job market eventually all of us moved back into IDE land.
So not sure what Emacs can really do to still cater to younger generations, if even for us it was seen as something to endure on university computer systems, back when options were quite limited.
I worked for a company where the founder thought everybody should use the same tools (meaning the tools he used: OpenSuse, KDE, VSCode, etc...) so that we can help each other and, like you propose, we wouldn't have to fiddle with anything since he would provide configuration for everything.
I've had plenty of problems running this garbage, and everytime he wouldn't help and would just say something along the lines of "what did you do? I've never ever had a problem with it".
If you think VSCode or any other tool doesn't need fiddling then you haven't pushed that tool beyond the basics.
Use what you know and what you're comfortable with. Sometimes VSCode is lacking at things where Emacs shines and vice-versa.
> I worked for a company where the founder thought everybody should use the same tools (meaning the tools he used: OpenSuse, KDE, VSCode, etc...) so that we can help each other and, like you propose, we wouldn't have to fiddle with anything since he would provide configuration for everything.
I will ask this question in my next job interview. This is a red flag for me. I wouldn't want to work in a company that forces the developers onto a specific editor/IDE.
These kinds of discussions tend to overlook that using tools that you enjoy using and are familiar with can be a virtue in itself.
I doubt that any of the editors/IDEs under discussion make it impossible to do the work we need to do. And I'm willing to bet that forcing an employee to use a tool they don't enjoy will have a much higher impact on their productivity than any marginal differences in functionality between that tool and their preferred option.
I use vim because I enjoy using it and it is sufficient for the tasks I need to do. The idea that this reason is not enough and I need to justify my choice by proving it is a more productive option than all other editors/ides strikes me as deeply odd.
> The fact that everyone has to have a non-empty, non trivial .emacs file means it is maximally unsuitable - for everyone.
The fact that you don't have one for VS Code shows that any modifications to make it better are too difficult and that you just have to make do with how it comes out of the box.
In vim, configuration is either through running commands you could run in normal mode in vim, or through vimscript functions. I assume emacs is similar in that regard.
JSON isn't really that easy to read unless it's pretty formatted, and it's somewhat difficult to write (making sure you have every double-quote, every comma, every closing and opening bracket/brace, etc. I always have to run a JSON linter to make sure I didn't miss anything when writing JSON by hand.
- Article: Non-trivial config is bad. Hence emacs is bad but VS is good.
- My post: Not having non-trivial config is bad.
- Your post: VS has non-trivial config and even more/better than emacs.
- My reply: So do you agree with article and now VS is "maximally unsuitable for everyone" (the quote for "bad" from the article)? Or do you disagree with article?
I don't contest that VSCode has achieved better out of the box functionality than emacs but it still needs a lot of configuration. My experience is only with C++ extension where intellisense update just goes on indefinitely. Navigation to a function takes ages. Then I exclude some source directories and restart VSCode. And not to talk of resource hog that it is. When it works it is pretty good and that's why I stick to it. May be other language extensions are better.
I would say it is the best editor with the resource usage of a full blown IDE.
The experience varies widely by language. TypeScript support is top-notch. Clojure support used to be bad and then got good. Rust support has been bad for a long time but the nascent rust-analyzer project makes it fantastic. Python support is decent but only if you get an optional, poorly-advertised extension on top of the default one. C# support is quite solid. Etc.
Only a couple of languages get first-party support from MS. The rest depend on their respective communities to build extensions. VSCode has a great plugin architecture, but it's entirely possible to write a bad plugin for it, especially if it's simply not a popular enough editor in that community yet. Still, none of the above required dependency-juggling or stepped on each others' toes. Only a couple cases required a configuration step to get them fully working. My worst VSCode setup experiences haven't wasted as much time as the Emacs golden path did.
I largely agree with this and I wasted a lot of time in school and earlier in my career on these tools because of how often they’re positively talked about in online communities and positively compared to what seem to be otherwise obviously better tools.
In a few years, VS Code has achieved better out of the box functionality for [people who don't already know / don't want to learn emacs].
Emacs has a challenging learning curve. I don't think it's realistic to insist new employees use Emacs that haven't already chosen the path for themselves.
Real scenario (for someone experienced with and asking to use Emacs):
> In a few years, VS Code has achieved better out of the box functionality for working professionals than emacs has in 40 years.
That's not as clever as you seem to think it is. Emacs was created for a different world. Of course new tools have an easier time in the world for which they were created and with no legacy baggage.
You’re essentially saying that emacs has been stagnant and hasn’t changed with the world around it. Yes, absolutely. That’s why it’s not a surprise it is losing popularity.
Clunkiness and baggage is not a foregone conclusion for software. Software can keep up with a changing world, discarding old baggage along the way. In the end it doesn’t matter. Whether it is old software that adapts and changes or new software that supplants stagnant, clunky software. The world uses whatever is easiest and most relevant and goes on.
Workflow on midsized personal project with editor that I'm comfortable with and have customized over the majority of time I've been programming: work.
Look, obviously VS Code has emacs beat in the vast majority usability features. Emacs works for a lot of what I work on. For the things it doesn't work for, I use the tool that works better.
I have lots of personal qualms with emacs, but to declare it "maximally unsuitable," is overkill.
> and this mode or that mode don’t matter because the slowest part of the creative process is the creativity and not your typing.
This is like saying we should just throw out every helpful thing that helps us write code faster/better. On one hand you argue for VSCode's OOTB experience (extensions which are MODES), and on the other hand you're saying modes doesn't matter when it comes to Emacs.
Why not rip out every helpful thing from VSCode, too, then? No refactoring, no completion, because that doesn't save time?
This was kind of my experience with vim. I like vim's UI but I work on multiple languages so I need a bunch of plugins and tweaks. I finally gave up on it after a plugin update broke it one too many times and I didn't have the heart to debug the wall of errors it barfed up on startup.
I switched to Sublime Text with the Vintage plugin (vim keybindings). Package Control is just so painless to use, and in a few years of use I have to yet to have a plugin break anything.
VS Code has its pros and I use it daily, but I have to spend quite a bit of time configuring a fresh install of it. Probably not as much as I would Emacs, had I used it, but it's not insignificant. And that includes changing the theme.
I use emacs, and I do not have much problem with configs. I mostly work vanilla, and all the configs I needed were done when I was starting out with emacs.
Now emacs is ubiquitous to me and the last time I visited my init file was last year actually!
I can use 40% more cores when compiling than my CLion using colleagues because vim doesn't need 10GB of RAM. I tried using CLion, but it was just too slow. Maybe I was holding it wrong.
Off-course, if majority of your time is spent compiling gigantic C++ codebases, more power to you for using VIM. CPU load in code compilation hasn't been the bottleneck I ever faced and I think this applies to most folks. Plus CLion doesn't just arbitrarily start consuming CPU, if it is not doing indexing(and VIM simply can't do the kind of indexing that CLion does), it doesn't consume much CPU. In the idle state, it consumes very little CPU.
Then again, some seconds of CPU might be a good tradeoff against productivity in some scenarios.
I don't spend the majority of my time compiling (a decent chunk though!), but then again, I also don't spend a large part of my time doing the complex refactorings that an IDE would make much easier. I don't think either vim or clion has dramatic advantages over the other.
The last time I used a Jetbrains product, it took several seconds to simply open the IDEs Settings page. I'm not kidding, several seconds. Sometimes it would also completely freeze up for seconds when Java's GC kicked in. Great experience...
What is the problem that take days to fix with Pycharm. Just curious. I have been using Jetbrains products for 5-6 years now, and have never faced a problem which took days to fix. Sure, there were some bugs here and there, but no showstoppers, and all were already filed in their bug tracker before I could file them.
Also, Pycharm does far more than even a heavily customized .emacs can do (I used to have one very custom emacs setup). There is simply no comparison feature wise. Not to mention, things that emacs can do, Pycharm should be doing in even a very problematic bug ridden state.
I actually like this viewpoint because I have done both and generally I disagree with you. But here's my take.
I use VSCode often because its "just easier". The extensions are at best (in my opinion) ok approximations to what I can get with emacs. Especially for a language I'm inexperienced with in emacs VSCode is a nice integration layer while I adjust my configuration.
Emacs (and to that point vim) is vastly superior to any offering VSCode has. The problem is you have to be productive. Many nights I labored over my emacs configuration to tailor to my job. I've done this for the last 10 years. It takes effort. To that, you have a point. VSCode is effortless. On that, VScode doesnt feel like anything to me except a bridge layer. Emacs and vim offer a vastly better experience (without the git politics!) if you're willing to spend the time customizing it. But that is the difference - are you willing to spend the time? Many developers are not and that's fine. But for a marginal additional investment you can have something better.
Something to think about at least. I can install my Emacs configuration in 30 seconds from my github.
Everywhere in this thread I see vague and generic statements like this. Do you have concrete examples of specific things in your 10 year old Emacs configuration you "labored over" that can do something VSCode (and its extensions) can't and which makes Emacs "vastly superior"? If so please share, otherwise don't bother. We have already heard all this vague nonsense for years.
That's true, but I'd rather use tramp-mode and keep my setup instead of
sacrificing it for the sake of consistency across servers.
It won't really be consistent anyways, you'll get some plugins here and
there I guess.
Eh. Sort of. Like the other person who replied about the Emacs plugin, I find myself running into issues with the Vim plugin -- usually not the keybindings as much as the ex-style commands. For instance, ":20,27m." will move a block of text in Vi/Vim to under the current location; that doesn't work in VSCode Vim. Worse for me personally, I've gotten really used to the ":find" command being the (rough) equivalent of a fuzzy file search: ":find App.php" will find that file no matter where it is in the current project, but again, not a VSCode Vim command.
It's a good emulation, but it's not a great emulation.
Oh, yeah, I do use that (well, Cmd-P over here in Mac-world). It's just when I get into Vim mode I type ":find" reflexively and I get disappointed for a moment. :)
(Ironically, there's a Vim plugin called CtrlP to do the same thing that I never use because I find it confusing and weird compared to everybody else's implementation of the same idea...)
Does it need to be popular or need more users to become maintainers?
I use emacs because I can't imagine using anything else that has half the features and is harder to extend. I can't imagine why it needs to be popular. It's a programming environment that happens to have a text editor built in. That appeals to some folks but I can't imagine why someone interested in writing for publication would choose it over Scrivener or a word processor and why it's desirable to attract such users.
If I had a horse in the race I'd focus on the developer experience. Make it easier to extend, make the runtime faster (the native compilation stuff is super cool), better unicode support, alternate input methods, etc. If people want to use it for publishing it should be easy to write a package to cater to those users.
For me, a long time emacs user, I think the biggest concern I have is ensuring that the project is sustained by new developers.
Developer experience is more than just technical too. I know some package authors (and myself personally) find themselves very disillusioned with the GNU approach to contribution, especially regarding licensing and copyright assignment.
> very disillusioned with the GNU approach to contribution, especially regarding licensing and copyright assignment.
TBF, given the historical FUD baggage, I don't fault them for trying to play extra safe as stewards of the project. Also, Emacs makes it so easy to get packages out-of-band (eg: MELPA, Borg, Straight, Quelpa) that I don't think the copyright assignment is a big deal unless one wants to get code merged into base Emacs.
I submitted a miniscule patch to tcl-mode (or font-lock) a couple decades ago. It was to speed up syntax highlighting for a particular style of commenting. Maybe a 3-6 line patch, tops.
I spent 20x more time back and forth on copyright assignments, including getting a release from my company, etc to get the patch in. I pushed through because I felt like I was always "just one more yak shave away from finishing", but if I knew at the start how much time it was going to take, I'd have kept the patch on our own private site-lisp. That's a problem, IMO.
The copyright release process where I work is pretty liberal, but the amount of people I have to get involved is fairly prohibitive. If your boss doesn't like doing paperwork, you're not going to get a release...
My memory is that my correspondence was directly with rms on this patch and it was required at the time, but the fact that it would no longer required is definitely beneficial, so thanks for that update!
a lot of contributors/developers are bothered by the fact that they have to play ball with copyright laws, at all.
it's a fact of life for developers with projects anywhere near the GNU-scape that if you don't GNU it, you'll catch a lot of hatred, even worse if you choose to avoid licensing all together -- and gods help you if you choose a tongue-in-cheek licensing agreement like WTFPL.
at the end of the day a lot of people just want to contribute meaningfully to a project that they use and enjoy, but the headache of licensing and catching flak by choosing the wrong one (and since all the communities have opposing thoughts, they're all the wrong one to certain folks), it just becomes easy to 'forget to contribute' -- especially when your patch or whatever is working fine locally and there is little practical incentive to catch that much heat.
I think the legalese issues turns a lot of would-be contributors into local-patcher type developers, and then they leave for greener pastures once what they needed patched is on their own machine -- especially for projects like emacs where 90 percent of development is going to be towards extensions.
...and I say all this from a position of love and admiration for GNU and the FSF.
A cheeky license, or, worse, no license at all is a potential hole for a lawsuit. That is, of time and money wasted, and of the project being at risk.
I see why you might go with Apache, or MIT, or even straight public domain licenses. But as a maintainer, I would not accept a contribution which is not properly licensed, or which is licensed in a way not compatible with the project's license. Usually such a contribution is less valuable than the rest of the project, so there's no point to introduce a real legal risk of project's closure for the sake of such a contribution.
I can relate. Used to be a hardcore GNU fan, but these days I'm probably closer to sqlite thinking (public domain, but work hard to avoid contamination).
As for contributions, presumably GNU wants ownership, but do they have a problem with assigning back what amounts to public domain rights to the author?
And I suppose, for most contributions, does it really matter? The awful truth is that I can't think of anything I've ever written that had freestanding value, as opposed to value as an enhancement to something else.
Yeah I completely agree. It's like, I agree with GNU and the FSF, but that doesn't mean I'm as strict as they are. I want to contribute to MIT, Apache, and BSD licensed projects as well, or I want to just not think about it and work on some project that has no licensing info whatsoever.
But (some definitely not all) folks are pretty all or nothing. There's a lot of jerk developers on the net though, maybe it's better to just ignore them?
> A hammer does not have [an agenda], and that does not make it a less useful tool.
Sure, but by default all software has a copyright agenda built in. We can remove copyright, but there are two approaches:
- Remove copyright so that anyone can use your code, but then they can re-add copyright to your code and sue other people for violating their copyright.
- Remove copyright so that anyone can use your code and ensure that nobody can re-add copyright to your code.
I used to be in the former camp, but I've slowly moved to the latter.
It's kinda why I like the Mozilla license (MPL). Anyone can freely use (leech even) on the project, but if they make improvements or changes to the project they have to share. It also doesn't try to control how the consumer of the project is allowed to deploy such software either.
There's a world of difference between releasing contributions under the same copyright (i.e. if you're contributing to a GPL'd project, release your code under the same GPL license) and assigning copyright to the FSF. I think that's the turn-off for many. It isn't a matter of 'what would you even do with' the contribution, it's a matter of recognition and making it much harder to change the licensing terms down the road.
For those who just want to bury their head in the sand and pretend copyright doesn't exist, they will be the first to complain when the code that they wrote is taken private and commercialized (i.e. look at the licenses this has been an issue for)... making code 'public domain' allows for that.
What happens when the woke takeover of the SFS is finally complete and emacs is re-licensed under a new social justice license where you can only use it if you don't oppress minorities?
I don't trust the FSF further than I can throw them and I don't trust them with my copyrights.
Agreed... that was my point. Specifically, it doesn't matter who takes over or what the changes are, only that direction/priorities may change and be inconsistent with the intent of the original contributor.
The existing code cannot just be "re-licensed". It's true that they might decide to make future versions available only under some weird license, but that wouldn't cause prior contributions to become unavailable. Continuing the code line under the original license would always be possible, given effort.
Why would you want to become a maintainer when your suggestions will be blocked by a guy who doesn't even know what org-mode is, hasn't coded in decades, and insists the terminology has to pretend it's 1968?
Popularity means more users and more contributors. I guess most of the core emacs devs are greybeards who started programming in the 80s or earlier, so what happens when they grow too old? Who will replace them?
> I guess most of the core emacs devs are greybeards who started programming in the 80s or earlier, so what happens when they grow too old? Who will replace them?
What makes you say that? I don't think this is true. Not among the package maintainers anyways, and also of note here is remacs - I can't imagine greybeards programming in rust.
And popularity does not always mean more contributors, not when they are just the consumers of the product. The drop off in delta contributors / delta consumers is fast.
>What makes you say that? I don't think this is true.
the same thing that probably made you say this :
>I can't imagine greybeards programming in rust.
emacs is an older software package, from the 'original home of hackers', extended in a (sorta) language that is notoriously connected to old-school AI and academic programming. The holy war of vi vs. emacs has raged for decades -- and emacs/vi/lisp jokes are some of the oldest computer geek jokes in existence.
I can imagine the fans skew older then say fans of something like Electron or Flutter.
The only computer-geek-joke-theme that I can think of that'd be older would be the billions of COBOL jokes -- but that's just because i'm too young to have heard the billions of punch-card and wire-routing jokes that inevitably existed before I was here.
At the time Emacs was created, Lisp was one of the few languages that had automatic memory management and higher-order functions and error handling, but those have been lifted so often that they're now table stakes for modern languages.
I'm pushing 50 and excited about Rust because it's finally conceivable to have software that works reliably. I like Emacs, but it's not like I haven't seen my share of crashes in its kinda clunky C runtime. Hell, Rust even has macros.
The industry has been trying to write C and then C++ for decades, but it all blows up randomly. Buffer overruns, use after free, shared mutable state. Apparently tooling exists that tries to make Rust-like guarantees, but it's so costly I've literally never seen it used.
Much as Elisp is written in C, the JVM and CLR are each written in C++ and assembly, hosted on an OS written in C and assembly, and I've seen all of these crash.
I don't know much about QNX, but I haven't heard anything about seL4-type rigor going into it, so I wouldn't bet on it working a lot better than Linux or Windows.
> What makes you say that? I don't think this is true. Not among the package maintainers anyways
I was talking about the "core developers" who work on the emacs core, not packages. AFAIK most of them has a long history with emacs, using it for decades, so they can't be that young.
But of course I know mostly about the maintaners and stuff. It's possible there are lots of younger contributors.
Or, emacs in the browser. Popular editors like VS Code use monaco and now github has codespaces [1] which is running in the browser.
People live as much or more in the browser as the terminal these days, so bring the emacs sauce to where the people live. Maybe you could get some of the c compiled to web assembly, and the lisp would follow? It'd be neat to open a buffer to the page emacs lives in and start editing, call JS code, or embed emacs into a page as easily as monaco. Maybe the GUI components could be made out of HTML 5?
So something similar to what Neovim is doing where it can be a headless backend for any editor that implements their protocol? Like eventually if JetBrains bothers, you wont need a VIM emulator for IntelliJ and co, you can just run Neovim and have it work with IntelliJ directly, without losing any of IntelliJ's benefits. Note: I also mean PyCharm, GoLand, and so on...
Neovim literally has like over 30 projects for new UIs:
Would you realistically be able to bind enough emacs keybinds in a web page so that it feels natural? Or would you need some extra extension to help with that?
I'm not very familiar with how easy it is to capture browser keybinds in a web page.
You pretty much need an extension that runs in a separate window. You can already use Emacs through the Secure Shell[1] Chrome extension, but if you run it in a tab the browser eats too many key combinations for it to be useful. If you launch it in a separate window, then very few key combinations get intercepted and it works quite well.
I dunno... I think newer editors are often easier to extend than emacs. Think atom or vscode or even sublime.
They're all extensible enough such that emacs has no real major advantage IMHO. They can be extended with mainstream languages that many programmers already know, instead of an idiosyncratic lisp with no practical application outside of emacs itself.
Emacs still has some great modes (like tramp) - but overall, I don't think its customization is really a special killer emacs feature anymore.
I've had to write simple plugins for both SublimeText and VSCode to get the equivalent of a one-liner in Emacs. Comparing anything with Emacs extensibility is not even fair. There are hooks for everything, you can invoke other people packages from your own code, if you want trouble you can overwrite other people's packages specific functions, etc.
Emacs has a lot of flaws though. I don't really recommend people using it. Even after showing the neat stuff, I can do with it.
> I dunno... I think newer editors are often easier to extend than emacs. Think atom or vscode or even sublime.
Can't see how. It's hard to be easier to extend than being able to just wrtie a line of code in an init file, do M-x eval-region on it, and be done. You can extend Emacs 100% through ad-hoc manner, and none of that requires any extra infrastructure. I don't think VSCode or Atom are approaching anywhere close this level of flexibility.
I’ve been porting the Sly IDE to Sublime and basically I would say Sublime is a hostile development environment, a lot of times errors dont trigger stack traces and just silently fail which is super frustrating.
> That appeals to some folks but I can't imagine why someone interested in writing for publication would choose it over Scrivener or a word processor and why it's desirable to attract such users.
Color me surprised! I'm turning into a stereotypical Linux greybeard but I must be true to my nature, and endorse Linux for writers.
There's this famous story, about the secretaries who mastered Emacs and preferred it to the other 'easier' administrative programs they were offered.
"Shel wrote Mailman in Lisp. Emacs-Lisp… Mailman was the Customer Service customer-email processing application for … four, five years? A long time, anyway. It was written in Emacs. Everyone loved it."
"People still love it. To this very day, I still have to listen to long stories from our non-technical folks about how much they miss Mailman. I'm not shitting you. Last Christmas I was at an Amazon party, some party I have no idea how I got invited to, filled with business people, all of them much prettier and more charming than me and the folks I work with here in the Furnace, the Boiler Room of Amazon. Four young women found out I was in Customer Service, cornered me, and talked for fifteen minutes about how much they missed Mailman and Emacs, and how Arizona (the JSP replacement we'd spent years developing) still just wasn't doing it for them."
Hell, there's even a 1-hour series on YouTube called "Emacs for Writers."
Spoiler: I skimmed it and it's as I thought - it's largely about Emacs and org-mode. Honestly, I can't argue with the classics. Here's my pitch.
Writers of the world: You are information workers. That means you have problems with the organization of information, probably, and - related - information overload.
Let Emacs help you with this!
It has a mode, org-mode, which is usually overcomplicated, but is basically as simple as markdown (no, really). Has anyone ever walked away from Markdown because it was too difficult to understand? Probably not. It doesn't have to be any harder with org-mode. In fact, in the next two lines, I'll teach you about 95% of how I use it - everything, in two lines.
* an asterisk before a line makes it like a sublayer of the layer/line above it; if you're on a sublayer, add another asterisk to make a sublayer of a sublayer, and so on ad infinitum...
* press tab to expand a layer or a sublayer you are on; press tab again to contract or hide it
That's it! That's 95% of the value of org-mode right there. It's the simplest way to organize information, in my experience.
Now, there are other advantages too, like: Emacs works with plain text, and plain text is super portable (everything can read plain text), fast to load, and can even be a convenient method of organizing things, if you give your files descriptive names and learn to use 'ls' to list things. Because those files are plain text, they take up almost no space, so it's fine if your computer has a zillion of them, it'll be blazing fast.
I could go on, but these two things alone make Emacs worth your time, and there's plenty of other advantages, like using LaTeX to make PDF's, you can 'grow into' also.
I think you've misunderstood why someone would prefer Scrivener or a word processor: a rich-text ecosystem that "just works", in terms of WYSIWG / rich text editing; being the de facto standard for many non-technical user; and being more than "as simple as Markdown", but actively providing a tight ecosystem focused on writing.
Is it possible to recreate some of this functionality in emacs? Definitely. But, it requires a lot of patience, exploration, and determination.
Your editor wants to add track changes and inline comments to your manuscript draft. How do they do that in your org-mode file?
You've received a .docx draft from a friend, or copy for your book blurb, or a press release for your upcoming publication. How do you edit that .docx and return it in better shape than you found it?
You're writing a novel, and it has extensive research notes, background material, and miscellany you're keeping track of. How do you quickly navigate between these multiple sources of content, marking things up, merging different aspects of documents?
I'm a die-hard emacser, and I do a lot of personal and academic writing in LaTeX. But honestly, have you ever had to reformat a LaTeX manuscript for journal publication? It can take hours just to get the damn file to compile.
emacs is worth the time, if you're inclined to tinker and invest the effort to get it to work—but for me, at least, that's a hobby. It's disingenuous to present it as a real competitor to industry-standard workhorse word processors. And most writers with a day job can barely find time to write, "investing time in emacs" is a nonstarter for getting things done! In fact, I tune my own org-basaed PIM system as a way to avoid getting real work done...
To be clear, by "your editor", I don't mean emacs—I mean the person who works at a publisher: she knows that a gnu is just a wildebeest and inheritance bequeathal of wealth; assumes "C-c ;" is just an obscure emoji; and will not waste her time indulging a writer who uses an obscure [1], roundabout way of entering text into M$ Word.
Look, again, you're preaching to the choir—I use emacs every day. But writing a Python script to generate my org-native ToC to navigate reference materials is just...a very different, more work-intensive beast than an interactive drag-and-drop IDE tailored to the needs of professional writers. Impossible to approximate, with enough determination? No. Possible to start using intuitively within the first 15 minutes? Also: no.
"Open my doc in notepad or any other text editor. Put comments wherever you want; if you'd be so kind as to put them on their own line with a # at the start it would save me some time."
Easy peasy.
The beauty of org is that it's just a text file. You don't need Emacs to edit it.
I find word processors with all their formatting, hyphenation etc. capabilities more of a distraction than help. IMHO they are better for publishing a text than for writing it. Even a simple text editor seems like a better choice.
> Does it need to be popular or need more users to become maintainers?
Yes.
> I use emacs because I can't imagine using anything else that has half the features and is harder to extend.
Maybe imagine harder or (just an idea) stop imagining and see the real world?
> It's a programming environment that happens to have a text editor built in.
Read the history of emacs again. It originated as a set of macros over TECO to make editing easier (hence the name emacs). Editing is always the primary function, the lisp interpreter was an afterthought.
> That appeals to some folks but I can't imagine why someone interested in writing for publication would choose it over Scrivener or a word processor and why it's desirable to attract such users.
Read the linked thread again. One "such user" is RMS. That pretty much has been his goal since the 90s to make Emacs a better word processor.
Is it really too hard to imagine why the creator of the Free Software Foundation would rather people use a free software text editor over the current proprietary alternatives?
I'm mostly satisfied as a user. I'm working on a mode for editing emojicode[0] and it's a weird edge case but it'd be nice if emacs worked out of the box with nice defaults for this sort of thing. More experienced library authors might have more to say about it.
I hear a lot about the declining popularity of Emacs, but I always wonder how much it is overstating the case. As a tech enthusiast but (mostly) non-programmer, my perception has actually been that the "cool factor" of Emacs has been on the rise. Around 2011 or so, I hardly ever saw mention of it online. Now a day hardly go by on places like Reddit's "unixporn" board that someone doesn't post their slick setup with Emacs/Doom Emacs/Spacemacs on display.
I know that that Reddit board is sort of ridiculous and the jokes about it write themselves, but I nonetheless feel that Emacs has attained a certain counter-cultural "cool"/cachet in recent years that it lacked a decade ago. In my opinion, this is a good sign for its future, all things considered. These threads are always full of comments about how vscode has surpassed it, etc., but I don't think anything can change that--Emacs will ever truly satisfy those for whom vscode is presently the superior tool, and conversely, vscode is unlikely to satisfy the Emacs user.
Like vscode, Emacs is in every sense a practical tool; it is simply that it is practical in service of different needs. It is a practical tool for someone who takes active pleasure in the cultivation of a practical tool, in the process of learning and discovery involved. Because this will never describe a majority of users, I don't think Emacs will ever capture a majority of developers or whatever, but it seems poised to continue to attract very dedicated ones who find the cultivation of a personal work environment in a ridiculously powerful 40-year-old program appealing in and of itself.
Anecdotally, I started learning Emacs a few months ago and am very happy with my decision. I first considered trying roughly 10 years ago, but didn't see the thriving package ecosystem I see today, starting with projects like Spacemacs and Doom. After some time trialing my options, I stuck with Spacemacs, and that choice saved me time in reaching my goal of transitioning my knowledge and project management to org-mode.
Even with training wheels, though, getting started wasn't simple. It's had a very choose-your-own-adventure feel to it. After some early thrashing, I've now found my favorite resources, have a decent sense of what's out there, and am even using org-mode to track my overall learning progress. It's become self-reinforcing.
With more modern tools getting better and better, I find it no surprise that VS Code and others are gaining market share, and that the Emacs user profile is becoming less diverse. But I think there will always be a place for a tool(box) as powerful and configurable as Emacs.
I once opened a textbook of Chinese, read a few first pages and had to put the book away - the characters, while seeming difficult to remember at first, started infiltrating my brain with a frightening efficiency... Same with learning emacs. There is something about it that you mind-meld with it and using it becomes part of your nature.
I've started learning Emacs a few weeks ago, and have had a similar experience as you. One different is that I considered going with Spacemacs / Doom but decided to take the route of starting from an empty init file and slowly building up from there (at least for now).
I identify strongly with the feeling of thrashing; the wealth of different information and flexibility of the program itself can be overwhelming. Would you be willing to share some of your favorite resources (and why you chose them)? That would be immensely helpful for a beginner like me.
I think there's a lot to learn from starting from scratch, and it's something I hope to do too.
Gladly! I'll keep the list to what I've studied so far. Here goes:
- If you ever want to explore, say, Doom (Spacemacs is likely too bloated for someone who gravitates to a vanilla config), chemacs[1] is a nifty, simple profile switcher
- I think there's a lot of value in studying what they've done with their mnemonic keybinding systems (I love being able to narrow to an org-mode subtree and widen again with =, n= and =, N=, respectively, as but one of many examples)
- Sasha Chua is a good source, as she's very knowledgeable and put out a drawn 1-pager[2] on starting Emacs - it's geared towards standard Emacs keybindings
- Personally, I'm a huge fan of Evil-mode for Vim keybindings, as they're powerful and portable and I had basic familiarity with Vim before picking up Emacs
- I haven't found a rough edge in Evil-mode yet - it seems very refined
- Dired is worth getting a handle on early since any improvement in how you can navigate Emacs translates
- Magit is pure magic, and I now have my full ~/org under version control with what feels like near-0 overhead
- Seorenn makes mostly Spacemacs videos[3] and Zaiste Programming makes Doom videos[4], but I find them useful regardless of my config - you may just want to skip to the videos on packages that interest you
- If you haven't yet, choosing either Helm or Ivy is huge
- Personally, I'm happy with helm in Spacemacs and I was happy with ivy when I used Doom - heck, even my friend is happy with Ido
- It's fun to explore more efficient ways of jumping around - the Avy package is very popular for this (check out `avy-goto-char-timer` in particular)
- Also, I'll note that I've been able to find a clean 1- or 2-pager reference card for every major package I've searched for
But, truly, the jackpot for me has been org-mode. At first, I used it as just another knowledge repo, like a more efficient (yet local and text-centric) version of Evernote. But, now, I'm working through the book _Getting Things Done_ and believe that there is no better tool on the planet than Emacs and org-mode for implementing the core and majority of that system. Regardless, having a specific implementation goal has aided my learning dramatically.
Specific to org-mode:
- I started with the Org-mode Compact Guide[5], which I'd study and practice during 20-30 minute sessions every other day or so - it moves fast and I was happy with my org-mode skill after only having worked through Chapter 2
- However, perhaps the best way to start learning org-mode is Worg[6]
- Occasionally, I've found that the Compact Guide lacks an important command for my own workflow, so I'll usually go to the Org-mode Manual[7] itself
- When learning to configure Refiling, though, I found this[8] to be the best resource
- Finally, I'm a big fan of "org indent mode" - it keeps Git diffs clean when changing indentation yet displays my contents appropriately indented
This is a lot, and I'm sure your path will be different than mine, but I hope you find some nuggets in there. Best of luck!
I consider the article a bit absurd. Emacs is only less popular relative to the set of editors one can pick today. Emacs has never been more popular or alive. melpa, emacsrocks, famous magit/org, even emacs confs and emacs talks at lisp confs..
Plus maybe "more is less" is adequate when it comes to emacs. Too many people may create friction or waste. Let it be low and slow, it's fine, emacs has stopped sprinting, it's in a nice hike.
Oh definitely. Almost 30 year Emacs user here. When I saw what was happening with productivity leaps like swiper and helm, and Spacemacs working to make Emacs look nicer without turning it into another CUA+TEXTAREA also-ran, I called it the Emacs Renaissance!
A lot of times I’ve noticed people arguing that some nice thing in Emacs “could be” implemented in their chosen editor. I think they underestimate the value difference between that and “has been” implemented.
I haven't heard of the decline or rise of the popularity of emacs, but from personal experience it is holding up quite well!
I think par-edit is superb for anyone building stuff in some lisp dialect. org-mode is unbeatable and I saw quite a few stories on reddit of people getting drawn to emacs because of org-mode. Recently I picked up rust development and the rust-mode is working very well for me, much better than VSCode or the Intellij plugin.
Around university I see many lecturers using emacs too.
My personal experience years ago was that there was a cool factor, and I learned it, and it's still a pain to use (compared to let's say VS Code), and I think that cool factor was just never a thing.
I agree there's a certain respect afforded to people who are adept with terminal editors, but there is a practical reason to master them: they're always there, no matter how many layers of SSH you've gone through to get where you are.
> "Perhaps we should implement a mode that puts cosmetics on Emacs so it will appeal to those who judge by the surface of things."
I'm sorry to react to first quote, but as I kept reading I kept coming back to it. My thoughts on that : how you present yourself is how you want (and are going) to be judged.
In general I think Emacs has been user-hostile, as said here, just by its terminology. Nobody outside a minority of devs (a minority even among programmers) refers to Ctrl+c as C-c.
> Yes, make Emacs appealing and user friendly. But don't forget that a masterful tool in the end requires mastery, which can't come for free.
And the old "I have suffered therefore the others have to suffer".
I don't think emacs is "user-hostile" on purpose. You have to keep in mind, it's nearly 45 years old. This is almost unprecedented in computing.
Today's users expect different things than users did in the 70s (who expected different things than users in the 80s, 90s, so on). Emacs has been relatively consistent through time, which has been a huge boon to emacs users. The tradeoff is against current user's intuitions -- for better or worse, emacs does not work like other popular software today.
Calling this "user-hostile" comes off somewhat entitled. Emacs developers in the 70s/80s/90s/00s simply didn't know enough about today's users to cater to us, even if they wanted to. That's hardly their fault.
So, todays way and the emacs way have diverged some, and it does take a bit of effort to learn. Not because emacs hates you! But because emacs is ancient. The (objective, non-stockholm-syndrome) reward for your efforts to understand it are a) mastery of a system useful enough to survive this long, and b) mastery of a system that isn't likely to change out from under you.
> You have to keep in mind, it's nearly 45 years old. This is almost unprecedented in computing.
We can acknowledge Emacs's longevity without straying into unsupportable hyperbole. Emacs is nowhere close to unprecedented in its age and not remotely close to the oldest piece of software still in existence.
GNU Emacs is from 1984. It is a reimplementation of the earlier 1972 Emacs. This matters, since if you're including reimplementations then obviously Unix itself, which is used by many of us every day, it older. And if you start counting from 1984...that's not especially old.
I pointed out emacs' age to note how users expectations of editors have evolved over that time. Certainly there is older software -- but is there any other user-facing software that has survived such a dramatically shifting landscape? That is the part I find unprecedented (and the part relevant to GP).
Just because something is old doesn't make it not user hostile. If anything it encourages it as we are always getting better at making better interfaces.
Cars from the 70's don't have airbags. So, by comparison to what is available today, they are user hostile.
Hm. I take your point, but I'm not sure the analogy works.
Maybe better: "Old" (pick a date) cars had a manual transmission. Compared to automatic transmissions, you might consider that user hostile. But back then no one knew what they were missing and got along just fine.
Nowadays, some people still like manual transmissions! Not everyone, but some folks still buy them. Some even claim they're better than automatics! "They're cheaper, easier to maintain!" Are they user-hostile? I guess it depends on who the user is.
(Airbags seem like a strict improvement, sure. But part of that comes from them not being part of the "interface" of the car -- we don't interact with them, we don't form preferences about them, gain familiarity with them, etc. Perhaps they correspond better to multi-cored CPUs, multithreading, or high-res color displays (features emacs has kept with the times on, more or less). It's much harder to come up with similar strict improvements in the UI world.)
I seem to recall reading that the keyboards that emacs was originally developed for had the CTRL key in the middle left (where the modern, useless, "caps lock" key is). The awkwardness of the CTRL key on modern keyboards makes emacs seem unnecessarily user-hostile as well, but that's also not something that Stallman could reasonably have predicted.
> And the old "I have suffered therefore the others have to suffer".
Actually, its an extremely important point. Tools which optimise for the professional are better than those which do so for the noob. Whenever you can achieve both, do so, but never side with the beginner otherwise. People should learn their tools, and they shouldn't be beginners for long, so making things "friendly" at the cost of rewarding expertise is poor design.
This is absolutely true. However, if you can make a tool more learnable for new users without sacrificing its optimization for power users, you should. One way to do that is to not gratuitously invent new terms, and to use terms people are familiar with.
Using conventions like "M-x" throughout the documentation, even with a note at the front of the manual that "We refer to Alt as Meta for historical reasons.", is needlessly baroque. Worse yet, maintaining a distinction that those aren't effectively the same thing for almost all users is needlessly unhelpful. (Yes, it's possible to make Alt and Meta different keys under X with use of modifier maps. That explanation belongs in an "advanced keybindings" chapter late in the documentation.)
It's certainly possible to learn that, and a hundred other gratuitous weirdnesses, but they don't actually add value that justifies imposing that weirdness on every user.
I think maybe you're over-emphasizing the problem with this terminology. When I first started learning Emacs it took me all of 5 minutes to get used to the new terms, it isn't that hard. Maybe there's an argument for the lack of value of using older terminology, but again, I think this problem is overblown.
I'm not trying to say this is the most critical problem; I'm saying it's one example of many, and it spends a lot of "weirdness budget" without necessarily providing value in exchange. "kill/yank" is another example, and there are many more where those come from; the volume of them creates a "thousand papercuts" problem.
In the Rust language design, we're careful about what we spend our "weirdness budget" on. We've already spent a fair bit of it on terms related to ownership and borrowing, because those are fundamental and central to the language. We spent some on having a one-character '?' operator for error-checking, because error-checking occurs so often. But we're not going to gratuitously introduce new vocabulary for existing concepts that already have a name people would be more familiar with, and we're extremely hesitant to introduce gratuitous syntax abbreviations just so people can type a little less, because they'd be harder to read and understand.
I agree that a lot of things are weird and could be modernized.
That said, as someone who very slowly got into Emacs and now am full on into it, all this weirdness slowly became more of a an, oh this actually makes a lot of sense, and, you know what, I might like it better.
I still find it weird for a frame to be a window and a window a frame. But logically, I think the Emacs names make more sense. The thing with a frame is a frame, and the sections within it are the windows. I wouldn't mind if it was renamed frame to window and window to panes tough.
Similarly, C-c and M-m used to confuse me a lot. But now I find them way nicer, why have to type all of Ctrl and alt. Also on Mac alt is called command, so having a Meta as a more generic name for the key kind of works.
Kill was weird to me, until I realized kill and delete both exist, but behave differently. There's a kill-ring, text that is killed go in it, text that is deleted doesn't. When you program extensions this is a very important distinction. You don't want programmatic edits to all go in the kill ring and polute it.
Would it be nicer if the more common user used one, which is kill, be named delete which is more familiar to people maybe.
Like I said, I wouldn't mind someone making a big refactor of it all and renaming everything to be less weird to modern times, but I think as you learn those "weirdness" they stop being weird.
Basically, I mean there's a big difference between a quirk, and just something you're not familiar with. I think Emacs names are mostly unfamiliar.
Emacs also has real quirks though, and I think those are more important to address. Like there's a lot of legacy cruft, having to still support working on defunct terminals, and all kind of stuff. Like ESC being a weird Meta key because of terminals that don't support meta. Or the entire UX which is crap by default.
I think you misunderstood. Control, alt, meta, hyper, and super are (at least on my current OS) distinct modifiers. There are also keys bearing some of those names on most keyboards which makes things confusing to talk about.
Each modifier can be mapped to any physical key. For example, I'm one of those control as caps lock people you mentioned. I then have hyper on the left control key, alt and meta (yes both) on the left alt key, level 3 on the right alt key, and compose on the right control key.
I've never seen a keyboard with hyper or super. I doubt many people have, since they were only present on hardware obsoleted decades ago. Meta, aka the windows key on most PC keyboard, is usually present, but most people wouldn't know its name. On Windows, it's not even usefully bindable since Windows uses various shortcuts for it by default. On Linux, it's not bound to Meta by default by most distributions. So for the vast majority of people, it's just Alt.
I don't think Emacs has done itself any favours by using obscure and non-standard terminology based upon machines from the '70s which few people have heard of, let alone experienced. For the vast, vast majority of us, we all have bog-standard PC or Mac keyboards, and have done for the past 30+ years. It would have been in everyone's interest to standardise on terminology and keybindings which were immediately understandable and usable by all.
Given that every other application uses the standard terminology and keybindings, and that I don't see much in the way of compelling advantage to keeping the non-standard bindings other than habit, I think preserving backward compatibility for four decades was laudable but misguided.
Neither have I outside of photographs! The trouble is that they did exist previously and X11 settled on an abstracted model that supports 5 modifiers (in addition to control, shift, and lock). You have to bear in mind that Emacs can't just stop supporting certain (now defunct to the mainstream) modifiers as many users have setups which depend on them.
I suppose that cosmetically they could update the documentation by changing M- to A- or Alt- or something. Would it really make a difference though?
Aside: Not meaning to be pedantic, but at least under X11 Super is the "Windows Key" and Meta doesn't exist by default. I just checked and (on my machine) the keycap with the Windows logo maps to X11 keycode 133 (hardware specific) which produces keysym Super_L at both levels 1 and 3 which in turn maps to mod4.
Unfortunately I didn't notice your reply earlier (the consequence of being productive).
Rereading my previous comment I've realized there are some slight inaccuracies - keybindings are conceptually a bit complicated (at least under the historical X11 model). My Alt keycap actually just produces the corresponding Alt keysym, which maps to mod1. My confusion was due to the Meta keysym also mapping to mod1 (this is the default configuration) even though no key on my keyboard is currently configured to emit it. I set everything up quite a while ago and then forgot some of the details.
* Caps Lock -> Control: This is simply more comfortable for frequent use, particularly in combination with the Vi directional keybindings (hjkl).
* Right Alt -> Level 3: AKA AltGr, this is useful for entering common Unicode characters.
* Right Control -> Compose: Useful for a number of other Unicode operations. I don't seem to make much use of it in practice though.
* Left Control -> Hyper (-> mod3): I had a free key. This gives me an extra modifier for use with things like my window manager that's pretty much guaranteed not to conflict.
* Shift + Space -> Underscore: Makes C programming _way_ nicer.
* AltGr + Space -> Nonbreaking Space: I don't actually remember why I configured this one. I never use it.
* Shift + Shift (ie left & right) -> Caps Lock: I don't actually use it, but this way it's still available.
"M = Alt", "C = Control" is such a trivial thing to remember, yet it is brought up as a critical emacs deficiency every time. Why isn't this argument brought up in every Mac/PC discussion, or Xbox versus playstation?
There's some bad stuff in emacs but to concern yourself with Meta as opposed to M- is plain silly.
> if you can make a tool more learnable for new users without sacrificing its optimization for power users, you should
Yes, but it's incredibly difficult and frankly the emacs devs have enough to do (and they do it well), and UI design is a very different skillset from programming. Frankly the learning curve for emacs is not going to improve, muchas we both might wish it.
The biggest problem is people want the benefits of freely downloadable software but mainly aren't prepared to give anything back. Go and assist with emacs or some other project.
> The biggest problem is people want the benefits of freely downloadable software but mainly aren't prepared to give anything back. Go and assist with emacs or some other project.
I don't really buy this line of argument in general, but I think Josh is a particularly poor candidate to pull rank on because they don't contribute to open source. I don't know Josh, but I recognize his name from his open source contributions.
If you don't recognize Josh's name, you can get an idea of some of what he's done from his website, which is linked in his bio: https://joshtriplett.org/
> I work on Linux, primarily on the RCU subsystem and on Sparse-related code. I maintain the rcutorture test module.
> I co-maintain the X C Binding (XCB). I developed the XML-XCB format to describe the X Window System protocol. I also work on other Xorg projects on Freedesktop.org.
> I maintained the Sparse semantic parser and static analysis tool for C for several years, before passing it on to Christopher Li.
> I maintain several packages in the Debian project.
Consider me very regretful indeed. Most people who moan seem to have nothing to contribute, well I got it very wrong this time. Apologies to @JoshTriplett if you're reading this, and Ill check out your stuff tomorrow.
Ah shit, I recognise your name too. I've just been spanked by Dan Luu. This has not been a good night.
I appreciate the sentiment. I would gently suggest focusing the regret on the message rather than the recipient; it wouldn't have been better if written to a novice user.
Right. I see this point ignored very frequently (sometimes because it's obvious and sometimes because people are being dumb).
A lot of the things that would make emacs more like other editors are extremely difficult to retrofit. I expect there is still SOME low-hanging fruit, but a lot of the low-hanging fruit has already been picked, and a lot of the remaining changes that people would like are a lot of work.
Let's discuss that. Emacs is so flexible it should be possible to do anything. Binding cut/copy/paste functionality to the conventional keys would be trivial. A few rebound key bindings, not a problem, so you're getting at something larger; what is it?
BTW the current key bindings are so good because I can do a lot without my hands leaving the keyboard, or even moving off the home keys. That was the very point of choosing them originally AFAIK. I recall learning these new keys many years ago, it was surprisingly fast and when I'd learnt them, amazingly quick to sink into muscle memory.
Unfortunately the rest of the software world settled on keybindings for cut and copy that generate almost the greatest possible pain for Emacs to migrate to them. C-c and C-x are used for dozens of the most important commands. It's technically feasible, but switching would be hard and existing users would be really upset.
I assure you I'd never propose to change emacs bindings at all, merely have a switchable alternate set. I think that would be possible? But even if you did so, there's too much else, far deeper that couldn't be amended. I think we agree it's not a credible proposition. I suspect emacs' enormous toolkit can't be exposed consistently without making it inconsistent. I can live with emacs as it is, very happily.
You can absolutely do both.
In VSCode, if I don't know how to perform an action, I just hit Ctrl+Shift+P and the fuzzy search panel with all the possible action shows up, with the associated keyboard shortcut next to it so I can remember it for next time.
In emacs, I have absolutely no idea how to discover features, and if I find something I still have to understand what the M- and C- mean
> In emacs, I have absolutely no idea how to discover features
The built-in "help" functionality[1] is really great. C-h a will find useful documentation for what you need 90% of the time, and the manual is there for most of the rest. It's particularly useful for keybindings - C-h w for "what's the keyboard shortcut for this command" and C-h k for "what command does this keyboard shortcut run.
When it was written, there were no widespread GUIs. Standardized keyboard layouts on computers were just starting to be a thing. Many of its users were using terminals, not workstations or PCs. So they adopted, and probably more often invented, terminology and conventions for a world that predated almost everything people today know and understand.
So it's not user-hostile, it's just really old. The knee-jerk answer would be 'well just update the conventions/terminology'. The problem is, update it to what? There is no timeless terminology they can use. As the tech industry increasingly resembles the fashion industry, they'd need to slap a new coat of UI paint on it at least every 10 years to keep up... as what was 'user friendly' terminology today won't be in not too many years. So now the developers are spending a big chunk of their time 'modernizing' it rather than actually making it better... not something most developers are interested in doing for a passion project.
Expecting people to adapt to 1984 - which, just a reminder folks, is more than 30 years ago - rather than updating your documentation and maybe some keybindings to better reflect today is in fact incredibly fucking user hostile.
Perhaps an example will be more vivid. In the eighties most people who were on the internet worked on a 24 line by 80 column terminal. Some people used Emacs buffers as a predecessor to multiple windows on large screens:
- Edit your code, perhaps splitting the screen in two buffers to look at different files or places in a large file.
- Split yet again one buffer for compilation error messages.
- Split the other one for a shell subprocess to run the program, check mail, etc.
Basically all-Emacs all day. Not my setup, but I saw it done often enough.
Ah yeah, the minutes of saved effort after pouring hours of effort into trying to understand esoteric arcane emacs-only concepts and writing some Elisp.
seriously though, it's a rabbit hole. Been there myself, now I just us vscode and it's a breeze!
> Nobody outside a minority of devs refers to Ctrl+c as C-c.
First, C-c is not Ctrl + c; second, it really helps to use compact notation when you read a lot of keybindings; and third, this is approximately the most minor complication in the learning curve of Emacs (otherwise nobody would learn vim, with its insane key mappings and invisible mode transitions).
Emacs' notation for keybindings uses C for indicating the Ctrl/Cmd key and M for the Meta (alt).
Things like C-c C-v are chords. <Ctrl+c> and <Ctrl+v>.
I might be wrong, but I believe that the reason that parent commenter said that "C is not Ctrl" is due to the fact that you can map these keys to any where you want. Most emacs and lispers prefer to have C key bound to caps lock.
> I might be wrong, but I believe that the reason that parent commenter said that "C is not Ctrl" is due to the fact that you can map these keys to any where you want. Most emacs and lispers prefer to have C key bound to caps lock.
Yeah, but it's still a control key. I mean, xev literally registers "Control_L" when I press the key that is physically labeled "Caps Lock".
C-c is a chord (two keys pressed at once); C-c C-v is a chord progression (first one chord, then the other), more often referred as a sequence in this context.
Were this an actual conversation where someone wants to start with emacs, I would be showing the sequences (as in "see, Ctrl-x and Ctrl-f gives you a prompt to write a file. Now try Ctrl-x and Ctrl-s...") and I would show the part of emacs that gives the user feedback about the command.
Discussions about terminology are totally secondary, and honestly, I was just trying to find a polite way to show that I don't want to get into an argument about terminology.
Those aren't "Apple's glyphs", they're part of the ISO/IEC 9995 standard for common keyboard layouts. https://en.wikipedia.org/wiki/ISO/IEC_9995 Perhaps Emacs and the Linux desktop should start using these characters by default, seeing as they now have good Unicode support.
And yet I could get a few things done in vim in a few minutes, and much more than that in a few weeks. And I choose not to use vim. And yet you said vim has insane key mapping but more people somehow use vim than emacs. Some things are not adding up. Emacs has excellent documentation but somehow very few people are able to use it. Some things are not adding up.
Emacs interface and community mannerisms _are_ user-hostile. As demonstrated by history.
There are lots of things that seem daunting at first and unforgiving to the impatient beginner: chess, surfing, martial arts, drawing... it doesn't mean that any of those are user-hostile, it just means that those that want to learn and master it will need to develop a certain discipline.
If you don't want that, fine. But what is the point of going around and saying that those who do enjoy these things are stupid?
I did not say they are stupid. I'm saying some communities build on pseudo-elitism. It's not stupid to enjoy using a text editor. It's stupid to argue that because it's hard to use (and hard to master) "you're just not getting it".
I think the expirement is over and conclusions can be drawn : emacs represent a tiny proportion of text editor's users, not because of a lack of features (is there's one thing missing it won't be for long), but because of what it is and the people and community around it.
> It's stupid to argue that because it's hard to use (and hard to master) "you're just not getting it".
It is also a bad misrepresentation of the point made by the person that you originally quoted.
Let me try an analogy: emacs is Olympic-sized pool, 50m long, 5m deep, with a 10m jump platform. It has been in use for decades by all kinds of people. Some new people see some amazing swimmers and divers using that pool and want to join. Problem is, they also don't know how to dive and are still learning to swim so they ask for a nice ladder on the corner and they want the pool to have one end shallow enough for people to stand on.
The developer is basically saying: yeah, getting in there is intimidating at first and we can do some improvements to help beginners, but we also need to find a way to get those beginners to get into the training program, train harder and dedicate themselves to diving, otherwise it would just be a waste of time and resources. Oh, and we also need to keep in mind that none of these changes should affect the people that are already training here for years.
> I'm saying some communities build on pseudo-elitism.
I'm not saying that Emacs users are better than you, I'm saying that you lack the experience to judge the value of Emacs; and that your lack of experience makes your assessments of Emacs basically too shallow to contribute meaningfully: in short, you don't know enough about Emacs to tell if your dismissal of it was premature, or if the things that turned you off were just the unfamiliar tail end of a coherent system.
It should be obvious that there are many many people who have spent more time actually using Emacs than you, and almost none of them by force or by fiat: literally nobody asked me to use Emacs, nobody started me using it, I received little or no assistance in learning it, I was mocked for using it as a teenager, and I spent most of my time with Emacs on teams of droves of people who do not use Emacs and evangelize other editors. At the outset, I simply wanted to try it, and I gave it a fair shake; I continued to use it because paid off for me.
The fact that people willingly start, and continue, using Emacs of their own volition with no external help or encouragement, should tell you that there are merits to the program that outweigh the things that turned you off before you gained any meaningful understanding.
No M is for meta. These names predate X let alone XFree86 by many years. The names don’t even come from a Unix system. Even GNU emacs predates XFree86 by 6 years.
Your writing implies that Emacs is something like the notepad of Ubuntu. But it’s history is much more extensive than that—- which happens to be one of its unique selling points.
Anyway the point regardless of historical context, is that for all sensible people, that capital C is being used as an abbreviation for the word Control. You’re just being a prat correcting people. You’re not even technically correct, you’re just wrong.
My keyboard doesn't have a 'ctrl' key, it has 'control'. I don't know why removing all the vowels from the word is considered more 'correct' than referring to the key by the first letter. Both 'C-' and 'Ctrl+' are ways of shortening the word.
It also takes what, five minutes to get accustomed to? Even old dogs can learn this new trick.
I use emacs and have for a really long time. Unfortunately, I don't recommend it to anyone because I think the costs of learning it outweigh the benefits.
When I read this article, I was surprised that my gripes don't overlap much with those listed in the article. I do really like the idea of "new user detection", which would take a user through a short configuration process if the .emacs file was missing.
I think my main gripe is async. I really love emacs for tramp, but there are so many operations that block working on all buffers while one buffer is waiting for i/o.
Choosing an editor like emacs or vi is a major decision which will have long-lasting effects. I love vi, and the homerow movement keys are now hard-wired into my brain, so much so that using 'normal' applications is noticeably frustrating. Sure, I can try to add plugins to everything, but that only goes so far and requires a lot of setup work on every new computer or VM. That said, the old school editors bring plenty to the table for programmers if you take the time to learn them well.
Honestly emacs sounds wonderful on many levels, but I learned vi first and I think that will keep me from ever switching. There's probably a vi-mode for emacs I guess... anyone have any comments on that?
I’m also a long time vim user. I basically cannot edit text without vim keybindings these days.
A few weeks back I decided to give emacs a third try, after installing it once a while ago and giving up, installing it again with spacemacs a bit later and giving up when I couldn’t figure out what layer of that behemoth errors were coming from or how to fix them.
Anyway, I finally decided to give it another shot with vanilla, with the first thing to do being to get evil mode working (which is vim keybindings). Getting to that point was a struggle, honestly. I felt handicapped without vim bindings, and I ran into some errors downloading packages after I added MELPA to my .emacs file. After an hour or two, I managed to get evil mode going, and I guess just the little bit of familiarity in what was otherwise a VERY overwhelming and unfamiliar experience made everything feel much easier.
Getting to where it was easy to install and see the effects of new plugins one at a time rather than getting the massive overload of spacemacs was super helpful. It made the learning curve smoother for sure.
I mostly did all of this because I wanted to try org mode, and honestly that has been amazing. It’s a very very good way of taking notes and tracking tasks. I’ll probably spend some time next time I’m feeling like tinkering trying to get it more like an IDE, but for now I’m happy just with org mode.
That's how I settled things down finally, Emacs for org-mode and magit (actually spacemacs) synced with all my devices with syncthing, on mobile I use orgzly, and everything is under version control. I use Vim for everything else.
I was in your shoes about 2 weeks ago. I also learned vi first and have been using it regularly for a couple of years now but was curious about emacs. At home, I installed spacemacs which uses vi keybindings. For work due to some security stuff I went with vanilla emacs, with evil mode installed (evil also adds vi keybindings).
I spent 2 evenings picking it up and getting my dot files in order. I primarily wanted to use org mode and only use it for that at the moment, I’m still using vi for coding because of a vimrc that lets me navigate the code base at work really easily but org mode has made task tracking a joy and also it auto-prepares my agenda based on my org file. All in all, I’d say it’s a worth a shot and you also get to keep vi keybindings, which is nice.
Thanks, I might give that a shot. I just installed vim-orgmode to see if I could get a little emacs goodness in vimland. I usually use a custom markup language and vim syntax definitions to keep track of my notes, so this may get me to convert my notes to org mode.
The thing I'm most excited about is shell-mode. For years I've wanted to be able to drop to a shell in vim and visually cut/paste the window. From what I hear, emacs can handle that.
> For years I've wanted to be able to drop to a shell in vim and visually cut/paste the window.
NeoVim is 100% compatible and has a pretty decent terminal buffer with full (read-only) Vim controls. Nowadays I prefer running it in a terminal multiplexer though.
Emacs' terminal mode doesn't have ncurses support which leads to pretty much all interactive terminal applications to break.
I tried all 3 terminals I could find and none works. Apparently they all use the same ancient base that was developed before interactive terminal UIs were a thing.
You might want to update your vim installation and check out `:help terminal`.
One thing I learned last year is to keep all my notes in markdown. I don't like it, I prefer my own markup, but many apps support it, which increases its usefulness a lot.
I spent two weeks around last christmas seriously trying out and configuring Emacs as a Vim user, from the ground up. It took me those full two weeks to actually get to where I wanted.
So it is possible to get Emacs to (mostly) behave like Vim, but it includes installing a couple plugins, spending time to set many additional keyboard shortcuts(especially when you have an extensive .vimrc already) and also completely ripping out and replacing Emacs' automatic indentation functionality because I find its behaviour actively counterproductive.
My two cents are that if you're really comfortable with Vim's or Emacs' approach you may not like the other one, simply because their main difference is that approach to doing the exact same things. And the improvements will certainly not be proportional to the time invested.
I've used emacs for maybe 18 months solid. I never found it had a single feature that my other editors didn't have (not saying it doesn't, just staying I didn't run into them).
My other editors can be extended via scripts. My other editors (mostly) have keyboard macros, repeat, etc.. My other editors can be used efficiently keyboard only. My other editors debug various languages. My other editors open shells in the editor. I don't care about org mode, I care about editing code.
Conversely many other editors do their best to be dev env aware, reading/understanding/integrating various language environment project files, which was never something I found in emacs (maybe it's all been added since I my emacs times)
About the only thing I still would consider using emacs for is editing in a shell remotely but (a) usually it's not already installed and (b) usually I'm not editing anything serious remotely.
What's special about emacs? What am I missing that's not in other editors?
Emacs is not an editor, it is rapidly-programmable-at-runtime-evolvable software that is designed to:
+ Help you realize how _you_ best deal with information.
+ Help you manifest your realization through _rapidly_ molding Emacs into your conceived model.
It is also the closest thing we have today to the Lisp Machine paradigm. I wrote this earlier today:
You'll get the most out of Emacs if you treat it as an
investment and put in the time to learn at least some Emacs
Lisp so that you can confidently explore and customize the
rest of the system. You don't need to become an expert
overnight, just learn enough to navigate the system (which
is self-documenting and geared towards helping you perform
that navigation).
Yes, it may feel weird or out of touch with contemporary aesthetics but that's really because it doesn't come with
strong, tunnel-like notions of _how you should think_ and _how you should work_.
It is not easy today to come to terms with a tool that's simply designed to help you craft
a computing experience, since we've been so conditioned to expect somebody else's model be there from the beginning:
At what point does this get in the way of your programming? If there's always more to learn about the tool, I think that would bother me.
I would like to like emacs, but the couple times I tried it it gets in the way because I don't know it well enough. Vim seems more appealing because there is less to know up-front, but it is still extensible
At the point where you find yourself dinking with Emacs and making excuses to yak shave instead of getting your work done -- which, given that it's Emacs and makes most other tools seem positively stone-knives-and-bearskins by comparison, is in practice a quite tempting trap to fall into.
The best way to approach things is incrementally. Find some pain point in your current workflow and write a little bit of Elisp to automate the painful bits. Let's say you're running manual UI tests and then eyeball-grepping the logs in your backend. "But nobody does that!" you say. "Why would anybody do that?" Heh. You'd be surprised. Anyhoo, thr crank has to be turned on a prod deploy by COB Friday and you've got no time to investigate Nightwatch or the other UI-testing libraries out there, let alone integrate them with a log watcher.
Thankfully you're an Emacs user! So you write a little Elisp to start the back end, capture its output in a buffer, and count the number of occurrences of the log cookie that represents a successful (or failed) row insert, etc. You haven't automated your whole process, but you've automated part of it, and that's saved you considerable pain. And it took maybe half a page of Lisp, if that.
Recently I was confronted with an ancient web service whose only integration test process was "manually hit the endpoints with Postman, then check to make sure the records hit the database". So I wrote Emacs Lisp code to send the requests, run the queries, and even manage the Docker container where the service lived. This let me run the whole process much faster with a few M-x commands. It was nothing fancy, either, I just wrote code to spin up curl, Docker, and SQL*Plus and capture and examine their output, sort of using Emacs as a powerful full-screen shell. Rather than get in my way, it became a versatile tool I could apply to the task to get things done much faster.
Again, this is the difference between an extensible editor and a completely malleable one. VSCode, JetBrains, or Eclipse cannot be extended as incrementally and on-the-fly as Emacs.
I've been using and programming Emacs for ~12 years. After all this time, I am at the level where it really feels like an extension of myself, almost like a cybernetic extra sense that I can put to use as I see fit.
Practically, as I go about my daily programming, if I feel something is off and could be improved, I have a pretty accurate idea of how long it'll take for me to implement it. Usually it's not that long and frequent 10-15 minute diversions of this sort happen multiple times a day. It simply means that the process works as expected, I'm approximating an ideal -temporal- mind model.
A few times a month, I'll do more extensive work, focusing on a number of long-term projects or exploring various ideas I've had and put down in my notes. All this work is geared around helping me manage information more effectively. I'm an information junkie, hopelessly addicted to the Internet and that's by choice. I wouldn't give it up for nothing.
Emacs is the tool that makes the difference since this continuous feedback loop of me adapting Emacs to help me deal with more and more information, allows me to keep up. Being an information consumer is easy today, you simply sit back and absorb what's being blasted at you. Being plugged into numerous signal sources and managing that information _on your own terms_ is the tricky bit and where Emacs shines while most other tools fall flat, since they're either too constrained or lack the necessary programmability.
> I've been using and programming Emacs for ~12 years. After all this time, I am at the level where it really feels like an extension of myself...
The problem is that these days, you could use vscode or atom for a month or two, and get that same feeling. Emacs from scratch is not a great use of time anymore.
Maybe so, but the ceiling with those tools is very low. I simply can not do what I do every day with Emacs using vscode or atom. I know why you compared them, but I feel that these comparisons are meaningless. A category error.
What are some examples? I'd say the ceiling is marginally lower (maybe) than emacs, but the learning curve to extend is orders of magnitude more approachable.
Almost everything I do on the computer happens inside Emacs, using programs written in Emacs Lisp:
Writing code, reading/sending email across ~30 email accounts spread out over different services, reading newsgroups, mailing lists and RSS feeds, maintaining a presence in 7 different IRC servers with ~30 channels total, using a variety of connection methods, watching and filtering certain twitter feeds, controlling external applications through Apple Events [1], file management local and remote, remote system management, local virtual machine management, note taking, calendar, agenda, notifications, bookmarks for external applications (Chrome and Preview), password manager, version control, music playing.
I can keep going. The only programs besides the OS and Emacs I use on a regular basis are Google Chrome, Preview.app, VMWare, Calibre, mpv, bash/ssh, Unix command line tools (less and less) and my bittorrent client written in Common Lisp.
I've almost finished an Emacs Lisp controller for Chrome, allowing me to bring a lot of information (e.g. tabs) into Emacs in order to rapidly manage it on my terms. I've done the same for Preview.app. I treat it as a dumb vessel that does the rendering. The actual information (filename, metadata, current page, date etc) is extracted from it, stored and manipulated in Emacs. That way I don't rely on Apple to dictate how I'm allowed to use my computer. I can experiment with different paradigms and find the one that fits me best. Emacs is the magic that makes all of that happen.
That speaks to the general breadth of the emacs extension/package ecosystem, which is impressive (but somehow not as impressive as you'd like), but how many of these things did you engineer yourself? And how many these things could not be implemented in modern editors? I'm not sure any couldn't be. Most already are.
Extensibility was emacs' killer feature when its main competition was vim and vimscript - that's just not the situation anymore.
Emacs main competition in the noumenal realm of ideas wasn't vim, but the commercial Lisp Machines mainly Symbolics. They were superior but technical superiority doesn't mean much in the domain of "Worse is Better" [1].
I didn't write all of the Emacs Lisp programs I mentioned, but I did go through most of them, changing the way they work to fit how I wanted to use them. This was an iterative process that is still ongoing.
What should impress you is not the breadth, but the paradigm itself as expressed in Lisp. You can probably write an IRC client in JavaScript and have it in VSCode. But that's not what I'm talking about. We're not ticking boxes down a feature list here to say "JavaScript can do that!". We're talking about a paradigm, and specifically about interactive development with a short feedback loop through Lisp which is "a difference that makes a difference" [2]. But in order to truly understand this, you have to go through the process. Philosophical truths can not be transmitted like pieces of eight.
VSCode is quite restrictive in how it can be extended actually.
Atom is much better, and feels closer to Emacs in terms of allowing you to extend and modify almost every part of it.
That said, Emacs is just the king. Not only can you really just change absolutely everything, it is really easy to modify it all at run-time on the fly, which even in Atoms isn't quite so.
I had settled on Atom for a while, but the slow performance and high memory use made me switch to Emacs.
It gets in the way of your programming immediately - the friction involved in bootstrapping a viable emacs environment that unlocks all the potential everyone is always going on about, is very high.
Deep diving into emacs is not a productivity booster - its a hobby that one does for its own sake, if that's the kind of thing that floats your boat.
Thanks for specifying this and confirming my observations. My experience has been that Emacs users are much more likely than users of other text editors to be researchers and other avid note-takers who do care about tools like Org mode. For example, I have a personal knowledge base that includes several thousand Org files containing my notes.
It's not a coincidence that the creator of Org mode is an astronomy professor[1]; whereas, the majority of the most popular VS Code extensions[2] that aren't from Microsoft seem to have been created by web developers whose portfolios include no research or non-web code repos.
My point isn't to disparage the users of VS Code, but to point out that a tool like Org mode is unlikely to be developed for editors like VS Code or appreciated by the users of such editors.
When TextMate was the flavor of the month editor that its users (web developers?) claimed was the best editor ever, I waited for an "Org mode for TextMate". It never happened.
Afterwards, when Sublime Text was the flavor of the month that its users (web developers?) claimed was the best editor ever, I waited for an "Org mode for Sublime Text". It never happened.
Now that VS Code is the flavor of month, I'm waiting for an "Org mode for VS Code". But all I've seen is an unmaintained extension[3] that provides roughly 1-2% of the features of Org mode[4].
I'm a researcher, and I have a git repository for my notes, which I edit using markdown. It supports latex math, tables, cross links, labels, and html if I need to do anything fancy, like inserting images, videos, etc. (youtube embedded video? no problem). I can edit them from any device, and they get sync'ed everywhere via git.
I can also read them from everywhere, and markdown renders super nicely.
I take markdown over org-mode everyday. I used to use org-mode 15 years ago, but today that's pointless for me.
** The link syntax is [<text to link>](<link path>), so for example [this is a link](http://google.com)
** Markdown ## Headers have an anchor with their name (e.g. `#Headers`), so you can cross-reference any other
section of any other note in the git repo by just using [see this section](./path/to/other/note.md#that-section)
I have a simple CI service on my git repo that checks for broken links, so that if I move a file I get a CI error if there are broken links to it.
cross-links is supported by some editing tools. (For example I use MacDown it does that.) It is not part of the MD spec. I do not use org-mode, but I know it well enough to admit it is unbeatable.
One of Emacs' strongest points is its ability to nicely integrate things other than "just editing code" into your workflow. As the half-joke goes, it already has a mode for everything. So in that sense, your question kind of comes off as "I only care about basic features that every editor has. What am I missing?"
With that said, even if we ignore Magit and Org, and just look at dumb code/text editing, Emacs has some pretty rare niceties. I've gotten used to undo-tree, and now I find it sorely lacking in literally any software that can "undo". The interactive insertion and inspection of unicode characters is also nifty.
> I've gotten used to undo-tree, and now I find it sorely lacking in literally any software that can "undo".
This feature is built in to all JetBrains IDEs (IntelliJ, WebStorm, PyCharm, etc.), most popular web wikis (Confluence, Notion, etc.), Google's web Office suite, and Microsoft's web office suite. It's available as a plugin for VS Code.
It's also built in to MacOS (Time Machine), Windows (File History), Dropbox, SpiderOak, and Sync, though some of those require it to be enabled and it doesn't work with keyboard shortcuts.
> The interactive insertion and inspection of unicode characters is also nifty.
Personally, I can't move because of the rich set of text editing commands. Some of it seems silly, like word transposition, or jumping over sexps. But with Emacs, it feels like it's just an extension of my mind, most of the time. I had the same feeling some time after I learned touch typing.
I think it really comes down to having the patience to learn how to extend your personal Emacs setup with the built in programming language: Emacs Lisp. From personal experience I can say that learning the basics of Emacs Lisp turned my relationship with Emacs from "preferred" to "nothing else measures up"
Ever other editor has a programming language for modifying it. What makes emacs special? couldn't you script all those other editors to do the same things?
I'd certainly feel my editor was amazing if I scripting 50 custom features but I wouldn't consider my editor better if I can script those same 50 features in any editor. I'd just consider the cost of switching high and not confuse that with whether one editor is better than another.
Lots of editors have git plugins. The question is, what can you do with magit that you can't do with those?
> slime
This is a pretty niche need, but sure. I would agree that people writing most Lisps (excluding Clojure) are better off using something like Emacs.
> Org mode
The fact that my editor doesn't have this is a feature for me. I want something with a clickable GUI that syncs to my phone, gives me reminders, and can be shared with coworkers when necessary.
I've recently been using ClickUp, and it's been fantastic. I can run it in a window next to my editor. I'm not sure what the setup is missing that Org mode doesn't deliver, but I do know that Org mode is missing a lot that ClickUp gives me.
> what can you do with magit that you can't do with those?
It's not the "what", it's the "how". Magit enables extremely fancy workflows with great simplicity, and its UI is self-discoverable and well laid-out. Magit has the best UX of any git tool.
> its UI is self-discoverable and well laid-out. Magit has the best UX of any git tool.
Which others have you tried?
The way you described Magit is exactly how I would describe SmartGit and also the built-in git features of several IDEs, including the Jetbrains family and Visual Studio (although I dislike Visual Studio because it's slow).
The main ones I've used for some time are the git CLI (which should be counted as a git toolset too), Sourcetree, the GUI inside IntelliJ, and Magit. I currently use Magit + the git CLI for some quick commands.
For me, Magit code staging is the best I've tried: staging whole files is as easy as staging single lines, which means my commits are more meaningful. Magit also allows me to use some fancy features without having to remember they exist, thanks to the well-thought command popups. Last, it's integrated with Emacs: this means I can move through code and write my commit messages in a familiar, coherent way.
The final advantage for me is that Emacs and Magit are forever. They will live longer than any other tool out there.
> The fact that my editor doesn't have this is a feature for me. I want something with a clickable GUI that syncs to my phone, gives me reminders, and can be shared with coworkers when necessary.
OK, I checked it out. I'm still not seeing reminders integrated with the notifications on my phone, nor am I seeing anything that the people on my marketing team would touch with a 10-ft pole.
There are lots of tools I'd use if I weren't programming for work and didn't have a team of mixed technical skills, and perhaps Emacs fits into that category.
A shame Stallman put the kibosh on QT quickly. Is he planning on there being a GPLv4? Not in the "leaving that option open for the future" kind of planning, but more, "A need has been identified that can't be met by v3, it's time to start working on v4." Because if they truly want a cross platform visual interface, AFAICT, QT is the closest you're going to get, and IMO, is the best means of doing so. Every QT app I've seen has looked and acted a lot closer to a native app on Windows and Mac than anything that ever came out of GTK or other GUI toolkits. And I don't understand why GTK doesn't have the same issues. It's not a GNU project AFAIK. It can't be a GPL vs LGPL thing, because QT is also available under LGPL. Is Stallman perhaps just stuck on the fact that QT was once not available under a free license?
Qt is licensed under GPLv2 or GPLv3, while GTK is LGPLv2.1+. If the FSF makes a GPLv4, GTK will automatically be available under that license, while Qt will not.
> If the FSF makes a GPLv4, GTK will automatically be available under that license, while Qt will not.
If that were the case, then why was GTK not updated to GPL or LGPLv3 when the FSF came up with that group of licenses?
When I looked it up, I found that QT is available under LGPLv3[1], so unless there is already plans to ensure that a GPLv4 is not license compatible with LGPLv3, I don't buy it.
> A need has been identified that can't be met by v3, it's time to start working on v4.
Software-as-a-service under GPLv3 isn't required to provide source code to remote users (AGPL acommplishes exactly nothing in this regard), so there definitely is such a need, but I don't know if RMS is actually working on that.
Well, the biggest problem is that the AGPL isn't the GPL, so the existence of the AGPL doesn't actually help with the large number of existing GPL projects, even if they're licenced as "GPL version N or later" (which v4 would help with).
However, the problem I was actually thinking of ("exactly nothing"), was that last time I looked into it, the consensus appeared to be that you could copy code between a AGPL project and a GPL one, which obviously makes the AGPL useless. But, on checking, I can't actually find a citation for this, and the licence text doesn't seem to support that interpretation.
So I have to retract my previous statement and amend it to: the AGPL does very little to help with SaaS attacks on open source software, primarily because almost noone uses it, and because the FSF continues to recommend the known-broken non-affero GPL as its default copyleft licence.
Okay, but even if GTK is a GNU project or a FSF project, why does that mean it qualifies for being part of a future GPLv4 licensed EMACS, and QT does not? Both are available under the LGPL. I wonder if Stallman expects that a GPLv4 would likely or definitely be incompatible with LGPL3. I don't think it's because the LGPL version would be bumped if a v4 came out; GTK is still on LGPLv2.1
It is because of the license. GTK's license is LGPLv2.1 or later[0]. The important part is later, It means you can update it automatically to any later version, especially if the new license is not compatible with the previous version. Qt does not offer their software with a similar license.
Emacs might never catch up to Visual Studio Code, which is actively funded by Microsoft, but intuitively, it seems like Emacs ought to be able to catch up to Vim. It's always been weird writing Emacs extensions in ELisp, but it's not like Vimscript is a top-tier language. Emacs is hard to learn, but so's Vim.
I think it comes down to performance, especially startup time. Emacs developers have never cared much about it, and I think that's connected to its reputation for "bloat."
The death knell rang when Linux distros stopped distributing Emacs by default; Emacs isn't installed by default on Ubuntu or Fedora, say nothing of macOS or the Windows Subsystem for Linux.
If I were working on Emacs, my #1 goal would be to beat Vim on startup time--to get the first page of text to show up faster than Vim--and my #2 goal would be to convince the major distros to include Emacs by default.
Sadly, I don't think any of this will happen. Stallman is too far out of touch, not just with newbies, but even with active users of Emacs. As the article points out, he's never even used Org mode! https://lwn.net/ml/emacs-devel/E1jR5ss-0001xM-L9@fencepost.g...
EDIT: I know you can do some non-default techniques to make Emacs start faster. But that won't get Emacs to be installed by default on popular distros. Installing more plugins won't make Emacs the quickest and easiest way to edit a file.
As a regular emacs user, I can tell you that start-up time is one of the lowest things on my priority list of things that I wish would be improved.
Emacs is not vim. Emacs is not designed to be a program you open for every file. Emacs is and IDE. You open it every time your computer starts, and then you go to Emacs and find files from there. Occasionally, you'll have a file and want to look at it, and then you'll use client mode to have it open in a new buffer in your already opened Emacs window/terminal.
I do agree that this is not the way anyone starting out would use a text editor. But if this way of using it is not comfortable to you, you'll be fighting so much of emacs that you really will have a miserable experience, regardless of startup time.
Just to hammer the point home, normally if I connect to a Linux system and want to edit a config file, I would do the following: either `sudo vim /etc/hosts` or `emacs` and `C-x C-f /sudo::/etc/hosts`. I don't think too many people would run `sudo emacs /etc/hosts`.
We agree completely. Neither Emacs users nor developers care about start-up time or size on disk.
And that's why Vim is installed by default on Linux distros (and macOS and WSL) and Emacs isn't. And that's partly why people learn Vim before they learn Emacs.
Not quite. vim is installed because vi is required by the POSIX standard and vim is the GNU version of vi. For the same reason, ed is still installed by default. It has nothing to do with popularity.
Yes, we are probably in agreement on that point. We probably disagree on whether we should care about start-up time.
We probably also disagree on what exactly it means to learn Vim before learning Emacs. I've been using Vim as a console editor far before I knew Emacs existed, but I have no idea how to use Vim for anything more than basic editing. Choosing an editor to learn as your development environment (which is what I would consider 'learning Emacs/vim/etc' actually means) is unlikely to be a decision you take based on system defaults. You are far more likely to learn the editor/IDE that your mentors use, whether that is Vim or Emacs or, as was my case originally, Borland Turbo C. Alternatively, when you are experienced enough to make a conscious choice of editor to invest in learning and customizing, your criteria will be more varied, but still likely not depend that much on system defaults.
If you use the Emacs server/client, then it is very fast to open a file from the command line. But I prefer to just open files from within Emacs. With ido-find-file, I get fuzzy path matching, which makes it fast to find whatever.
Rather than worrying about startup times, I'd have them work on including a lean set of quality of life extensions by default, like ido.
2) You already use Emacs. What would it take to get a new user to use it? It would have to be installed by default, and be the quickest and easiest way to edit a file. That means startup performance.
Vim might be hard, but besides jokes about "how to quit it", it makes much more sense than Emacs.
Emacs key combinations are weird. Discoverability is low. Even Vim will now tell you how to quit if you Ctrl-C it.
Meanwhile I have opened Emacs and I'm trying to quit it (spoiler: Ctrl-x Ctrl-c). Some things are actually interesting and it tries to help at first but then it goes back quickly into emacs-babble that doesn't help much.
The case for vim is simple: a quick editing of a file when you might not have a window manager up or on a terminal.
I don't see many reasons to learn Emacs when VSC, Atom or other editors exist.
> Vim might be hard, but [...] it makes much more sense than Emacs.
Counter-point: I think emacs makes much more sense. If you start it, you can navigate a file by clicking in places. It is a GUI application, whereas I think vim is just a terminal program by default?
Emacs has a little built in tutorial (Ctrl+h t) and is quite discoverable (type Ctrl+h ? and it shows you a lot of commands you can use to find out about what functions a chord invokes or how to invoke a function with a key cord). With helm you just type a part of a function and it gives you a list of suggestions.
Within programming languages I think auto-completion is a must-have for discoverability. Otherwise I have to constantly look up stuff in the documentation. And for that company-mode is really nice, I don't know about the vim side of it but I think something like that goes against the philosophy of vim as I understand it?
To me, modal editing didn't make much sense in the beginning and for emacs the learning curve seemed less steep, so that's what I went with in the end. But clearly it must be good somehow, because so many people use and love vim! It's just not for me I guess.
> The case for vim is simple: a quick editing of a file when you might not have a window manager up or on a terminal.
That, and the power of its keybindings.
> I don't see many reasons to learn Emacs when VSC, Atom or other editors exist.
I think evil-mode, org-mode, dired, and magit, make a pretty compelling case for Emacs to fit into many programmer's workflows, even if it doesn't displace their code editor or IDE outright.
Though even setting up just those packages requires quite a bit of configuration.
Discoverability shoots up really higher than Vim or any tool when you use helm's M-x.
Also there is documentaion for literally all the key bindings and all the functions. You can access the code for all the functions. Emacs is much more user friendly than Vim.
You're confusing vim with vi. On an IoT device I'd expect to find busybox's vi implementation. Definitely not vim. Ditto for containers, either a vi implementation instead of vim, or "vim-minimal" at the most. Not a full vim install.
I currently use Emacs (with Vim keybindings) as my main editor, after oscillating between Emacs and Vim for quite a while. I think the biggest disadvantage Emacs has compared to Vim is its out-of-the-box experience. For me at least, I would say that learning to love Emacs takes a lot of effort, far more than it should. I think folks tend to mentally categorize Vim in the same basket, but I think Emacs is far, far worse at onboarding its users.
The Vim out-of-the-box experience is not exactly great (crucial features like vim-surround have to be installed as a plugin, for instance, in the terminal version there's a lot of delay on some commands, etc). But while learning the unfamiliar keybindings initially takes effort, the huge speed advantage of modal editing becomes apparent after just a few days of sticking with it, and it becomes second nature surprisingly fast, to the point where you just stop considering editors which don't have decent Vim emulation. So while I wouldn't exactly describe Vim as accessible, it gets its core idea across fairly quickly.
By comparison (and also in absolute terms), the Emacs out-of-the-box experience is horribly bad, it seems to make no effort to wow its first time users. It stubbornly sticks to a keybindings scheme that is unfamiliar to a modern audience and which, crucially, unlike Vim's keybindings offers no substantial productivity boost. All the documentation even still calls the Alt key "Meta". So you spend multiple days getting used to Emacs' keybindings scheme, only to end up roughly where you started (not much faster than before). At this point it's easy to start feeling like learning Emacs is not worth it: you've just spent days learning without your productivity increasing, and you just have to take people's word for it that, no, really, it'll get better. The main selling point of Emacs is its extendability. But this point is lost on users who aren't already convinced that they love and want to use your editor. You have to provide a good out-of-the-box experience still.
Emacs itself starts fast. Most people who use emacs have a lot of packages that load on startup or autoload files that need to be read and this makes startup slow. Maybe if saving an image were easier then things would be faster but I think most serious users don’t care because they start emacs once a week
Out of the box, Emacs is slower than vim, and this is part of the reason why Emacs isn't installed by default on distros. Serious users don't care about startup performance, but that helps to explain why Emacs isn't gaining new users. Emacs isn't the quickest and easiest way to edit a file.
In the Emacs manual, read the "Saving Emacs Sessions" chapter (or get there from the 'desktop-save-mode' function documentation). Emacs can save and restore your current session, with opened files and windows layout, and as usual it's highly configurable.
By default it uses a global session context, but for example I configure mine to save the session locally in the directory where emacs is started. Then I can have several projects in parallel, and when I start emacs in the project top level directory it restores the session for this specific project. I also make the session saving file name machine specific, and ignored by unison for file synchronization. So the layout is specific for each machines with possible different screen setup leading to different window organizations. Just an example, you can tune it to fit your own needs --- that's the whole point of Emacs to me.
Not only does the desktop session remember and re-open the files, but it also remembers what frames you had open, what position on the screen and which screen the windows are on.
Startup time can actually be really good if you configure it right. Stock Emacs is about 150ms for me. There is also a portable dumper that will save your Emacs boot Image to memory for faster loading. Also check this out.
Sure, or you could use "emacs -Q," but all of those performance improvements are off by default, and it seems like they always will be. As long as that's true Vim will always be the quicker and easier way to modify a file.
Some distros have significant Emacs start-up configurations, which have an impact on start-up time. Using "-Q" skips this too. It's the case for Debian, so Ubuntu too I guess.
I used to use "jed" as a close to Emacs, light text editor to use for a quick edit from the shell. Nowadays I aliased jed to "emacs -nw -Q" (-nw: text mode, -Q: skip all configs), which subjectively starts instantaneously. And even a bare Emacs skipping the system an my configurations is very powerful. It also supports millions of colors with Konsole, so it's nice when reading code.
honestly, with lsp-mode, it's pretty dang close to vscode, at least for the languages I care about. and the benefits of evil + a fully configurable editor are too much to pass up. a drop-in replacement for newcomers? no way. but if a powerful environment is valuable for you, like say if you spend a lot of time in an IDE and the shell, emacs's ability to integrate those things and a lot more is too good to pass up.
I found lsp-mode to be quite cool (recently reformatted my machine, and so decided to modernize). lsp-ui + company mode kills the input latency on any 4k display on Ubuntu tho. Input latency is now VS-Code/Atom level slow. Unbearable. Even with delay set to 0
This is much, much better on Emacs 27 with native json parsing. Once the language server is fully loaded (which can take a little while sometimes), input lag becomes insignificant again. Strongly recommend upgrading.
Thinking of switching to gccemacs for the native elisp goodness. But way too much yak shaving has been done already. I just disabled lsp-ui and lsp-company and all good.
Switching from vim to emacs was a virtually seamless experience and a complete no-brainer... yet I put it off for years. Years before I finally took the plunge, I knew I eventually would. Vimscript is awful and although elisp isn't a great lisp dialect, it doesn't have to be great to be better than vimscript (which is abominable.) I shouldn't have put off the switch for so long. In retrospect I'm not even sure why I put it off for so long.
> If I were working on Emacs, my #1 goal would be to beat Vim on startup time-
With emacsclient, I don't think this is relevant. Concern about startup time certainly wasn't part of the reason why I put off switching for so long.
You put off learning Emacs partly because you learned Vim first. But why did you learn Vim first? Because people around you were already using Vim. Because Vim came preinstalled. Because Vim was quicker and easier to just edit a file.
Startup performance isn't about persuading fence sitters. It's about becoming the default, the option people pick without even knowing why they picked it.
In truth when I was a teenager I sat down with vim and emacs one afternoon and tried both. At the end of that day I chose vim, because I preferred the default bindings of vim. Nobody around me used either, nobody around me programmed at all, but I had read online that the pros used or or the other.
so - your 1st point of reference is vscode which is an electron app, and then you diverge getting into emacs startup time and emacs reputation for 'bloat'
this reputation by the way was 'earned' when entire computers had less memory than a typical emacs or vscode instance, and similarly,
emacs likely currently uses less RAM than vscode due to afformentioned electron. Also: vi vs emacs 'bloat' wars were in reference to actual vi, not vim, which basically has the same non-core functionality as emacs (e.g. GUI widgets, editor-hosted scripting language) that was the basis for the original 'bloat' argument.
I agree that VS Code is even more "bloated" than Emacs, but it has a multi-billion dollar corporation funding it. If Emacs could get that, maybe Emacs would be as popular as VS Code!
But, short of that, Emacs can't beat VS Code. Emacs could beat Vim, but only by being so fast and small that it gets installed by default on Linux distros (and macOS and WSL).
But that'll never happen, because Emacs folks prioritize features over performance. (If they cared that much about performance, they wouldn't be Emacs users!)
Yes and no. I need to tone it down (or leave HN, wehich is probably better).
Other people need to improve things. But this is not going to happen. An alternative to doing something is to dismiss other people's work. That's what this guy did. 'Emacs is too slow' - emacs startup time doesn't bother me, even if it did it would be down in the noise amongst other emacs irritations (or other software, heck, the amount of time I've wasted on Git...)
He dissed emacs for no good reason, and dissed stallman who I really do respect (because RMS actually did something).
I've seen a lot of this kind of destructive behaviour and I'm so tired of it. I should just leave HN if I can't contribute properly.
Edit. If I post stuff like "x != y" I will say why, with timing, or clarify with In My Experience" or something. "emacs is slower" doesn't tell me by how much or discuss if startup time even matters, so it is a useless criticism; I can't act on it. It doesn't even feel like a good-faith comment.
I agree on the start up time point. I don't know how slow most people's experience is, and I don't use emacs, but I really can't imagine people aren't using emacs because of a few extra seconds it takes to open your code.
To your second, rather obnoxious point: when they said 'out of touch', they didn't mean 'hasn't been in communication'. They meant he doesn't understand the attitudes/motivations/requirements of the community.
It seems that if vim is so much more popular than emacs, old fashionedness doesn't necessarily make an editor less popular.
If one believes that emacs would be more popular if it were more like some other editor that is more popular then being more like vim would make emacs more popular. Evil has existed for a long time but vim is still more popular. As much as emacs can be like vim, people still feel vim is better at being vim.
If emacs was more like VS code, would people want to use it for that reason? It seems like VS Code would always be better at being like VS Code than emacs.
Emacs has a loyal following, conceivably of millions of users? It also attracts new users who like things about it. There are packages for most languages, even very obscure ones. Being less popular than vim doesn't seem to make emacs less useful or keep new people from picking it up. It seems like emacs is a good thing according to many people as is and if its developers want to make users happy, looking at what people use emacs for and making it do that better would probably be a good idea. Making it more like other things that already exist doesn't make as much sense to me really.
I guess I don't really understand why it is important to be most popular as long as something is useful with a strong user and developer base.
Agreed. Emacs and Vim basically try to do the same thing with two very different approaches, and both can fit well depending on the use-case. I also get why many prefer VS Code, because spending hours to learn and configure a program just for text editing is not universally appealing. But other people just want that configurability.
> Evil has existed for a long time but vim is still more popular.
Because the behaviour isn't identical(it even has default settings that intentionally deviate!), because it isn't complete(it doesn't affect any other mode), but most importantly for me because Emacs cannot fully match Vim's keybinding functionality. I broke my Emacs configuration a dozen times before realising that.
I am glad I tried out Emacs as a Vim user though, it led to a couple improvements of my Vim configuration and I learned a couple new things.
I'm not an Emacs user, but with all kinds of software like this, I find that the strengths lie not in what makes it popular but what makes it lasting. If too much is changed in Emacs, scores of users will cry havoc and switch to XEmacs (or something) and it will become even less popular.
Emacs has a stable core user base and as far as I can tell, it's recently getting some traction among a new generation who are exactly the kind of users that would likely jump ship as soon as a lot of "modernization" started happening. If they wanted something "modern", they wouldn't opt for Emacs in the first place. It's not like there's a lack of choice: IDE:s and editors adhering to current trends and concepts within UI/UX design are plentiful. They have sought out Emacs because it is uniquely Emacs and not yet another Sublime/VS Code/Atom.
Editors aren't exactly comparable to desktop environments, but when Gnome 3 was conceived for similar reasons of following design trends and thinking afresh, we suddenly also had Cinnamon, MATE and Budgie instead of just KDE and Gnome. Not that I mind diversity, but it's a fine example of alienating a user base. Now, consider how conservative an Emacs user of today probably is.
I find that one of the few things I still truly enjoy about computers is that there is stubborn software left for stubborn people to use. Slackware, Emacs, fvwm, xterm... Familiarity, not innovation. That's worth something, too.
Or all movement combined with prefixes. I regularly do
C-u C-u C-p
to jump sixteen lines backwards. Or add another prefix and it's 64 lines.
Separately, macros, yea! Macros with regexes FTW! The counter you can use in macros - occasionally very useful! M-x occur! Dired which can search a whole directory tree of file contents for a regexp! So much more.
Only thing worse than emacs interface is not having emacs at all.
While it's nice that macOS has this out-of-the-box, you can make all the key-bindings to their macOS equivelants using Karabiner-Elements. If it did go away, we'd be fine.
I agree! You know what takes it to the next level? Sticky keys!
Accessibility feature in macos where modal / control keys will "stick" for the next keypress (non-modal / control) and then release.
Double tap will stick it for the duration until the next tap on the same key.
Essentialy, double tap control key and move around with n and p keys, kill with k, move more, yank somewhere else with y. All without touching control! But there's more, you can save the buffer with x followed by s press. It takes a while to get used to but saves you awkward wrist moves. I guess it's closer to modal editing in vi, just not as advanced.
So true. It's a major thing that stops me from migrating to Linux.
Every time I work with Linux or Windows, when I open a Chrome tab and I want to go down to a history completion, I hit C-n multiple times and it ends up with many new windows...
Emacs is not an editor, is a personal travel to find and build your ultimate editor through the years, a solution that will work forever but only for you.
Yes, is the most powerful tool that ever existed, a beautiful monstrosity, no other editor will let you cherry-picking git commits, handle your agenda, export to PDF, measure the time for a cup of tea and estimate the new project costs. In some point Emacs becomes a part of yourself. Yes it will be loved and tamed only for us, the weirdos, and that is ok.
In 1996 all my friends were asking me why I installed and struggled so many hours with that thing called Linux, when Windows was so easy. "Nobody uses Linux", they told me. Well, Linux made me very good with DevOps tasks, and I finally learned what software is about when I discovered eLisp.
As many other things in this world, Emacs is not for all people.
Please. Emacs will never be popular. Emacs does not need to be popular. Making it popular will require dumbing it down to the level of VS Code. It's doing just fine as it is, please leave it alone.
Edit: I mean, it's a complex, sophisticated, hard-to-master instrument, kind of like Organ. If you feel that popularity of your instrument matters above all (which is perfectly fine) -- just get yourself a Kazoo.
Oddly, I think you will make Emacs appealing to users when you start asserting it is appealing to users. Few changes really needed. Just stop intimidating people before they get involved.
> I think you will make Emacs appealing to users when you start asserting it is appealing to users
I've worked with a lot of Emacs fans but everyone describes it as having a hefty learning curve. If you tell people it's appealing and the first experience is unpleasant, all you're going to do is convince them that you aren't a reliable source of advice. I think it would be much better to focus on easing that initial stage and explaining it a powerful tool which requires some up-front investment.
Remember that Emacs is competing with things like Visual Studio Code, Atom, Sublime Text, etc. If you tell people that it's easy they're going to try it, bounce off, and conclude you have no idea what you're talking about. If, instead, you tell them what you like about it more than those others they might find they agree with you.
Speaking as someone that has bounced off the likes of notepad... I think you are overstating the case.
I'm not saying to merely claim it and call it a day. I'm saying claim it while showing people how to use it. Make it a dialog that doesn't begin with, our way is harder. It isn't harder. Just different.
Exactly. Whenever a new developer asks what editor I use, I emphasize that while I use emacs, it has a huge learning curve. It has different conventions than any other text editor, because it predates those conventions.
I would like to understand why vim does not seem to have this problem? I guess as stated below, it's just they way it is marketed. Because the way I see it, emacs is much easier to start out with than vim.
If I start emacs, I can navigate around the text with the arrow keys, the way I would expect from most other text entry systems. Then I can just type stuff. I can click at points in the text to navigate there, just like in notepad or anywhere else.
OTOH in vim it is nothing like that. Nothing is even remotely familiar. Yet there are much more vim users than emacs users. So I don't buy it that the learning curve is the problem.
> I would like to understand why vim does not seem to have this problem?
That’s seriously begging the question — I mean, there’s a pretty popular running joke about quitting vim and it’s been many years since I’ve heard any recommend it as easy to get started with. In the 90s people suggested it due to Emacs hitting memory constraints but most CPUs now have more cache now than those computers had.
I know, people are joking about how it's not usable. But still there are a lot of people using it! So maybe it's not actually an issue for adoption, so I wonder why this argument comes up with emacs then, which, in my opinion, is OOTB not as weird as vim for someone unfamiliar with either of them.
To some degree, I agree. I've been playing with Doom Emacs[1] recently and it has been pretty smooth, the configuration and such more so than my regular Vim setup.
My experience with Emacs has been a steady upward trajectory, gaining understanding and access to functionality. I now use CIDER and TRAMP every working day, and no true equivalent exists for any other editor (though many are catching up to CIDER, due to Clojure being the better lisp!).
The biggest problems with Emacs, to me, are the rendering performance, the lack of sufficient threading, the default keyboard-accessible windowing commands, and Elisp being unergonomic and sad.
The course I'd chart for an ideal Emacs would be rendering with something like Alacritty†, some default windowing commands similar to tmux, and phasing out Elisp in favour of a Clojure dialect; the last bit would help a lot with introducing some basic sources of concurrency.
† Plus smooth scrolling surfaces, since a text editor generally does not have enough surfaces that the memory overhead of tiled surfaces is a serious issue like it is for general-purpose renderers like web browsers.
Many years ago I implemented JEmacs (http://jemacs.sourceforge.net/) - a proof-of-concept (i.e. very incomplete) port of Emacs to the Kawa framework. Kawa is primarily an implementation of a nice if-I-say-it-myself dialect of Scheme compiling to the Java VM, but it can be used to compile other languages - specifically Emacs Lisp. JEmacs is long dead but Kawa (https://www.gnu.org/software/kawa/) is still actively used and maintained. It has a number of niceties and ideas worth checking out.
While elisp has lots of warts and weirdnesses stemming from ages long ago, I find it quite suited for its task as an editor scripting language.
For instance, the global namespace is great to play with and learn commands in the scratch buffer.
Also the custom datastructures and generally the emacs lisp abstractions around editing are a joy to use.
I agree though that the rendering is too old fashioned. I'd love for Emacs to get smooth, animated scrolling instead of that tty-esque line-by-line movement of the text. That really makes it hard to keep track when scrolling throught large documents.
Likely a polar opposite of Clojure, but there is an attempt to add Guile (a Scheme dialect) to Emacs[1] which aims to provides a faster Elisp backend, and support for using Scheme to program Emacs.
At least when I've written elisp, the default datastructures have involved a lot of work to construct and manipulate, and when you do it right, the ones you've chosen for convenience may perform so poorly that you have to go back and change them to get your program to complete in time.
Namespaces for vars and functions being not a language feature is inconvenient. Unless you are using fakespace or intern-symbol (it seems hardly anyone does), every symbol in your program needs to include its namespace information in order to avoid it being accidentally invoked by somebody else, or accidentally convincing somebody that it's part of the base distribution.
In Clojure, it's many little things:
Keywords are callable, allowing you to evaluate a keyword on an associative collection like hash-map, or traverse, in an obvious and intuitive way, into a nested associative structure with the threading macros "->" and "->>".
The default data structures are fast (for what they are) and hard to misuse: unless you ask politely, you are not going to mutate something your function was passed passed without noticing. seq, the interface for sequences (vectors, lists, pairs from an associative structure), pairs well with destructuring in let and macros/syntax that does binding.
Things like 'let' don't use more parentheses than necessary, which has a greater impact on readability than you'd think. The use of vector syntax for bindings rather than list syntax adds a little bit of syntactic texture that makes reading programs more ergonomic.
I think Clojure may not be as unfamiliar as it seems at first to a person who's written other lisps before, but I have yet to meet somebody who prefers the experience of writing Scheme or Common Lisp to Clojure; nor anyone who prefers Elisp to Common Lisp.
I like to tell the story of how secretaries in the 70s learned how to use and customize Multics Emacs with Emacs Lisp; they were told they were simply customizing their editor, not programming it.
That's the really cool thing about Emacs. The only difference between "simple variable settings" and "proper lisp programs" is a difference of scale, not a difference of kind. Variable settings are just as much code as anything else in Emacs.
Indeed. (+ 1 2) is a "proper Lisp program". By having all that power available from the start, users can use as much or as little as they need and shape the tool on the fly as they work with it. It's the difference between an extensible text editor and a completely malleable one.
I tend to agree, too. It is really no worse than any other complex application, and far better documented than most.
An an occasional user of both Excel and Emacs (mainly a vi guy), I waste at least as much time figuring out where "that tool" in Excel went or how to get in to one of the weird graph editing modes as I do with the more obscure Emacs features I use sometimes.
Getting started with Emacs and having basic skills (load, save, cut, copy, paste, search) is WAY faster than with vi. I don't use more than a tiny fraction of emacs's capabilities and likely never will, but the initial part of the learning curve is way easier than it is with something like vi.
But emacs is not against vi. When I taught a class where I started by introducing emacs, the first question I got was how to make it have this color text and that hentai page background.
I generally use aquamacs when I need emacs these days (especially since Catalina no longer includes the terminal-based emacs by default). It offers a lot of customizations through menus for the appearance, not to mention that it supports standard cmd-whatever shortcuts for the basic functionality.
I wish Vim users and Emacs users would unite to improve Spacemacs. It's really a great idea IMO, have the editing power of Vim with the flexibility and elegance of the Emacs environment.
Unfortunately when I tried Spacemacs (coming from Emacs) I kept bumping on rough edges with vim command emulation which ended up with me switching directly to the real vim. It's been about a year now and while I still think I was right to finally make the switch to modal editing, vim feels like a clunky and hacky environment compared to the power of Emacs.
Vim and Emacs have too many philosophical differences for this to work. For example, emacs doesn't have a fixed concept of what a paragraph should be. Instead, it leaves that up to the major mode. This is fundamentally incompatible with vim's paragraph motions which are determined by empty lines and remain the same regardless of file type.
As a very long-time Vim user, I prefer that my editing commands be predictable since I type them with muscle memory (faster than ordinary conscious thought). Having them vary from file to file based on file type (the Emacs way) throws me off completely and makes the editor feel untrustworthy, like a horse that's liable to kick or throw its rider. Vim feels like a complete set of high quality, manual woodworking tools.
VIM has a text object called block that IIRC differs from filetype to filetype. I never tried but I guess you could also overwrite the ip and ap text objects for certain filetypes if you really wanted to.
Interesting viewpoint, but aren't there enough differences between programing languages to warrant mapping these concepts slightly?
Clearly my Emacs origins show here, because not having simple built-in motions to select "a function" or "a class" feels like a big limitation to me. I actually have a bunch of ad-hoc bindings for that. I also seldom use paragraph motion while coding simply because it doesn't really make a lot of sense to me. I think about code in lines or blocks, not paragraphs that is a rather weird concept when it comes to code. The fact that you can't easily add new motions to vim is a big limitation for me.
>Vim feels like a complete set of high quality, manual woodworking tools.
They're mostly reliable and predictable, I agree with that. High quality I'm not sure. The fact that the undo tree is effectively unusable without 3rd party plugin is weird. Tabs are at the same time over-engineered and under-featured. Nobody seems to really knows what they're for or how to use them (just make a quick search online for "vim tabs").
They're like Emacs frames except that you can't actually use them like a separate frame on a different screen. And you can't have them use a different working directories easily so they're useless to open two projects side-by-side. Some people coming from editors that open files in individual tab (an anti-pattern IMO, but that's a different discussion) expect them to work that way, but it turns out that they can't really do that either. Why even bother?
You also need plugins to do very basic coding stuff like run "make" in the background without being locked out of editing. Which wouldn't be too bad if Vim's internal API made it easy to make Vim plugins work seamlessly like native code, but in practice all the plugins have tested needed to be super intrusive to offer basic functionality (like remapping literally half the keyboard to slightly tweak the kill/yank behavior) and it ends up breaking left and right in weird and unexpected ways.
The visual feedback for commands is atrocious. Spacemacs' genius is that when you start typing commands it shows you what you can press next and what it does. You effectively navigate the bindings like menus, and you have this positive feedback loop where you memorize the bindings by using them. Sometimes I start typing a command in vim and I think I made a typo but I can't know because I have zero feedback on the current state of vim. Emacs almost always tells you what it's waiting for in the mode-line.
Why does ":bdelete" also kill the window it's in, except when there's only one window left? Since elsewhere there's no 1:1 relation between windows and buffers, you'd expect to get the next buffer in the stack (that's what Emacs does in this situation, and that's what Vim does when you have one window left). Window and buffer handling is hard but Emacs is vastly more configurable and works better out of the box in my experience.
I also often get performance issues that I don't remember ever getting in Emacs which is fairly ironic given that Vim is supposed to be the "lean" one.
I think so. The Emacs philosophy is essentially to treat the editor like a highly-customizable IDE. I use Vim only because I want a Vi that has a few quality-of-life tweaks here and there (the undo tree works fine for me without any plugins, I just use g- and g+). I don't use the vast majority of what was added. The core of what I want was created by Bill Joy back in the 70s.
I want a text editor that works the same whether I'm editing a C source code file or a text file that happens to have some C pasted into it or a configuration file or a file that looks superficially like C but happens to be a different language. I'm not interested in an IDE. I would prefer that most of those language-specific tools be separate programs that I can invoke by shelling out.
Performance issues in Vim are usually caused by various autocompletion engines, none of which I use. I like Vim's built-in completion which is very simple and predictable (fitting the theme), invoked using C-x in insert mode.
Thanks for the evil-collection link! I hadn’t seen this before, but the sudden switch out of having vim bindings in various buffers has been one of the pain points in starting to learn emacs.
I don't think spacemacs and the vim emulation, evil, have anything to do with each other. I switched from vim to emacs a while back and haven't had any issues with evil mode.
As far as spacemacs goes it seems neat. I tried it once but it was too confusing and I've been using emacs for so long now that it's very finely tuned to what I need it to do.
As someone who really doesn’t “get” or care for Vim, why should I contribute to an alternate Emacs-“distro” entirely focused on an existing Vi user-base, using non-standard conventions and keybindings?
I mean good for them having that option, but what’s in that thing for me?
This is one of the main reasons why I stuck with Vim. The strain on my hands was very noticeable, even as I was just starting to learn the standard Emacs keybindings..
As a vim user, I use Spacemacs for Lisp. Otherwise, I don't like mode inconsistencies (e.g. vim keys don't work inside SLIME debugger), the lack of tabs and the startup/running footprint. It doesn't feel right or convenient to have many Emacs instances scattered throughout tmux or terminal windows, created and killed as needed. Now that I'm thinking about it, this and tabs help me map my work space mentally in a way that hidden buffers (or directory trees) don't.
Although there have been several tab addons for emacs for a while emacs now has native tabs that work the same as vim tabs.
You can run emacs --daemon at login and run either emacsclient to start a new window connected to an existing instance. In my measurements starting vim in a new xterm takes about 250 ms. Starting a new gui emacslient requires only 500 ms. Perhaps numerously running a new default emacs instance with emacs -Q is actually faster at 400ms.
Am surprised that a starting point has not been highlighted earlier: the onboarding.
To get news users using your product, you have to lower the friction. By making great docs and the environment easy to setup to get started, you can make this process easier.
Why not start with that?
I have always felt that the initial config of emacs has been painful.
I see this "Emacs is terrible, my (insert currently hyped IDE/editor) is much better" mantra every few years. These days, it is VSCode, few years ago it was atom/pycharm/intellij, before that was anything on Eclipse platform... Yet, I need to see status of any these after 40 years.
Emacs is like a turtle - it isn't flashy and trendy, looks weird and old, but is still going steadily and strongly. And I bet you'll be able to run your configuration 10 years ago, for the next 20 years without any problems.
I'd say, if you don't like Emacs, use something else. Usually everyone returns back to either Emacs, Vi(m) or Sam at some point. True hackers will go to ed - ed is the standard text editor after all :)
I think a large part of the issue is the default keybindings (the GUI is also bad, but I think it's bad in a way that's not going to be impossible to fix without screaming from people who like what's already there). It's truly only lacking a decent text editor.
This isn't to say that the keybindings never made sense; in the stage of computing before X, where Space Cadet-like keyboards were common, it was more than fine.
Currently, though? Entirely different era of computing.
Imagine you're walking in with no clue. You haven't heard of any of the memes, someone just recommended you a text editor. "It's really good! You'll be more productive!" You have no idea what in the world evil is, or why you would ever want it.
You launch the tutorial/tour/whatever it's called and immediately it yells at you to use C-v to jump to the next page. And then M-v to go backwards! If you're a normal user, your response is probably something along the lines of, "Like, why?"
Off to a good start, breaking the most universal keybinding across modern operating systems in the strangest way possible, and not only that, but also breaking one of the biggest implicit rules of keybindings.
You read a little bit more and eventually get to cursor control. Wow, somehow they managed to pick the only possible thing less intuitive than 'hjkl'! Not only that, but it's not even consistently unintuitive!
And that's not even getting into the obvious problems that come with the placement of M and C on modern keyboards.
There are a few solutions to this, obviously, but good luck trying to find a solution that isn't universally-hated.
You could make evil the default. Controversial and only slightly helps the barrier to entry.
You could make it like the Web's model of text-editing but with quality-of-life enhancements. I think this one is probably the winner. It's definitely why Sublime/VSC/Atom won, past everything else.
The Turbo C/Wordstar approach was cool, but has no mind-share today.
You could try something new, I guess? This is dangerous territory, though.
I have no idea what the solution is, but the problem(s) seem obvious. I say this all as a person who really likes Emacs. I even still have most commands memorized despite not having touched it for years now!
> You launch the tutorial/tour/whatever it's called and immediately it yells at you to use C-v to jump to the next page. And then M-v to go backwards! If you're a normal user, your response is probably something along the lines of, "Like, why?"
The hardcore emacs users think these keys are better. And don't want to change them, because then they had to rewrite the whole manual which uses these keys.
The user don't have to use these keys, though, so there is no point in the tutorial starting with them.
Right? And yet I just typed 'emacs tutorial' into DDG, and the first three results all hit you right away with descriptions of keys that don't physically exist on a modern keyboard.
I've never tried emacs in large part because I've been convinced over the years that the various combinations of keys I would need to memorize are too complicated. I just did that search thinking that maybe I'd been mis-remembering, but no, that's still the impression that I have.
I'm curious, how do you remember key combinations in other IDEs? I learned Vim, it was tough, but I remember a handful of commands I use all the time. And used Vim mode when available in IDEs when available. Spent a few years with VS Code, but I could never remember certain keys to navigate between panels for example. But the F1 key is great though. For w/e reason, I tried Emacs with evil-mode. I don't have to remember that many new keys I think, but a few of course. 'which-key' and M-x enables me to search for all commands, and I can also see the key combinations if I need to learn it later. In VS Code I try the F1 key, but if I could not find it there, I would grab the mouse and click around in menus looking for key combinations. Or go into settings and try to find w/e I was looking for. Of course, in Emacs I have spent hours setting things up, searching on the internet for clues on how to get something working as expected.
Perhaps I am doing something non-optimal in my process. Curious how others learn/get productive in their respective IDEs.
In most IDEs, they're the same key combos I use in non-IDE products. I'm on a Mac, so Cmd-X, Cmd-C, and Cmd-V work pretty much everywhere. They even work at a terminal prompt, and the latter two work in vi.
I did learn vi years ago, but I'm sure I still don't tap but 10% of its power, despite using it daily, precisely because the key combinations seem arcane to me.
I am having trouble finding that in your long comment. The initial experience of using vi and emacs are hardly different in some fundamental way so either being unintuitive seems like a poor way to explain their respective popularity (or lack thereof).
You read a little bit more and eventually get to cursor control. Wow, somehow they managed to pick the only possible thing less intuitive than 'hjkl'!
The initial experience of vi is that you learn six keys to press to make it do things, and go from there. Emacs is significantly more complex than that, starting out.
It's definitely not intuitive, but it's an order of magnitude of difference from Emacs, which could be described as anti-intuitive.
Vi has text input modality, unlike essentially, well, anything. It's an entirely different model of operation which it shares with no current software and hasn't for a quarter century.
It's strange to be talking about the UI details of vi/emacs (both, by current standards, about equally super-weird) when the article itself is a kind of perfect vignette of the organizational dysfunction of the group that maintains emacs.
'press i and then basically everything works as you'd expect' is pretty simple; it's got a significantly-smaller barrier to entry than Emacs, and breaks fewer core-assumptions. Is that agreeable to you?
The thread on the mailing list was basically guesses as to why Emacs has lost popularity & methods of regaining it, and the lwn article is primarily focused on just relaying it. The thread itself doesn't point to all that much dysfunction, in my opinion.
'press i and then basically everything works as you'd expect' is pretty simple; it's got a significantly-smaller barrier to entry than Emacs, and breaks fewer core-assumptions. Is that agreeable to you?
It's not. Maybe we're talking about completely different things because I'm not following this at all, just like the other responder downthread. For decades, GUI text entry has been modeless. Larry Tessler one of the GUI's pioneers and prophets (PBUH) had a 'NO MODES' license plate and the idea remains a central theme in UI design. Vi doesn't do that. It does this:
I don't mean to debate the merits of this design but in terms of 'breaking core assumptions, vi 'breaks the core assumption' of typing text into a computer. It's not, per Winnfield, the same ball park, same league or even the same sport.
> 'press i and then basically everything works as you'd expect' is pretty simple
If that means that you can press letters in they keyboard and see them appear in the screen that’s also true in Emacs... and you don’t even have to press ‘i’ for things to start working as expected.
In vi if I press "i" I can't use the arrow keys to navigate the text as normal. In emacs I can. I'd say using the arrow keys for navigation in text fields is a very widely accepted functionality. So isn't it vi breaking the expected behavior here?
Who cares about popularity? It often brings more trouble than anything. Emacs is a gem and will probably stay like that for decades to come.
The only thing I wonder about is how it is possible that Stallman seems to have never heard about org-mode which is one of the main reasons I use Emacs and I don't think there exists anything that even comes close.
I manage my todos with org-mode, generate chord sheets of my songs and even produce my website from org files.
This is a super dumb example, but I hate that scrolling is tied to cursor. Like if I'm gasp using the mouse to scroll through a file in emacs, the cursor has to stay in the viewport. If I scroll past the viewport, the cursor moves to the viewport. In IntelliJ (which has such good emacs keybindings I can use it for a lot of my work), the opposite is true: when I scroll away from my cursor, it stays there and when I start typing again, my viewport moves to my cursor not vice versa.
It's a small thing but it shows emacs' age. When emacs was written, GUI cursors weren't a thing. Scrolling wasn't a thing. Of course the cursor and the viewport would be connected. There wasn't any other way to move the viewport. Basically emacs needs to be somewhat GUI native.
Emacs should also be more discoverable. It's hard to incrementally learn key commands. I hate that the default for M-x is just a blank line. It's really intimidating. Having some sort of fuzzy search/history like Helm makes M-x so much easier to use.
Basically emacs needs to get UI and UX people to give it a refresh. Nothing outlandish, just get it into the 21st century.
I think it's possible to implement this as an extension on top of evil? trigger a bookmark when the user starts scrolling, jump back to the bookmark on keystroke in insert mode.
but yeah, there's generally a problem with the UI/UX -- like as a consequence of the problem you're describing, you have to clear your current selection before scrolling to paste from the kill buffer. it's all foibles you learn about and adjust to but it makes the environment feel unpolished on a first impression.
spacemacs and doom have a better impression out of the box but there are just some core problems that they can't fix with a clever configuration. one that frustrates me regularly is auto-complete (company) triggering a network call that's bound to time out (because of user error) and the whole editor hanging for the duration because the completion call happened in the same thread as the UI. actually, the single threaded nature of most of emacs is probably my biggest complaint...
Oh yeah you could definitely implement this with some nice config. But that's the problem: only insane people like fiddling with configuration that much.
I know my gateway to emacs was spacemacs. Except spacemacs, when I used it, was slow as heck. When VSCode feels snappier than emacs, something's wrong.
People talk about rewrites far too often but I wouldn't mind a significant rearchitecture/rewrite of emacs. Stuff like this^[1] makes me think it's long overdue.
Whenever I want to keep my place but look at another part of the file, I do C-x 2, mess around in the other window, then C-x 0 when I want to go back to my place.
I hate that in other editors if I'm keeping the cursor in one place and scrolling to look at another, that if I want to change something in that other place I have to lose the cursor position I'm trying to hold onto.
It's because scrolling doesn't actually make sense in emacs or vim, if you've put some time into learning how to use them.
In vim, for example, you would be much better off navigating with the keyboard than the mouse. You can leave bookmarks all over the file and jump between them with 2 keystrokes. There are also a multitude of navigation controls ({, }, gg, G, etc.) that save you the time of moving your hand in between your mouse and keyboard.
If you want to use your mouse, maybe vim/emacs aren't for you -- sublime or vs code will probably serve you better.
I'm genuinely curious: do you not read through code from top to bottom? That's a very common thing that I do, and using the mouse is a comfortable way of accomplishing it.
If you want to go to the next page (screen) of code, isn’t the keyboard just as comfortable? If you want to go down until you find the thing you’re looking for, wouldn’t a search using the keyboard be potentially more comfortable?
I like how I can control the rate at which I scroll with the mouse more easily than with the keyboard. It's a more intuitive movement that I can adjust to match the speed of my reading.
The point is that reading code from top to bottom is not a reason to need or prefer a mouse. Other people prefer using a keyboard and find moving through pages more intuitive than scrolling.
Different people have different preferences, so clearly it is a reason to prefer a mouse.
I don’t use my mouse with Emacs, but I’m not going to tell someone else they’re wrong for wanting to. I’m beginning to see why people feel the Emacs community is less-than-welcoming.
Of course different people have different preferences. I don’t tell anybody that the way they prefer is wrong! I don’t say there is a reason to prefer the keyboard either. But being what it is doesn’t make Emacs broken. You can definitely read code from top to bottom on it.
> It's because scrolling doesn't actually make sense in emacs or vim, if you've put some time into learning how to use them. In vim, for example, you would be much better off navigating with the keyboard than the mouse.
Is this coming from a workstation-oriented mindset? On laptops with touchpads, scrolling with your "mouse" makes a ton of sense even for seasoned touch typists. I don't always use it for scrolling, but I frequently do. However when I'm sitting in front of a workstation with a traditional keyboard and mouse arrangement, I do avoid the mouse.
Eh, Vim and Kakoune user here for the last ~15 years, I love scrolling with my mouse and keyboard. Keyboard for when I'm navigating. Mouse wheel for when I'm just skimming code, idly looking for something.
The fact is scrolling with a mouse moves much faster while still seeing what I'm doing. You can't scroll line by line quickly with a keyboard. There's no variable speed (that I've ever seen, at least). However with a mouse I can alternate between fast and slow. Really nice for scanning large piles of text where you don't know exactly what you're looking for.
Sure I could jump a screen length at a time if I wanted, but then my eyes have to jump bottom to top to bottom to top every time I jump. I find it difficult to track where I am. Page jumping tends to ruin context, even with a handful of lines as context.
With that said though, I have seen some really nice Terminal renderers that will smear the cursor when you jump. It looks like it would help a lot to keep the visual context.
1. Install VS Code
2. Click extensions and install language specific plugin
3. Work
New employee 2 workflow at company X:
1. Install emacs
2. Try to install some source code indexing tool
3. Tool is missing 13 dependencies, so spend 4 hours finding, installing and configuring the dependencies.
4. Spend another couple hours reading non-existent to terrible documentation (documentation so bad in places that even Stallman finds it useless) across 3 packages and editing .emacs to configure an otherwise unusable result. It looks like source code indexing is working! It isn’t...
5. Go home
6. The next morning, find the default color theme garish and spend another 4 hours installing themes and theme managers, reading more terrible documentation, and finding that obscure TTY settings must be tweaked for emacs to decide that it can use a theme (even though it has no problem displaying the colors in the first place)
7. Spend the rest of your tenure constantly hitting code indexing and highlighting bugs that need constant tweaking and workarounds. You often find yourself using find/grep because it’s often faster than debugging the latest indexing bug.
8. Discover that the vaunted ‘lightening fast editing’ with ‘multiple cursors!’ and this mode or that mode don’t matter because the slowest part of the creative process is the creativity and not your typing.
Emacs is a terrible experience with defaults suitable for a 70s TTY. That you can change it misses the point. The fact that everyone has to have a non-empty, non trivial .emacs file means it is maximally unsuitable - for everyone.
In a few years, VS Code has achieved better out of the box functionality for working professionals than emacs has in 40 years.