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)
Then run 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 fold
or origami
Bugs
If you run into any bugs with the new folding feature, report it upstream to the Elixir Language Server project.