Refactor map! (and update for new evil-define-key)
This commit is contained in:
parent
83e13e4df6
commit
c24b96e1ac
1 changed files with 47 additions and 47 deletions
|
@ -185,55 +185,55 @@ Examples:
|
||||||
(while rest
|
(while rest
|
||||||
(setq key (pop rest))
|
(setq key (pop rest))
|
||||||
(push
|
(push
|
||||||
(cond ((listp key) ; it's a sub exp
|
(reverse
|
||||||
`(,(macroexpand `(map! ,@key))))
|
(cond ((listp key) ; it's a sub exp
|
||||||
|
`(,(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)
|
||||||
rest)
|
narf-localleader-prefix))
|
||||||
(setq key :prefix))
|
rest)
|
||||||
(pcase key
|
(setq key :prefix))
|
||||||
;; TODO: Data checks
|
(pcase key
|
||||||
(: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))))
|
||||||
(:after (prog1 `((after! ,(pop rest) ,(macroexpand `(map! ,@rest)))) (setq rest '())))
|
(:after (prog1 `((after! ,(pop rest) ,(macroexpand `(map! ,@rest)))) (setq rest '())))
|
||||||
(:when (prog1 `((if ,(pop rest) ,(macroexpand `(map! ,@rest)))) (setq rest '())))
|
(:when (prog1 `((if ,(pop rest) ,(macroexpand `(map! ,@rest)))) (setq rest '())))
|
||||||
(:unless (prog1 `((if (not ,(pop rest)) ,(macroexpand `(map! ,@rest)))) (setq rest '())))
|
(:unless (prog1 `((if (not ,(pop rest)) ,(macroexpand `(map! ,@rest)))) (setq rest '())))
|
||||||
(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
|
||||||
(user-error "Unrecognized keyword %s" key)) nil)))
|
(user-error "Unrecognized keyword %s" key)) nil)))
|
||||||
|
|
||||||
;; It's a key-def pair
|
;; It's a key-def pair
|
||||||
((or (stringp key)
|
((or (stringp key)
|
||||||
(characterp key)
|
(characterp key)
|
||||||
(vectorp key))
|
(vectorp key))
|
||||||
(when (stringp key)
|
(when (stringp key)
|
||||||
(setq key (kbd key)))
|
(setq key (kbd key)))
|
||||||
(when prefix
|
(when prefix
|
||||||
(setq key (cond ((vectorp key) (vconcat prefix key))
|
(setq key (cond ((vectorp key) (vconcat prefix key))
|
||||||
(t (concat prefix key)))))
|
(t (concat prefix key)))))
|
||||||
(unless (> (length rest) 0)
|
(unless (> (length rest) 0)
|
||||||
(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))))))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue