lean2/src/emacs
2015-11-08 14:04:58 -08:00
..
features test(emacs/features): add ecukes template 2014-09-11 12:33:49 -07:00
test test(emacs/lean-info-test): add test cases for goal visualization 2014-10-29 17:09:08 -07:00
.gitignore feat(emacs/Cask): add Cask file 2014-09-09 15:11:57 -07:00
Cask fix(emacs/Cask): add GNU package repository 2015-01-30 02:52:55 -05:00
CMakeLists.txt fix(CMakeLists.txt): quote CMake variables 2015-03-28 22:38:11 -04:00
eri.el feat(emacs/eri.el): add eri.el (from agda mode) 2014-08-30 14:57:34 -07:00
lean-changes.el fix(emacs/lean-changes): visit file before process any changes 2014-10-03 10:11:21 -07:00
lean-cmd.el feat(emacs/lean-cmd): add SYNC command 2014-10-02 17:30:03 -07:00
lean-company.el fix(emacs/lean-company.el): set timeout for company-lean--import-candidates 2015-08-06 22:53:49 -04:00
lean-debug.el feat(emacs/lean-debug): add lean-debug minor-mode 2014-09-15 16:50:35 -07:00
lean-flycheck.el fix(emacs/lean-flycheck.el): use -concat in lean-flycheck-command 2015-05-26 17:00:05 -04:00
lean-info.el fix(emacs/lean-info): lean-info-list-parse 2015-03-27 11:37:47 -04:00
lean-input.el feat(category.adjoint): prove more about functors 2015-11-08 14:04:58 -08:00
lean-mmm-lua.el feat(emacs): assume lua-mode and mmm-mode are available 2015-01-30 13:05:30 -08:00
lean-mode.el feat(emacs/lean-mode): lean-exec-at-pos uses timer to wait until flycheck process is over 2015-08-11 20:17:53 -04:00
lean-option.el feat(emacs/lean-flycheck): detect and use flycheck error buffer width 2014-09-30 05:54:46 -07:00
lean-project.el chore(emacs): remove unnecessary requires 2014-10-31 16:01:10 -07:00
lean-require.el fix(emacs/lean-mode): remove whitespace-cleanup-mode dependency 2014-11-09 00:21:43 -05:00
lean-server.el feat(emacs/lean-server.el): lean-server-consume-all-async-tasks restart lean-server if necessary 2015-07-28 18:14:16 -07:00
lean-settings.el feat(emacs/lean-mode): lean-exec-at-pos uses timer to wait until flycheck process is over 2015-08-11 20:17:53 -04:00
lean-syntax.el feat(lean-syntax): fix and extend syntax highlighting 2015-11-08 14:04:58 -08:00
lean-tags.el refactor: rename ltags => leantags 2015-01-18 13:44:41 +09:00
lean-type.el feat(src/lean-mode.el): add 'configuration' menu and add toggle option for 'Show type at point' 2015-03-05 14:37:44 -05:00
lean-util.el feat(emacs/lean-util.el): add lean-find-files 2015-08-06 22:48:00 -04:00
lean-variable.el feat(emacs/lean-server): add support for hlean/standard minor-mode 2015-02-13 19:41:41 -05:00
lean.pgm chore(CMakeLists.txt): move Lean logo to make sure we can test leanemacs without installing Lean 2015-01-31 17:38:49 -08:00
load-lean.el fix(emacs/load-lean.el): add let-alist 2015-07-15 16:07:35 -07:00
Makefile fix(emacs/Makefile): add missing Makefile 2014-09-14 23:14:42 -07:00
README.md doc(emacs/README.md): update MELPA instruction 2015-08-03 09:27:16 -04:00

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

Put the following elisp code in your emacs setup (e.g. .emacs.d/init.el [GNU Emacs], ~/Library/Preferences/Aquamacs Emacs/Preferences.el [Aquamacs]) :

(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))))

Please choose your installation method from the following scenarios, and add the elisp code to your emacs setup:

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 reading unicode characters on emacs, first consider using a unicode-friendly font such as DejaVu Sans Mono:

(when (member "DejaVu Sans Mono" (font-family-list))
  (set-face-attribute 'default nil :font "DejaVu Sans Mono-11"))

If you still experience a rendering problem, consider trying emacs-unicode-fonts:

  • Install unicode-fonts package by running M-x package-refresh-contents and M-x package-install.
  • Add the following lines in your emacs setup:

(require 'unicode-fonts) (unicode-fonts-setup)



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