diff --git a/contrib/lang/emacs-lisp/README.md b/contrib/lang/emacs-lisp/README.md
index e7f8dce73..9057fb735 100644
--- a/contrib/lang/emacs-lisp/README.md
+++ b/contrib/lang/emacs-lisp/README.md
@@ -41,6 +41,7 @@ Key Binding | Description
SPC m , | toggle `lisp state`
SPC m t b | run tests of current buffer
SPC m t q | run `ert`
+SPC m d m | open [macrostep][] micro-state
### srefactor
@@ -54,4 +55,5 @@ Key Binding | Description
SPC m = o | format all on one line
SPC m = s | format current sexp
+[macrostep]: https://github.com/joddie/macrostep
[semantic-layer]: ../../semantic/README.md
diff --git a/contrib/lang/emacs-lisp/packages.el b/contrib/lang/emacs-lisp/packages.el
index 09ba58ca2..18e24ef0c 100644
--- a/contrib/lang/emacs-lisp/packages.el
+++ b/contrib/lang/emacs-lisp/packages.el
@@ -11,14 +11,15 @@
;;; License: GPLv3
(setq emacs-lisp-packages
- '(
- eldoc
- elisp-slime-nav
- evil
- semantic
- smartparens
- srefactor
- ))
+ '(
+ eldoc
+ elisp-slime-nav
+ evil
+ macrostep
+ semantic
+ smartparens
+ srefactor
+ ))
(defun emacs-lisp/post-init-eldoc ()
(add-hook 'emacs-lisp-mode-hook 'eldoc-mode))
@@ -34,6 +35,25 @@
"mgg" 'elisp-slime-nav-find-elisp-thing-at-point
"mhh" 'elisp-slime-nav-describe-elisp-thing-at-point))))
+(defun emacs-lisp/init-macrostep ()
+ (use-package macrostep
+ :defer t
+ :mode ("\\*.el\\'" . emacs-lisp-mode)
+ :init
+ (progn
+ (spacemacs|define-micro-state macrostep
+ :doc "[e] expand [c] collapse [n/N] next/previous [q] quit"
+ :disable-evil-leader t
+ :persistent t
+ :use-minibuffer t
+ :evil-leader-for-mode (emacs-lisp-mode . "mdm")
+ :bindings
+ ("e" macrostep-expand)
+ ("c" macrostep-collapse)
+ ("n" macrostep-next-macro)
+ ("N" macrostep-prev-macro)
+ ("q" macrostep-collapse-all :exit t)))))
+
(defun emacs-lisp/post-init-evil ()
(add-to-hook 'emacs-lisp-mode
'(lambda ()