From bca09997261065676f8de1cc95525c757b253d9e Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Mon, 3 Aug 2015 23:00:49 -0400 Subject: [PATCH] core: add `:eval-after-load` keyword to `spacemmacs|evilify-map` macro --- core/core-evilify-keymap.el | 42 ++++++++++++++----------- core/tests/core-evilify-keymap-ftest.el | 25 +++++++++++++++ 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/core/core-evilify-keymap.el b/core/core-evilify-keymap.el index 55a1607fe..9e4d37224 100644 --- a/core/core-evilify-keymap.el +++ b/core/core-evilify-keymap.el @@ -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." diff --git a/core/tests/core-evilify-keymap-ftest.el b/core/tests/core-evilify-keymap-ftest.el index c1df033f0..0d23d7817 100644 --- a/core/tests/core-evilify-keymap-ftest.el +++ b/core/tests/core-evilify-keymap-ftest.el @@ -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)))))