branch: elpa/evil commit 00fca685479e772361765b13de4689099a328c28 Author: Tom Dalziel <tom...@hotmail.com> Commit: Tom Dalziel <33435574+tomd...@users.noreply.github.com>
Add C-h in insert + replace states (fixes #1577) --- evil-maps.el | 4 ++++ evil-vars.el | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/evil-maps.el b/evil-maps.el index a4d20aa87f..971cf7ab70 100644 --- a/evil-maps.el +++ b/evil-maps.el @@ -405,6 +405,8 @@ '("\C-w" . evil-window-map)) ,@(when evil-want-C-u-delete '(("\C-u" . evil-delete-back-to-indentation))) + ,@(when evil-want-C-h-delete + '(("\C-h" . evil-delete-back-to-indentation))) ([mouse-2] . mouse-yank-primary)) "Evil's bindings for insert & replace states. Used in `evil-insert-state-map' and `evil-replace-state-map', @@ -446,6 +448,8 @@ included in `evil-insert-state-bindings' by default." (dolist (binding evil-insert-state-bindings) (define-key evil-replace-state-map (car binding) (cdr binding))) (define-key evil-replace-state-map (kbd "DEL") 'evil-replace-backspace) +(when evil-want-C-h-delete + (define-key evil-replace-state-map "\C-h" 'evil-replace-backspace)) (define-key evil-replace-state-map [escape] 'evil-normal-state) (define-key evil-replace-state-map [insert] 'evil-append) diff --git a/evil-vars.el b/evil-vars.el index 0a0b14d2ea..72003ecd9a 100644 --- a/evil-vars.el +++ b/evil-vars.el @@ -514,15 +514,18 @@ ubiquity of prefix arguments." :group 'evil :set #'(lambda (sym value) (set-default sym value) - (when (boundp 'evil-insert-state-map) + (when (and (boundp 'evil-insert-state-map) + (boundp 'evil-replace-state-map)) (cond ((and (not value) (eq (lookup-key evil-insert-state-map (kbd "C-u")) 'evil-delete-back-to-indentation)) - (define-key evil-insert-state-map (kbd "C-u") nil)) + (define-key evil-insert-state-map (kbd "C-u") nil) + (define-key evil-replace-state-map (kbd "C-u") nil)) ((and value (not (lookup-key evil-insert-state-map (kbd "C-u")))) - (define-key evil-insert-state-map (kbd "C-u") 'evil-delete-back-to-indentation)))))) + (define-key evil-insert-state-map (kbd "C-u") 'evil-delete-back-to-indentation) + (define-key evil-replace-state-map (kbd "C-u") 'evil-delete-back-to-indentation)))))) (defcustom evil-want-C-w-delete t "Whether `C-w' deletes a word in Insert state." @@ -530,16 +533,38 @@ ubiquity of prefix arguments." :group 'evil :set #'(lambda (sym value) (set-default sym value) - (when (boundp 'evil-insert-state-map) + (when (and (boundp 'evil-insert-state-map) + (boundp 'evil-replace-state-map)) (cond ((and (not value) (eq (lookup-key evil-insert-state-map (kbd "C-w")) 'evil-delete-backward-word)) - (define-key evil-insert-state-map (kbd "C-w") 'evil-window-map)) + (define-key evil-insert-state-map (kbd "C-w") 'evil-window-map) + (define-key evil-replace-state-map (kbd "C-w") 'evil-window-map)) ((and value (eq (lookup-key evil-insert-state-map (kbd "C-w")) 'evil-window-map)) - (define-key evil-insert-state-map (kbd "C-w") 'evil-delete-backward-word)))))) + (define-key evil-insert-state-map (kbd "C-w") 'evil-delete-backward-word) + (define-key evil-replace-state-map (kbd "C-w") 'evil-delete-backward-word)))))) + +(defcustom evil-want-C-h-delete nil + "Whether `C-h' deletes a char in Insert state." + :type 'boolean + :group 'evil + :set #'(lambda (sym value) + (set-default sym value) + (when (and (boundp 'evil-insert-state-map) + (boundp 'evil-replace-state-map)) + (cond + ((and (not value) + (eq (lookup-key evil-insert-state-map (kbd "C-h")) + 'evil-delete-backward-char-and-join)) + (define-key evil-insert-state-map (kbd "C-h") nil) + (define-key evil-replace-state-map (kbd "C-h") nil)) + ((and value + (not (lookup-key evil-insert-state-map (kbd "C-h")))) + (define-key evil-insert-state-map (kbd "C-h") 'evil-delete-backward-char-and-join) + (define-key evil-replace-state-map (kbd "C-h") 'evil-replace-backspace)))))) (defcustom evil-want-C-g-bindings nil "Whether `C-g' postfix can be used in bindings."