.. | ||
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-mmm-lua.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
.emacs
in your home directory. - With GNU Emacs, it is common to use
.emacs.d/init.el
instead. - 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)
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