Unverified Commit a7d0c0e7 authored by Rob's avatar Rob
Browse files

tkdiff: init at 5.6

TkDiff is a graphical front end to the diff program
https://tkdiff.sourceforge.io/
parent 57147fe5
Loading
Loading
Loading
Loading
+71 −0
Original line number Diff line number Diff line
Index: tkdiff
===================================================================
diff --git a/tkdiff b/tkdiff
--- a/tkdiff	(revision 188)
+++ b/tkdiff	(revision 189)
@@ -111,7 +111,7 @@
 }
 
 # Determine the name of the temporary directory, the rc file name,
-# and possible VPATH EnvVar, all of which are platform dependent.
+# NULLdev, and possible VPATH EnvVar, all of which are platform dependent.
 #
 # Much MAY likely be overridden by a preference in .tkdiffrc,
 # EXCEPT (obviously) when no such file actually exists yet
@@ -126,6 +126,9 @@
             set opts(tmpdir) C:/temp
         }
 
+        # Reserved filename which is actually a NULL device
+        set opts(NULLdev) "nul"
+
         # Split up and store a VPATH if it exists
         if {[info exists ::env(VPATH)]} {
             set finfo(Vpath) [split $::env(VPATH) ";"]
@@ -145,6 +148,9 @@
             set opts(tmpdir) $::env(TMPDIR)
         }  {set opts(tmpdir) /tmp }
 
+        # Reserved filename which is actually a NULL device (Unix-like platforms)
+        set opts(NULLdev) "/dev/null"
+
         # Split up and store a VPATH if it exists
         if {[info exists ::env(VPATH)]} {
             set finfo(Vpath) [split $::env(VPATH) ":"]
@@ -2106,7 +2112,7 @@
 #           1  Failed   (PLUS a 'pushed' HARD-error message to the caller)
 ###############################################################################
 proc get-file {fn ndx {probe 0}} {
-    global g finfo
+    global g opts finfo
 
     # Ancestor files are stored into a slightly adjusted array element name 
     #   N.B> 'ndx' AS PASSED *can* be an EXPRESSION (not just a number): resolve!
@@ -2121,7 +2127,7 @@
     } elseif {!$tildechk} {
         # DO NOT REPORT non-existence if this attempt was ONLY a probe
         if {$probe} { return 1 } { set MSG "File '$fn' does not exist" }
-    } elseif {[file isfile $fn]} {
+    } elseif {[file isfile $fn] || $fn == $opts(NULLdev)} {
         set finfo(${A}lbl,$ndx) [shortNm [set finfo(${A}pth,$ndx) "$fn"]]
     } else { set MSG "'$fn' exists, but is not a file" }
 
@@ -2857,7 +2863,7 @@
 # Align various label decorations to the CURRENT input file pairing
 ###############################################################################
 proc alignDecor {pairnum} {
-    global g w finfo
+    global g w opts finfo
 
     # Establish if 3way mode is NOW active and what file indices are in use
     set g(is3way) [info exists finfo(albl,$pairnum)]
@@ -2874,7 +2880,8 @@
             set finfo(lbl,$LR) $finfo(ulbl,$ndx($n))    ;# Override lbl display
         } else {set finfo(lbl,$LR) $finfo(lbl,$ndx($n))}
 
-        if {![info exists finfo(tmp,$ndx($n))]} {
+        if {![info exists finfo(tmp,$ndx($n))] \
+            && $finfo(pth,$ndx($n)) != $opts(NULLdev)} {
             #   (N.B> Tip data will ALSO be used by report generation heading)
             set    g(tooltip,${LR}Label) "{$finfo(pth,$ndx($n))\n"
             append g(tooltip,${LR}Label) \
+43 −0
Original line number Diff line number Diff line
{ diffutils, fetchzip, lib, makeBinaryWrapper, stdenv, tk }:

stdenv.mkDerivation (finalAttrs: {
  pname = "tkdiff";
  version = "5.6";

  src = fetchzip {
    url = "mirror://sourceforge/tkdiff/tkdiff-${builtins.replaceStrings ["."] ["-"] finalAttrs.version}.zip";
    hash = "sha256-EpbIdjsejkkTaSpoZRM5AHz0r1Cio+YzRryK0BoghBk=";
  };

  # fix regression: allow /dev/null again. eg: "tkdiff /dev/null file"
  # svn diff --git -r188:189 https://svn.code.sf.net/p/tkdiff/code/trunk
  patches = [ ./189.patch ];

  nativeBuildInputs = [ makeBinaryWrapper ];

  installPhase = ''
    runHook preInstall

    install -Dm755 -t $out/bin tkdiff
    wrapProgram $out/bin/tkdiff \
      --prefix PATH : ${lib.makeBinPath [ diffutils tk ]}

    runHook postInstall
  '';

  meta = {
    description = "A graphical front end to the diff program";
    homepage = "https://tkdiff.sourceforge.io/";
    license = lib.licenses.gpl2Plus;
    longDescription = ''
      TkDiff is a graphical front end to the diff program. It provides a
      side-by-side view of the differences between two text files, along
      with several innovative features such as diff bookmarks, a graphical
      map of differences for quick navigation, and a facility for slicing
      diff regions to achieve exactly the merge output desired.
    '';
    mainProgram = "tkdiff";
    maintainers = with lib.maintainers; [ robert-manchester ];
    platforms = tk.meta.platforms;
  };
})