@map: better no-evil support; better prefixes; :prefix now evaluated
This commit is contained in:
parent
774f55e867
commit
85a5d7b5ac
1 changed files with 39 additions and 29 deletions
|
@ -152,7 +152,6 @@ Examples:
|
||||||
;; Register keywords for proper indentation (see `@map')
|
;; Register keywords for proper indentation (see `@map')
|
||||||
(put ':prefix 'lisp-indent-function 'defun)
|
(put ':prefix 'lisp-indent-function 'defun)
|
||||||
(put ':map 'lisp-indent-function 'defun)
|
(put ':map 'lisp-indent-function 'defun)
|
||||||
(put ':map* 'lisp-indent-function 'defun)
|
|
||||||
(put ':after 'lisp-indent-function 'defun)
|
(put ':after 'lisp-indent-function 'defun)
|
||||||
(put ':when 'lisp-indent-function 'defun)
|
(put ':when 'lisp-indent-function 'defun)
|
||||||
(put ':unless 'lisp-indent-function 'defun)
|
(put ':unless 'lisp-indent-function 'defun)
|
||||||
|
@ -229,13 +228,23 @@ Example
|
||||||
|
|
||||||
;; it's a flag
|
;; it's a flag
|
||||||
((keywordp key)
|
((keywordp key)
|
||||||
(when (cond ((eq key :leader)
|
(when (memq key '(:leader :localleader))
|
||||||
(push (or +evil-leader ",") rest))
|
(if (not (featurep '+evil))
|
||||||
((eq key :localleader)
|
(setq rest nil
|
||||||
(push (or +evil-localleader "\\") rest)))
|
key :ignore)
|
||||||
(setq key :prefix))
|
(cond ((eq key :leader)
|
||||||
|
(push '+evil-leader rest))
|
||||||
|
((eq key :localleader)
|
||||||
|
(push '+evil-localleader rest)))
|
||||||
|
(setq key :prefix)))
|
||||||
(pcase key
|
(pcase key
|
||||||
(:prefix (setq prefix (concat prefix (kbd (pop rest)))))
|
(:ignore)
|
||||||
|
(:prefix
|
||||||
|
(let ((def (pop rest)))
|
||||||
|
(setq prefix
|
||||||
|
(if (or (symbolp def) (listp def))
|
||||||
|
`(vconcat ,prefix (if (stringp ,def) (kbd ,def) ,def))
|
||||||
|
`(vconcat ,prefix ,(if (stringp def) (kbd def) def))))))
|
||||||
(:map (setq keymaps (-list (pop rest))))
|
(:map (setq keymaps (-list (pop rest))))
|
||||||
(:unset `((@map ,(kbd (pop rest)))))
|
(:unset `((@map ,(kbd (pop rest)))))
|
||||||
(:after (prog1 `((@after ,(pop rest) (@map ,@rest))) (setq rest '())))
|
(:after (prog1 `((@after ,(pop rest) (@map ,@rest))) (setq rest '())))
|
||||||
|
@ -266,31 +275,32 @@ Example
|
||||||
(when (stringp key)
|
(when (stringp key)
|
||||||
(setq key (kbd key)))
|
(setq key (kbd key)))
|
||||||
(when prefix
|
(when prefix
|
||||||
(setq key (if (vectorp key) (vconcat prefix key) (concat prefix key))))
|
(setq key (append prefix (list 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))
|
||||||
(push
|
(push (cond ((and keymaps states)
|
||||||
(cond ((and keymaps states)
|
(unless (featurep 'evil)
|
||||||
(throw 'skip 'evil)
|
(throw 'skip 'evil))
|
||||||
(macroexp-progn
|
(macroexp-progn
|
||||||
(mapcar (lambda (keymap) `(evil-define-key* ',states ,keymap ,key ,def))
|
(mapcar (lambda (keymap) `(evil-define-key* ',states ,keymap ,key ,def))
|
||||||
keymaps)))
|
keymaps)))
|
||||||
(keymaps
|
(keymaps
|
||||||
(macroexp-progn
|
(macroexp-progn
|
||||||
(mapcar (lambda (keymap) `(define-key ,keymap ,key ,def))
|
(mapcar (lambda (keymap) `(define-key ,keymap ,key ,def))
|
||||||
keymaps)))
|
keymaps)))
|
||||||
(states
|
(states
|
||||||
(throw 'skip 'evil)
|
(unless (featurep 'evil)
|
||||||
(macroexp-progn
|
(throw 'skip 'evil))
|
||||||
(mapcar (lambda (state)
|
(macroexp-progn
|
||||||
`(define-key
|
(mapcar (lambda (state)
|
||||||
(evil-state-property ',state ,(if local :local-keymap :keymap) t)
|
`(define-key
|
||||||
,key ,def))
|
,(intern (format "evil-%s-state-%smap" state (if local "local-" "")))
|
||||||
states)))
|
,key ,def))
|
||||||
(t `(,(if local 'local-set-key 'global-set-key)
|
states)))
|
||||||
,key ,def)))
|
(t `(,(if local 'local-set-key 'global-set-key)
|
||||||
forms))
|
,key ,def)))
|
||||||
|
forms))
|
||||||
(setq states '()
|
(setq states '()
|
||||||
local nil)))
|
local nil)))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue