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