aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--evil-maps.el68
-rw-r--r--evil-vars.el10
-rw-r--r--evil.el1
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
diff --git a/evil.el b/evil.el
index a9469c4..24ea6b1 100644
--- a/evil.el
+++ b/evil.el
@@ -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>