diff options
| author | Justin Burkett <justin@burkett.cc> | 2017-01-25 12:44:07 -0500 |
|---|---|---|
| committer | Eivind Fonn <evfonn@gmail.com> | 2019-11-29 13:34:19 +0100 |
| commit | fa54bb984d73f08422d22545e166fc95c5c70876 (patch) | |
| tree | 71bb1aa98455ab52943966693c75f51ad9b00da2 /evil-core.el | |
| parent | 29a29e56046b9b5ec7cab268528851ceb21e4b07 (diff) | |
evil-core.el: Add <leader> functionality
Add evil-send-leader and evil-send-localleader which will push the symbol
<leader> or <localleader> into the unread-command-events list. This allows one
to bind a key to evil-send-leader to make it a leader key and activate bindings
like the following.
(defun hi ()
(interactive)
(message "hi"))
(define-key evil-normal-state-map (kbd "<leader> h") 'hi)
For convenience, evil-set-leader can be used as follows
(evil-set-leader 'normal (kbd "C-c"))
An optional argument makes it a localleader.
Diffstat (limited to 'evil-core.el')
| -rw-r--r-- | evil-core.el | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/evil-core.el b/evil-core.el index 4cac4a5..92c9402 100644 --- a/evil-core.el +++ b/evil-core.el @@ -972,6 +972,36 @@ A return value of t means all states." (t state)))) +(defun evil-send-leader () + "Put symbol leader in `unread-command-events' to trigger any +<leader> bindings." + (interactive) + (setq prefix-arg current-prefix-arg) + (push '(t . leader) unread-command-events)) + +(defun evil-send-localleader () + "Put symbol localleader in `unread-command-events' to trigger any +<localleader> bindings." + (interactive) + (setq prefix-arg current-prefix-arg) + (push '(t. localleader) unread-command-events)) + +(defun evil-set-leader (state key &optional localleader) + "Set KEY to trigger <leader> bindings in STATE. +KEY should be in the form produced by `kbd'. STATE is one of +`normal', `insert', `visual', `replace', `operator', `motion', +`emacs', a list of one or more of these, or nil. nil means all of +the above. If LOCAL is non-nil, set localleader instead." + (let* ((all-states '(normal insert visual replace operator motion emacs)) + (states (cond ((listp state) state) + ((member state all-states) (list state)) + ((null state) all-states) + ;; Maybe throw error here + (t (list state)))) + (binding (if localleader 'evil-send-localleader 'evil-send-leader))) + (dolist (state states) + (evil-global-set-key state key binding)))) + (defmacro evil-define-key (state keymap key def &rest bindings) "Create a STATE binding from KEY to DEF for KEYMAP. STATE is one of normal, insert, visual, replace, operator, |
