core: add :eval-after-load keyword to spacemmacs|evilify-map macro

This commit is contained in:
syl20bnr 2015-08-03 23:00:49 -04:00
parent 6c171fdc48
commit bca0999726
2 changed files with 49 additions and 18 deletions

View file

@ -14,26 +14,32 @@
(declare (indent 1))
(let* ((mode (plist-get props :mode))
(evilified-map (plist-get props :evilified-map))
(eval-after-load (plist-get props :eval-after-load))
(bindings (spacemacs/mplist-get props :bindings))
(defkey (when bindings `(evil-define-key 'evilified ,map ,@bindings))))
`(progn
(let ((sorted-map (spacemacs//evilify-sort-keymap
(or ,evilified-map evil-evilified-state-map)))
processed)
(mapc (lambda (map-entry)
(unless (or (member (car map-entry) processed)
;; don't care about evil-escape starter key
(and (boundp 'evil-escape-key-sequence)
(equal (car map-entry)
(defkey (when bindings `(evil-define-key 'evilified ,map ,@bindings)))
(body
`(progn
(let ((sorted-map (spacemacs//evilify-sort-keymap
(or ,evilified-map evil-evilified-state-map)))
processed)
(mapc (lambda (map-entry)
(unless (or (member (car map-entry) processed)
;; don't care about evil-escape starter key
(and (boundp 'evil-escape-key-sequence)
(equal
(car map-entry)
(elt evil-escape-key-sequence 0))))
(setq processed (spacemacs//evilify-event
,map ',map
(car map-entry) (cdr map-entry)))))
sorted-map))
(unless ,(null defkey)
(,@defkey))
(unless ,(null mode)
(spacemacs/evilify-configure-default-state ',mode)))))
(setq processed (spacemacs//evilify-event
,map ',map
(car map-entry) (cdr map-entry)))))
sorted-map))
(unless ,(null defkey)
(,@defkey))
(unless ,(null mode)
(spacemacs/evilify-configure-default-state ',mode)))))
(if (null eval-after-load)
`(,@body)
`(eval-after-load ',eval-after-load '(,@body)))))
(defun spacemacs/evilify-configure-default-state (mode)
"Configure default state for the passed mode."

View file

@ -310,3 +310,28 @@
(3 . (keymap (24 . func3))))
(spacemacs//evilify-sort-keymap input-map)))))
;; eval-after-load
(ert-deftest test-evilify-map--eval-after-load-already-loaded ()
(let ((evil-evilified-state-map (let ((evil-map (make-sparse-keymap)))
(define-key evil-map "s" 'evil-func)
evil-map))
(input-map (make-sparse-keymap)))
(define-key input-map "s" 'func)
;; pass a feature already loaded at the time of calling
(spacemacs|evilify-map input-map :eval-after-load core-funcs)
(should (equal '((115 . func-or-evil-func--evilified-input-map-s)
(83 . func--evilified-input-map-S))
(spacemacs//evilify-sort-keymap input-map)))))
(ert-deftest test-evilify-map--eval-after-load-not-loaded ()
(let ((evil-evilified-state-map (let ((evil-map (make-sparse-keymap)))
(define-key evil-map "s" 'evil-func)
evil-map))
(input-map (make-sparse-keymap)))
(define-key input-map "s" 'func)
(spacemacs|evilify-map input-map :eval-after-load dummy-feature)
;; unmodified keymap since `dummy-feature' is not loaded
(should (equal '((115 . func))
(spacemacs//evilify-sort-keymap input-map)))))