| .. | ||
| features | ||
| test | ||
| .gitignore | ||
| Cask | ||
| CMakeLists.txt | ||
| eri.el | ||
| lean-changes.el | ||
| lean-cmd.el | ||
| lean-company.el | ||
| lean-debug.el | ||
| lean-flycheck.el | ||
| lean-info.el | ||
| lean-input.el | ||
| lean-mode.el | ||
| lean-option.el | ||
| lean-project.el | ||
| lean-require.el | ||
| lean-server.el | ||
| lean-settings.el | ||
| lean-syntax.el | ||
| lean-tags.el | ||
| lean-type.el | ||
| lean-util.el | ||
| lean-variable.el | ||
| lean.pgm | ||
| load-lean.el | ||
| Makefile | ||
| README.md | ||
Emacs mode for lean theorem prover
Requirements
lean-mode requires Emacs 24 and the following
packages, which can be installed via M-x package-install.
The following packages are optional, but we recommend installing them
to use full features of lean-mode.
Both the optional and required packages will be installed for you
automatically the first time you use lean-mode, if you follow the
installation instructions below.
Installation
When Emacs is started, it loads startup information from a special initialization file, often called an "init file." The init file can be found in different places on different systems:
- Emacs will check for a file named
.emacsin your home directory. - With GNU Emacs, it is common to use
.emacs.d/init.elinstead. - With Aquamacs, it is common to use
~/Library/Preferences/Aquamacs Emacs/Preferences.el.
On Windows, there are two additional complications:
- It may be hard to figure out what Emacs considers to be your "home directory".
- The file explorer may not let you create a file named
.emacs, since it begins with a period.
One solution is to run Emacs itself and create the file using C-c C-f
(control-C, control-F) and then entering ~/.emacs. (The tilde
indicates your home directory.) On Windows, you can also name the file
_emacs.
Put the following code in your Emacs init file:
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(when (< emacs-major-version 24)
;; For important compatibility libraries like cl-lib
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
(package-initialize)
;; Install required/optional packages for lean-mode
(defvar lean-mode-required-packages
'(company dash dash-functional flycheck f
fill-column-indicator s lua-mode mmm-mode))
(let ((need-to-refresh t))
(dolist (p lean-mode-required-packages)
(when (not (package-installed-p p))
(when need-to-refresh
(package-refresh-contents)
(setq need-to-refresh nil))
(package-install p))))
Then choose your installation method from the following scenarios, and add the corresponding code to your init file:
Case 1: Build Lean from source
;; Set up lean-root path
(setq lean-rootdir "~/projects/lean") ;; <=== YOU NEED TO MODIFY THIS
(setq-local lean-emacs-path
(concat (file-name-as-directory lean-rootdir)
(file-name-as-directory "src")
"emacs"))
(add-to-list 'load-path (expand-file-name lean-emacs-path))
(require 'lean-mode)
Case 2: Install Lean via apt-get on Ubuntu or via dpkg on Debian
;; Set up lean-root path
(setq lean-rootdir "/usr")
(setq-local lean-emacs-path "/usr/share/emacs/site-lisp/lean")
(add-to-list 'load-path (expand-file-name lean-emacs-path))
(require 'lean-mode)
Case 3: Install Lean via homebrew on OS X
;; Set up lean-root path
(setq lean-rootdir "/usr/local")
(setq-local lean-emacs-path "/usr/local/share/emacs/site-lisp/lean")
(add-to-list 'load-path (expand-file-name lean-emacs-path))
(require 'lean-mode)
Note: if you install homebrew in a custom location that is not the default
location, please run brew info lean, and it will tell you where the
lean-mode files are located. With that information, update the
lean-emacs-path variable accordingly.
Case 4: Install Lean in Windows
;; Set up lean-root path
(setq lean-rootdir "\\lean-0.2.0-windows")
(setq-local lean-emacs-path "\\lean-0.2.0-windows\\share\\emacs\\site-lisp\\lean")
(add-to-list 'load-path (expand-file-name lean-emacs-path))
(require 'lean-mode)
Trying It Out
If things are working correctly, you should see the word Lean in the
Emacs mode line when you open a file with extension .lean (for the
standard Lean mode) or .hlean (for hott mode). If you type
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. Whenever
you type, an asterisk should briefly appear after FlyC, indicating that
your file is being checked.
Key Bindings
| Key | Function |
|---|---|
| C-c C-x | lean-std-exe |
| C-c C-l | lean-std-exe |
| C-c C-t | lean-eldoc-documentation-function |
| C-c C-f | lean-fill-placeholder |
| M-. | lean-find-tag |
| TAB | lean-tab-indent-or-complete |
| C-c C-o | lean-set-option |
| C-c C-e | lean-eval-cmd |
Known Issues and Possible Solutions
Unicode
If you experience a problem rendering unicode symbols on emacs, please download the following fonts and install them on your machine:
Then, have the following lines in your emacs setup to use DejaVu Sans Mono font:
(when (member "DejaVu Sans Mono" (font-family-list))
(set-face-attribute 'default nil :font "DejaVu Sans Mono-11"))
You may also need to install emacs-unicode-fonts package.
-
Run
M-x package-refresh-contents,M-x package-install, and typeunicode-fonts. -
Add the following lines in your emacs setup:
(require 'unicode-fonts) (unicode-fonts-setup)
"Variable binding depth exceeds max-specpdl-size" Error
---------------------------------------------------------
See [Issue 906](https://github.com/leanprover/lean/issues/906) for details.
[Moritz Kiefer](https://github.com/cocreature) reported that `proofgeneral`
comes with an old version of `mmm-mode` (0.4.8, released in 2004) on ArchLinux
and it caused this problem. Either removing `proofgeneral` or upgrading
`mmm-mode` to the latest version (0.5.1 as of 2015 Dec) resolves this issue.
Contributions
=============
Contributions are welcome!
If your contribution is a bug fix, create your topic branch from
`master`. If it is a new feature, check if there exists a
WIP(work-in-progress) branch (`vMAJOR.MINOR-wip`). If it does, use
that branch, otherwise use `master`.
Install [Cask](https://github.com/cask/cask) if you haven't already,
then:
$ cd /path/to/lean/src/emacs
$ cask
Run all tests with:
$ make