all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Óscar Fuentes" <ofv@wanadoo.es>
To: emacs-devel@gnu.org
Subject: Re: Proposal: diff-remove-trailing-blanks
Date: Sun, 27 Apr 2008 06:04:08 +0200	[thread overview]
Message-ID: <3ap89c5j.fsf@telefonica.net> (raw)
In-Reply-To: 4813E542.10802@ig.com.br

Vinicius Jose Latorre <viniciusjl@ig.com.br> writes:

> 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."))))
>

Your function removes trailing whitespace from the buffer, while my
function removes it only from the lines that were added or modified.

The motivation of my proposed function is this: when working with source
code that may contain trailing whitespace, maybe you don't want to
create "noise" with changes that just fixes whitespace, but you wish to
avoid making things worse introducing new trailing whitespace. My
function does this: before committing your changes, do a diff of the
modified files, apply the function on the diff buffer, and all trailing
whitespace you introduced is gone, leaving the rest of the code intact.

>>> 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?

The topic Dan Nicolaescu introduced was how to make evident that the
changes introduce new trailing whitespace. For this, we both use
`show-trailing-whitespace', but this has the inconvenience that shows
trailing whitespace not only for the changed lines, but for the rest of
the diff too, which is a bit annoying.

As it is safe to apply `diff-remove-trailing-blanks' to a diff that does
not introduce new trailing whitespace, what I do is this: before
I commit my changes, I do a diff comprising all the involved source
files (which is easy to do with PCL-CVS or psvn, maybe with vc-dired
too), apply `diff-remove-trailing-blanks' to the diff buffer, do a C-x s
if it fixed whitespace on some buffer, and commit.

Hope this clarifies the confusion I caused with my reference to
whitespace-mode.

-- 
Oscar





  parent reply	other threads:[~2008-04-27  4:04 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-26 14:59 Proposal: diff-remove-trailing-blanks Óscar Fuentes
2008-04-26 18:44 ` Dan Nicolaescu
2008-04-26 19:38   ` Óscar Fuentes
2008-04-26 19:50   ` Vinicius Jose Latorre
2008-04-26 20:08     ` Óscar Fuentes
     [not found]       ` <4813A244.4050908@ig.com.br>
2008-04-26 22:07         ` Óscar Fuentes
2008-04-27  2:30           ` Vinicius Jose Latorre
2008-04-27  2:59             ` Vinicius Jose Latorre
2008-04-27  4:04             ` Óscar Fuentes [this message]
     [not found]               ` <48146DF3.3090706@ig.com.br>
     [not found]                 ` <48147BC0.6080406@ig.com.br>
2008-04-27 15:15                   ` Óscar Fuentes
2008-04-27 17:30                     ` Vinicius Jose Latorre
2008-04-27 20:05                       ` Óscar Fuentes
2008-05-01  0:34                         ` Vinicius Jose Latorre
2008-05-01  1:04                           ` Óscar Fuentes
2008-05-02 14:22                           ` Stefan Monnier
2008-05-07  0:25                             ` Vinicius Jose Latorre
2008-05-07  2:04                               ` Stefan Monnier
2008-05-10  0:45                                 ` Vinicius Jose Latorre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3ap89c5j.fsf@telefonica.net \
    --to=ofv@wanadoo.es \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.