feat(emacs/README.md): add elisp which installs required packages

This commit is contained in:
Soonho Kong 2014-08-26 09:26:29 -07:00
parent 83f05e104a
commit 0426d04cb9
2 changed files with 101 additions and 7 deletions

View file

@ -11,10 +11,11 @@ Requirement
``lean-mode`` requires [Emacs 24][emacs24] and following (optional) ``lean-mode`` requires [Emacs 24][emacs24] and following (optional)
packages which can be installed via <kbd>M-x package-install</kbd>. packages which can be installed via <kbd>M-x package-install</kbd>.
- [company][company]
- [dash][dash] - [dash][dash]
- [dash-functional][dash] - [dash-functional][dash]
- [flycheck][flycheck]
- [fill-column-indicator][fci] - [fill-column-indicator][fci]
- [flycheck][flycheck]
- [whitespace-cleanup-mode][wcm] - [whitespace-cleanup-mode][wcm]
To install them, you need to have [MELPA][MELPA] in your To install them, you need to have [MELPA][MELPA] in your
@ -32,13 +33,26 @@ code:
[wcm]: https://github.com/purcell/whitespace-cleanup-mode [wcm]: https://github.com/purcell/whitespace-cleanup-mode
[MELPA]: http://melpa.milkbox.net [MELPA]: http://melpa.milkbox.net
[dash]: https://github.com/magnars/dash.el [dash]: https://github.com/magnars/dash.el
[company]: http://company-mode.github.io/
Setup
----- -----
Put the following elisp code on your emacs setup: Put the following elisp code on your emacs setup:
```elisp ```elisp
(require 'package)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
(when (not package-archive-contents) (package-refresh-contents))
;; Install required packages for lean-mode
(defvar lean-mode-required-packages
'(company dash dash-functional flycheck whitespace-cleanup-mode fill-column-indicator))
(dolist (p lean-mode-required-packages)
(when (not (package-installed-p p))
(package-install p)))
;; Set up lean-root path
(setq lean-rootdir "~/projects/lean") (setq lean-rootdir "~/projects/lean")
(setq-local lean-emacs-path (setq-local lean-emacs-path
(concat (file-name-as-directory lean-rootdir) (concat (file-name-as-directory lean-rootdir)
@ -47,11 +61,10 @@ Put the following elisp code on your emacs setup:
(add-to-list 'load-path (expand-file-name lean-emacs-path)) (add-to-list 'load-path (expand-file-name lean-emacs-path))
(require 'lean-mode) (require 'lean-mode)
;; lean customization ;; Customization for lean-mode
(customize-set-variable 'lean-show-rule-column-method 'vline)
(customize-set-variable 'lean-rule-column 100)
(customize-set-variable 'lean-rule-color "#ff0000")
(customize-set-variable 'lean-delete-trailing-whitespace t) (customize-set-variable 'lean-delete-trailing-whitespace t)
(customize-set-variable 'lean-flycheck-use t)
(customize-set-variable 'lean-eldoc-use t)
``` ```
Key Bindings Key Bindings

81
src/emacs/lean-company.el Normal file
View file

@ -0,0 +1,81 @@
(require 'company)
(defun company-lean ()
(set (make-local-variable 'company-backends) '(company-lean))
(company-mode))
(add-hook 'lean-mode-hook 'company-lean)
(setq company-tooltip-limit 20) ; bigger popup window
(setq company-idle-delay .3) ; decrease delay before autocompletion popup shows
(setq company-echo-delay 0) ; remove annoying blinking
(setq company-begin-commands '(self-insert-command)) ; start autocompletion only after typing
(defun company-lean--prefix ()
"Returns the symbol to complete. Also, if point is on a dot,
triggers a completion immediately."
(if company-lean-begin-after-member-access
(company-grab-symbol-cons "\\." 1)
(company-grab-symbol)))
(defun company-go--invoke-autocomplete ()
(let ((temp-buffer (generate-new-buffer "*leancompany*")))
(prog2
(call-process-region (point-min)
(point-max)
"leancompany"
nil
temp-buffer
nil
"-f=csv"
"autocomplete"
(or (buffer-file-name) "")
(concat "c" (int-to-string (- (point) 1))))
(with-current-buffer temp-buffer (buffer-string))
(kill-buffer temp-buffer))))
(defun company-lean--candidates ()
(company-lean--get-candidates (split-string (company-lean--invoke-autocomplete) "\n" t)))
;;;###autoload
(defun company-lean (command &optional arg &rest ignored)
(case command
(prefix (and (derived-mode-p 'lean-mode)
(not (company-in-string-or-comment))
(or (company-lean--prefix) 'stop)))
(candidates (company-lean--candidates))
(meta (get-text-property 0 'meta arg))
(annotation
(when company-lean-show-annotation
(get-text-property 0 'meta arg)))
(location (company-lean--location arg))
(sorted t)))
(provide 'company-lean)
(defun company-lean--doc-buffer (candidate)
(message "doc candidate = %S" candidate)
(company-doc-buffer (get-text-property 0 'doc candidate)))
(defun company-lean--annotation (candidate)
(message "annotation candidate = %S" candidate)
(let ((anno (get-text-property 0 'kind candidate)))
(when anno (concat " blabla" anno)))
" : annotation1")
(defun company-lean--candidates (prefix)
(cl-loop for x in '("foobar" "foobaz" "foobarbaz")
collect x
))
(defun company-my-backend (command &optional arg &rest ignored)
(interactive (list 'interactive))
(case command
(interactive (company-begin-backend 'company-my-backend))
(prefix (when (looking-back "foo\\>")
(match-string 0)))
(candidates (company-lean--candidates arg))
(annotation (company-lean--annotation arg))
))
(set (make-local-variable 'company-backends) '(company-my-backend))
(company-mode)