diff options
| -rw-r--r-- | evil-maps.el | 68 | ||||
| -rw-r--r-- | evil-vars.el | 10 | ||||
| -rw-r--r-- | evil.el | 1 |
3 files changed, 60 insertions, 19 deletions
diff --git a/evil-maps.el b/evil-maps.el index f57eedc..184942a 100644 --- a/evil-maps.el +++ b/evil-maps.el @@ -350,29 +350,60 @@ ;;; Insert state -(define-key evil-insert-state-map "\C-v" 'quoted-insert) -(define-key evil-insert-state-map "\C-k" 'evil-insert-digraph) -(define-key evil-insert-state-map "\C-o" 'evil-execute-in-normal-state) -(define-key evil-insert-state-map "\C-r" 'evil-paste-from-register) -(define-key evil-insert-state-map "\C-y" 'evil-copy-from-above) -(define-key evil-insert-state-map "\C-e" 'evil-copy-from-below) -(define-key evil-insert-state-map "\C-n" 'evil-complete-next) -(define-key evil-insert-state-map "\C-p" 'evil-complete-previous) -(define-key evil-insert-state-map "\C-x\C-n" 'evil-complete-next-line) -(define-key evil-insert-state-map "\C-x\C-p" 'evil-complete-previous-line) -(define-key evil-insert-state-map "\C-t" 'evil-shift-right-line) -(define-key evil-insert-state-map "\C-d" 'evil-shift-left-line) -(define-key evil-insert-state-map "\C-a" 'evil-paste-last-insertion) -(define-key evil-insert-state-map [remap delete-backward-char] 'evil-delete-backward-char-and-join) +(defvar evil-insert-state-bindings + `(("\C-v" . quoted-insert) + ("\C-k" . evil-insert-digraph) + ("\C-o" . evil-execute-in-normal-state) + ("\C-r" . evil-paste-from-register) + ("\C-y" . evil-copy-from-above) + ("\C-e" . evil-copy-from-below) + ("\C-n" . evil-complete-next) + ("\C-p" . evil-complete-previous) + ("\C-x\C-n" . evil-complete-next-line) + ("\C-x\C-p" . evil-complete-previous-line) + ("\C-t" . evil-shift-right-line) + ("\C-d" . evil-shift-left-line) + ("\C-a" . evil-paste-last-insertion) + ([remap delete-backward-char] . evil-delete-backward-char-and-join) + ,(if evil-want-C-w-delete + '("\C-w" . evil-delete-backward-word) + '("\C-w" . evil-window-map)) + ([mouse-2] . mouse-yank-primary)) + "Evil's bindings for insert state (for +`evil-insert-state-map'), excluding <delete>, <escape>, and +`evil-toggle-key'.") + +(defun evil-update-insert-state-bindings (&optional _option-name remove force) + "Update bindings in `evil-insert-state-map'. +If no arguments are given add the bindings specified in +`evil-insert-state-bindings'. If REMOVE is non nil, remove only +these bindings. Unless FORCE is non nil, this will not +overwriting existing bindings, which means bindings will not be +added if one already exists for a key and only default bindings +are removed. + +Note that <delete>, <escape> and `evil-toggle-key' are not +included in `evil-insert-state-bindings' by default." + (interactive) + (dolist (binding evil-insert-state-bindings) + (cond + ((and remove + (or force + ;; Only remove if the default binding has not changed + (eq (lookup-key evil-insert-state-map (car binding)) + (cdr binding)))) + (define-key evil-insert-state-map (car binding) nil)) + ((and (null remove) + (or force + ;; Check to see that nothing is bound here before adding + (null (lookup-key evil-insert-state-map (car binding))))) + (define-key evil-insert-state-map (car binding) (cdr binding)))))) + (define-key evil-insert-state-map [delete] 'delete-char) (define-key evil-insert-state-map [escape] 'evil-normal-state) (define-key evil-insert-state-map (read-kbd-macro evil-toggle-key) 'evil-emacs-state) -(if evil-want-C-w-delete - (define-key evil-insert-state-map "\C-w" 'evil-delete-backward-word) - (define-key evil-insert-state-map "\C-w" 'evil-window-map)) - ;;; Replace state (define-key evil-replace-state-map (kbd "DEL") 'evil-replace-backspace) @@ -390,7 +421,6 @@ (define-key evil-motion-state-map [down-mouse-1] 'evil-mouse-drag-region) (define-key evil-visual-state-map [mouse-2] 'evil-exit-visual-and-repeat) (define-key evil-normal-state-map [mouse-2] 'mouse-yank-primary) -(define-key evil-insert-state-map [mouse-2] 'mouse-yank-primary) ;; Ex (define-key evil-motion-state-map ":" 'evil-ex) diff --git a/evil-vars.el b/evil-vars.el index f970a1c..53ec3b0 100644 --- a/evil-vars.el +++ b/evil-vars.el @@ -29,6 +29,8 @@ (declare-function evil-add-command-properties "evil-common" (command &rest properties)) +(declare-function evil-update-insert-state-bindings "evil-maps" + (&optional _option-name remove force)) ;;; Hooks @@ -446,6 +448,14 @@ The default behavior is to yank the whole line." 'evil-yank-line :motion (if value 'evil-end-of-line 'evil-line)))) +(defcustom evil-disable-insert-state-bindings nil + "Whether insert state bindings should be used. Excludes +bindings for escape, delete and `evil-toggle-key'." + :group 'evil + :type 'boolean + :initialize #'evil-custom-initialize-pending-reset + :set #'evil-update-insert-state-bindings) + (defcustom evil-echo-state t "Whether to signal the current state in the echo area." :type 'boolean @@ -16,6 +16,7 @@ ;; Jonas Bernoulli <jonas at bernoul.li> ;; Jonathan Claggett <jclaggett at lonocloud.com> ;; José A. Romero L. <escherdragon at gmail.com> +;; Justin Burkett <justin@burkett.cc> ;; Lars Andersen <expez at expez.com> ;; Lintaro Ina <tarao.gnn at gmail.com> ;; Lukasz Wrzosek <wrzoski at mail.com> |
