summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Gonzalez <roman@users.noreply.github.com>2014-05-21 17:10:20 -0700
committerRoman Gonzalez <roman@users.noreply.github.com>2014-05-21 17:10:20 -0700
commitc740c9febdb6b99d8f7c4c93cf677da700c8f7d4 (patch)
tree8f20dfadf17c7f313cd46eb94b1189efde3f3be3
parentf663dd2aae0fbfb6574a2f1c4ee99faadce4b85d (diff)
parent8011f5a26d05ddf554df6d90ebe732e2df1e08da (diff)
Merge pull request #10 from expez/tweaks
Change C, D and Y to be in line with paredit-kill
-rw-r--r--evil-paredit.el62
1 files changed, 35 insertions, 27 deletions
diff --git a/evil-paredit.el b/evil-paredit.el
index b1778f8..d59a0e3 100644
--- a/evil-paredit.el
+++ b/evil-paredit.el
@@ -59,7 +59,9 @@
:motion evil-line
:move-point nil
(interactive "<R><x>")
- (evil-paredit-yank beg end type register))
+ (let* ((beg (point))
+ (end (evil-paredit-kill-end)))
+ (evil-paredit-yank beg end type register)))
(evil-define-operator evil-paredit-delete
(beg end type register yank-handler)
@@ -81,31 +83,35 @@ Save in REGISTER or in the kill-ring with YANK-HANDLER."
:motion nil
:keep-visual t
(interactive "<R><x>")
- ;; act linewise in Visual state
- (let* ((beg (or beg (point)))
- (end (or end beg)))
- (when (evil-visual-state-p)
- (unless (memq type '(line block))
- (let ((range (evil-expand beg end 'line)))
- (setq beg (evil-range-beginning range)
- end (evil-range-end range)
- type (evil-type range))))
- (evil-exit-visual-state))
- (cond
- ((eq type 'block)
- ;; equivalent to $d, i.e., we use the block-to-eol selection and
- ;; call `evil-delete'. In this case we fake the call to
- ;; `evil-end-of-line' by setting `temporary-goal-column' and
- ;; `last-command' appropriately as `evil-end-of-line' would do.
- (let ((temporary-goal-column most-positive-fixnum)
- (last-command 'next-line))
- (evil-paredit-delete beg end 'block register 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)))))
-
+ (let* ((beg (point))
+ (end (evil-paredit-kill-end)))
+ (evil-paredit-delete beg end
+ type register yank-handler)))
+
+(defun evil-paredit-kill-end ()
+ "Returns the position where paredit-kill would kill to"
+ (when (paredit-in-char-p) ; Move past the \ and prefix.
+ (backward-char 2)) ; (# in Scheme/CL, ? in elisp)
+ (let* ((eol (point-at-eol))
+ (end-of-list-p (save-excursion
+ (paredit-forward-sexps-to-kill (point) eol))))
+ (if end-of-list-p (progn (up-list) (backward-char)))
+ (cond ((paredit-in-string-p)
+ (if (save-excursion (paredit-skip-whitespace t (point-at-eol))
+ (eolp))
+ (kill-line)
+ (save-excursion
+ ;; Be careful not to split an escape sequence.
+ (if (paredit-in-string-escape-p)
+ (backward-char))
+ (min (point-at-eol)
+ (cdr (paredit-string-start+end-points))))))
+ ((paredit-in-comment-p)
+ eol)
+ (t (if (and (not end-of-list-p)
+ (eq (point-at-eol) eol))
+ eol
+ (point))))))
(evil-define-operator evil-paredit-change
(beg end type register yank-handler delete-func)
@@ -133,7 +139,9 @@ of the block."
"Change to end of line respecting parenthesis."
:motion evil-end-of-line
(interactive "<R><x><y>")
- (evil-paredit-change beg end type register yank-handler))
+ (let* ((beg (point))
+ (end (evil-paredit-kill-end)))
+ (evil-paredit-change beg end type register yank-handler)))
(evil-define-key 'normal evil-paredit-mode-map
(kbd "d") 'evil-paredit-delete