diff options
author | Roman Gonzalez <roman@users.noreply.github.com> | 2014-05-21 17:10:20 -0700 |
---|---|---|
committer | Roman Gonzalez <roman@users.noreply.github.com> | 2014-05-21 17:10:20 -0700 |
commit | c740c9febdb6b99d8f7c4c93cf677da700c8f7d4 (patch) | |
tree | 8f20dfadf17c7f313cd46eb94b1189efde3f3be3 | |
parent | f663dd2aae0fbfb6574a2f1c4ee99faadce4b85d (diff) | |
parent | 8011f5a26d05ddf554df6d90ebe732e2df1e08da (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.el | 62 |
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 |