[HN Gopher] Delta: A syntax-highlighting pager for Git, diff, gr...
       ___________________________________________________________________
        
       Delta: A syntax-highlighting pager for Git, diff, grep, and blame
       output
        
       Author : nateb2022
       Score  : 555 points
       Date   : 2024-11-08 23:46 UTC (23 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | gigatexal wrote:
       | I really like delta. I use it every day.
        
       | kjuulh wrote:
       | I've been using a mix of delta and difftastic both are amazing.
       | Difftastic especially for tree-sitter AST syntaxes, it is a bit
       | slower, but AST aware diff is so nice.
       | 
       | Delta looks clean, and is super fast
        
       | signal11 wrote:
       | I use both delta and difftastic (difft), and cannot recommend
       | them enough.
       | 
       | If you use the terminal at all, get them!
        
         | nine_k wrote:
         | Difftastic and Delta work not only in bare terminals. Both are
         | supported by Magit in Emacs, both are also supported by
         | Lazygit.
        
           | mbork_pl wrote:
           | What??? Do I have to set something in Magit for that to work?
           | 
           | That would be one of the coolest news in weeks!
        
             | joeevans1000 wrote:
             | I second this question.
        
             | uallo wrote:
             | https://github.com/jesseduffield/lazygit/blob/master/docs/C
             | u...
        
             | cowsandmilk wrote:
             | magit-delta https://github.com/dandavison/magit-delta
        
         | kayson wrote:
         | I've been using difftastic for a while. How do you use both
         | together?
        
           | joeevans1000 wrote:
           | ... and this one.
        
           | 0fflineuser wrote:
           | I am also curious.
        
           | mfrw wrote:
           | I have `delta` as my default and for difft, I use the
           | following:
           | 
           | `env GIT_EXTERNAL_DIFF=difft git log -p --ext-diff`
           | 
           | Hope it helps :)
        
           | matijs wrote:
           | I have this set as an alias:
           | 
           | difft = -c diff.external=difft diff
           | 
           | I may add a similar alias for delta
        
       | tomxor wrote:
       | i knew git could use arbitrary diff filter but never realised it
       | was this simple to use. This looks very nice.
       | 
       | The related? project "bat" also looks interesting.
        
         | dietr1ch wrote:
         | If you are getting to check out bat, you might want to check,
         | 
         | - rg (ripgrep): A grep replacement
         | 
         | - sk (skim): A grep/fzf/fzy replacement
         | 
         | - fd: A find replacement that's .gitignore+.ignore aware.
         | 
         | - eza: A replacement for ls that's git aware
         | 
         | - broot: A TUI file finder to browse large directories
         | 
         | - yazi: A file manager (I haven't used this one too much)
         | 
         | sk+rg + gawk in action to find files matching some text,
         | sk \                   --ansi \                   --interactive
         | \                   --cmd 'rg --color=always --line-number
         | "{}"' --preview 'bat --color=always $(echo {} | gawk -F:
         | "{print \$1}") --highlight-line $(echo {} | gawk -F: "{print
         | \$2}")' \                 | gawk \                     -F: \
         | '{print $1}'
        
           | arjvik wrote:
           | Love these, my only change is lsd over exa (pure personal
           | preference)
        
           | tomxor wrote:
           | I love broot, I use it for everything.
           | 
           | I also use foot+fzy as a tiny sway dmenu replacement.. I
           | started to make other kinds of custom tiny TUI popup menus
           | using this strategy and it's great, since it all uses my
           | terminal style and each is an extremely tiny 1 or 2 line
           | script.
        
             | synergy20 wrote:
             | can broot scroll the file preview on the right? ranger can
             | do it, so far I feel ranger is better
        
               | qazxcvbnm wrote:
               | Ranger seems quite slow for the directories I tried to
               | use it on. Use lf, may give broot a try.
        
               | synergy20 wrote:
               | speedy for me all these years
        
               | tomxor wrote:
               | It can but it scrolls the cursor instead of managing real
               | mouse scroll events a la vim mouse=a so it's not ideal.
               | 
               | tbh I prefer to use less for previewing files anyway.
        
           | gawa wrote:
           | > eza: A replacement for ls that's git aware
           | 
           | I've been using eza (and exa before it) for a long time, but
           | only for the pretty and colored output. I didn't even know
           | about the git support! I now added the --git flag to my alias
           | and will try it out. Thank you!
        
         | adiabatty wrote:
         | bat is great. I end up doing
         | 
         | curl ... | prettier --parser html | bat
         | 
         | to get not-ugly HTML output from curl.
        
       | SushiHippie wrote:
       | Delta has been one of those set and forget things, it's been a
       | while since I've seen 'bare' git grep/diff/blame output, I also
       | use it all the time for normal diffs (outside of git repos), but
       | TIL that it also works with ripgrep [0]
       | 
       | As someone else already mentioned there is also bat[1], which was
       | also set and forget, I aliased cat to bat and have a seperate
       | alias vcat for 'vanilla cat' /usr/bin/cat
       | 
       | [0] https://dandavison.github.io/delta/grep.html
       | 
       | [1] https://github.com/sharkdp/bat
        
         | desperatecuban wrote:
         | You can use \cat to prevent alias expansion.
        
           | drdude wrote:
           | Neat! thanks for sharing. Few times I needed that but I had
           | to go hunting down the full path.
        
           | SushiHippie wrote:
           | That's even better, thank you!
        
       | djbusby wrote:
       | I'm still on diff-so-fancy; Worth investigating this one?
        
         | adiabatty wrote:
         | I use both.
        
         | WD-42 wrote:
         | Delta has a diff-so-fancy mode, so could be a nice way to
         | transition.
        
         | jerpint wrote:
         | Same here, to be honest I never gave much thought to seeking
         | alternatives, but this one looks really nice, especially having
         | the line numbers and similar layout to GitHub diffs
        
         | paulirish wrote:
         | I created diff-so-fancy and I migrated to Delta a few years
         | back.
        
       | forrestthewoods wrote:
       | I've been using Araxis Merge for almost 20 years. This seems...
       | not as good?
        
         | keyle wrote:
         | The price, is infinity times cheaper. Also terminal based means
         | it can run on remote machines or local.
        
         | WD-42 wrote:
         | Different use case. This is just a diff pager, it's not
         | supposed to help you solve complicated 3 way merges.
         | 
         | On a separate tangent - I haven't needed to do a gnarly merge
         | in years it seems like. I feel like the dev community has
         | collectively gotten better at git/SCM in general. Maybe I was
         | super junior before but it's just not a problem I seem to face
         | in daily software dev anymore.
        
           | forrestthewoods wrote:
           | Sure, but I use Araxis Merge as my basic diff tool as well.
        
             | WD-42 wrote:
             | If you use a GUI to view the output of git diff... then yea
             | this probably isn't for you :P
        
         | graton wrote:
         | Does Araxis Merge work in the terminal on Linux?
        
       | psibi wrote:
       | Looks like the author has also written magit integration for it:
       | https://github.com/dandavison/magit-delta
       | 
       | Any user feedback on how it is (perf etc) ?
        
       | commandersaki wrote:
       | I want to like this having used regular `git diff` tool with
       | colours, but this is just too busy.
        
         | mookid11 wrote:
         | you might like diffr (https://github.com/mookid/diffr)
         | (disclaimer: my project)
        
           | computerfriend wrote:
           | I was about to make the same recommendation! I tried delta
           | and difftastic and both were too much for me, so I've been
           | using diffr as my git diff program for the past few years.
           | It's delightful, thanks for making it.
        
           | samatman wrote:
           | Very nice, I've been looking for something like this since
           | completing a port of DiffMatchPatch. I'll going to give it a
           | spin right away, thanks for sharing your hard work!
           | 
           | As a bit of feedback, you might wish to put a section showing
           | how to make a git alias for diffr, to complement the section
           | on how to install it as the default. I know how to do this
           | already, because I use delta and dft depending on what I need
           | to see, but it would be useful to others to have a copy-paste
           | solution handy.
        
         | waynesonfire wrote:
         | had the same impression. never really found bare git diff to be
         | a problem.
        
       | dr_kretyn wrote:
       | The thing that prevents me from using delta is lack of "system"
       | theme detection. Can't set it up and forget and mismatching theme
       | with shell makes it really difficult to read.
        
         | WD-42 wrote:
         | It will use whatever `bat` theme is set. Bat itself doesn't do
         | system theme detection, but it's easy enough to do in a script
         | - I have one that gets called when my system theme changes
         | where I set themes for various programs. Looks like this for
         | dark mode:                   #!/usr/bin/fish         gsettings
         | set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
         | fish_config theme choose "ayu Mirage"         yes | fish_config
         | theme save         echo "--theme=OneHalfDark" >
         | ~/.config/bat/config         kitten themes --reload-in=all "Ayu
         | Mirage"
         | 
         | The bat config change will make delta respect my "system"
         | theme.
        
         | Myrmornis wrote:
         | Hi, delta now automatically detects whether the terminal
         | background is light or dark and selects a theme accordingly.
         | (This is due to the nice work of contributor bash:
         | https://github.com/bash/terminal-colorsaurus)
        
           | godelski wrote:
           | On a not-so-completely unrelated note, if you didn't know on
           | GitHub READMEs you can do things like                 ![img-
           | text](assets//myimg_dark.png#gh-dark-mode-only)       ![img-
           | text](assets/myimg_light.png#gh-light-mode-only)
           | 
           | To automatically display the light or dark version of images
           | depending on their gh theme (works html style too)
           | 
           | I'm also fond of                 <p align="center">
           | ....       </p>
           | 
           | Which I notice you do :), but did you know you could also do
           | it to tables and center the caption?                 <table
           | align="center">         <tr>           <td>             <img
           | width=800px src="https://user-images.githubusercontent.com/52
           | 205/87230973-412eb900-c381-11ea-8aec-cc200290bd1b.png"
           | alt="image" />             <br>             <p
           | align="center"><sub>delta with <code>side-by-side</code> and
           | <code>line-numbers</code> activated</sub></p>           </td>
           | </tr>       </table>
           | 
           | This isn't really a critique or anything, it is that I
           | appreciate that you took the time to make things look pretty
           | and it seems like you'd be interested in this kind of stuff
           | 
           | Also to others, this even works in issues and elsewhere. I
           | find this stuff really helpful when writing issues
        
             | Myrmornis wrote:
             | Thanks! https://github.com/dandavison/delta/pull/1893
             | 
             | > To automatically display the light or dark version of
             | images depending on their gh theme
             | 
             | Ah, good call. That could be a nice improvement -- creating
             | light and dark versions of the screenshots with switching
             | as you describe.
        
               | godelski wrote:
               | It's beautiful, I love it
        
       | edwinksl wrote:
       | Been using delta for diffs for a while, highly recommend it!
        
       | pgray wrote:
       | i like bat, but they also link over to delta :D
       | 
       | https://github.com/sharkdp/bat?tab=readme-ov-file#git-diff
        
       | montroser wrote:
       | Not as fancy, but if you want halfway reasonable word-level diffs
       | with just standard issue git, this is often good enough:
       | git diff --color-words --word-diff-regex='\w+|.'
        
         | einpoklum wrote:
         | How do I enable this by default (in .gitconfig)?
        
           | Alifatisk wrote:
           | Try this
           | 
           | git config --global diff.colorWords true
           | 
           | git config --global diff.wordRegex '\w+|.'
        
       | CGamesPlay wrote:
       | Delta is great for what it does, but I consistently hit an issue
       | where it truncates long lines. This post inspired me to check if
       | the situation had changed... and it has! Now if you set `git
       | config --global --replace-all delta.max-line-length 0`, it will
       | no longer truncate lines. It's unclear to me why this is not the
       | default. Discussion about the change is in
       | https://github.com/dandavison/delta/pull/290.
        
         | BossingAround wrote:
         | > It's unclear to me why this is not the default
         | 
         | It's literally in the PR you mention:
         | 
         | syntax-highlighting very long lines (e.g. minified .js) will be
         | very slow if they are not truncated
        
           | CGamesPlay wrote:
           | If you read the comments, you'll find
           | https://github.com/dandavison/delta/pull/1746 which adds the
           | option I mentioned, which limits the length of syntax
           | highlighting, but still has a rather low limit on maximum
           | (unhighlighted) line length :)
        
       | benreesman wrote:
       | I love delta, I don't always run it but I usually do. I recommend
       | anyone give it a try.
        
       | PhilipRoman wrote:
       | I use a modified version of vimdiff as my daily diff tool:
       | https://gist.github.com/PhilipRoman/60066716b5fa09fcabfa6c95...
       | 
       | I find it easier to navigate that way since the diff of each file
       | is in its own tab (yes I know... not how tabs are meant to be
       | used)
       | 
       | For grep, vim's built in location list seems good enough. As for
       | blame, I haven't used it since learning about git log -L. Vastly
       | superior in my opinion.
        
       | nikolahorvat wrote:
       | Also, checkout tig: https://jonas.github.io/tig/
        
       | atombender wrote:
       | Speaking of diffs, one thing that annoys me about Git's diff
       | output is that is prints file paths like Unix diff traditionally
       | does, starting with the two file names:                   ---
       | a/some/path/to/file.c         +++ b/some/path/to/file.c
       | 
       | I often cmd-click in iTerm to open a file in an editor, but this
       | doesn't work here because of the a/ and b/ prefixes. Any way to
       | make Git format the file name better? I don't even need two lines
       | here.
        
         | Jakob wrote:
         | git config --global diff.noprefix true
         | 
         | Checkout the manual for more prefix options.
        
           | atombender wrote:
           | Perfect, thank you.
        
       | _def wrote:
       | I saw this recently and thought "great!" and tried it out,
       | thinking I would love it. But somehow I actually prefer the way
       | git already does it, even if it seems inferior to me. Maybe I'd
       | just have to get used to it?
        
         | tionis wrote:
         | Same for me. I don't know, delta seems more like a chaos I
         | can't make sense of than default git diffs
        
       | sixhobbits wrote:
       | What's a good way to convert the output of something like this
       | into an html page?
       | 
       | We have non technical people looking at markdown PRs and commits
       | in github and the diff viewer is terrible. It will highlight and
       | entire paragraph because someone removed a trailing space. I use
       | git-so-fancy locally which makes it much easier to see changes
       | but I can't expect non-technical editors to move from their
       | GitHub based workflow to a terminal based one
        
         | ginko wrote:
         | xfce4-terminal supports "Copy as HTML" for stuff like this.
        
         | danvk wrote:
         | Try webdiff (I'm the author) https://pypi.org/project/webdiff/
        
         | cowsandmilk wrote:
         | https://dandavison.github.io/delta/tips-and-tricks/export-to...
        
       | gregjor wrote:
       | Why? How does syntax coloring help in this context? I don't use
       | syntax coloring at all in my editor, I don't think it adds any
       | information or clues that help me understand the code. I think
       | colored diff output (beyond red for deleted and green for added)
       | just adds distractions.
        
         | lucasoshiro wrote:
         | Delta can show in the terminal a diff that looks like the
         | GitHub one. You can compare side by side what was changed. It
         | also highlight with more strength what changed inside the line.
         | I installed it once, and never came back to the standard diff
         | output.
         | 
         | If Delta doesn't work like you expected and you want a standard
         | diff output temporarily, no problem, you can run Git with
         | 
         | git -c core.pager=less
         | 
         | Note also that if you redirect the Git output, Git is smart
         | enough to not call the pager (in this case, Delta)
         | 
         | This is a case of personal taste. My only complaint about Delta
         | is its name. Delta is already a concept in Git, and every time
         | that I need to search about it is a pain... I search directly
         | by "dandavision delta"
        
       | somat wrote:
       | There was a good point made, that has stuck with me over the
       | years. that our syntax highlighters are highlighting the wrong
       | thing.
       | 
       | They should not be coloring the grammar, we are good at picking
       | out grammar, they should be highlighting the symbols. each
       | different variable and function name should be getting it's own
       | color. that is, the goal is to make it quicker to distinguish
       | different symbols, not that they are a symbol.
       | 
       | But this is much harder than stylizing the grammar so all our
       | tooling sticks with the easy thing rather that the useful thing.
       | Now, I am being a bit mean on grammar styling. It does help quite
       | a bit but I would like to see a symbol matching engine in action
       | to see if that really works.
       | 
       | Unfortunately I don't remember where I read the original post and
       | am unable to attribute it correctly.
       | 
       | update: while trying to look it up I found this
       | https://www.wilfred.me.uk/blog/2014/09/27/the-definitive-gui...
        
         | sicariusnoctis wrote:
         | The author of that post wrote "difftastic", which is "a
         | structural diff that understands syntax" using treesitter.
         | 
         | https://difftastic.wilfred.me.uk/
         | 
         | https://github.com/Wilfred/difftastic
        
       ___________________________________________________________________
       (page generated 2024-11-09 23:01 UTC)