this post was submitted on 18 Nov 2023
0 points (50.0% liked)

Emacs

305 readers
1 users here now

A community for the timeless and infinitely powerful editor. Want to see what Emacs is capable of?!

Get Emacs

Rules

  1. Posts should be emacs related
  2. Be kind please
  3. Yes, we already know: Google results for "emacs" and "vi" link to each other. We good.

Emacs Resources

Emacs Tutorials

Useful Emacs configuration files and distributions

Quick pain-saver tip

founded 1 year ago
MODERATORS
top 8 comments
sorted by: hot top controversial new old
[–] [email protected] 1 points 10 months ago (1 children)
[–] [email protected] 1 points 10 months ago (1 children)

It can't even show white space differences

[–] [email protected] 1 points 10 months ago (1 children)

Depends on the configured diff program and its options.

[–] [email protected] 1 points 10 months ago (1 children)

This has nothing to do with the diff program. Ediff is not able to highlight whitespace differences like it highlights non-whitespace differences. Maybe it is possible to do somehow, but by default, whitespace differences generate a diff region with no highlights (or as ediff calls it, refinements).

It is because highlights are done on word level, and whitespaces are not words.

[–] [email protected] 1 points 10 months ago

Oh, interesting.
I see.

Just popped open the Ediff code and there is a significant amount of effort put into ignoring whitespace. Like, it's not a shortcoming per se that it can't show this content but rather a deliberate onslaught to avoid it at all costs. The author must have been really annoyed by whitespace. 😂

I mostly use (ediff-buffers) in my day-to-day work in Spacemacs to compare two regions that I've narrowed to indirect buffers, and, interestingly, it does show me diffs that contain whitespace-only changes and prints the following to the echo area:

https://preview.redd.it/587vplu76e1c1.png?width=1896&format=png&auto=webp&s=e3d559ae695972f62865560b96f23953b4b26027

I did a quick test with other ediff functions bound in Spacemacs, and ediff-windows-linewise has the same behavior, but ediff-windows-wordwise does not -- it completely ignored diffs that were whitespace only and there was not even ## binding available in that ediff session.

When browsing the code, I found a local variable named ediff-whitespace (which u/doolio_ has already pointed out here in reply to you, actually), which is curious:

(defvar-local ediff-whitespace " \n\t\f\r\240"
  "Characters constituting white space.
These characters are ignored when differing regions are split into words.")

(\240 is Unicode symbol for nonbreakable whitespace.)

I wonder whether this variable can be set to nil.

PS:

It is because highlights are done on word level, and whitespaces are not words.

Apparently word splitting is configurable with ediff-forward-word-function ?

[–] [email protected] 1 points 10 months ago (1 children)

Also very basic, IMO:

  • g X - go to buffer X's point
  • j - jump to diff number (prefix arg)
  • ! - update (re-diff)
  • C-l - recenter
  • * - refine current region
  • ## - ignore whitespace diffs
[–] [email protected] 1 points 10 months ago

And in case the video doesn't say it:

Ediff has its own user manual: C-h i g (ediff)

[–] [email protected] 1 points 10 months ago

You sir are great. I can’t open the video on youtube to give a thumbs up, may you share the link?