SUMMARY *** *** STEPS TO REPRODUCE 1. kdiff3 <(echo hello) <(echo world) OBSERVED RESULT kdiff3 shows error popup multiple times and doesn't display any diff $ kdiff3 <(echo hello) <(echo world) org.kde.kdiff3: "Loading A: /dev/fd/63" kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'." org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() = 173 kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'." org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() = 173 kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'." org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() = 173 org.kde.kdiff3: "Loading B: /dev/fd/62" kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'." org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() = 173 kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'." org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() = 173 kf.kio.core: couldn't create slave: "Unknown protocol 'pipe'." org.kde.kdiff3.fileAccess: slotStatResult: pJob->error() = 173 org.kde.kdiff3: "Diff: A <-> B" org.kde.kdiff3: "Linediff: A <-> B" org.kde.kdiff3: Enter: calcDiff3LineListUsingAB org.kde.kdiff3: Leave: calcDiff3LineListUsingAB EXPECTED RESULT kdiff3 is able to read from file substitution and display a diff SOFTWARE/OS VERSIONS Operating System: KDE neon 5.24 KDE Plasma Version: 5.24.5 KDE Frameworks Version: 5.94.0 Qt Version: 5.15.4 Kernel Version: 5.13.0-48-generic (64-bit) Graphics Platform: X11 Processors: 12 × Intel® Core™ i7-8750H CPU @ 2.20GHz Memory: 31.0 GiB of RAM Graphics Processor: Mesa Intel® UHD Graphics 630 ADDITIONAL INFORMATION $ kdiff3 --version kdiff3 1.9.5 (64 bit) $ sha256sum `which kdiff3` 397555cae80ca330a2ae30f0c30b28e0109e955e59e260cd606980e88bcf8477 /usr/bin/kdiff3 $ apt show kdiff3 Package: kdiff3 Version: 1.9.5-0xneon+20.04+focal+release+build14 Priority: optional Section: kde Maintainer: Neon CI <neon@kde.org> Installed-Size: 5,264 kB Depends: libc6 (>= 2.14), libkf5configcore5, libkf5configwidgets5, libkf5coreaddons5, libkf5crash5, libkf5i18n5, libkf5kiocore5, libkf5kiowidgets5, libkf5parts5, libkf5widgetsaddons5, libkf5xmlgui5, libqt5core5a (>= 5.15.2+p20.04+tunstable+git20220305.0110), libqt5gui5 (>= 5.15.2+p20.04+tunstable+git20220305.0110), libqt5printsupport5 (>= 5.15.2+p20.04+tunstable+git20220305.0110), libqt5widgets5 (>= 5.15.2+p20.04+tunstable+git20220305.0110), libstdc++6 (>= 5) Recommends: kdiff3-doc Breaks: kdiff3-qt (<< 1.0) Replaces: kdiff3-qt (<< 1.0) Homepage: https://kde.org/applications/development/kdiff3 Download-Size: 863 kB APT-Manual-Installed: yes
This particular example actually reveals a bug is kdiff3's file validation. Non-normal files such as pipes are supposed to be skipped. Depending there nature weird things can happen. In this case a fictitious filename is derived from the link. I will look into what happens when actually files are passed using this syntax.
After examining this I have determined it is not technically feasible for kdiff3 to support this. Bugs such as this https://bugreports.qt.io/browse/QTBUG-15261 are the reason. Duplicating code in the form of direct c/c++ style I/O operations is not a practical solution. KDiff3's primary function of comparing normal files is not compromised by lack of pipe/redirect support. Interestingly trying this syntax with real files does results in kdiff3 completely ignoring the redirect. This is why explicit parameters are used. The specific example used here and similar attempts to directly pipe command output will now generate the intended error instead of sending a bogus file name to KIO/Qt.