Skip to content

Make 'kitten diff' work with process substitution #8597

Description

@its-izhar

Is your feature request related to a problem? Please describe.
As a part of my Embedded and Linux development workflow - I work a lot with binary blobs, encoded files or in general file formats that need conversion to a human-readable text/source formats before a diff can be done between such files. It is a frustrating experience to create temp files for each such file before starting a diff. It is a much easier and faster experience to convert them on-the-fly and pass this to the diff program. Precisely what the "process substitution" feature of the shell helps with:

For example:

diff <(dtc -I dtb -O dts system.dtb) <(dtc -I dtb -O dts system_ext.dtb)

or for purely demonstration purpose:

diff <(ls -la /tmp) <(ls -f /tmp)

diff or nvim -d above will correctly produce a diff between LHS and RHS as bash (or zsh) will replace LHS/RHS with a special file (like /dev/fd/63) that behaves like the read end of a named pipe.

Doing the same with kitten diff however, fails:

➜ kitten diff <(ls -la /tmp) <(ls -f /tmp)
Error: Failed to diff /dev/fd/63 vs. /dev/fd/62 with errors:

I've started using kitten diff in my workflow as it is fast and works very well for "quick" diff look.

It would be VERY useful to switch to it completely in my workflow, if kitten diff can be enhanced to make it work with files created as a result of process substitution.

Describe the solution you'd like
If diff kitten can be enhanced to directly work with the special files that shell creates, that would be ideal.

Describe alternatives you've considered
Mostly just been using diff from binutils and nvim -d, but none of them match the capabilities and quickness of kitten diff.

Additional context
N/A

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions