Mercurial > emacs
changeset 103417:5cf7afafabf1
* simple.el (kill-visual-line): Rewrite (Bug#3437). Don't try to
handle kill-whole-line, as it doesn't make sense in this context.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 13 Jun 2009 18:56:07 +0000 |
parents | b123da90f8cf |
children | 1df3381b5a57 |
files | lisp/ChangeLog lisp/simple.el |
diffstat | 2 files changed, 21 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Sat Jun 13 17:15:40 2009 +0000 +++ b/lisp/ChangeLog Sat Jun 13 18:56:07 2009 +0000 @@ -1,3 +1,8 @@ +2009-06-13 Chong Yidong <cyd@stupidchicken.com> + + * simple.el (kill-visual-line): Rewrite (Bug#3437). Don't try to + handle kill-whole-line, as it doesn't make sense in this context. + 2009-06-12 Sam Steingold <sds@gnu.org> * vc-hg.el (vc-hg-log-switches): Add defcustom.
--- a/lisp/simple.el Sat Jun 13 17:15:40 2009 +0000 +++ b/lisp/simple.el Sat Jun 13 18:56:07 2009 +0000 @@ -4471,20 +4471,10 @@ (defun kill-visual-line (&optional arg) "Kill the rest of the visual line. -If there are only whitespace characters there, kill through the -newline as well. - -With prefix argument ARG, kill that many lines from point. -Negative arguments kill lines backward. -With zero argument, kill the text before point on the current line. - -When calling from a program, nil means \"no arg\", -a number counts as a prefix arg. - -If `kill-whole-line' is non-nil, then this command kills the whole line -including its terminating newline, when used at the beginning of a line -with no argument. As a consequence, you can always kill a whole line -by typing \\[beginning-of-line] \\[kill-line]. +With prefix argument ARG, kill that many visual lines from point. +If ARG is negative, kill visual lines backward. +If ARG is zero, kill the text before point on the current visual +line. If you want to append the killed line to the last killed text, use \\[append-next-kill] before \\[kill-line]. @@ -4495,29 +4485,20 @@ \(If the variable `kill-read-only-ok' is non-nil, then this won't even beep.)" (interactive "P") - (let ((opoint (point)) - (line-move-visual t) - end) - ;; It is better to move point to the other end of the kill before - ;; killing. That way, in a read-only buffer, point moves across - ;; the text that is copied to the kill ring. The choice has no - ;; effect on undo now that undo records the value of point from - ;; before the command was run. + ;; Like in `kill-line', it's better to move point to the other end + ;; of the kill before killing. + (let ((opoint (point))) (if arg (vertical-motion (prefix-numeric-value arg)) - (if (eobp) - (signal 'end-of-buffer nil)) - (setq end (save-excursion - (end-of-visual-line) (point))) - (if (or (save-excursion - ;; If trailing whitespace is visible, - ;; don't treat it as nothing. - (unless show-trailing-whitespace - (skip-chars-forward " \t" end)) - (= (point) end)) - (and kill-whole-line (bolp))) - (line-move 1) - (goto-char end))) + (end-of-visual-line 1) + (if (= (point) opoint) + (vertical-motion 1) + ;; Skip any trailing whitespace at the end of the visual line. + ;; We used to do this only if `show-trailing-whitespace' is + ;; nil, but that's wrong; the correct thing would be to check + ;; whether the trailing whitespace is highlighted. But, it's + ;; OK to just do this unconditionally. + (skip-chars-forward " \t"))) (kill-region opoint (point)))) (defun next-logical-line (&optional arg try-vscroll)