From c66aaa61639e72a70a4f2c4bc73645048caebe53 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Tue, 14 Mar 2017 09:23:08 -0400 Subject: [PATCH] =?utf8?q?Recomplexify=20=E2=80=98delete-trailing-whitespa?= =?utf8?q?ce=E2=80=99=20by=20treating=20\n=20as=20whitespace=20again?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- lisp/simple.el | 7 +++---- 1 file 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 -- 2.39.5