Emacs 29 is nigh What can we expect?

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • doomemacs

    An Emacs framework for the stubborn martian hacker

  • If you install Doom Emacs [1] after installing Emacs itself, I think it would be a couple of days. At least if you can live with the things Doom comes with. It's just a matter of following the instructions, uncommenting the relevant modules in .doom.d/init.el, syncing the changes and off you go.

    [1] https://github.com/doomemacs/doomemacs#install

  • GNU Emacs

    Mirror of GNU Emacs

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • toggleterm.nvim

    A neovim lua plugin to help easily manage multiple terminal windows

  • Thanks for these tips! I'll explore tabspaces, apheleia, async-shell-command (and the Go lib) — all of those are new to me.

    > Can you give a specific example of something you had trouble with?

    I hoped to recreate multiple long-running terminal sessions in splits and tabs, similar to functionality I now use from:

    Neovim (plugin): https://github.com/akinsho/toggleterm.nvim

    VS Code (built-in): https://code.visualstudio.com/docs/terminal/basics#_managing...

    I just found “popper”, which didn't exist the last time I looked. It seems like a pretty close substitute:

    https://github.com/karthink/popper

  • homebrew-emacs-plus

    Emacs Plus formulae for the Homebrew package manager

  • My preferred distribution for emacs on macos is: https://github.com/d12frosted/homebrew-emacs-plus

    It's well documented and supported, I highly recommend it!

  • emacs-overlay

    Bleeding edge emacs overlay [maintainer=@adisbladis]

  • Its great to see both eglot and tree-sitter being merged. However, I am unhappy about the state of 'emacs configurations/distributions' right now. I have been using Doom Emacs, but the development is pretty much stalled there [0], and I don't think there is any distribution that is keeping up with these cutting-edge features (compared to the NeoVim ecosystem, let's say). Somehow it feels like I was seeing a lot more activity about Emacs configurations two-three years ago.

    > Compile EmacsLisp files ahead of time

    Ooh, this is interesting. Hoping to see a derivation in https://github.com/nix-community/emacs-overlay soon.

    [0] I am not complaining though as Doom was the main author's personal config from the get-go. I am just pointing out a void.

  • elpaca

    An elisp package manager

  • Just an fyi for people using straight or interested in it, its maintainer is working on an alternative called elpaca.

    https://github.com/progfolio/elpaca

  • lsp-tailwindcss

    the lsp-mode client for tailwindcss

  • As far as out-of-the-box support, I think it works great. Much easier to configure than lsp-mode.

    However, for my uses with a Ruby/React+TSX setup the performance was lacking on a large codebase. I swapped back to lsp-mode and the experience felt smoother.

    IIRC the author's stance on previous discussions around multiple language servers was to rely on flymake instead, since the previous discussion centered around ESLint + TypeScript. Tailwind is a bit of an issue in the ecosystem right now, but you may want to try https://github.com/merrickluo/lsp-tailwindcss.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • omnisharp-vscode

    Discontinued Official C# support for Visual Studio Code [Moved to: https://github.com/dotnet/vscode-csharp]

  • For me its been the questionable stewardship of vscode (https://github.com/omnisharp/omnisharp-vscode/issues/5276) and the Emacs from Scratch videos from the System Crafters youtube channel. When I was looking for alternatives I stumbled on those videos and they blew me away.

    Also Emacs 28/29 has been way more welcoming and easy to get started with than when I first tried 8 or so years ago.

  • apheleia

    🌷 Run code formatter on buffer contents without moving point, using RCS patches and dynamic programming.

  • 1.projectile-kill-buffers or the built-in project-kill-buffers will do that for the current project. You could run that before switching projects.

    2. https://github.com/radian-software/apheleia

    3. There might be a way to do this but I'm not sure. Emacs being inherently single threaded probably makes this difficult. But yes, I use M-x (re)compile.

    4. libvterm is the best still imo. You can definitely do multiple instances and there's even different tab modes in Emacs now.

  • lsp-bridge

    A blazingly fast LSP client for Emacs

  • good-scroll.el

    Attempt at good pixel-based smooth scrolling in Emacs

  • crafted-emacs

    A sensible base Emacs configuration.

  • And if you find yourself between the two extremes, perhaps https://github.com/SystemCrafters/crafted-emacs

  • popper

    Emacs minor-mode to summon and dismiss buffers easily.

  • Thanks for these tips! I'll explore tabspaces, apheleia, async-shell-command (and the Go lib) — all of those are new to me.

    > Can you give a specific example of something you had trouble with?

    I hoped to recreate multiple long-running terminal sessions in splits and tabs, similar to functionality I now use from:

    Neovim (plugin): https://github.com/akinsho/toggleterm.nvim

    VS Code (built-in): https://code.visualstudio.com/docs/terminal/basics#_managing...

    I just found “popper”, which didn't exist the last time I looked. It seems like a pretty close substitute:

    https://github.com/karthink/popper

  • perspective-el

    Perspectives for Emacs.

  • persp-projectile

    Projectile integration for perspective.el

  • org-roam

    Rudimentary Roam replica with Org-mode

  • > It’s clear to me that there’s something magical in it, but I can’t seem to tap that magic for myself.

    I love Emacs for some of its really nice features that I just cannot find anywhere else (and no Elisp knowledge is required). I'm not one for tech monocultures and try to diversify my tooling as much as I can, but Emacs is seriously good when it comes to so many things:

    - Magit in Emacs is arguably probably the best Git interface in the planet. You can run simple operations and complex workflows with just a few keypresses.

    - Note-taking with org-roam (https://www.orgroam.com/). This is the best Free note-taking system that I know of — it's like Roam Research, where you can have your own zettlekasten with backlinks etc. and it scales really well with a very large number of notes (it uses a SQLite database in the background). Notes, articles with images, I use this for so many things every day.

    - Encrypted notes. Emacs handles encryption elegantly out of the box. You can encrypt entire documents transparently (by adding a .gpg extension, for instance) using symmetric or asymmetric encryption, and Emacs will get your keys from gpg all automatically. You can also encrypt small sections inside a larger document.

    - Spreadsheets. I do all my personal spreadsheets in Emacs' Org Mode. It never ceases to amaze me how text formats can be so powerful. Works even on my oldest computer running Emacs from a decade ago.

    - Emacs Calculator. This is like a mini-WolframAlpha inside Emacs. I can solve equations, perform operations on dates, convert units, track returns on investments, simple and compound interest, the list goes on. And it integrates really well with the rest of Emacs as well.

    - Org Mode. This is possibly the best designed markup language. I take all my notes in this in this. You can have inline images, spreadsheets, code blocks with inline execution etc. Its support for literate programming is really awesome: it's like Jupyter Notebooks but for any language. (Emacs' Markdown support is really awesome and powerful, as well, with its previews and table handling etc)

    - Gorgeous typography. I run Emacs in the GUI mode at all times, and it renders all my typography (proportional or monospaced) gorgeously which makes it a delight to look at and use (Ideal Sans + Verlag for notes (org, markdown, reST etc), Cascadia Code for coding with programming ligatures enabled). This is all in the raw text, not just in the preview like other editors.

    A few other miscellaneous things that come to mind:

    - Powerful window management. I can split panes vertically, horizontally, and undo and redo my window layout, all out of the box. This makes working in Emacs a pleasure to work with.

    - Navigation and text-editing at a higher level of abstraction. With Emacs, I can navigate not just in the normal ways (by lines, characters, words etc.), but in various other context-dependent ways: e.g. Emacs understands sentences, functions etc. and I can navigate, delete, select, and manipulate text at a much higher level, allowing me to work with Emacs in ways that traditional editors cannot match.

    - Calendar. I use this for various things, like quickly finding out when sunset is. It can also tell you phases of the moon etc. if you need that, all out of the box.

    - Email using mu4e. Emacs can work as a beautiful mail client. I used to use this several years ago with mbsync (isync). It's surprising how offline email can let you search through all your emails literally instantly.

    And there's so much more depending on what you're looking for :)

    Emacs is like this retro piece of software that is paradoxically highly modern at the same time and actually better than the status quo. (It's snowing outside now. Let me go ahead and run M-x fireplace in my Emacs ;)

  • ergoemacs-mode

    ergoemacs-mode

  • For example I use https://github.com/ergoemacs/ergoemacs-mode, with some commands that I have acquired as muscle memory from using Emacs/mg for long. And still I use nano when I need to do small edits to a file. I also do it almost without thinking about it, especially when doing "sudo nano whatever". Mg should be better for me, but nano is engraved into my palms for some reason.

  • julia-vterm.el

    A simple vterm-based mode for an inferior Julia REPL process in Emacs

  • ob-julia-vterm.el

    Org-babel support for Julia code blocks using julia-vterm

  • julia-emacs

    Julia support in Emacs.

  • melpa

    Recipes and build machinery for the biggest Emacs package repo

  • emacs-libvterm

    Emacs libvterm integration

  • dtrt-indent

    A minor mode that guesses the indentation offset originally used for creating source code files and transparently adjusts the corresponding settings in Emacs, making it more convenient to edit foreign files.

  • For #2, I've been pretty happy with dtrt-indent (https://github.com/jscheid/dtrt-indent) for DWIM indentation bouncing between projects.

    I have yet to try apheleia, but I wouldn't be surprised if just enabling apheleia, dtrt-indent, and editorconfig-mode (https://github.com/editorconfig/editorconfig-emacs) in prog-mode-hook just did what you wanted.

  • editorconfig-emacs

    EditorConfig plugin for Emacs

  • For #2, I've been pretty happy with dtrt-indent (https://github.com/jscheid/dtrt-indent) for DWIM indentation bouncing between projects.

    I have yet to try apheleia, but I wouldn't be surprised if just enabling apheleia, dtrt-indent, and editorconfig-mode (https://github.com/editorconfig/editorconfig-emacs) in prog-mode-hook just did what you wanted.

  • neovim

    Vim-fork focused on extensibility and usability

  • Neovim. It is lighter weight than either Emacs or VS Code but can still have pretty much all the bells and whistles. Definitely cool if you prefer to live in a terminal.

    There are several GUIs for Neovim for various platforms [1].

    [1]: https://github.com/neovim/neovim/wiki/Related-projects#gui

  • crux

    A Collection of Ridiculously Useful eXtensions for Emacs (by bbatsov)

  • For those still on 28, crux-rename-file-and-buffer does the same thing (https://github.com/bbatsov/crux). I've been using it for half a decade at this point. This sort of command, that no other code will rely on, was never that important to get into core, and there's some merit in making people create the commands they needed. It's not like with the additions to subr and subr-x libraries (string-replace, string-search etc), which can't come fast enough.

  • dotfiles

    My personal dotfiles for my linux desktop (by bergheim)

  • emacs

    Mirror of GNU Emacs (by emacs-lsp)

  • Locks: https://www.gnu.org/software/emacs/manual/html_node/elisp/Mu...

    Semaphores are not there, my mistake; I was thinking about: https://www.gnu.org/software/emacs/manual/html_node/elisp/Co...

    That's basically what every other threading library provides in most languages... and it's also what was shown time and again to be very hard to work with directly. Higher-order abstractions are necessary to make parallelism safe and concurrency convenient.

    > and atomicity is guaranteed apart from when you use these calls. So you'd never be in a problem state of `setq` failing halfway, for example.

    That's true - it looks like Emacs uses a global lock to ensure the atomicity, similarly to what Python does. Also like in Python, you can release that lock from native code (module or core). You cannot touch any interpreter state from other threads, so you need a bit of plumbing to get the results back, but it's possible. I found this: https://github.com/emacs-lsp/emacs/blob/json-rpc/src/json.c very interesting: it's a fork that moves JSONRPC from Lisp to C and out of the main thread. See for example line 1109 and related.

    > but threads are pretty useful already if hard to code with.

    That's the point: the capabilities are there (mostly), but abstractions are not. Coding with threads, even in the presence of the global lock, is hard, and ensuring correctness is nontrivial. At the very least we should get channels for communication (share by communicating, don't communicate by sharing) between threads and thread pools for executing tasks (like futures in Java or Python, or Task in Elixir). Threads and locks are way too low-level for normal coding. I suspect that's the reason why they're not used more widely, even though they're there for the third(?) release now.

    Aside: Racket is actually a nice example of concurrency and parallelism being treated as completely separate concerns. IIRC threads in Racket are call/cc-based green threads, while places are separate instances of the VM that execute in OS-level thread or separate process. Threads provide concurrency and places provide parallelism. It's actually a good thing, I think. Mixing the two is often a major source of errors. Racket also has futures, which are parallel-if-possible primitives that can benefit from parallelism if they don't touch external state - a sort of a middle ground.

    In any case: yes, Elisp threads are a good addition to the language, but they alone are not enough to bring concurrency to the masses, so to speak. As a concurrency primitives, and compared to callbacks, they have few advantages and some serious downsides. Emacs still needs a lot of work on the concurrency front. And don't even mention parallelism, that's another can of worms that we don't really need to open :)

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts