git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] make diff --color-words customizable

From
Thomas Rast <trast@student.ethz.ch>
Date
Jan 10, 2009, 11:25 UTC
Message-ID
<200901101225.10719.trast@student.ethz.ch>
In-Reply-To
<alpine.DEB.1.00.0901101146230.30769@pacific.mpi-cbg.de>
Johannes Schindelin wrote:
> BTW I did not really think about the issue you raised about the newlines, 
> as I seemed to remember that the idea was to substitute all non-word 
> characters with newlines, so that the offsets in the substituted text are 
> the same as in the original text.

Ok, so here's a very simple example: Suppose you have the word regex 'x+|y+' and compare these two lines:

A: xxyyxy
B: xyxyy

There are *no* non-word characters between consecutive words in this case, so you *cannot* replace them with newlines. You cannot replace some word character either, as should be obvious from the case of one-letter words, as you would lose actual content. My counterexample to your illustration patch exploited a similar border case: suppose you decide to overwrite the first (instead of last) character of each word, then you won't be able to tell "foo" from "\noo" in the input.

Unfortunately the space adjustement makes things even worse. The existing method has the side-effect that it only inserts a single newline between words separated by exactly one space, which runs them together in the resulting line diff, for example

A: foo bar
B: baz quux
would result in
  -foo
  -bar
  +baz
  +quux

instead of (as my original attempts did) the arguably more correct, but less readable

  -foo
  +bar
    
  -baz
  +quux

where the middle line is a context line for the space. So in addition to the word-ending adjustments for the inserted newlines, I also have to track the status of the space right after the word.

> So I still find your patch way too large

I can't think of a simpler way to do it, and yours unfortunately doesn't work.

-- 
Thomas Rast
trast@{inf,student}.ethz.ch
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 19 of 34 in “make diff --color-words customizable”
  1. make diff --color-words customizableThomas Rast, Jan 9, 2009
  2. Johannes SchindelinJan 9, 2009
  3. Thomas RastJan 9, 2009
  4. Johannes SchindelinJan 9, 2009
  5. color-words: take an optional regular expression describing wordsJohannes Schindelin, Jan 9, 2009
  6. Thomas RastJan 9, 2009
  7. Teemu LikonenJan 9, 2009
  8. make diff --color-words customizableThomas Rast, Jan 10, 2009
  9. Jakub NarebskiJan 10, 2009
  10. Johannes SchindelinJan 10, 2009
  11. Jakub NarebskiJan 10, 2009
  12. Johannes SchindelinJan 10, 2009
  13. Jakub NarebskiJan 12, 2009
  14. Johannes SchindelinJan 13, 2009
  15. Davide LibenziJan 10, 2009
  16. Jakub NarebskiJan 13, 2009
  17. Davide LibenziJan 13, 2009
  18. Johannes SchindelinJan 10, 2009
  19. Thomas RastJan 10, 2009
  20. Johannes SchindelinJan 10, 2009
  21. Junio C HamanoJan 11, 2009
  22. 0/4 customizable --color-wordsThomas Rast, Jan 11, 2009
  23. 1/4 word diff: comments, preparations for regex customizationThomas Rast, Jan 11, 2009
  24. 2/4 word diff: customizable word splitsThomas Rast, Jan 11, 2009
  25. 3/4 word diff: make regex configurable via attributesThomas Rast, Jan 11, 2009
  26. 4/4 word diff: test customizable word splitsThomas Rast, Jan 11, 2009
  27. Junio C HamanoJan 11, 2009
  28. Junio C HamanoJan 11, 2009
  29. Johannes SchindelinJan 11, 2009
  30. Johannes SchindelinJan 11, 2009
  31. Junio C HamanoJan 11, 2009
  32. Jeff KingJan 9, 2009
  33. Johannes SchindelinJan 9, 2009
  34. Jeff KingJan 9, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.