emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Proposal: diff-remove-trailing-blanks


From: Vinicius Jose Latorre
Subject: Re: Proposal: diff-remove-trailing-blanks
Date: Sat, 26 Apr 2008 23:30:26 -0300
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.13) Gecko/20080313 SeaMonkey/1.1.9


What relevant things would you like to see (or to be done) in a diff buffer?
Here, we are interested on parts of the buffer, we don't care much about
trailing whitespace out of the diff part that shows changed lines. That
is, we are not interested on trailing whitespace on context lines, nor
on those that are artifacts of diff-mode.
Hummm, I'm confused, the original mail said:

 "When on a buffer that contains a diff, inspects the
differences and removes trailing whitespace (spaces, tabs) from
the lines modified or introduced by this diff. Shows a message
with the name of the altered buffers, which are unsaved.  If a
file referenced on the diff has no buffer and needs to be fixed,
a buffer visiting that file is created."


So, I thought it was to remove trailing whitespaces from a diff buffer.

The "removing" part is accomplished by my function. We are discussing
the "displaying" part, which shows to the user that there is trailing
whitespace to be removed.

But I'm afraid I confused things out relating `show-trailing-whitespace'
to whitespace-mode'.

Well, both parts, the "removing" part and the "displaying" part, related with trailing whitespaces can be done by whitespace-mode.

Does the following function do the job?

(defun diff-remove-trailing-blanks ()
 "When on a buffer that contains a diff, inspects the
differences and removes trailing whitespace (spaces, tabs).
Shows a message with the name of the altered buffers, which are
unsaved.  If a file referenced on the diff has no buffer and
needs to be fixed, a buffer visiting that file is created."
 (interactive)
 (goto-char (point-min))
 ;; We assume that the diff header has no trailing whitespace.
 (let (modified-buffers)
   (while (re-search-forward "^[+!>].*[ \t]+$" (point-max) t)
     (save-excursion
   (destructuring-bind (buf line-offset pos src dst &optional switched)
           (diff-find-source-location t t)
         (unless (member buf modified-buffers)
           (when line-offset
             (set-buffer buf)
             (when (re-search-forward "\\([ \t]+\\)$" (point-max) t)
               (push buf modified-buffers)
               (let ((whitespace-style '(trailing)))
(whitespace-cleanup)))))))) ; cleanup trailing blanks in buf
   (if modified-buffers
       (let ((bufs (mapconcat #(lambda (buf)
                                 (format "`%s'" (buffer-name buf)))
                              modified-buffers
                              " "))
             (whitespace-style '(trailing)))
(whitespace-mode) ; display trailing blanks in diff buffer
         (message "Deleted trailing whitespace from: %s" bufs))
     (message "No fixes needed."))))


What are the relevant parts of the buffer?

Those that correspond to added or modified lines in the diff.

So, should lines beginning with +, - and ! have a face to display the change?






reply via email to

[Prev in Thread] Current Thread [Next in Thread]