Making Emacs Popular Again
lwn.net
lwn.net
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.
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.
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.
home-manager switch
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.If somebody could make a VS code extension that seamlessly pulls down other extensions by altering the nix config, it'd be perfect.
If you could just copy one file and get all that, that's pretty cool.
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.
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.
You enable features in config by uncommenting, and it auto installs.
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]
[1] https://code.visualstudio.com/docs/editor/settings-sync
[2] https://marketplace.visualstudio.com/items?itemName=Shan.cod...
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.
Never had to install anything across thousands of servers.
It's a good emulation, but it's not a great emulation.
(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...)
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.
[1] https://chrisdone.com/posts/emacs-users-are-like-igor/
[2] https://www.fugue.co/blog/2015-11-11-guide-to-emacs.html
I am equally as unproductive regardless of my setup.
My productivity has way more to do with all the other factors at play than it does the fine-tuning of my setup.
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?
User interface design (UID) and user experience (UX) are interesting topics.
Have you ever conducted an oil change at your car or some other minor mechanical task? Wasn't it fun for a moment (at least that one time)?
Machines are interesting.
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.
Ah, yep, you might have a point there!
Dunno how I missed that. Seems obvious now.
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?
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
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).
But to be honest I only use Emacs because 28 years of using it has made it feel like home, I don't usually recommend it to new people.
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?
As far as I know on the Vim side you can get feature parity.
-Remote file editing with Tramp: This is much better even than using vi/pick over a terminal.
-Very flexible kill ring copy paste mechanism: can do complicated text manipulations with easy access to copy paste history.
-Easy macro recording and playback.
-Very flexible windowing: can show even multiple windows with the same file, even synchronized scrolling of required.
-Rectangular/column edits.
-Built in file manager.
-Built in shell, can run shell programs and capture their output.
I'd also add:
- incredibly ergonomic file-system navigation (helm+projectile)
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.
You're probably aware, but VSCode has great support for editing over SSH.
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.
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.
I think confluence.el is no longer maintained, sadly. Maybe an interesting new side project :)
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.
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.
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.
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.
:) 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).
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.
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.
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”.
> 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!
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.
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.
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.
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.
- 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.
So please, tell me, what do they not do again?
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 wonder whether it’s possible to set up lsp-mode for my Java project.
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.
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.
https://www.youtube.com/watch?v=RfasCCuCEgM
IMO VSCode's ctrl-shift-f doesn't come close. And its symbol search is just for symbols, not all text.
> 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).
Like I said earlier, that's just for symbols, so no, it's not the same.
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 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.
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.
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.
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.
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.
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.
[1] http://www.winestockwebdesign.com/Essays/Lisp_Curse.html
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".
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.
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.
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.
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.
Back when I was still into Emacs (2004) this wasn't possible.
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.
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.
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.
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.
That's a TUI, not a GUI. GUI means Graphic, not text, even if it's spatial.
> And with third-party plugins, it has all the sophisticated GUI controls you could dream of
No, it has not. I've tried enough of them to know how poor they work.
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
https://github.com/manateelazycat/emacs-application-framewor...
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.
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.
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.
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?
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.)
You're doing yourself a discervice for not just using Spacemacs develop branch. It's actually more stable than the master branch.
As changes to Spacemacs are made, there might need more or less things in the .spacemacs file. So you always need to do a manual merge of the changes.
Please produce that post. Also, why not developing in BBEdit?
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.
Yeah, either that or they are procrastinating on some quirk deep in their engine they should rewrite already.
I’ve used GNU Emacs for twenty years and totally agree. I avoid the customization menus wherever I can.
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.
Which one?
I only found out about it by asking here on HN
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.
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.
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.
- 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.
This is now my emacs configuration:
https://github.com/danieldk/nix-home/blob/master/cfg/emacs.n...
Rust configuration:
https://github.com/danieldk/nix-home/blob/master/cfg/rust.ni...
(Sorry for posting Nix files, but it's pretty close to what it would look like in a regular init.el.)
1. Install Emacs
2. Sync existing config via git
3. Work
New employee 4 workflow at company X:
1. Install Emacs
2. Spend 2 hours learning default Emacs
3. Work
New employee 5 workflow at company X:
1. Install Emacs
2. Spend 1 - 2 hours learning default Emacs
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.
New employee 6 workflow at company X:
1. Install Spacemacs, don't bother fiddling with the config
2. Spend a few hours working through the tutorial or reviewing the excellent docs [1]
3. Work. Become a better developer [2].
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.
int main(
I'll stick to tried and tested vim.Anyway, this way I saw an issue early on that stopped me from going any further, and saved me much time and heart ache.
Sticking to my plain old .vimrc for now.
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.
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?
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.
Out of curiosity could you provide some examples of some of these?
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.
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.
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.
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... :/
It didn't work. So I gave up.
PS: I am on windows.
1. Install Prelude 2. Work
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.
I don't see an advantage of using it outside of the terminal in the first place to be honest.
That's the good part about vim. Or if it's complicated for you, use nano. Done. Editing of files while you're in the terminal.
And yes vimscript is annoying, but it seems to be simple enough for most of the basic stuff.
Otherwise there are plenty of GUI editors that work fine.
Accepting the terminal version is accepting an inferior environment with no upside.
TRAMP sounds nice but a lot of times I can't have emacs on the other side. And vim with screen/tmux works fine
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.
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.
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.
1. Install Emacs
2. Finds magit
3. Questions reality before swimming in new found joy
Alas the process of integrating any outside code into Emacs is tangled behind three layers of bulletproof glass.
I'm not against the glass, as it's a good defence against hostile thieves, but it sure kills any desire to merge outside code
And why would I be doing that? Configuring and learning your work tools is part of work, it should be done in work time.
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.
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.
1. nano code.txt 2. ??? 3. Profit!
How many years will it take until stock vscode stops lagging randomly every 10 key strokes?
Remember that you can open the dev tools and profile VS Code itself. I've debugged a few weird issues that way.
Exactly, the bottleneck is thinking, so why do I need the slick point-and-click tools in an IDE?
New employee workflow at company Z
1. Install the Jetbtains toolbox
2. Have IDEs for several languages with consistent features and semantics.
3. Minimal to no configuration needed
4. Profit.
Then again, some seconds of CPU might be a good tradeoff against productivity in some scenarios.
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.
After all those years, there are 2 main takeaways for me.
1. I love modal editing, not necessarily Vim
2. My time is better spent doing actual work or enjoying my hobbies than fiddling around with configurations.
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 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.
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.
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.
Edit: downvoting doesn't change reality
- 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?
Well, more versatile, anyway.
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.
| 22
| 22
| 1111121111
| 1 22
|1 22
|122
-------------Now emacs is ubiquitous to me and the last time I visited my init file was last year actually!
1. New employee is added to cloud access management. 2. New employe logs into AWS Code, Apache CHE or Githubs new web editor. 3. ??? 4. Beer.
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?
Why even learn to type with more than 1 digit?
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.
Did exactly what you're describing here. 4 hours of fucking about to achieve nothing.
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):
1. Install Emacs
2. Clone config
3. Work
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.
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.
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.
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.
Why not?
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.
>the same thing that probably made you say this :
>>I can't imagine greybeards programming in rust.
Guilty. I clearly had a blind spot there.
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.
Care to elaborate what you mean by that?
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.
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?
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.
I don't know about that, I hate agendas. A hammer does not have one, 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.
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.
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.
I don't trust the FSF further than I can throw them and I don't trust them with my copyrights.
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.
Just something to note.
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.
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?
1. https://techcrunch.com/2020/05/06/github-gets-a-built-in-ide...
PS. Rough sledding for Gitpod with this announcement.
I'm not very familiar with how easy it is to capture browser keybinds in a web page.
[1] https://chrome.google.com/webstore/detail/secure-shell/iodih...
Neovim literally has like over 30 projects for new UIs:
I see some other good ideas here too that could maybe give emacs a fresh breath in the new world of IDEs in the browser/cloud.
Emacs Lisp is the reason for Emacs being such a cohesive ecosystem. JavaScript would be a major mistake.
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.
https://groups.google.com/d/msg/gnu.emacs.help/QU6xN34ollo/K....
"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."
https://www.youtube.com/watch?v=FtieBc3KptU
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.
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...
https://orgmode.org/manual/Comment-Lines.html
> You're writing a novel, and it has extensive research notes, background material, and miscellany you're keeping track of.
https://orgmode.org/manual/Tags.html
https://orgmode.org/manual/Internal-Links.html
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.
[1] https://insights.stackoverflow.com/survey/2019#technology-_-...
"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 too have used Emacs a lot. I’m getting off the boat.
If you're git-savvy it's even easier to merge the comments in by using Magit and reviewing the changes individually.
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.
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.
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.
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.
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.
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.
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!
[1] https://github.com/plexus/chemacs [2] https://sachachua.com/blog/2013/05/how-to-learn-emacs-a-hand... [3] https://www.youtube.com/playlist?list=PLPNohcoOBa5GGreLyc3nn... [4] https://www.youtube.com/watch?v=rCMh7srOqvw&list=PLhXZp00uXB... [5] https://orgmode.org/guide/ [6] https://orgmode.org/worg/ [7] https://orgmode.org/org.html [8] https://blog.aaronbieber.com/2017/03/19/organizing-notes-wit...
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.
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.
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.
Google Trends certainly reports that emacs has experienced a dramatic decline in popularity since 2004.
https://trends.google.com/trends/explore?date=all&q=emacs,in...
https://trends.google.com/trends/explore?date=all&q=emacs,vi...
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'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".
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).
Words once written don't need to be abbreviated. Abbrevation is only useful when writting for speed. When writting for being read don't use them.
I find it harder to scan my eyes over Ctrl+Alt+a than C-M-a (notice that Apple, too, uses single glyphs for modifier keys).
It's written in most emacs documentation as C-c for brevity.
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.
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".
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.
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.
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.
> 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.
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.
Ah shit, I recognise your name too. I've just been spanked by Dan Luu. This has not been a good night.
I have a freaking book to write...
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
[1] https://www.gnu.org/software/emacs/manual/html_node/emacs/He...
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.
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).
Yes. Microsoft Word, for example, is older than GNU Emacs.
Cars from the 70's don't have airbags. So, by comparison to what is available today, they are user hostile.
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.
It also takes what, five minutes to get accustomed to? Even old dogs can learn this new trick.
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.
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.
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.
I don't agree. It requires a bit of learning if you are used to something else.
>I have suffered therefore the others have to suffer
This isn't true. Try, instead "I put some effort into learning it, and you can too."
Deeper understanding leads to higher productivity.
seriously though, it's a rabbit hole. Been there myself, now I just us vscode and it's a breeze!
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.
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 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.
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.
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.
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.
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.
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.
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?
+ 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:
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.
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.
Emacs is simply something else.
And I'm not sure the ceiling is actually lower.
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.
Extensibility was emacs' killer feature when its main competition was vim and vimscript - that's just not the situation anymore.
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.
[1] https://www.dreamsongs.com/WorseIsBetter.html
[2] http://www.informationphilosopher.com/solutions/scientists/b...
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.
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.
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'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.
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.
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.
When does this come in handy?
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.
Check out Orgzly from F-droid repos.
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.
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.
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).
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.
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].
[1] https://staff.fnwi.uva.nl/c.dominik/
[2] https://marketplace.visualstudio.com/search?target=VSCode&ca...
[3] https://marketplace.visualstudio.com/items?itemName=tootone....
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.
![]() for images
[]() for links
* $$2^n$$ for latex, renders fine on all browsers
* ![]() for images
* []() for links, including cross-links
** 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.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.
Iirc GTK was born out Gnome, and Gnome was born as a FSF-project.
[0]: https://gitlab.gnome.org/GNOME/gtk/-/tree/master#licensing-t...
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.
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.
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.
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.
https://www.gnu.org/software/emacs/manual/html_node/emacs/Em...
https://www.reddit.com/r/emacs/comments/f3ed3r/how_is_doom_e...
edit: am emacs (and nvi) user. just chiming in on .1ms vs 1ms startup time arguments as a basis for anything important
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.
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.
Or the server/client setup could just be the default and the server starts at system boot.
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.
It is a huge convenience.
> 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.
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.
Eight Megs And Constantly Swapping. ;-)
* Eventually Mallocs All Computer Storage
* Emacs Makes A Computer Slow
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.
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.
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.
(There are gui versions of VIM as well but it feels weird)
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.
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.
this is not very coherent.
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!)
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.
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`.
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.
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.
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.
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.
> 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.
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.
Where can I learn more about this? If I teach my kids emacs will they not be the only ones among their peers who use it?
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.
As a user of these key binding in both Emacs and macOS, it’d be worse than cutting off an arm if this went away
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.
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...
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.
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.
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.
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.
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.
;;; -*- lexical-binding: t -*-
isn't present until Emacs 24. After all these years.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.
http://www.smashcompany.com/philosophy/gendered-on-ramps-are...
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.
And I'm not saying lie. Just stop scaring people away. Emacs is by far one of the most empowering programs out there. Market that.
She realize that it is marketing. You want to build a market of users? You have to have some marketing.
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.
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.
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.
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.
I mean good for them having that option, but what’s in that thing for me?
And I’ll also have to learn all the things it does differently. All in all, sounds like a net negative to me.
Again: what’s in it for me supporting this alternate Emacs universe?
Also, The vim emulation has gotten much better due to evil-collection[1]. You might want to give Spacemacs or doom-emacs[2] another try.
[1]https://github.com/emacs-evil/evil-collection [2]https://github.com/hlissner/doom-emacs
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 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.
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.
i tried spacemacs and it was like trying to fit a square peg on a round hole -- it just doesn't work properly.
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.
Why not start with that?
I have always felt that the initial config of emacs has been painful.
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 :)
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!
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.
https://www.gnu.org/software/emacs/tour/
http://www.jesshamrick.com/2012/09/10/absolute-beginners-gui...
https://www2.lib.uchicago.edu/keith/tcl-course/emacs-tutoria...
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.
Perhaps I am doing something non-optimal in my process. Curious how others learn/get productive in their respective IDEs.
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).
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.
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.
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.
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?
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:
https://en.wikipedia.org/wiki/Vim_(text_editor)#Modes
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.
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.
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.
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 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.
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.
But ultimately sometimes executing some annoying combo of C-v/C-s/M-f/M-b is less ergonomic than using the wonderful invention that is scrolling. Especially if you want to aimlessly scan through code instead of purposefully navigate.
I suspect part of the reason for emacs being a hard sell is the reputation of emacs being an all or nothing platform. You're supposed to not use the mouse, do everything in emacs, write elisp to make everything super automated and awesome. And sure, you can do that! But it's okay to be a bad emacs user. It's okay to use the mouse. It's okay to not write elisp. It's okay to use other apps. VSCode doesn't come with a religion. I don't think emacs should either.
[1]: Inspired by this XKCD: https://xkcd.com/1806/
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.
I don't quite see an easy way of fixing that without making it a user-controlled option, though. For example, in text-mode editors it is still common to not have the text cursor scroll past the viewport.
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...
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.
[1]: https://www.facebook.com/notes/daniel-colascione/buttery-smo...
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.
At 60 years old, I don't have the enthusiasm or the time to learn a new editor. And I'm having too much fun programming in Lisp.
Not everyone is willing to invest this time and therefore IMO it won't be a very popular environment for most users. I don't blame them, everyone's needs and priorities in life are different.
Or you could start with a popular .emacs.d (I use Doom Emacs), tweak a few things, and tell yourself "I don't need to modify yet another key binding" a hundred times.
At the same time, if we compare emacs to vscode, vscode simply requires less configuration to get going. Given how much tooling exists in the javascript ecosystem, I think having a few plugins "just work" goes a long way.
Asking users to configure emacs from scratch to have a reasonable editing experience in their programming language of their choice is a lot. I think configurations like doom or spacemacs do a lot for this problem, but it really comes down to marketing.
True, but then why do more people uses Vim than Emacs? Is it becase it's installed on servers and stuff?
I wonder what percent of desktop programmers use vim or emacs who don't need to do devops.
I could probably switch to Emacs using Evil, but I don't see a compelling reason to.
Having all of Elisp and all of Emacs available, including packages, is powerful. But it comes with a complexity cost if your config/dependency graph grows to large. Like any in-house software project really - of which a small business cannot afford to invest in.
There is one area, though, I’d use it again for: Lisp. Clojure with CIDER, CL with SLIME. As far as IDEs go, the level of language support for Lisp is phenomenal and without equal (but not surprising given Elisp).
But the benefits out weigh the sluggishness I feel at the keyboard. It was easier to get the rest of the team on VS Code and then I could start looking at extensions that bring things as close to what’s in Emacs as possible. That’s improved team productivity as whole (and my own when they do the same).
But there are somethings I long for. Magit was hands down the best thing for projects versioned in Git. I’ve not seen anything like it in VS Code. The other thing is macros and Elisp but as above that’s a double edged sword. I’ve actually thought about bringing some of those ideas over to VS Code at least for my own team.
Tried to use Emacs for data analysis in Python, because I write lots of docs in org and client project status/tasks report page is also generated from my org file. But the problem is proper support of repl in python. We got number of packages but none really solves my problem to have a proper analytics workflow.
P.S. I also write Clojure and Emacs it surely the go-to environment! Actually, I got into Emacs due to Clojure back in 2014.
- Spacemacs for all the bells and whistles
- Emacs Prelude for simple base
- Doom Emacs is another beast, though.
P.S. What might make it much more accessible I think is builtin project structure view such as Treemacs. Also, let's not forget that Most of the world do use Windows and Emacs has a poor support for this platform.
- The problem with VSCode, Atom and alikes are just absolutely inconsistent keybindings, half-baked packages and honestly I don't really want to write code in a browser. It's like a flashy smartphone - does everything but few things well. Hence my favourite tools for coding are produced by JetBrains - PyCharm and IntelliJ. These tools do also have their keyboard inconsistency issues, but it is what it is.
Happy Hacking!
――――――
¹ — https://rust-analyzer.github.io/blog/2020/04/20/first-releas...
https://www.youtube.com/watch?v=rzQEIRRJ2T0
My skills with git have gotten better after using magit, too, because it brings the power of git to the surface. It's a really fantastic git porcelain and the fact that it is deeply integrated into Emacs just makes it absolutely second to none.
Magit is easily one of my favorite pieces of software and I will leap at the chance to sing its praises.
I would say vs code does all that and while using an easy to overcome entry bar. And I am much more productive even than in native ide's for embedded development. Like iar eclipse or Segger.
The only thing I would want to try is using the org mode in emacs for nice todo handling. But else I see no appeal in emacs. It is just ugly, more concerned about it's license instead of just saying, this is free software just contribute and we will improve by using everything we can.
So if I almost gave up, after having lived in Emacs for the last 12 years, can we really expect much popularity with those that are new to computing?
In 2020, Emacs is mostly just for people that love to build or customize their tools, or for folks that want a better Vim (i.e. Doom Emacs). And to customize Emacs you have to have a basic understanding of modes, hooks, keymaps, etc -- as well as at least rudimentary knowledge of elisp. Getting good at that stuff is a multi-year-long process. Emacs will never be "popular" for the same reason that if you want to have a fun night with friends, (statistically) chances are you'll choose to play Rock Band as opposed to learning real instruments. But as is the case with many niche and challenging things, it's hella fun and rewarding once you've spent a few years doing it.
I suspect that org-mode is responsible for more people using emacs than any other package by a large margin. Not understanding org mode suggests to me that rms is no longer on the same page as most of the users.
I know there's a lot of other good stuff in emacs, but org-mode seems to be particularly key.
Perhaps vim is so widely used now that no one bothers to vote up articles about it. I find the shift particularly strange because it comes with a shift of the site away from lots of articles about languages like lisp for which emacs is basically the only sane choice of editor.
Perhaps the real reason is just that I’ve noticed emacs more because I’ve used it more.
A more interesting answer is bash - I will often check the man page before I Google.
In general, the way for a problem to be fixed is for someone who knows how to fix it right simply to do so. Any solution that involves discussion should be avoided except as a last resort, because it is inefficient.
Date: Mon, 18 Sep 89 21:55:13 EDT
From: drw@BOURBAKI.MIT.EDU
To: don@brillig.umd.edu
Subject: An interesting bit of philosophy from RMS
From: Don Hopkins <don@brillig.umd.edu>
From: rms@AI.MIT.EDU
In general, the way for a problem to be fixed is for someone
who knows how to fix it right simply to do so. Any solution
that involves discussion should be avoided except as a last
resort, because it is inefficient.
Interesting all right! When/where and in what context did he say
this?
It was on one of the Emacs newsgroups, where lots of reasonably
uninformed discussion had broken out on how to resolve the fact that
VM and Gnus (I think) interfered with each other, because they both
used the overlay-arrow mechanism.
Dale
Searching Google Groups for the first sentence found the unexpurgated version:https://groups.google.com/forum/#!search/%22In$20general$2C$...
Date: 9/11/89
From: rms@ai.mit.edu
Newsgroup: gnu.emacs
Subject: No more on overlay-arrow-position
I don't think most Emacs users want to participate in a discussion
about how to solve a fairly obscure problem in how Emacs is implemented.
This kind of discussion doesn't help me solve the problem. I know you
mean well, but you aren't experts. Most of this discussion consists
of proposals that are completely wrong, or won't work, followed by
refutations and counterproposals. When I decide to fix this for
version 19, I won't read the discussion; I'll just fix it--it will
take less time.
In general, the way for a problem to be fixed is for someone who knows
how to fix it right simply to do so. Any solution that involves
discussion should be avoided except as a last resort, because it is
inefficient.
Remember, the purpose of info-gnu-emacs (and its repeater newsgroup,
gnu.emacs) is to carry the information that *every Emacs user will
want to know*. There's nothing wrong with non-experts discussing how
Emacs bugs might be fixed, but please don't do it here.
RMS also doesn't like people posting baby announcements to mailing lists that are clearly intended for making dinner arrangements (and the baby in question is 27 years old now):http://www.art.net/studios/hackers/hopkins/Don/text/rms-vs-d...
I love Lile's response, who has the grace and composure of dang:
>Please send your "fucks" via personal mail and refrain from using Kabuki-west for such messages. -Lile Elam
While your first statement is true, taking the second one for granted is dangerous and may lead to the exact opposite.
Every long-term FOSS project needs to continuously ensure it maintains a healthy level of contributors, or it will die.
- The keybindings are not the standard CUA ones. Even with Cua Mode, every page on the internet still suggests using the regular old Emacs keybindings. There's weird conflicts between some packages, especially if you use non-default keybinds like Evil. The defaults are not even ergonomic (Emacs pinkie is a thing...) or mnemonic, so there's really nothing but historical interest that makes them the way they are.
- There's no namespacing between packages. They can run right over each other and cause weird bugs. This isn't theoretical; it's what happens when you have a bunch of packages installed. Sorting out performance issues caused by the interactions between packages is very challenging.
- Lots of other defaults are super user-hostile. To get anything approaching the productivity of an editor like Sublime or VS Code, you have to spend hours installing packages, learning their unique keybindings, and sorting out conflicts.
- The base is minimal in a way (it's missing a ton of what is needed to be considered useful today) and also very bloated (it has things like mail readers and web browsers and IRC clients included). The set of default utilities needs to better match what people actually use a text editor for.
At the same time, it does do plenty of things right:
- From anywhere in the editor, you can run code---you don't need to make a new package to be able to execute a snippet of Elisp.
- Unicode works OOTB, which is impressive for a project of that age.
- Some of the "killer apps" like Magit and Org-mode are really good and have spawned their own ecosystems.
- Emacs is oftentimes the first editor to get support for super-obscure programming languages through a package.
A lot of what makes Emacs so cool and so difficult comes from the fact that it doesn't have an "extension API"---packages just run the same kind of Elisp that the editor itself is (mostly) written in.
Edit: I should also add that Elisp is an absolutely terrible programming language when compared to more modern alternatives.
Isn't it the same with VIM or other free editors?
> - There's no namespacing between packages. They can run right over each other and cause weird bugs. This isn't theoretical; it's what happens when you have a bunch of packages installed. Sorting out performance issues caused by the interactions between packages is very challenging.
without sacrificing your pro?:
> - From anywhere in the editor, you can run code---you don't need to make a new package to be able to execute a snippet of Elisp.
The fact that you can go to any package source file, modify a function and reload it on the currently running emacs instance (with C-M-x/eval-defun) kind of depends on definitions being standalone and at the top-level.
You can have namespacing in the form of prefixing identifiers with the package name. If there's name-clashing between packages, it's because they didn't follow that convention.
What more would you want out of namespacing that you can get without sacrificing or limiting that pro you mentioned?
> Edit: I should also add that Elisp is an absolutely terrible programming language when compared to more modern alternatives.
There are many reasons to hate pretty much anything. I'm not sure how you expect one to respond, if you don't give some idea of what it is that you find terrible about it. It's always pros and cons with most things.
"modern" also doesn't mean anything. Are you talking about languages that were invented recently or that are still maintained, evolving, and/or used despite being invented in "non-modern" times? Where does "modern" even start?
And the upside that everything is accessible in the scratch buffer is really worth it.
And for me, Elisp has been a kind of constant during my career. I wouldn't bet that in ten years, I'm still doing Typescript or Javascript. But if I'm still into programming computers via keyboards I will definitively use Emacs for that.
This is a commonly seen complaint, and I do not completely disagree with you. But really, if there were better options to create an editor on top of some sort of lisp-machine equivalent, why are there such few equivalent editors out there?
I would be happy to move to a new mature ecosystem that allows the sort of flexibility offered by emacs, on which tools like magit and org-mode may become popular, but I am yet to find anything in the same ballpark.
I think it's arguably the second-best language out there, losing out only to Common Lisp. Maybe third, after TCL. I certainly wouldn't want to use JavaScript, Go or Rust to extend my editor …
The worst aspect of this is keybindings. As "free-form" as Emacs is, I think it would benefit greatly from having a centralized "database" of all (custom?) keybindings. I am sick of defining my own super-cool keybinding and then either having it get overridden by a package or unknowingly overriding a package's keybindings. I kind of wish a warning would be thrown or something if you try to bind a set of keys that's already bound.
I don't know what system would be good/better, but I know I hate it as it stands today.
I agree that aesthetics have importance, but they should complement what emacs is and how its used, not make it pretend to be something else. Emacs is a powerful tool, that isn't going to change-- so it should look like one.
There are already many editors with a "sleek look"! So users that want that are already using one. They won't switch to emacs if emacs adopts a sleek look, especially because emacs' internals won't match the drapery.
Emacs epitomizes the Hole Hawg in Stephenson's excellent "In The Beginning Was The Command Line" (https://steve-parker.org/articles/others/stephenson/holehawg...). It should lean into that. The users it loses from being overly industrial are ones mostly wouldn't stay, but the ones it gathers will stay because there are few alternatives. There is always a role in the world for serious tools.
As someone who has started out with vim, spent a couple years using emacs (with evil-mode) and ended up with vim (more accurately neovim) again, here's my take on why this is.
First of all, I ssh into a lot of systems that have vi(m) installed, but not emacs. So, if I am using vi bindings for my main editor, I don't have to switch to using completely different editor bindings on remote systems. For other's that are in a similar situation, that's also an incentive to learn vi over emacs.
Secondly, while vi(m)'s modal editing is difficult to master , once mastered, it is, IMO, amazing. Emacs otoh just has unfamiliar, and sometimes unergonomic key bindings. While many editors do have "vim modes", I have ultimately been unhapy with most of the one's I've tried (evil mode for emacs is ironically one of the best).
Finally, there is the configuration. Both emacs and vim are extremely customizable. While VimL is certainly not the greatest language, it is at least fairly familiar to programmers with experience with ALGOL-family languages. It's also somewhat straightforward to write plugins for vim in other languages, such as python and lua. Emacs otoh, uses Emacs Lisp. And while I admire lisp, it is certainly very unfamiliar to many potential emacs users, and can often be much more verbose, especially for setting custom key bindings.
With all that said, there are things I miss about emacs. Probably the biggest is that several modes let me customize how auto-indentation worked. In vim, the ability to customize that easily is not very common, and when it does exist is not well documented.
He sounds like some random person spewing random subjective opinions about things, rather than the original author of GNU Emacs making an honest effort to provide leadership and guidance that means something (anything) to anyone other than himself. He sounds helpless and oblivious to everything and everyone except his own personal proclivities, which is the opposite of leadership and the opposite of an experienced person providing valuable guidance to the community. Like he's not even making a token effort to do those things, and to say he's metaphorically lifting a finger here to provide leadership and guidance would be very generous.
This is akin to Linus rejecting a driver because he doesn't own the hardware, or because he doesn't like the colors of logo of the company that makes it. It really doesn't get more incurious and intellectually/emotionally immature than that.
This is in 2020, after a couple decades of Emacs being one of the only actual software projects he involves himself in anymore. To be clear, I've had a really low opinion of RMS for going on 20 years now (after a few years in college where I thought he was cool because I didn't know any better and people seemed to revere him because they thought everyone else revered him). But reading these mailing list exchanges are still kind of shocking to me. It's really hard to believe that anyone on the GNU mailing lists pay any attention to him at all, or values his opinion on anything. For those that do, surely that's nothing more than a cult of personality, it just seems as plain as day to me. This is exactly the sort of thing that drives people away from GNU and the FSF, and it sucks because they could be so much more impactful and meaningful and helpful and positive and constructive otherwise.
Sometimes I think if more people had simply stopped making excuses for RMS like 20 years ago, we might currently be living in some sort of GNU utopia dreamworld where everyone everywhere uses Emacs for everything, and GCC is the preeminent compiler suite, etc. etc. etc. It's quite a high cost for people to pay, when the only thing they get in return for keeping this guy around is helping a damaged narcissist continue to feel good about himself and continue alienating everyone else, just like he's been doing for decades. He absolutely got GNU and the FSF off the ground and helped create a large community that has produced tons of great software, but in the past 25 years it seems like all of his efforts have been counterproductive to his own goals.
He seems out of touch even with modern emacs packages. He doesn't use any of them, doesn't even know what they do, I guess he uses the same config since the 90s, doesn't try new packages, he's more interested in preaching the GNU message.
And he believes the right thing for the core Emacs-developers to do is to spend their time trying get everyone in MELPA (a modern package repo, with a modern GUI, based on modern tools and workflows) to instead move their packages to ELPA, with all the change in tools, modernism’s and workflows that entails.
He seriously believes this is important because MELPA isn’t GNU, and that’s all he cares about. It’s not enough to be open-source and free. You must be GNU, or it doesn’t matter.
He may add things of value still, but I refuse to believe it’s not overshadowed by all the backwardisms he constantly tries to impose on the core developers actually doing the dirty work.
It's not like he's been doing anything else for the last 30 years.
Following the discussion on Emacs-devel it does seem quite the opposite: you often see people with progressive ideas moderating themselves to not get too out of line with RMS. People (unconsciously?) try beating around the bush, to avoid touching GNU dogma, rather than going straight to the point, communicating efficiently.
While I really appreciate what FSF and GNU has done for computing, I believe the limitations Emacs-developers are putting on themselves by religiously denying to integrate with anything non-GPL (another Stallmanism) is going to hurt Emacs long-term, rather than benefitting GPLed software.
I guess time will tell.
If you're just occassionally dropping into headless filesystems to do some text editing, you're not going to invest in learning a new paradigm and you will likely use whatever default editor is presented to you. That is typically vim. For those who mindfully choose to set out and learn a new paradigm because they've decided to invest in a long-term time-saving skill, I doubt the vim/emacs divide is quite as stark as the numbers mentioned in the article.
After I got MacBook I’ve switched to TextMate utilizing powerful macOS keyboard shortcuts for text navigation. MacBook was pretty fast to handle ruby-related tasks.
Later I found myself in IntelliJ idea working on my Scala projects with emacs keybindings. I intuitively used emacs keybindings everywhere - from terminal to text fields in browser (without changing defaults!). Pretty comfortable until...
I started programming in Rust. It’s compiler and lsp servers use very much cpu, ram, compilation is really slow heating laptop like a frying pan. Here comes VSCode with vscode-remote which allows to write code on desktop gui while compiling, executing IntelliSense commands (lsp server to be exact), etc on a powerful cloud server. As I understand it executes everything remotely except GUI rendering and interaction. On network interruptions it restores connection seamlessly, I barely noticed. It was a salvation. VSCode has a bunch of predefined hotkeys which can be customized to fit my emacs-like navigation habits but there are always conflicts with some already existing bindings, also extension tend to add their own defaults. Too messy. Vim/emacs emulators are incomplete and buggy. This led me to weird trackpad&keybindings experience for navigating, building, debugging... Remembering how productive I was in vim/emacs I couldn’t handle this despite perfect state of the art vscode-remote.
So I decided to give vim/emacs a try, discover how ecosystem changed during 10+ years. After some investigation I’ve landed on neovim and tried to work on a rented server as I used to in my first programming years. Experience was far away from VSCode-remote. Due to network lags and ssh overhead I can’t be productive with all the benefits neovim offers. So I ended up buying a powerful home server, connecting to it from my MacBook and work in neovim over ssh. It’s ok but I really miss the “true” remote mode which offers local almost zero-latency editing with remote everything else. Renting powerful servers which has access to the whole dev infrastructure. Paying for them hourly. There are so many discussions about/plugins implementing VSCode and its extensions features in (neo)vim/emacs but in my opinion the really missing piece which don’t turn (neo)vim/emacs to VSCode but instead makes them as powerful as VSCode in cloud-powered code development. Am I the only one who miss this feature?
0. https://www.gnu.org/software/tramp/ 1. https://www.emacswiki.org/emacs/TrampMode
However, if you truly want your code editor to be local, vscode has truly become king for working with remote environments, nothing else comes close to it, it's really good. They have achieved this by installing a component on on the server that syncs with your local editor, which they won't open source of course.
Emacs is built on a philosophy of human nature that deemphasizes the subjective personal experience in favor of (a limited group of people’s theory of) the objective ideal experience.
In a short amount of time, VSCode and it’s ecosystem has almost equally matched what Emacs and its ecosystem took 30+ years to create.
I'm not $o $ure that'$ actually a$ impre$$ive a$ it $ound$ ;)
The vast majority of Emacs's usefulness is its ecosystem. Several Emacs clones have been made in a very small amount of time, but none have caught on because they lack the ecosystem and community. So it's only really fair to compare VS Code's ecosystem with Emacs's ecosystem. And VS Code's ecosystem was created by unpaid volunteers too.
Unless we do, emacs will slowly die.
No one wants that, neither RMS nor any passionate emacs user including me.
Emacs tries very hard to be helpful. It's software by the people, for the people. It's the very core ideal of free software. But yes, it doesn't resonate with most people because it takes time to learn.
But that's sunk cost. I discourage young programmers from diving into it, for a couple of reasons. First, early in their career there are places where they will get a lot more leverage. Spend some time learning your text editor, sure, but at the five to ten hour mark that rabbit hole starts yielding swiftly diminishing returns. And second, everyone talks about shaping it to your workflow, but, in the end, Emacs is a terrible environment for writing UIs. Not everything is best interacted with as text in a terminal. In fact, most data is not. Compare org-mode with the best of breed todo apps like OmniFocus and Tasks. I use org-mode for my technical diary, and I use OmniFocus for my tasks. OmniFocus is simply better. GUIs with a mouse are a more efficient way to navigate most tasks on a computer that aren't programming.
Stallman mentioned preparing text for publishing. I'm probably unusual in that I have both typeset professionally (back in Quark XPress days) and gone really deep in to LaTeX (in my physics days). I've written and typeset two books. The technical text I did in LaTeX. Actually, I wrote the text in a mix of Scrivener and LyX, and then used Emacs for the final document. For what lies nicely in LaTeX, that's great. The other one I did in Adobe InDesign, and doing it in LaTeX in a text editor instead sounds like masochism. If you're willing to accept what LaTeX gives you, it's fabulous. If not, typesetting with Emacs and LaTeX is a simply inferior experience to using a proper typesetting program.
- Emacs is an editor for people who think that learning some Lisp sounds fun if they don't know some already.
- Emacs should not bother trying to appeal to a more general audience; it's not an editor for most people when new to programming, and it's an editor for a very small minority of non-programmers.
- Emacs should focus on its strengths: it is the most powerful and extensible editor ever created. As long as it looks after that identity, it will always be highly respected.
- The infinite customizability via emacs lisp and the ecosystem of libraries is the only thing that can make Emacs more attractive than other editors.
- Emacs should be sleek, minimal, fast, and visually beautiful, by default.
- The customize interface is ugly and not a priority; it should be expected that Emacs users will configure things in Emacs Lisp.
- The clunky default icons and splash screen should be got rid of: present a blank screen with minimal tooling if a beautiful first impression cannot be created.
- Many of the elisp packages that ship with Emacs should be removed from the core, with users installing them as packages (Org-mode, Gnus, etc), leaving a more easily maintainable core.
> A lot of people have not been contaminated by the entitlement that comes with the "I'm sending a PR, please check it in" generated by the Github culture.
I don't think the person who wrote that has even looked at the pull request review that goes on in high quality emacs packages on GitHub, let alone participated in it. This sort of thing really makes it clear that some of the people on emacs-devel are hopelessly out of alignment with the majority of the people would would willingly contribute to the emacs and emacs lisp package ecosystem.
There are many good reasons not to included packages in core Emacs. A big one is that package authors are working in their own free time and don't want or need to have to prepare an especially bug-free release to coincide with Emacs release cycles. Also they don't want to support users using the old version that is in Emacs.
Meanwhile new generations of people have different tools and aren't held onto these past ones because they didn't start with it (and they weren't coding in the 80s). The world of computing generally has moved on with new ideas, new experiences, and new form factors. So their new tooling has won them over, and outcompeted a dying generation.
This is a good thing! It's called progress. Unless Emacs is willing to have fresh blood decide a new direction for it, it will be relegated to history. If Apple held onto its Apple II vision, we wouldn't have the iPhone today. Either you are willing to fundamentally change with the times, or you aren't. Emacs has shown they aren't, and they've had over three decades to do so. Fortunately others will in their place!
Think of shops that sell novelty items. Newness at an object level looks like novelty items. What is the quality of novelty items? How long do novelty items last?
I surely would want to go back to the pre-corona days.
Emacs has/had the option of changing with the times. They’ve opted out of that. So most newcomers will opt out of emacs, and thus it’ll slowly die out.
ultimately, emacs improved because of them.
In fact instead of being in either the vi or emacs camp, I use both. I also use Eclipse.
Each of them for the task at hand.
> Terminal-based Vim is not like a modern application, yet is more popular than Emacs.
I think what happens here is that when someone decides they want to invest the time to learn an advanced editor, most of that subset of people end up choosing vi. Emacs is not approachable enough to appeal to people who don't fall in that group, and vi has more obvious productivity wins for someone who does enter that group, since its focus is on velocity-of-editing rather than extensibility, the latter of which is not even that unique any more (see VSCode/Atom).
Don't buy into the meme, at the end of the day they are just text editors.
For me it was definitely worthwhile. Vim is almost everywhere so I can easily edit text wherever I go.
This conversation even reflects that- Too comment how many days before I can be productive for X company in JavaScript from scratch? That’s not a question I’m interested in but it’s been accepted as the most interesting question here.
Visual Studio Code, the editor that I use daily, is based on Javascript (Typescript) but I have yet to see a page by Microsoft explaining to me that I can quickly whip up a script and execute it in my editor. From what I understand you need to create an extension and I think that takes a bit of setup.
A spiritual successor to Emacs could be an extensible editor based on a language which you can interpret on the fly, modifying your environment as you go along. That's what would make Emacs more attractive to me, along with modern keybindings like arrow keys...
What I mean is I'm looking for a editor with macro capabilities that can be programmed in, say, Javascript, Python or Lua.
It's my terminal editor of choice, and yes, arrow keys work. But why would you want to use them?
But ... can you make changes in neovim while it's running?
Let me take it a step further. Imagine a text editor in which you can, while it's running, literally go into its source code and make changes and that those changes immediately take effect. If I'm not mistaken you can do that in emacs. That's what I find intriguing about it, not the text editor.
Neovim is less programmable than Emacs insofar as more of it is written in C, it's substantially less documented, and Emacs has a substantial head start.
But yeah, still fundamentally a programmable text editor. If you wanted to set up a file watcher over source code that automatically reloads it when files change, there's nothing stopping you.
It's true that nothing other than Emacs is quite like Emacs. Neovim is evolving in the right direction though.
The only comparably fast and useful ripgrep that works out of the box in Emacs is swiper, but it uses a temporary buffer. Deadgreap is great but you have to harangue it behave in a similar way to the sidebar in vs code and even then it's just not the same.
The other thing is emacs regexps suck and PCRE is the standard of every well used regexp implementation in the world at this point and emacs ought to find a way to transition to it.
(On the team)
1. Do y'all do security analysis on extensions? Static analysis etc? Specifically, I am talking about detecting potential source exfiltration type stuff.
2. Any chance you'll develop the ability to customize the editor via some personal scripts vs a plugin? I'd like to implement a command to do a specific thing (toggle between test and implementation in a rails project) but I don't want to go through the process of creating a plugin... I just want to map a shortcut to a TypeScript function. I know there is a couple of extensions that try to enable this but it would be nice to have an official path to doing these kinds of personal customizations.
2. I’d recommend just finding an extension that does this. It wouldn’t be hard for an extension to implement, and supporting multiple extensibility classes in core when we don’t need to probably won’t happen. What exactly are you looking for in an “official path“?
https://marketplace.visualstudio.com/items?itemName=ego-digi...
For me emacs is from a time where text was king - the productivity to use Emacs for my entire work process - latex docs, coding and debug in multiple languages, reading email, accessing remote systems (gdbserver, scp, ftp, even gopher and the web) from within emacs without using the mouse was astounding.
But as things become more graphical - rich text email was the first, then the web, UML, word/excel etc it became less useful.
Emacs feels like a long lost lover - sweet memories from a distant past, but you can't go back.
But for anything else it is not good enough. Emacs Lisp is better then vimscript but only if you are extending it. For just configuration I prefer vimscript because it is so terse.
But IMO just better then vimscript is setting the bar too low. Imagine if it had something like Neovim's msgpack and you could extend it in any language you like. I am still hopeful something like that will happen.
Or is this already implemented? VS Code does it and it's a good feature.
Emacs is used by non-computer professionals as well. If your profession relies on the manipulation of text, emacs is the tool to use.
>their investment spent optimizing and maintaining their Emacs setup.
It's really not that bad. Say you're a fiction writer: you only need to figure out your preferred workflow once, but then you can use it for decades with only minimal changes.
Of course, once you get the hang of it, you might think it convenient to be able to write short mails directly, or do a bit of your own typesetting all from the comfort of your, by now, favourite editor, but .emacs files usually see very little churn. What's in a .emacs has usually just accumulated slowly over the years as one's usage of the program increases.
Turbo Pascal (wayyy back) was quite impressive (then), Visual Age for Java much more so some fifteen years later. IntelliJ is alright (prefer it over Eclipse, which somehow managed to lose the smart features of its predecessor). Haven't tried VS Code yet, but from the videos I've seen, it seems quite handy.
I stick with Emacs for two reasons: familiarity and SLIME (the next best thing to a LISP Machine ;-}
Also, I wonder if it would be possible to do a study on productivity between IDEs. It seems to me much of the data would be measurable. One idea would be to allow github users to state their IDE.
I love emacs and am willing to put the time into tooling and configuration. But despite several hopeful attempts, I’ve been unable to manage anything comparable to vscode for this environment.
That is, support for all versions of ecmascript, but also jsx, typescript, et al.
I thought it was a bit laggy at first, but when I went back to VSCode, I noticed that all the issues I thought were emacs problems were present in vscode as well.
Perhaps something like Spacemacs but built around CUA-mode with a nice default theme and menus will win people to the platform.
Of course, emulating the shortcuts & functionality of Word and Photoshop shouldn't be considered a problem, we are talking Emacs here after all...
But any arguments regarding word editing in latex markup I won't accept.
Emacs already have a concept of frame, and you can already configure each frame independently (e.g. for term and X), all connecting to a single Emacs process, and can share buffers/yank ring/etc. across multiple frames.
I'd have loved to have been able to give magit a go.
I do still have Orgzly on my phone though.
I even tried recently, but failed again.
So, please share some good resource for learning emacs. That is the biggest issue with trying emacs to see if it suits.
As it cannot be tried, its not considered.
Please suggest.
zsh: command not found: emacs
Of course, I can (and did) install it myself, but it used to be included by default.then you have to pick a emacs...
https://askubuntu.com/questions/297170/how-to-install-emacs-...
For some reason I now have 2 versions installed on my pop-os, (I know to pick the first one when I launch from a gui..)
I love the editor, I really like the macros, and can move around and do my editing quick.
but I've been using it 10+ years and have NO idea if I'm using it correctly.
Certain modes aren't installed depending on and its just kinda obtuse. "Space emacs"? How do install a plug-in again.. where is my .emacs config file? is it init.el? ...
sigh..
Multi threaded Emacs would be very nice as well.
Apart from that: How dare you criticize a god?
The problem is, much of what today's twentysomething webdevs consider modern is mere fad. It is not objectively better (and is sometimes objectively worse) in terms of user affordance than what we had in the 90s. The current trends in UI design obscure distinctions which were bloody obvious in the days of bevelled gray buttons. Browser engines run like pigs, especially when compared with simple bit-mapped windows, and developing in the cloud hits a brick wall when your network connection goes down.
I want you to try something. Try to imagine Emacs not as an ancient editor in need of modernization, but as a programmers' tool from the future. It may be a grim future indeed, one in which programmers learned some harsh lessons -- that not all programming is webdev, and the dominance of webdev in the field today is likely to be short-lived; that CPU and RAM are cheap, but not free; that networks go down; that software the user can't examine and completely control is software that is potentially hostile to the user; that the job of a program's UI is to enable work and not to dazzle the user; and that programmers have a higher duty to expand their users' minds, making them capable of more than when they started, and not to simperingly cater to 1984's notions of what an absolute beginner should experience. (The implications of the fact that Stallman learned many of these in the 70s and 80s is left as an exercise.)
But a program from far enough in the future is just as incomprehensible to today's users (especially today's generation-Z webdevs) as a program from the distant past, the difference being that the future program is likely to be much, much more advanced -- and today's users can learn a lot by understanding it on its own terms as they try to unlock its secret power. So it is with Emacs -- an omni-tool designed to be shaped and sculpted by the user into just the thing for the task at hand as the user works with it. No kidding --hacking something together in Emacs Lisp is so easy, for many data munging tasks it compares favorably to regular Lisp. Such hacks may not be beautiful or elegant or even production-ready, but if they let you get a job done quickly, they're valid. When you combine Lisp's eldritch power with the ubiquitous buffer abstraction and all that enables, you have a juggernaut for information workflow optimization -- and by comparison, Visual Studio Code is explicitly designed not to be extensible in such an ad hoc fashion.
Try this in your editor: Emacs has a command M-. If you are working on some Emacs Lisp and you type M-. on a symbol with a function binding, Emacs will jump to the function definition, opening the file it's compiled in if necessary. If you keep drilling down like this, eventually you will hit bedrock: the primitive functions of Emacs implemented in C. If you compiled your Emacs from source, and you say M-. on one of these, Emacs will remember where its own source lives and take you straight to the C file and line where the primitive is defined. This, my friends, is the quintessence of open source.
Plus, Emacs can talk to text terminals and bitmapped displays, and almost everything works the same either way. When I finally get my VT330 working, I'm going to hook it up to my sweet-ass Ryzen box, fire up Emacs, and take advantage of all its modern -- nay, futuristic -- power from my 1980s terminal. Why? Because I can. More practically, this means Emacs can communicate with its user over very low bandwidth channels -- making it ideal for working with remotely, cloud or otherwise.
And all this in an editor, several instances of which can be supported by a cheapass SBC like the Raspberry Pi. It's a bloody miracle of design, even as its hackishness is made manifest.
Emacs doesn't need to be changed to suit the whim and caprice of today's developers. Emacs is eternal, an emanation of the Tao; if it were to somehow disappear, somehow some way we would re-make it from scratch. It's not without faults, it can be improved, but the ideas behind it are transcendent and unmoving, and should not be compromised in favor of webdev fads. Let it shine forth like a beacon unto the void, and let its luminousness enlighten all those who are drawn to it.
Get rid of the ancient and archaic method of Ctrl-C to start a command chord. Reserve that for basic commands like copy and paste.
Instead, use the slash, Ctrl-/ to start a command chord. This way, you can use all the nifty shortcuts you want, and still not interfere with common commands.
Another feature is to use Ctrl-Spacebar to allow a search of command aliases.
Like, highlight your words, then hit Ctrl-Spacebar, then type “upper”, and it’ll do a dynamic search for all matches, and one of those matches is to make the selection uppercase.
This can be useful for all types of commands and personalized macros.
But then, the other problem for Emacs, is that Visual Studio Code is pretty damn good. And it also works on Linux. Its memory footprint is really high, taking about 85 MBs of RAM, but Emacs takes like 30 MBs, so it’s less than 3x more, for much better features. But, it’s not like I’m using a 20 year old laptop anymore.
This has an obscure problem, of which you were no doubt unaware.
In the terminal, Ctrl-/ sends backspace. Emacs isn't commonly used in the terminal anymore, but it can't become useless in the terminal, and this change would make it useless.
Unfortunately this is a non-starter.
The ASCII page on Wikipedia does a good job of explaining what all these limitations are about. There's CSI-u mode, and I believe terminal emacs understands it if you enable it, but, yeah. There's a lot of legacy to support when your program is older than Unix.
If you disagree you're either just a troll or lying to yourself
Everything else is just window dressing.
(As another example where *nix systems could improve a lot, the Midnight Commander tty app is great, but still not quite as intuitive as the old 'DOS Shell'. Weirdly enough, I find that other TUI apps, such as dselect and aptitude, are quite outstanding but you do need to be on a Debian-based system - they aren't a thing on Fedora or CentOS.)
They may be easier to learn (since they have pretty minimal functionality compared to Emacs) or easier to discover when you are new to them but they are definitely not easier to use. I use Emacs not because I am some kind of masochist but because it is the easiest way to get my stuff done.
Which modern editor has tools like SLIME or CIDER?
(2) There's no better environment available for dealing with text (including notes, papers, slides, email, &c.) than Emacs.
Why do you hate future programmers so much?
Your second point is very subjective and most people are bound to disagree with it. You certainly can't argue that like it's an objective fact, because it's very much not objective.
It makes perfect sense as soon as you realize there is no reason the cursor has to be the cursor. In curses: curs_set(0); then draw your own 'cursor' wherever you like.
Anyway, GUI emacs is way better than terminal emacs. Image support (in terminal emulators this is always an awful hack) and support for different font sizes in the same frame at once is something I'd not give up.
That's far from obvious. I recall terminal interfaces rather fondly. Modern interfaces are often more like a flock of multi-colored rabid weasels trying to get in the way of my work.