lang/emacs-lisp: update for v2.0

This commit is contained in:
Henrik Lissner 2017-01-16 23:30:11 -05:00
parent ba1db18a4d
commit cea32a3957
3 changed files with 94 additions and 105 deletions

View file

@ -0,0 +1,66 @@
;;; lang/emacs-lisp/autoload.el
;; ---- emacs-lisp ---------------------------------------------------
;;;###autoload (autoload 'doom:byte-compile "lang/emacs-lisp/autoload" nil t)
(evil-define-command +emacs-lisp:byte-compile (&optional bang)
(interactive "<!>")
(if bang (doom-byte-compile) (byte-compile-file buffer-file-name)))
;;;###autoload
(defun +emacs-lisp/find-function-at-pt ()
(interactive)
(let ((func (function-called-at-point)))
(if func (find-function func))))
;;;###autoload
(defun +emacs-lisp/find-function-at-pt-other-window ()
(interactive)
(let ((func (function-called-at-point)))
(if func (find-function-other-window func))))
;;;###autoload
(defun +emacs-lisp/repl ()
(interactive)
(ielm)
(let ((buf (current-buffer)))
(bury-buffer)
(pop-to-buffer buf)))
;; ---- ert ---------------------------------------------------
(defsubst +ert--pre ()
(save-buffer) (eval-buffer))
;;;###autoload
(defun +ert/run-test ()
(interactive)
(let (case-fold-search thing)
(+ert--pre)
(setq thing (thing-at-point 'defun t))
(if thing
(if (string-match "(ert-deftest \\([^ ]+\\)" thing)
(ert-run-tests-interactively
(substring thing (match-beginning 1) (match-end 1)))
(user-error "Invalid test at point"))
(user-error "No test found at point"))))
;;;###autoload
(defun +ert/rerun-test ()
(interactive)
(let (case-fold-search thing)
(+ert--pre)
(setq thing (car-safe ert--selector-history))
(if thing
(ert-run-tests-interactively thing)
(message "No test found in history, looking for test at point")
(+ert-run-test))))
;;;###autoload
(defun +ert/run-all-tests ()
(interactive)
(ert-delete-all-tests)
(+ert--pre)
(ert-run-tests-interactively t))

View file

@ -1,120 +1,34 @@
;;; module-elisp --- all things lisp
;;; lang/emacs-lisp/config.el
(associate! emacs-lisp-mode :match "\\(/Cask\\|\\.\\(el\\|gz\\)\\)$")
(add-hook! emacs-lisp-mode '(eldoc-mode highlight-numbers-mode))
(add-hook! emacs-lisp-mode
'(+emacs-lisp|init
highlight-quoted-mode
auto-compile-on-save-mode))
(add-hook 'emacs-lisp-mode-hook 'doom/elisp-init)
(defun doom/elisp-init ()
(def-company-backend! emacs-lisp-mode (elisp yasnippet))
(def-repl! emacs-lisp-mode doom/elisp-inf-ielm)
(def-rotate! emacs-lisp-mode
:symbols (("t" "nil")
("let" "let*")
("when" "unless")
("append" "prepend")
("advice-add" "advice-remove")
("add-hook" "add-hook!" "remove-hook")))
(def-popup! "*ert*" :align below :size 20 :noselect t)
;; Don't affect lisp indentation (only `tab-width')
(setq editorconfig-indentation-alist
(delq (assq 'emacs-lisp-mode editorconfig-indentation-alist)
editorconfig-indentation-alist))
;; Real go-to-definition for elisp
(map! :map emacs-lisp-mode-map :m "gd" 'doom/elisp-find-function-at-pt)
(remove-hook 'emacs-lisp-mode-hook 'doom/elisp-init))
(add-hook 'emacs-lisp-mode-hook 'doom/elisp-hook)
(defun doom/elisp-hook ()
(defun +emacs-lisp|init ()
(setq mode-name "Elisp") ; [pedantry intensifies]
(add-hook 'before-save-hook 'delete-trailing-whitespace nil t)
(font-lock-add-keywords
nil `(("(\\(lambda\\)" (1 (doom/show-as )))
("(\\(\\(doom\\)\\([-:/|][^) ]*\\)?\\)[) \n]" (1 font-lock-builtin-face))
nil `(("(\\(lambda\\)" (1 (ignore (compose-region (match-beginning 1) (match-end 1) 'decompose-region))))
("(\\(\\(doom\\)\\([-:/|!][^) ]*\\)?\\)[) \n]" (1 font-lock-builtin-face))
;; Highlight doom macros (macros are fontified in emacs 25+)
(,(concat
"(\\(def-"
(regexp-opt '("electric" "project-type" "company-backend"
"builder" "repl" "text-obj" "tmp-excmd" "rotate"
"repeat" "yas-mode" "version-cmd" "docset" "popup"
"open-with"))
"!\\)")
(1 font-lock-keyword-face append))
(,(concat
"(\\("
(regexp-opt '("λ" "in" "map" "after" "shut-up" "add-hook"
"associate" "define-org-link" "ex" "ex-local"
"define-org-section" "set" "noop"))
"!\\)")
("(\\([^ ]+!\\)"
(1 font-lock-keyword-face append))
;; Ert
(,(concat
"("
(regexp-opt '("ert-deftest") t)
" \\([^ ]+\\)")
("(\\(ert-deftest\\) \\([^ ]+\\)"
(1 font-lock-keyword-face)
(2 font-lock-function-name-face))))
(add-hook 'before-save-hook 'delete-trailing-whitespace nil t)
(dolist (i '(("Evil Command" "\\(^\\s-*(evil-define-command +\\)\\(\\_<.+\\_>\\)" 2)
("Evil Operator" "\\(^\\s-*(evil-define-operator +\\)\\(\\_<.+\\_>\\)" 2)
("Package" "\\(^\\s-*(use-package +\\)\\(\\_<[^ \n]+\\_>\\)" 2)
(dolist (i '(("Evil Command" "\\(^\\s-*(evil-define-command +\\)\\(\\_<[^ ]+\\_>\\)" 2)
("Evil Operator" "\\(^\\s-*(evil-define-operator +\\)\\(\\_<[^ ]+\\_>\\)" 2)
("Package" "\\(^\\s-*(\\(use-package\\|package!\\) +\\)\\(\\_<[^ \n]+\\_>\\)" 3)
("Spaceline Segment" "\\(^\\s-*(spaceline-define-segment +\\)\\(\\_<.+\\_>\\)" 2)))
(push i imenu-generic-expression)))
;; Add new colors to helm-imenu
(after! helm-imenu
(defun helm-imenu-transformer (candidates)
(cl-loop for (k . v) in candidates
for types = (or (helm-imenu--get-prop k)
(list "Function" k))
for bufname = (buffer-name (marker-buffer v))
for disp1 = (mapconcat
(lambda (x)
(propertize
x 'face (cond ((string= x "Variables")
'font-lock-variable-name-face)
((or (string= x "Function")
(string-prefix-p "Evil " x t))
'font-lock-function-name-face)
((string= x "Types")
'font-lock-type-face)
((string= x "Package")
'font-lock-negation-char-face)
((string= x "Spaceline Segment")
'font-lock-string-face))))
types helm-imenu-delimiter)
for disp = (propertize disp1 'help-echo bufname)
collect
(cons disp (cons k v)))))
(after! auto-compile
(setq auto-compile-display-buffer nil
auto-compile-use-mode-line nil))
;;
(use-package highlight-quoted
:commands (highlight-quoted-mode)
:init (add-hook 'emacs-lisp-mode-hook 'highlight-quoted-mode))
(use-package slime :defer t
:config (setq inferior-lisp-program "clisp"))
(use-package auto-compile
:commands auto-compile-on-save-mode
:init (add-hook 'emacs-lisp-mode-hook 'auto-compile-on-save-mode)
:config (setq auto-compile-display-buffer nil))
;;
(def-project-type! emacs-ert "ert"
:modes (emacs-lisp-mode)
:match "/test/.+-test\\.el$"
:bind (:localleader
:n "tr" 'doom/ert-rerun-test
:n "ta" 'doom/ert-run-all-tests
:n "ts" 'doom/ert-run-test)
(add-hook 'ert-results-mode-hook 'doom-hide-mode-line-mode))
(provide 'module-elisp)
;;; module-elisp.el ends here
(after! slime
(setq inferior-lisp-program "clisp"))

View file

@ -0,0 +1,9 @@
;;; lang/emacs-lisp/packages.el
(associate! emacs-lisp-mode :match "\\(/Cask\\|\\.elc?\\(.gz\\)?\\)$")
(package! highlight-quoted :commands highlight-quoted-mode)
(package! auto-compile :commands auto-compile-on-save-mode)
(package! slime)