From 26d548a0699e1c84bbbbcc6c05fe1976811c00a0 Mon Sep 17 00:00:00 2001 From: Soonho Kong Date: Sat, 30 Aug 2014 11:43:33 -0700 Subject: [PATCH] feat(emacs/lean-mode): add lean-tab-indent-or-complete Close #105 --- src/emacs/lean-mode.el | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/emacs/lean-mode.el b/src/emacs/lean-mode.el index 5c80c8d255..3aceee6710 100644 --- a/src/emacs/lean-mode.el +++ b/src/emacs/lean-mode.el @@ -5,6 +5,7 @@ ;; Soonho Kong ;; (require 'cl-lib) +(require 'eri) (require 'generic-x) (require 'compile) (require 'flymake) @@ -43,6 +44,29 @@ (interactive) (lean-execute)) + +(defun lean-check-expansion () + (save-excursion + (if (looking-at "\\_>") t + (backward-char 1) + (if (looking-at "\\.") t + (backward-char 1) + (if (looking-at "->") t nil))))) + +(defun lean-tab-indent-or-complete () + (interactive) + (if (minibufferp) + (minibuffer-complete) + (if (lean-check-expansion) + (cond (lean-company-use (company-complete-common)) + (t (completion-at-point-functions))) + (eri-indent)))) + +(defun lean-tab () + (interactive) + (or (company-complete) + (eri-indent))) + (defun lean-set-keys () (local-set-key "\C-c\C-x" 'lean-std-exe) (local-set-key "\C-c\C-l" 'lean-std-exe) @@ -51,7 +75,7 @@ (local-set-key "\C-c\C-t" 'lean-eldoc-documentation-function) (local-set-key "\C-c\C-f" 'lean-fill-placeholder) (local-set-key "\M-." 'lean-find-tag) - (local-set-key [tab] 'completion-at-point)) + (local-set-key [tab] 'lean-tab-indent-or-complete)) (define-abbrev-table 'lean-abbrev-table '(("var" "variable")