Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/leanprover-community/lean4-mode
Emacs major mode for Lean 4
https://github.com/leanprover-community/lean4-mode
emacs lean4
Last synced: 3 months ago
JSON representation
Emacs major mode for Lean 4
- Host: GitHub
- URL: https://github.com/leanprover-community/lean4-mode
- Owner: leanprover-community
- License: apache-2.0
- Created: 2022-01-21T08:16:29.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-04-30T14:11:52.000Z (7 months ago)
- Last Synced: 2024-04-30T15:39:20.805Z (7 months ago)
- Topics: emacs, lean4
- Language: Emacs Lisp
- Homepage: https://leanprover.github.io/
- Size: 173 KB
- Stars: 54
- Watchers: 6
- Forks: 23
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Installation
============Before using this major mode, you need to [install Lean 4](https://leanprover.github.io/lean4/doc/setup.html#basic-setup).
To use `lean4-mode` in Emacs, add the following to your `init.el`:
```
;; You need to modify the following line
(setq load-path (cons "/path/to/lean4-mode" load-path))(setq lean4-mode-required-packages '(dash flycheck lsp-mode magit-section))
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
(package-initialize)
(let ((need-to-refresh t))
(dolist (p lean4-mode-required-packages)
(when (not (package-installed-p p))
(when need-to-refresh
(package-refresh-contents)
(setq need-to-refresh nil))
(package-install p))))(require 'lean4-mode)
```
Alternatively if you are a fan of `use-package` and `straight.el` you
can use:
```
(use-package lean4-mode
:straight (lean4-mode
:type git
:host github
:repo "leanprover/lean4-mode"
:files ("*.el" "data"))
;; to defer loading the package until required
:commands (lean4-mode))
```
If you are a doom-emacs user, adding the following to `packages.el` should work:
```
(package! lean4-mode :recipe
(:host github
:repo "leanprover/lean4-mode"
:files ("*.el" "data")))
```Trying It Out
=============If things are working correctly, you should see the word ``Lean 4`` in the
Emacs mode line when you open a file with extension `.lean`. Emacs will ask you
to identify the "project" this file belongs to. If you then type
```lean
#check id
```
the word ``#check`` will be underlined, and hovering over it will show
you the type of ``id``. The mode line will show ``FlyC:0/1``, indicating
that there are no errors and one piece of information displayed.To view the proof state, run `lean4-toggle-info` (`C-c` `C-i`). This will show the `*Lean Goals*` buffer (like the `Lean infoview` pane in VSCode) in a separate window.
Settings
========Set these with e.g. `M-x customize-variable`.
* `lsp-headerline-breadcrumb-enable`: show a "breadcrumb bar" of namespaces and sections surrounding the current location (default: off)
Key Bindings and Commands
=========================| Key | Function |
|--------------------|---------------------------------------------------------------------------------|
| C-c C-k | show the keystroke needed to input the symbol under the cursor |
| C-c C-d | recompile & reload imports (`lean4-refresh-file-dependencies`) |
| C-c C-x | execute Lean in stand-alone mode (`lean4-std-exe`) |
| C-c C-p C-l | builds package with lake (`lean4-lake-build`) |
| C-c C-i | toggle info view showing goals and errors at point (`lean4-toggle-info-buffer`) |
| C-c ! n | flycheck: go to next error |
| C-c ! p | flycheck: go to previous error |For `lsp-mode` bindings, see https://emacs-lsp.github.io/lsp-mode/page/keybindings/ (not all capabilities are supported currently).
In the default configuration, the Flycheck annotation `FlyC:n/n` indicates the
number of errors / responses from Lean; clicking on `FlyC` opens the Flycheck menu.