Emacs 29.1
emacsredux.com
emacsredux.com
Every time a new IDE arrived, crowds cheered, and it was all the rage and fashion, while my Emacs was called "obsolete", "hard to use", "bizarre", and other things. I spent some time over those 30 years looking at new IDEs, trying them out, configuring them, and each and every time this was time wasted, because the IDE was discontinued, abandoned, or otherwise became useless.
If I could tell something to my younger self, it would be: keep faith in solutions that are open and have been around for a while, you will save a lot of time over the years.
Source: a certain developer/admin/netadmin with >30 years of experience using open source software.
I was pleasantly surprised when I was issued a mac at work that most of the basic editing commands on macos text widgets support emacs key bindings (ctrl+a/e/k/p/n).
gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs"
Sadly, I think support was removed. Part of the problem was that this and other themes were in conflict with preset bindings, e.g C-p for a print dialog.When I was young (and, ahem, stupid), I didn't care — I was all gung-ho, shoot from the hip, and if something breaks, tough. As I matured, I learned that backwards compatibility and long-term maintenance should be valued and cherished. Not just because if you're not careful, you have to fix the things that break, but also because as you start doing more and more things in your life, you have less time for each thing and you'd rather move forward rather than spend time fixing things that break.
I blame sTeve jObs.
As a daily emacs user, it is all those things. It's just also awesome if you put in the time to get over the hump and learn it.
The "out of box" experience for emacs is really, really bad.
That's not much different from a piano :-). Musical instruments are not designed for "common users" or "beginners". The ones that are, are not good for playing good music.
I doubt if Emacs was a commercial product, that many people would bother to use it, same applies to VI derivatives.
If the experiece is above anything else out there, certainly it is worth paying for.
Well, Emacs isn't designed for a common user, but for a power user. From my experience, first time using Emacs was really frustrated.
In contrary, VSCode, Atom, Sublime Text etc. were usable right from the start. But these IDEs didn't stick for me. Easy come, easy go, I guess.
Emacs and Vim, although took a lot of effort to configure them into usable text editors/IDEs, stick with me 'til these days and I'm continuing to use them in the future. The power of configurations are astounding and I can shape them into whatever I want.
That's not different from a piano. Musical instruments are not designed for "common users" or "beginners". The ones that are, are not good for playing good music.
"wasted" sounds a bit too hard to me. If you learn and use some tool productively for some years, even if this stops, the years were not wasted. Ephemeral things can also have value.
Similar executable org-mode files are used to configure the environment (sway) and personal information management (email, calendar & contacts). The latter one got so complicated that I had to add an integration diagram using the draw.io app.
Why settle for an extra layer of indirection that makes interactively working with source code more time consuming?
Your comment reveals your bias - that the code is more important than the commentary. The counterpoint is:
No. You can't make the documentation as rich as you want. I want inline images. Can I put those in an .el file? Links. Tables. Bold, italics, etc. For many, this is more important than the code in the config.
Thanks for adding this. Literate programming with org-mode is indeed one of my favorite from Emacs.
Yep! That's the key, imo. I love using Org mode wherever I feel that documentation is primary. So right now, most of my code that lives in Org files at work is shell snippets I've used for managing and configuring software. The literate approach is all I need there: I'm keeping track of what configuration I've done, not writing a giant, complicated program. Then I get the added benefit: the Org files form a wiki that I can use to refer colleagues to whether they use or care for Emacs or not!
Similarly, tangling shell snippets into scripts lets you write tests for your documentation! The examples become scripts and then the scripts can be run and verified in CI.
I understand what you mean. But it never seemed to be a problem for me. Anyway, the real reason why I ended up with org-mode is that I heavily customize Emacs. The only way to be able to handle that much configuration was to split it up into a dozen or so elisp files. Org-mode's biggest advantage (for me) is that it can manage complexity very well. The org-mode configuration file is neatly divided into topics along with their documentation. The topics are also folded up - so it's very easy to find certain configuration segment.
Amazing that this is offered up as a selling point. If I didn't know I was reading a thread full of emacs users, I'd think this was a parody of a thread full of emacs users.
Haha! Indeed! Let me just clarify what I meant. I have a personal information management (email, calendar & contacts) where all information is stored locally and offline. The advantage is that I will never be locked out of my own data. However, this setup has so many components for syncing the info online and to interact with it. Quite frankly many of those components should be integrated into a single application. For example, mbsync can sync mail to a mail directory. But it needs go-imapnotify to trigger it when I receive a new mail. It's so frustrating that I considered writing those applications myself.
In short, Emacs has nothing to do with the complexity. Instead, Org-mode and emacs has actually allowed me to manage that complicated configuration in one place, with lots of documentation. The draw.io diagram was for the information flow between different software components for the PIM and email setup - not for Emacs itself.
Coming back to the complicated setup for PIM, I see a lot of new developments that promises to make it simpler. Hopefully, I won't need the org-mode power in the future to rein in the complexity.
There are many cases where if I didn't have it's features like this I would have to sacrifice ease of use of my full system or hold tons of edge cases in my head.
Can I see (an example)? Wondering how much goes into that init.el.
The .org file gets processed and the source code blocks extracted into an elisp-only file which is what actually gets executed.
Some people prefer an alternate approach[0] with the "stub" init.el that just loads other modules.
[0] https://github.com/cute-jumper/.emacs.d/blob/master/init.el
https://paste.sr.ht/~gokuldas/30c47d1c2721111171a51ecc44f257...
Off-topic: what is an emacs quality alternative for docker? It’s such a piece of garbage for something so pervasive.
On windows, docker desktop has all of the same issues as it does on mac. Docker's concept of volumes and file permissions on windows are nonsense. Windows updates and Docker Desktop regularly decide to disagree, [1] It's networking support interferes with other applications (like OpenVPN and the Xbox Game Center) [2].
[0] https://github.com/docker/for-mac/issues/1432
To add: Mac OS X docker actually, after a while, without errors, stops responding to running dockers and you cannot remove them without reboot. It’s total garbage, but cannot move from it as everyone uses it.
So, emacs-stable alternative for docker. Maybe that should be a movement; emacs-alternative-for. I have many already; software that is fast, can run for months/years and doesn’t get slow vs stuff you need to actually reboot for to run ok. I mean emacs is bloated (yeah right, compared to whatever others are pushing out?) but disk space, even sdd is almost free; it simply runs for months without memory growth or performance degradation. The only reason I stop it because of reboot for sec updates.
It's the opposite of emacs-stable for docker, but it's what I want out of docker.
Orbstack is what docker for Mac should be.
There are tortuous and awful arguments around about whether this is inherent or not, or whether the tradeoffs are worth it or not, or where the blame lies. And I'm not interested in getting into any of that.
Nonetheless the core idea behind Docker is slow on a Mac, because the Mac doesn't implement anything like the kernel feature on which it was built.
I have no affiliation with OrbStack, but am a happy user. Orbstack is an example of what docker for mac should be. It's fast, lightweight, and it works.
If you can, avoid using x86 Linux containers on Apple Silicon. Build some aarch64 ones for development and test your x86 images in CI and on the machines of devs using x86.
Similarly, if you can avoid deploying your environment via Linux containers on macOS, do it. Use Nix to get reliable dev envs, and then use Nix to build your production containers. You'll have to take your time and learn something new, but it's insane how much faster it is and you can avoid dealing with all kinds of hassles with filesystem mounting and port forwarding and so on.
That's pretty much what docker desktop does anyway, except it bridges the host with th containers in the Vm. I don't think it's worth throwing out all of the interop there because Docker the 2-billion-dollar company can't handle basic networking on windows and Mac.
> Use Nix to get reliable dev envs,
I'd really rather not throw away all of the _good_ docker has - despite my complaints, I still use it every day.
On WSL, incl. WSL2, you get bridged networking 'for free'. I'm not sure what Docker Desktop adds there. I'm not really on Windows anymore. But WSL is part of the picture when it comes to Docker's awful performance and memory leaks on Windows. If you can give up WSL/Hyper-V in favor of a better hypervisor, you can get much better performance.
> I'd really rather not throw away all of the _good_ docker has - despite my complaints, I still use it every day.
I guess we differ there, in that I don't really think Docker (which is really useful) is a great fit for local development— especially on non-Linux. There are other teams at my org who develop using Docker, and for those I've spoken to it's been a real win compared to what they had before! I respect that. But my team currently only uses Docker in CI and in cloud deployments rather than for local development, and I'm pretty happy with that.
I've been enjoying podman.
Nix and direnv via envrc-mode.
Does anyone know if it's coming? Anything in the JPEG XL or JPEG XL libs license that makes it a problem to incorporate in Emacs?
Moreover I take it that, say, for someone who added WEBP support to Emacs, adding JPEG XL would be kinda a no-brainer.
But I fully get your point...
You can try evaluating (imagemagick-types) to see if it's enabled. If it fails with "void-function" that means that your Emacs was not built with ImageMagick enabled. If it returns a list of file types but the list doesn't contain "JXL" then your libMagick might be too old or not compiled with JPEG XL support.
I did check: I'm running the latest Debian stable, Bookworm, which basically just came out and it ships ImageMagick 6.9.11 but apparently JPEG XL support was only added in 7.0.10.
Oh the joy of running Debian! (I'll see if I bump ImageMagick to a more recent version or not).
AFAIK native GTK should be unrelated to macOS since macOS version uses its own cocoa frontend
But, emacs is in most cases fast enough, faster than vscode and has other advantages.
Gui emacs is much, much slower than nvim
(thats on intel monterey though)
I put together a simple tool to generate a starter Emacs config from a few configurable options, which I can now update to point at a proper release channel instead of a prerelease:
> Symbol's function definition is void: package-vc-install
[1]: https://emacs-config-generator.fly.dev/config?font_family=Me...
Yes!
Official release announcement: <https://lists.gnu.org/archive/html/info-gnu/2023-07/msg00008...>
I can imagine how hard it must be to learn the basics buried within a mountain of functionality. The way I learned to use Emacs originally was by learning to use a stripped down Emacs-like editor that ran on my home PC running MS-DOS. This editor used the same basic key bindings and supported the fundamental operations one uses to edit files: navigation, directory browsing, reading and saving files and so forth, all with the same keys that full blown Emacs uses.
Instead of installing Emacs, try installing micro-Emacs (its actual name is mg). This should run on Linux, MacOS, or Windows. On the Mac, you can install mg using homebrew. This is a perfectly good editor, and it uses the keys and commands that make up most of the ones I use every day. It just has fewer features, no Org mode, no image browsing, no support for git, no Email clients, no GPG support, no Voice output, no games, etc. It's just a solid text editor that will run in text mode.
Within a few days of using mg, you will be able to navigate around a document, open and save files, browse directories, and know how to get basic help within the editor. Then try Emacs and only add extensions as you need or want them.
Emacs is usually batteries included, couldn't an lsp server have been part of the package..
AFAIK, the only alternative to the clangd language server is ccls: https://github.com/MaskRay/ccls
All the people I know are using IntelliJ CE.
https://survey.stackoverflow.co/2023/#section-most-popular-t...
https://trends.google.com/trends/explore/TIMESERIES/16907280...
Similar to those who were all-in on Eclipse, Atom, Sublime?
I do think vscode will stick around longer, but not convinced it'll be long enough to not feel like a fad.
But all these (except sublime) including vscode are basically the same type of IDE. Yes, implementations change, but their share of the "market" remains about the same.
This is more a theoretical problem in VSCode. If you just want to start programming using a mainstream language or framework, in VSCode it's literally a matter of saying 'code .', downloading whatever extensions it recommends for the language it autodetected, and starting work with autocomplete, debugging support, and all that ready to go.
Read @bborud's comments in this thread. He had been using Emacs for even longer than I, and he switched to VSCode and is not looking back. Because Emacs requires fiddling to keep running and VSCode does not. And that makes VSCode better.
Gnus made Emacs a great Usenet news reader, but I could never get it to fit with my email regimen. And eventually Usenet died too. For about a decade I used a mail client that someone else originally wrote, but which I modified over the years to do email like I wanted to. But this became really tedious to maintain alone so I have up.
Along the way I tried various IDEs like the tools from IntelliJ and Eclipse. None of them took. In fact, I figured it had to be me, so I promised myself to spend a few months every 2-3 years or so trying to get used to IDEs. (I still can't stand the IntelliJ and Eclipse tools).
I think what made me switch to VSC was that I eventually grew tired of the constant annoyance of having to fix my setup so it would be reasonably useful for Go development. Emacs support for the Go language server was slow and shaky, and eventually I got so tired of having to make a patchwork of Emacs packages work that I gave Visual Studio Code a second chance.
And the second time around it stuck. I'm not entirely sure why it stuck, but it did. It's been 5 years and I'm still using it. And I'm still not entirely sure why. I think it is mostly that I'm a programmer - not an editor enthusiast. Emacs was a pain in the neck to keep running when I switched. I liked Emacs, but VSC has better support for just about any language you care to program in.
I ditched Emacs because I'm interested in writing code. I'm not interested in spending a day figuring out how to keep barely working Go support running so I can get work done. It's a tool. And when maintaining the tool starts eating into my productivity, it isn't worth the effort.
The problem with Emacs is that it doesn't have a sufficiently large community. Which in turn means that if you are interested in creating tooling, your efforts will have a much bigger payoff if you choose something millions of other developers use. This is a vicious cycle.
Last I checked, VSC had about 14 million users. Out of a global population of 25'ish million developers. That's slightly over half the global developer population. That's a pretty big market. I think a fair guess (given the stack overflow surveys) is that less than a million people use Emacs as their primary development environment. Which I find surprisingly high, but it should give people hope.
Is VSC a fad? Who gives a crap? What matters is that, for me, and for a lot of other people, it is a better tool than Emacs. Because it is. If VSC is replaced by something else that works even better, and VSC disappears: who cares. Better tools is a good thing. Getting overly attached to tools that offer less is just weird and unproductive.
I'm assuming that "you'll be back" means I will start using Emacs again for programming.
Well, for that to happen Emacs would have to provide a better programming experience for the environments I care about than VSC does. Right now it doesn't. If or when it does, I might consider it again.
I did the exercise of installing Emacs 29.1 yesterday and trying to set up a Go programming environment from scratch. After about one hour of head scratching I had something that barely worked and I wasn't entirely sure how to get it all the way there. That's not a good user experience. It is going to be an even worse experience for someone who hasn't been an Emacs user for a few decades.
It would make me happy if Emacs was a better alternative. It just isn't. If someone has the time and commitment to fix that I'll certainly consider it, but we know that at best, that's going to be years away.
there's also the devcontainer and vscode server thing which make vscode a sophisticated commodity
i don't use it, but i've seen the previous eras, the eclipse haydays .. and vscode doesn't feel the same
But yes, compared to Emacs , Code is a passing fad, and I doubt it'll be around in 15 years, let alone in 38
From the following it sounds more like a first step towards true adoption:
> built-in support for TreeSitter. This means that a few years down the road we’ll have many Emacs major modes that are much faster, robust and feature-rich.
Newer builds have better usability (although there are definitely still quirks). I recommend using it with the Hacker Keyboard for easy Meta-key access.
Is hackers keyboard available on latest android?
I'm still a Guix newb, so all I can say is that there may be some tweaking to be done if you're using non-default paths, (e.g. XDG Base Directory Specification) [0].
[0]: https://mail.gnu.org/archive/html/guix-devel/2019-03/msg0045...
https://github.com/alexmurray/emacs-snap/
In fact, it's already updated
The default branch has native-compilation, tree-sitter, and json enabled. See here for the enabled flags:
https://github.com/alexmurray/emacs-snap/blob/master/snapcra...
Last I tried building Emacs, it took me more than hour. I now use a snap that's updated very quickly and is already updated to 29.1:
apt-get update
apt-get install -y git software-properties-common make checkinstall autoconf texinfo
add-apt-repository -y ppa:ubuntu-toolchain-r/ppa
add-apt-repository -y ppa:ubuntu-toolchain-r/test
apt-get update
apt-get install -y gcc-10 g++-10 libgccjit0 libgccjit-10-dev libjansson4 libjansson-dev libgtk-3-dev
apt-get install -y libjpeg-dev libxpm-dev libgif-dev libtiff-dev libgnutls28-dev libncurses-dev
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
git clone --depth=1 git://git.sv.gnu.org/emacs.git --branch=master # or use emacs-28.1 or whatever tag
cd emacs || exit
./autogen.sh
./configure \
--with-cairo \
--with-gnutls \
--with-harfbuzz \
--with-jpeg \
--with-json \
--with-mailutils \
--with-modules \
--with-native-compilation \
--with-pgtk \
--with-png \
--with-rsvg \
--with-tiff \
--with-wide-int \
--with-x-toolkit=gtk3 \
--with-xft \
--with-xml2 \
--with-xpm \
--without-compress-install \
--without-gconf \
--without-gsettings \
--without-imagemagick \
--without-toolkit-scroll-bars \
--without-xaw3d \
--without-xwidgets \
CFLAGS="-O3 -mtune=native -march=native -fomit-frame-pointer" \
prefix=/usr/local
make -j"$(nproc)" NATIVE_FULL_AOT=1
checkinstall -y -D --install=no \
--pkgname=${pkgname}-nativecomp \
--pkgversion=1"$(git rev-parse --short HEAD)" \
--requires="libjansson-dev,libharfbuzz-dev,libgccjit-10-dev" \
--pkggroup=emacs \
--gzman=yes \
make install-stripThis makes it difficult to install emacs on a resource constrainted environment like a embedded system, and hard to justify installing on a server. (Yes we can use tramp but it's not always a option)
It's a real shame and why I still need to know vi and vim.
1: https://gitweb.gentoo.org/repo/gentoo.git/tree/app-editors/e...
ELISP> (emacs-version)
"GNU Emacs 29.0.60 ..."
Ah... Time to upgrade ; )Anyone else use fzf successfully with 29.x?
E.g. for lsp support, are the frameworks switching to the native one or are they going to rely on their current setup for now? Or is there no common approach?
I've been using emacs for over 10 years and had zero issues with making the transition. On the contrary, it's simplified my emacs life quite a bit. The only thing I have not been able to get working is `eaf`, but that's clearly not the fault of spacemacs.
I've been in contexts where I can't use vscode and I've been in contexts where I can't use intelliJ and so on. The contexts where I can't use emacs (specifically, emacs configured to my preferences) are thin on the ground.
It's a space alien user interface and software abstraction relative to most out there, but the payoff is I never have to put it down.
This scenario is fortunately pretty rare these days, especially since vscode supports remote editing, but it still happens from time to time and I can still resolve the issue by just dropping emacs on the target machine and working with it in terminal mode. And vscode is a relatively new option here; If I cast the bones, I predict it will be around for awhile.
Thankfully the cases where the only available editor is /usr/ucb/vi are starting to get rare.
It has several does-not-play-well failure modes that vscode remote doesn't. My favorite is that if I have an ssh out and the session goes down, then (in a way not unlike how a terminal ssh'd out will act if the session goes dead) emacs will just freeze. But apart from those, it's super-great and I do love being able to just treat some random data on some random server or user as a buffer and bring to bear on it everything you can hit a buffer with. That decontextualization, that fitting of one abstraction (the buffer) to so many contexts, is one of the best things about emacs.
Yes, vscode does what it does by installing a remote on the target machine and operating from there.
For me the main problem with Tramp is the slowness - opening and saving files takes just a tiny bit too long. I'm sure VS Code's approach with a remote server can be faster.
However with Emacs, there are a few thousand other people working on the car too, so despite the fact it's the volkswagen beetle you bought in 1972 and your butt shape is indelibly formed in the cockpit, it has _also_ got electric power train, full self driving and JATOs. :)
It isn't for me. At least not anymore.
Dealing with Emacs is a lot like dealing with software written in Python: probably great if you really like going trough long descriptions of how to get something to work. Not so great if you are more concerned with using the tools rather than fiddling with the tools.
From the NEWS file:
Emacs is now capable of editing files with very long lines. The display of long lines has been optimized, and Emacs should no longer choke when a buffer on display contains long lines.
Gitlab has some threading support but not very good one.
https://git-send-email.io/ has a great tutorial for getting started.
There's probably also a lot of emacs contributors that use emacs as their mail client that would be disrupted by replacing it with something web based.
Git was made for email. Needing a separate service for it is mostly cruft, when you have mailing lists. Yes, github has mass appeal, but a lot of software has been written with just email collaboration.
As for attracting low-quality contributions, I don't think they matter. People who use Emacs and depend on it will contribute. Interest in Emacs has increased and so have the available features.
There's a decent, loyal user base, importantly not the free-loading, entitled kind who water it down; they're like-minded, appreciate the philosophy behind it, don't mind tinkering with some LISP here and there, contribute their creations as answers or packages, and above all form a nice community helping each other.
It is so discouraging that I stopped working on the Emacs core [1] altogether: your contributions won't be acknowledged at all, even if someone volunteers to rewrite your code from scratch.
[1] I've been hacking some GUI-related features, but I'm not motivated enough to complete them. I also tried to write patches for my bug reports, but alas, my "CA-free" quota is already used up.
The further I get into "emacs for everything" the more I appreciate using email for everything.
- code "peek" (that little windows is super useful)
- good integration with debugger (again, vscode kills it here). For example: how to look a at a numpy array in emacs (in vscode there's a data viewer for that)
- robust LSP (for example, when I complete a formatting string f"{... on a big file, emacs simply becomes unresponsive for a minute or so (it's much quicker ona powerful computer though); pylance is simply superior on edge cases.
But although I'm a long time emacs user, there's one thngs where VSCode is much better, it's discoverability. I've learned much of what I need in 2-3 weeks, without ever looking at a manual.
Note: I'm a regular emacs user since since about 10 years (I came for the freedom, stayed for the community). I'm using VSCode since about a year.
I'll be happy to ear a way to make my emacs better.
But I think most people don't care about it enough because they either never close Emacs and/or use it in server-mode where emacsclient is pretty much instantaneous. Can I ask why you don't like doing that?
So having things take time on start up is an annoyance to me (but I live with it, I was just saying that emacs is slower than VSCode)
I’m sure vscode would chew through resources during a heavy session, have you benchmarked more than just the startup of the application?
You're right: once VSCode is in memory I think it uses more of it. But that's barely nothing when compared to rust-analyzer (which emacs LSP uses too).
However, I also have many plugins installed, so it might be just that. I wonder if it is possible to install a separate instance of Emacs, then I would be able to test the performance without all the plugins and configuration.
who ever does such a thing? Emacs starts up on my machine soon after I login. It remains open until I logout. Current instance has 123 buffers (files). Loading speed just isn't important to me as a full-time native (C++) developer.
> - robust LSP
I tried LSP a bit. Gave up because it just didn't really help me with my actual work. Could understand why someone with less experience programming would find it helpful, but it just wasn't so for me (I use emacs dynamic completion a lot)
I use LSP a lot (through eglot with Emacs-29). For each "mode" in Emacs there are alternatives to LSP, mostly what was there before LSP, which may be equally good. However, I found that switching to LSP simplified my setup, and having the same functionality/keybindings between modes is great, e.g. my projects switch me between Python, Rust, and Java, earlier that was basically three different "IDEs", while today they're very similar.
yeah, but i don't give a damn. I do this once every few weeks.
ps. also, emacs is < 3 secs on my system, so even if i did care ...
It's great for completing variable names, but also if you writing just regular text, finishing longer words and so on.
M-x dabbrev-expand
which is bound to M-/ by default (and yeah, I love it). Though I do like the context sensitive completions that lsp provides as well. They are particularly good for showing you structure members (since the language server knows the types).Have you considered the possibility that people with more experience programming than you might find it useful?
I appreciate that people who started programming with such tools probably come to rely on it the way I rely on dynamic completion in emacs (which is a lot).
For what it's worth I'd use CLion for C++, most likely, if I ever wanted to go back to C++ outside of tiny sandbox projects.
P.S. Language servers are great for smaller ecosystems where no one can really afford to make or fund much beefier tools like IDEs, so a language server can be created by a community member and be used with pretty much all relevant editors almost instantly, meaning the ROI for the community is massive.
With lsp-mode it has that little window: https://emacs-lsp.github.io/lsp-ui/#lsp-ui-peek
Personally I use eglot with consult which temporarily switches the entire buffer to do the "peek" functionality rather than popping up a tiny window: https://github.com/minad/consult
What maintenance? I have not changed a single line of my .emacs file for 3 years.
I have ~80 lines outside the customize variable block added by emacs. Nothing too fancy but there are a few hot keys and functions that I can't live without.
Edit:
The unpopular opinion is to say that one has stopped tinkering with Emacs for hours and started using a tool like VS Code or intelliJ to do actual coding work.
I will use IntelliJ or Eclipse over Emacs or VS Code for Java development any day. But having used both VS Code and Doom Emacs for other development, the latter is quicker, more featureful, and more discoverable, just as easy to configure, and more extensible.
Well, I'm not that obsessed with tweaking every bits, though. When I'm using vim/emacs, I never intend to configure them into IntelliJ replacement.
1. lsp-mode/eglot
2. package management
3. treesitter grammars
4. Portability - win/linux/mac/unix/android
5. Graphical User Interface - you can browse the web and watch YouTube in Emacs. Customize has buttons, forms, menus.
6. Treemacs/Treeview/speedbar: you know the multipanel view in Intellij or the project explorer in Intellij/vscod? Yeah, that.
7. Actual macros and function definitions, without needing to post them as an extension.
8. Interactive repl.
9. 5 different terminal emulators built-in.
10. Automated fuzzy everything with helm-M-x and helm. Exactly like Command-p in vscode.
11. github, gitlab integration with magit.
12. Copilot, tabnine, and chatGPT integration.
13. Hundreds of themes.
14. We've had shareable, secure remote collaboration for over a decade with wemux.
15. Use any ttf.
16. Mouse editing and command binding.
17. Use every build tool with projectile-compile-project.
18. Refactoring with lsp.
19. Autocompletion and jump to source.
20. Session save and restoration with desktop-save.
21. Slack integration.
22. Debugger with dap-mode.
23. Individual test only runs with dap and avy-lens.
24. blame with.magit-blame.
25. Pixel scrolling.
25. Transparency with seethru.
28. Rest client with variables and session storage (like postman, but free).
29. Browse compressed files as if they are normal directories and save to them.
30. Containerized deployment via flatpak.
31. Docker, docker-compose integration, kubernetes, aws, datadog, Azure integrations...
All of this fits in around 500 lones of copy_paste/cloneable emacs configuration, most of which is use-package declarations. Nary a defun or global-bind-key in sight, and because emacs is a full elisp ide, and it is actually executable code, it's debuggable on launch, unlike myriads of json files.
I'm trying to think of anything else that can possibly be interpreted as 'modern' from a ux standpoint. I certainly can't think of a feature that Intellij has that emacs doesn't that is core to the ide experience. And most of my emacs tools are better than the vscode version of them, at least in terms of invasion into the editor buffer or integration with the editor ux.
The one thing that's not modern is the standard copy and paste commands, but that's super easy to customize. I guess you can't drag and drop buffer frame borders in multiple buffer layouts if you hide scrollbars, and the message buffer isn't resizable...
As someone who uses emacs most often: VSCode is shaped a lot more closely to a modern aesthetic by default. If you've been following along with emacs all this time and keep up to date with the latest changes, you can easily accrete the configuration to make your emacs look like a modern tool, but it doesn't start configured that way.
Are you sure ?
I know you see this fashionable UX as an advantage, but what I think about is how you're going to have fashionable evolution in UX thinking inflicted on you. It feels to me like someone coming into my shop and moving all my tools.
Gratuitous example from an adjacent area of nerdliness: Were you around when Microsoft decided to drop the UX they'd been using for a few decades and change to "The Ribbon" ?
Yes, I am. That's very convenient for me.
> Were you around when Microsoft decided to drop the UX they'd been using for a few decades and change to "The Ribbon" ?
I was, and you're right. Microsoft functionally owns the chrome for vscode and it isn't as configurable as far as I can tell as emacs at that layer. There's certainly a possibility they will make a decision later to mess everything up.
But for now, my previous observation stands. I have to do less configuration out of the box to get vscode into a daily use work configuration than a naked emacs install.
I highlight this because it's not an unsolvable problem for emacs. It requires making a recommended default configuration that will be more correct for the 95% use case and advocating that configuration on the install channels for the tool.
For people interested in this, I know about Doom Emacs [1] and Spacemacs [2].
[1] https://github.com/doomemacs/doomemacs [2] https://github.com/syl20bnr/spacemacs
It is like assembling IKEA furniture if IKEA furniture didn't come with a usable manual and there are nine different descriptions online of how to assemble your new chair. Of which 5 don't actually produce a chair and two that are strangely incompatible with how you prefer to situate your couch.
Rather than be angry with people for pointing out something that is very likely to be true, how about listening to _valid_ user criticisms? And perchance see if something can be learned from it?
This is valid feedback.
I don't think that's true.
Do you include installing emacs packages as out of the box as you would vscode plugins though?
Here's what you can try: do a clean install of both, then document the steps you had to take to get VS Code + Go plugin to work vs getting Emacs to within a reasonable fraction of what VS Code will provide. Post your Emacs config when you are done. (As well as links to the sources where you found working configurations).
PS: good luck nailing the language server stuff on the first try on Emacs.
Vscode out-the-box is much more complete for coding than Emacs out-the-box.
While my Emacs-foo is not that great, I have relied on it for a lot over 25 years of programming. Recently, though, I gave Vscode a try, and while it's buggy as hell when you load up on the extensions you need, it's not that bad!
Slow? Yes, compared to a Vim or Emacs similarly set up. A wee bit bloated? Certainly, compared to my Vim and Emacs configuration.
But, really, it's the one I recommend to new developers. Not Vim, nor Emacs, even though I use those myself.
The real problem with Emacs is the shitload of bugs that case weird, undocumented and annoying behavior. A scripting language like elips is not meant for programming something as large and complex as Emacs.
I agree Emacs has too many bugs (but I haven't found anything that suits me better for maintaining notes and to-do lists and such).
Could you name a few of these "bugs"? I use Emacs for practically everything and bugs are very difficult to encounter, even on Emacs HEAD.
> A scripting language like elips is not meant for programming something as large and complex as Emacs.
Well, that's just plain wrong. A lot of vanilla Emacs functionality is written in Elisp.
But any elisp package will have lots of annoying small day-to-day bugs and glitches.
I disagree. That's a broad and false generalization. Most packages are bug-free. If you're submitting to MELPA you need to make sure your package works and follows some guidelines for namespaces and organization, which can all the checked within emacs itself. Every package on a package tracker is vetted by at least one external dev.
Emacs functions usually require little to no modification for years, because the core is very stable.
In VS Code it's certainly easy to install an extension. Some mystery thing happens, and there are new commands available and some programming language support might be enhanced, but it is all very opaque. If I wanted to debug the code, I have no clue where to start. I'm sure it's there somewhere but all this looks to me much less discoverable than in Emacs.
For my config, beyond setting variables I mostly copy/pasted. It gets you very far.
I would say most modern editors (Helix, Neovim) do TreeSitter and LSP better than Emacs today and probably for many years to come
Not really dependent (you can build and use Emacs without either).
I don't know what ideology you're talking about, but the only one I've ever had is the Emacs ideology: use the best program ever made and be happy.
(And also some have been based on the out of tree implementation that's been around for a while now)
Emacs' LSP client Eglot and many of the LSP servers have nothing to do with Microsoft. Honestly, LSP is one project that I'm thankful to MS for. Personally, I value open standards like LSP more than any single FOSS project.
The dynamic module system is generally a win for pragmatism over ideology, and it has been around for 7 years already. You can't do everything, like say extending core graphics of Emacs, but you can do a lot in any language of your choice if you feel constrained by Elisp. Tree-Sitter feature is built on top of that so it's not clear to me why do you think Emacs can't do better than say neovim. I use neovim and tree-sitter daily and generally don't think tree-sitter itself is rock solid yet, I run into indentation and slow query issues semi-routinely. But I am much more impressed with the work happening on Emacs community that leverages tree-sitter for advanced tooling [1].
Besides, even if that wasn't the case, Emacs has long had a policy of interoperating with non-free software. It runs on versions of Windows from 98 to 11. That's not because its developers don't value free software, but because they realize that this is a more effective way of convincing people to use free software than insisting on absolute purity.