From 25833f5e5919a434a033963b2236a4e6e88a5a37 Mon Sep 17 00:00:00 2001 From: Deniz Dogan Date: Fri, 11 Feb 2011 19:25:06 +0100 Subject: [PATCH] * lisp/simple.el (delete-trailing-whitespace): New optional buffer bound parameters. --- lisp/ChangeLog | 5 +++++ lisp/simple.el | 30 +++++++++++++++++++----------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 043c8bebea6..68fdfbf4d2e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-02-11 Deniz Dogan + + * simple.el (delete-trailing-whitespace): New optional buffer + bound parameters. + 2011-02-11 Bastien Guerry * files.el (basic-save-buffer): save unmodified buffers when diff --git a/lisp/simple.el b/lisp/simple.el index 537c9a80838..f19525aba4c 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -614,22 +614,30 @@ On nonblank line, delete any immediately following blank lines." (if (looking-at "^[ \t]*\n\\'") (delete-region (point) (point-max))))) -(defun delete-trailing-whitespace () +(defun delete-trailing-whitespace (&optional start end) "Delete all the trailing whitespace across the current buffer. All whitespace after the last non-whitespace character in a line is deleted. This respects narrowing, created by \\[narrow-to-region] and friends. -A formfeed is not considered whitespace by this function." - (interactive "*") +A formfeed is not considered whitespace by this function. +If the region is active, only delete whitespace within the region." + (interactive (progn + (barf-if-buffer-read-only) + (if (use-region-p) + (list (region-beginning) (region-end)) + (list nil nil)))) (save-match-data (save-excursion - (goto-char (point-min)) - (while (re-search-forward "\\s-$" nil t) - (skip-syntax-backward "-" (save-excursion (forward-line 0) (point))) - ;; Don't delete formfeeds, even if they are considered whitespace. - (save-match-data - (if (looking-at ".*\f") - (goto-char (match-end 0)))) - (delete-region (point) (match-end 0)))))) + (let ((end-marker (copy-marker (or end (point-max)))) + (start (or start (point-min)))) + (goto-char start) + (while (re-search-forward "\\s-$" end-marker t) + (skip-syntax-backward "-" (save-excursion (forward-line 0) (point))) + ;; Don't delete formfeeds, even if they are considered whitespace. + (save-match-data + (if (looking-at ".*\f") + (goto-char (match-end 0)))) + (delete-region (point) (match-end 0))) + (set-marker end-marker nil))))) (defun newline-and-indent () "Insert a newline, then indent according to major mode. -- 2.39.5