// EMACS-ELISP — EMACS MAJOR MODE FOR EMACS LISP (ELISPRS)

filetype detection (*.el + .emacs/_emacs + elisp shebang) · derives from emacs-lisp-mode · elisprs subr/special-form font-lock layer · run via elisp · LSP via elisp --lsp · DAP via elisp --dap

eglot + lsp-mode · eldoc + completion over the runtime corpus · settings elisprs-executable / elisprs-claim-dot-el · Package-Requires emacs 27.1

Report GitHub

>_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 groupFace
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 / commentsinherited emacs-lisp-mode syntax table

Run, servers & config

Setting / commandEffect
elisprs-executable"elisp" — path to the executable used to run buffers and start the servers
elisprs-claim-dot-elt — 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 eglotstart elisp --lsp via eglot (Emacs 29+)
M-x lspstart elisp --lsp via lsp-mode

Compatibility

TargetStatus
Emacs 27.1+Mode + font-lock + run + eldoc + completion
eglotBuilt in since Emacs 29; works on 27/28 if installed
lsp-modeRegistered client
Debug adapterelisp --dap for DAP clients