>_EMACS-ELISP — EMACS LISP ON THE ELISPRS RUNTIME
Open a .el file: Emacs' own lisp editing, plus the elisprs runtime's toolchain. emacs-elisp targets elisprs — Emacs Lisp compiled to the fusevm bytecode VM with a Cranelift JIT. elisprs-mode derives from the built-in emacs-lisp-mode, so it inherits Emacs' lisp syntax table, indentation, and font-lock, then layers the runtime on top: an extra font-lock face for the 252 subrs elisprs implements, runs the buffer through elisp (C-c C-c), serves eldoc + completion from the runtime's own corpus, and wires elisp --lsp into both eglot and lsp-mode plus elisp --dap for debugging. By default it claims *.el (plus .emacs / _emacs); set elisprs-claim-dot-el to nil to keep the stock association.
Install
The elisp binary must be on $PATH to run buffers and for the servers (install elisprs with brew install menketechnologies/menketech/elisprs).
;; manual (add-to-list 'load-path "/path/to/emacs-elisp") (require 'elisprs-mode) ;; use-package + built-in VC (use-package elisprs-mode :mode "\\.el\\'" :vc (:url "https://github.com/MenkeTechnologies/emacs-elisp"))
Press C-c C-c to run a buffer. With eglot: M-x eglot in a .el buffer, or (add-hook 'elisprs-mode-hook #'eglot-ensure).
What you get
Filetype detection
Every *.el file (plus .emacs / _emacs) uses elisprs-mode via auto-mode-alist; the elisp interpreter shebang is detected via interpreter-mode-alist.
Derives from emacs-lisp-mode
A strict superset of the stock editing experience — inherited syntax table, indentation, paren handling, and font-lock. Nothing lost; the runtime tooling is added.
Runtime subr font-lock
An extra layer styles the 18 elisprs special forms (font-lock-keyword-face) and the 252 subrs the runtime implements (elisprs-subr-face), so runtime-supported builtins are visually distinct.
Run via elisp
elisprs-run-buffer (C-c C-c) runs the buffer through elisp FILE in a *compilation* buffer with next-error navigation.
eldoc + completion
One-line signatures in the echo area and completion-at-point over the builtin surface, from elisprs-stdlib.el — generated verbatim from elisprs' own LSP metadata.
Language server + DAP
Registers elisp --lsp for eglot and lsp-mode (both lazy), and elisp --dap for stepping / breakpoints. Launched with --lsp only.
Faces
| Token group | Face |
|---|---|
Special forms (defun let when setq cond lambda) | font-lock-keyword-face |
Runtime subrs (cons message concat length apply) | elisprs-subr-face |
Definition names ((defun NAME …)) | font-lock-function-name-face |
Keyword symbols (:key) | font-lock-builtin-face |
| Strings / chars / comments | inherited emacs-lisp-mode syntax table |
Run, servers & config
| Setting / command | Effect |
|---|---|
elisprs-executable | "elisp" — path to the executable used to run buffers and start the servers |
elisprs-claim-dot-el | t — claim *.el / .emacs / _emacs; set nil to keep stock emacs-lisp-mode |
C-c C-c (elisprs-run-buffer) | run the buffer through elisp FILE via compile |
M-x eglot | start elisp --lsp via eglot (Emacs 29+) |
M-x lsp | start elisp --lsp via lsp-mode |
Compatibility
| Target | Status |
|---|---|
| Emacs 27.1+ | Mode + font-lock + run + eldoc + completion |
| eglot | Built in since Emacs 29; works on 27/28 if installed |
| lsp-mode | Registered client |
| Debug adapter | elisp --dap for DAP clients |