summaryrefslogtreecommitdiff
path: root/lisp/simple.el
diff options
context:
space:
mode:
authorNoam Postavsky <npostavs@gmail.com>2017-03-14 09:23:08 -0400
committerNoam Postavsky <npostavs@gmail.com>2017-03-14 22:14:30 -0400
commitc66aaa61639e72a70a4f2c4bc73645048caebe53 (patch)
tree4212412986c469f27334972e44861c4296520fed /lisp/simple.el
parentfac0bb9cf76072941ae9dc9c7019929eb1a0f1dd (diff)
downloademacs-c66aaa61639e72a70a4f2c4bc73645048caebe53.tar.gz
Recomplexify ‘delete-trailing-whitespace’ by treating \n as whitespace again
Mostly reverts "Simplify ‘delete-trailing-whitespace’ by not treating \n as whitespace" from 2016-07-04. Setting \n to non-whitespace causes the regex engine to backtrack a lot when searching for "\\s-+$" (Bug#26079). * lisp/simple.el (delete-trailing-whitespace): Don't change newline syntax, search for "\\s-$" and then skip backward over trailing whitespace.
Diffstat (limited to 'lisp/simple.el')
-rw-r--r--lisp/simple.el7
1 files changed, 3 insertions, 4 deletions
diff --git a/lisp/simple.el b/lisp/simple.el
index f110c6f3267..369fbf71923 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -633,10 +633,9 @@ buffer if the variable `delete-trailing-lines' is non-nil."
(with-syntax-table (make-syntax-table (syntax-table))
;; Don't delete formfeeds, even if they are considered whitespace.
(modify-syntax-entry ?\f "_")
- ;; Treating \n as non-whitespace makes things easier.
- (modify-syntax-entry ?\n "_")
- (while (re-search-forward "\\s-+$" end-marker t)
- (let ((b (match-beginning 0)) (e (match-end 0)))
+ (while (re-search-forward "\\s-$" end-marker t)
+ (skip-syntax-backward "-" (line-beginning-position))
+ (let ((b (point)) (e (match-end 0)))
(when (region-modifiable-p b e)
(delete-region b e)))))
(if end