diff options
author | expez <expez@expez.com> | 2013-12-23 13:27:44 +0100 |
---|---|---|
committer | expez <expez@expez.com> | 2013-12-23 13:39:43 +0100 |
commit | a323aa2269954ed4b1b51bf9fa94ec19e6ef66c3 (patch) | |
tree | 95e1af9523b1d7b3b522d467c4d62262a3a7ec3f | |
parent | f663dd2aae0fbfb6574a2f1c4ee99faadce4b85d (diff) |
Make evil-paredit-delete-line work like paredit-kill.
Previously when we had this situation:
(progn
(foo)
|(bar (baz)))
and hit D we would get an error.
Now we get this:
(progn
(foo)
|))
-rw-r--r-- | evil-paredit.el | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/evil-paredit.el b/evil-paredit.el index b1778f8..4115c2d 100644 --- a/evil-paredit.el +++ b/evil-paredit.el @@ -83,7 +83,15 @@ Save in REGISTER or in the kill-ring with YANK-HANDLER." (interactive "<R><x>") ;; act linewise in Visual state (let* ((beg (or beg (point))) - (end (or end beg))) + (end (or end beg)) + ;; NOTE the following count will be off when it encounters + ;; parens in strings. + (paren-count (count-matches "(" (line-beginning-position) + (line-end-position))) + (last-balanced-paren (evil-paredit-position-of + "\)" + (line-beginning-position) + (line-end-position)))) (when (evil-visual-state-p) (unless (memq type '(line block)) (let ((range (evil-expand beg end 'line))) @@ -103,10 +111,18 @@ Save in REGISTER or in the kill-ring with YANK-HANDLER." ((eq type 'line) (evil-paredit-delete beg end type register yank-handler)) (t - (evil-paredit-delete beg (line-end-position) - type register yank-handler))))) + (evil-paredit-delete beg last-balanced-paren + type register yank-handler))))) +(defun evil-paredit-position-of (regexp start stop &optional nth) + "Returns the buffer position of the `nth' occurrence of + `regexp' between buffer positions `start' and `stop'" + (save-excursion + (goto-char start) + (re-search-forward regexp stop (or nth 1)) + (point))) + (evil-define-operator evil-paredit-change (beg end type register yank-handler delete-func) "Change text from BEG to END with TYPE respecting parenthesis. |