2015-11-24 03:44:17 -05:00
|
|
|
;;; module-lisp --- all things lisp
|
2015-06-15 09:06:10 +02:00
|
|
|
;; see lib/elisp-defuns.el
|
|
|
|
|
2016-02-23 13:11:16 -05:00
|
|
|
(add-hook! emacs-lisp-mode '(turn-on-eldoc-mode flycheck-mode))
|
2015-06-15 09:06:10 +02:00
|
|
|
|
2016-02-20 15:32:19 -05:00
|
|
|
;; Pop-up REPL
|
|
|
|
(defun narf-inf-ielm ()
|
|
|
|
(ielm)
|
|
|
|
(let ((buf (current-buffer)))
|
|
|
|
(bury-buffer)
|
|
|
|
(pop-to-buffer buf)))
|
|
|
|
(define-repl! emacs-lisp-mode narf-inf-ielm)
|
|
|
|
|
2015-06-15 09:06:10 +02:00
|
|
|
;; [pedantry intensifies]
|
|
|
|
(defadvice emacs-lisp-mode (after emacs-lisp-mode-rename-modeline activate)
|
|
|
|
(setq mode-name "Elisp"))
|
|
|
|
|
2015-06-19 16:09:41 +02:00
|
|
|
(defun narf-elisp-auto-compile ()
|
2015-06-24 15:47:25 +02:00
|
|
|
(when (narf/is-recompilable-p)
|
2015-06-19 16:09:41 +02:00
|
|
|
(narf:compile-el)))
|
|
|
|
|
|
|
|
(add-hook! emacs-lisp-mode
|
2015-11-09 15:55:03 -05:00
|
|
|
(add-hook 'before-save-hook 'delete-trailing-whitespace nil t)
|
2015-11-20 04:00:38 -05:00
|
|
|
(add-hook 'after-save-hook 'narf-elisp-auto-compile nil t)
|
|
|
|
|
2015-12-11 16:51:04 -05:00
|
|
|
(let ((header-face 'font-lock-constant-face))
|
2016-02-22 15:23:14 -05:00
|
|
|
(add-to-list 'imenu-generic-expression
|
|
|
|
`("Evil Command" "\\(^\\s-*(evil-define-command +\\)\\(\\_<.+\\_>\\)" 2))
|
|
|
|
(add-to-list 'imenu-generic-expression
|
|
|
|
`("Evil Operator" "\\(^\\s-*(evil-define-operator +\\)\\(\\_<.+\\_>\\)" 2))
|
2015-12-11 16:51:04 -05:00
|
|
|
(add-to-list 'imenu-generic-expression
|
|
|
|
`("Package" "\\(^\\s-*(use-package +\\)\\(\\_<.+\\_>\\)" 2))
|
|
|
|
(add-to-list 'imenu-generic-expression
|
|
|
|
`("Spaceline Segment" "\\(^\\s-*(spaceline-define-segment +\\)\\(\\_<.+\\_>\\)" 2))))
|
|
|
|
|
|
|
|
;; 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)
|
2016-02-22 15:23:14 -05:00
|
|
|
((or (string= x "Function")
|
|
|
|
(string-prefix-p "Evil " x t))
|
2015-12-11 16:51:04 -05:00
|
|
|
'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)))))
|
2015-11-07 16:57:24 -05:00
|
|
|
|
2016-01-29 07:04:03 -05:00
|
|
|
(font-lock-add-keywords
|
|
|
|
'emacs-lisp-mode
|
|
|
|
`(("(\\(lambda\\)"
|
|
|
|
(1 (narf/show-as ?λ)))
|
|
|
|
;; Highlight narf macros (macros are fontified in emacs 25+)
|
|
|
|
(,(concat
|
|
|
|
"(\\("
|
|
|
|
(regexp-opt '("λ" "in" "map" "after" "exmap" "shut-up"
|
|
|
|
"add-hook" "associate" "open-with" "define-repl"
|
|
|
|
"define-builder" "narf-space-setup" "define-env-command"
|
2016-02-20 15:30:30 -05:00
|
|
|
"define-text-object" "add-yas-minor-mode" "define-docset"
|
2016-03-01 02:03:31 -05:00
|
|
|
"define-org-link!" "define-company-backend" "define-org-section"))
|
2016-01-29 07:04:03 -05:00
|
|
|
"!\\)")
|
|
|
|
(1 font-lock-keyword-face append))))
|
2015-11-10 18:10:32 -05:00
|
|
|
|
2015-06-15 09:06:10 +02:00
|
|
|
;; Real go-to-definition for elisp
|
2015-11-30 05:31:20 -05:00
|
|
|
(map! :map emacs-lisp-mode-map
|
|
|
|
:m "gd" 'narf/elisp-find-function-at-pt
|
|
|
|
:m "gD" 'narf/elisp-find-function-at-pt-other-window)
|
2015-06-15 09:06:10 +02:00
|
|
|
|
2015-11-24 03:44:17 -05:00
|
|
|
(use-package slime :defer t
|
|
|
|
:config
|
|
|
|
(setq inferior-lisp-program "clisp"))
|
|
|
|
|
|
|
|
(provide 'module-lisp)
|
2015-06-15 09:06:10 +02:00
|
|
|
;;; module-elisp.el ends here
|