[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  
|
| 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)