DEV Community

David Cantrell
David Cantrell

Posted on

TIL: diff-so-fancy; and some funky git config

I just discovered diff-so-fancy, and very nice it is too. I immediately added it to my standard git config, which is semi-automatically installed on every machine I use. However, I've not (yet) installed diff-so-fancy on all the machines I use, and for those platforms for which it's not packaged I probably won't bother installing it from source.

But if I just follow the author's instructions which amount to adding this to my ~/.gitconfig:

[core]
    pager = "diff-so-fancy | less --tabs=4 -RFX"
Enter fullscreen mode Exit fullscreen mode

then git diff will break:

$ git diff HEAD^
diff-so-fancy | less --tabs=4 -RFX: diff-so-fancy: command not found
Enter fullscreen mode Exit fullscreen mode

but there's an easy fix! Whatever is in pager is just shell code, so this works:

[core]
    pager = "if [ ! -z \"$(which diff-so-fancy)\" ]; then diff-so-fancy | less --tabs=4 -RFX; else less; fi"
Enter fullscreen mode Exit fullscreen mode

The output from git diff is piped into that little script. If diff-so-fancy is installed (ie if "$(which diff-so-fancy)" is not zero-length) then it does exactly what diff-so-fancy's author suggests. Otherwise, if diff-so-fancy isn't installed, just run less.

Top comments (2)

Collapse
 
10xlearner profile image
10x learner

Very nice tool ! Thank you @drhyde to allow me to discover such gem ! 😊

Image description

Collapse
 
karnerth profile image
Thomas Karner

I personally prefer github.com/dandavison/delta