Code folding recently landed in Elixir's LSP implementation 🎉 and if you want to give it a try in Doom Emacs, here are the steps needed:
Ensure you have the latest Elixir LSP
Support just hit master and has not been pushed in a tagged release. Make sure you have updated your install.
If you have not installed Elixir LSP before – that is outside the scope of this article – but the gist is something like:
git clone https://github.com/elixir-lsp/elixir-ls.git cd elixir-ls mix deps.get mix compile mix elixir_ls.release
Disable existing fold layer
Doom Emacs has a custom folding layer that marries hideshow, vimish-fold, and outline-minor-mode. Since we need to use origami to get LSP-backed folding support, it is best to comment out the existing folding layer and avoid any potential conflicts.
This is a safety measure, I am not sure if these things can co-exist. Feel free to try and report back in #emacs in the Elixir community Slack.
;; ~/.doom.d/init.el (doom! ;; ... more config ... :editor ;;fold ; (nigh) universal code folding ;; ... more config ...
Enable code folding for the LSP layer with Origami
Add the lsp-origami to the doom packages:
;; ~/.doom.d/packages.el (package! lsp-origami)
Enable code folding with lsp and set up package hooks:
;; ~/.doom.d/config.el ;; Enable folding (setq lsp-enable-folding t) ;; Add origami and LSP integration (use-package! lsp-origami) (add-hook! 'lsp-after-open-hook #'lsp-origami-try-enable)
doom sync to install the new packages and remove the old one.
Testing it out
Open up an elixir file and use all the usual keybindings
z c to collapse,
z o to open,
z r to open recursively. You can discover all the commands running
SPC : and fuzzy searching for commands starting with
If you run into any bugs with the new folding feature, report it upstream to the Elixir Language Server project.