aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Dalziel <tom_dl@hotmail.com>2021-12-14 21:05:58 +0000
committerTom Dalziel <33435574+tomdl89@users.noreply.github.com>2021-12-19 18:29:22 +0100
commita4b19105b930498973d96d879c0c8d846840fa8e (patch)
treea64ae1374329f48e512f53efae5f2e4c1a72c116
parentdd13874ff759ece05cbe47d10549c25ee86bff2f (diff)
Replace state evil-delete-backward-word
-rw-r--r--evil-commands.el19
-rw-r--r--evil-tests.el46
2 files changed, 38 insertions, 27 deletions
diff --git a/evil-commands.el b/evil-commands.el
index e764857..d34abfd 100644
--- a/evil-commands.el
+++ b/evil-commands.el
@@ -1578,16 +1578,15 @@ be joined with the previous line if and only if
(evil-define-command evil-delete-backward-word ()
"Delete previous word."
- (if (and (bolp) (not (bobp)))
- (progn
- (unless evil-backspace-join-lines (user-error "Beginning of line"))
- (delete-char -1))
- (delete-region (max
- (save-excursion
- (evil-backward-word-begin)
- (point))
- (line-beginning-position))
- (point))))
+ (let ((beg (save-excursion (evil-backward-word-begin) (point)))
+ (end (point)))
+ (cond
+ ((evil-replace-state-p) (while (< beg (point))
+ (evil-replace-backspace)))
+ ((or (not (bolp)) (bobp)) (delete-region (max beg (line-beginning-position))
+ end))
+ (evil-backspace-join-lines (delete-char -1))
+ (t (user-error "Beginning of line")))))
(evil-define-command evil-delete-back-to-indentation ()
"Delete back to the first non-whitespace character.
diff --git a/evil-tests.el b/evil-tests.el
index c17c97c..2cd80bd 100644
--- a/evil-tests.el
+++ b/evil-tests.el
@@ -2079,24 +2079,36 @@ ine3 line3 line3 l\n")))
"line1\n\n[\n]last line\n")))
(ert-deftest evil-test-delete-backward-word ()
- "Test `evil-delete-backward-word' in insert state."
+ "Test `evil-delete-backward-word' in insert & replace states."
:tags '(evil)
- (let ((evil-backspace-join-lines t))
- (evil-test-buffer
- "abc def\n ghi j[k]l\n"
- ("i" (kbd "C-w"))
- "abc def\n ghi [k]l\n"
- ((kbd "C-w"))
- "abc def\n [k]l\n"
- ((kbd "C-w"))
- "abc def\n[k]l\n"
- ((kbd "C-w"))
- "abc def[k]l\n"))
- (let (evil-backspace-join-lines)
- (evil-test-buffer
- "abc def\n[k]l\n"
- (should-error (execute-kbd-macro (concat "i" (kbd "C-w"))))
- "abc def\n[k]l\n")))
+ (ert-info ("evil-delete-backward-word in insert state")
+ (let ((evil-backspace-join-lines t))
+ (evil-test-buffer
+ "abc def\n ghi j[k]l\n"
+ ("i" (kbd "C-w"))
+ "abc def\n ghi [k]l\n"
+ ((kbd "C-w"))
+ "abc def\n [k]l\n"
+ ((kbd "C-w"))
+ "abc def\n[k]l\n"
+ ((kbd "C-w"))
+ "abc def[k]l\n"))
+ (let (evil-backspace-join-lines)
+ (evil-test-buffer
+ "abc def\n[k]l\n"
+ (should-error (execute-kbd-macro (concat "i" (kbd "C-w"))))
+ "abc def\n[k]l\n")))
+ (ert-info ("evil-delete-backward-word in replace state")
+ (evil-test-buffer
+ "alpha bravo [c]harlie delta"
+ ("R" "one two")
+ "alpha bravo one two[ ]delta"
+ ("\C-w")
+ "alpha bravo one [l]ie delta"
+ ("\C-w")
+ "alpha bravo [c]harlie delta"
+ ("\C-w")
+ "alpha [b]ravo charlie delta")))
(ert-deftest evil-test-delete-back-to-indentation ()
"Test `evil-delete-back-to-indentation' in insert state."