Refactor map! (and update for new evil-define-key)

This commit is contained in:
Henrik Lissner 2016-05-20 01:47:11 -04:00
parent 83e13e4df6
commit c24b96e1ac

View file

@ -185,18 +185,19 @@ Examples:
(while rest (while rest
(setq key (pop rest)) (setq key (pop rest))
(push (push
(reverse
(cond ((listp key) ; it's a sub exp (cond ((listp key) ; it's a sub exp
`(,(macroexpand `(map! ,@key)))) `(,(macroexpand `(map! ,@key))))
((keywordp key) ((keywordp key)
(when (memq key '(:leader :localleader)) (when (memq key '(:leader :localleader))
(push (pcase key (push (cond ((eq key :leader)
(:leader narf-leader-prefix) narf-leader-prefix)
(:localleader narf-localleader-prefix)) ((eq key :localleader)
narf-localleader-prefix))
rest) rest)
(setq key :prefix)) (setq key :prefix))
(pcase key (pcase key
;; TODO: Data checks
(:prefix (setq prefix (concat prefix (kbd (pop rest)))) nil) (:prefix (setq prefix (concat prefix (kbd (pop rest)))) nil)
(:map (setq keymaps (-list (pop rest))) nil) (:map (setq keymaps (-list (pop rest))) nil)
(:unset `(,(macroexpand `(map! ,(kbd (pop rest)) nil)))) (:unset `(,(macroexpand `(map! ,(kbd (pop rest)) nil))))
@ -206,7 +207,7 @@ Examples:
(otherwise ; might be a state prefix (otherwise ; might be a state prefix
(mapc (lambda (letter) (mapc (lambda (letter)
(if (assoc letter state-map) (if (assoc letter state-map)
(add-to-list 'states (cdr (assoc letter state-map))) (push (cdr (assoc letter state-map)) states)
(user-error "Invalid mode prefix %s in key %s" letter key))) (user-error "Invalid mode prefix %s in key %s" letter key)))
(split-string (substring (symbol-name key) 1) "" t)) (split-string (substring (symbol-name key) 1) "" t))
(unless states (unless states
@ -225,15 +226,14 @@ Examples:
(user-error "Map has no definition for %s" key)) (user-error "Map has no definition for %s" key))
(setq def (pop rest)) (setq def (pop rest))
(let (out-forms) (let (out-forms)
(dolist (keymap keymaps) (mapc (lambda (keymap)
(if (not states) (if states
(add-to-list 'out-forms `(evil-define-key nil ,keymap ,key ,def) t) (push `(evil-define-key ',states ,keymap ,key ,def) out-forms)
(dolist (state states) (push `(define-key ,keymap ,key ,def) out-forms)))
(add-to-list 'out-forms `(evil-define-key ',state ,keymap ,key ,def) t)))) keymaps)
(setq states '()) (setq states '())
out-forms)) out-forms))
(t (user-error "Invalid key %s" key))))
(t (user-error "Invalid key %s" key)))
forms) forms)
(setq i (1+ i))) (setq i (1+ i)))
`(progn ,@(apply #'nconc (delete nil (delete (list nil) (reverse forms)))))))) `(progn ,@(apply #'nconc (delete nil (delete (list nil) (reverse forms))))))))