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

View file

@ -310,3 +310,28 @@
(3 . (keymap (24 . func3)))) (3 . (keymap (24 . func3))))
(spacemacs//evilify-sort-keymap input-map))))) (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)))))