Rudy’s OBTF Rudolf Adamkovič

Home / Emacs / Fennel


Configure

Install the packages.

(with-eval-after-load 'package
  (add-to-list 'package-selected-packages 'fennel-mode))

;; (let ((src-directory (file-name-concat org-directory "src" "fennel-mode")))
;;   (add-to-list 'load-path src-directory)
;;   (autoload #'fennel-mode (file-name-concat src-directory "fennel-mode") nil t)
;;   (add-to-list 'auto-mode-alist '("\\.fnl\\'" . fennel-mode)))

Enable LSP automatically.

(with-eval-after-load 'fennel-mode
  (add-hook 'fennel-mode-hook #'eglot-ensure))

Enable the improved “proto” (protocol-based) REPL.

(with-eval-after-load 'fennel-mode
  (add-hook 'fennel-mode-hook #'fennel-proto-repl-minor-mode))

Disable subpar Xref-like functionality in favor of TAGS.

(with-eval-after-load 'fennel-mode
  (keymap-set fennel-mode-map "M-." nil)
  (keymap-set fennel-mode-map "M-," nil))

Enable structural editing with Paredit.

(with-eval-after-load 'fennel-mode
  (add-hook 'fennel-mode-hook #'paredit-mode)
  (add-hook 'fennel-repl-mode-hook #'paredit-mode))

Add support for literate programming with Org Babel.

(with-eval-after-load 'org
  (require 'ob-fennel))

Do not switch to REPL when reloading with C-c C-k (fennel-reload).

(with-eval-after-load 'fennel-mode
  (setopt fennel-mode-switch-to-repl-after-reload nil))

Show the fill column.

(with-eval-after-load 'fennel-mode
  (add-hook 'fennel-mode-hook
            #'display-fill-column-indicator-mode))

Enable code folding.

(with-eval-after-load 'fennel-mode
  (add-hook 'fennel-mode-hook #'outline-minor-mode))

Replace lambda followed by SPC with the lambda symbol λ.

(with-eval-after-load 'fennel-mode
  (define-abbrev-table 'fennel-mode-abbrev-table '(("lambda" "λ")))
  (add-hook 'fennel-mode-hook #'abbrev-mode))

Use the development version of fennel-ls in ~/src.

(with-eval-after-load 'eglot
  (add-to-list 'eglot-server-programs
               (cons 'fennel-mode
                     (list (file-name-concat org-directory
                                             "src"
                                             "fennel-ls"
                                             "fennel-ls")))))

© 2025 Rudolf Adamkovič under GNU General Public License version 3.
Made with Emacs and secret alien technologies of yesteryear.