Eskil

What Eskil
Where http://eskil.tcl.tk/
Description Eskil is a GUI frontend to diff. It supports several version control systems. It also does directory diff, conflict merge and more.
Updated 2017-11-30 (version 2.7.4)
Contact peter dot spjuth at gmail dot com

http://eskil.tcl.tk/index.html/doc/trunk/htdocs/eskil1.png

http://eskil.tcl.tk/index.html/doc/trunk/htdocs/eskil2.png

http://eskil.tcl.tk/index.html/doc/trunk/htdocs/eskil3.png

By Peter Spjuth

A similar but unrelated application is tkdiff.


Revision Control Support

Several revision control systems are supported for displaying differences between file revisions. When comparing uncommited changes to latest version, you can commit directly from Eskil (in some systems).

Currently Fossil, Git, Subversion, RCS, CVS, Bazaar, Mercurial, ClearCase and Perforce are supported.

eskil <file>
eskil -r 45ef34 -r 6783ef <file>
eskil -review
eskil -review <file1> <file2>...

Revision Control Support in Directory Diff

The Directory Diff can directly compare revisions. Currently Fossil, Git and Subversion are supported.

eskil <dir>
eskil -r 45ef34 -r 6783ef <dir>

Patch view

Eskil can display a patch, either from a file, from stdin, pasted from clipboard or generated from Revision Control Support.

eskil -patch <file>
someother | eskil -
git diff -p --diff-filter=M master | eskil -
fossil diff -r trunk | eskil -'
eskil -review

Directory Diff

Directory comparison is supported.

Eskil is starkit aware and will allow you to compare starkits/starpacks or, by comparing one to itself, browse kits. The kit needs to be either mentioned on the command line or called *.kit for it to work.


Conflict resolution

You can resolve merge conflicts using Eskil, including full 3-way merge. It can pick up conflict marks as typically left by revision control systems' merge.

eskil -conflict <file>
eskil -a <ancestor> <file1> <file2>

Pluggable Preprocessing

If you have a need to extract/preprocess from a file before diffing, you can do it in an Eskil plugin.


Comments about eskil

(Comment moved from the TkDiff page.) tjk 2005-08-03: Eskil is another Tcl/Tk based diff that includes:

  • Highlights changes within a line.
  • Matches similar lines within a changed block to better show changed lines that are adjacent to added/removed lines.
  • Directory diff.
  • CVS/RCS/ClearCase diff. CVS conflict merge.
  • View patch file.
  • Print to postscript.
  • "Clip diff"
  • Alignment and block diff functions for tricky diffs.
  • Edit and Save file from diff window.

I highly recommend eskil over tkdiff.

LV 2009 Oct 10 How can I configure eskil so that it does not display lines that are identical in the two files?

Peter Spjuth: Zero context is supported as of version 2.5.

LV 2007 Aug 06

Observations regarding eskil...

When I first attempted to invoke eskil, I got the following:

 $ tclkit eskil22.kit
 extra characters after close-brace
    while executing
 "return [uplevel 1 [list [namespace origin mcunknown]  $Locale $src {*}$args]] "
    (procedure "mc" line 24)
    invoked from within
 "mc $lab"
    (procedure "tk::MessageBox" line 79)
    invoked from within
 "tk::MessageBox {*}$args"
    (procedure "tk_messageBox" line 2)
    invoked from within
 "tk_messageBox -icon error -message $msg -title "Fatal error""
    (procedure "panic" line 4)
    invoked from within
 "panic $::errorInfo"
    (procedure "starkit::header" line 10)
    invoked from within
 "starkit::header mk4 -readonly"
    (file "eskil22.kit" line 5)
 $ sdx.kit version /projects/sprs_lwv/tcl85/bin/tclkit
 2005/09/27 03:31:11  54267-20834  /projects/sprs_lwv/tcl85/bin/tclkit
 $ /projects/sprs_lwv/tcl85/bin/tclkit                
 % info patchlevel
 8.5a4

After a comment by Peter, I began to wonder if perhaps it was a tclkit error, rather than an eskil, so I tried eskil with an older tclkit and that worked just fine.

I then tried to use eskil with ActiveTcl 8.5's base-tk (which is, for a subset of starkits, a substitute) and found another issue. This time, I found that eskil includes only snit version 1 - but the snit toplevel, when it sees it is running under Tcl/Tk 8.5, attempts to use snit version 2.

Because that isn't included in eskil, a fatal error is generated.

Just a head's up if someone else runs into this problem. The current solution is either to update the snit in eskil to include both versions, or to go download an older version of a tclkit.

This should work in Eskil 2.3.


Anyone have a comparison of eskil versus http://www.winmerge.org/ ? While winmerge isn't written in Tcl, it has been recommended to me as a very good tool. I'm just curious how functionality matches.

Peter Spjuth: I haven't used winmerge but a quick glance shows they are roughly equal. Neither of them has a full 3-way merge, but Eskil has a separate merge window which I find friendlier. I don't see anything like Eskil's hierarchical directory diff in winmerge but I guess they must have something similar. I'm quite sure Eskil is alone in supporting comparison of starkits and starpacks though ;-)

MHo 2009-10-30: Just tried the newest winmerge. Unfortunally, it doesn't load. Some external dependencies don't resolve at my PC (VC redist 8.x). I hate those tools, which require me to load six new different runtimes each time I update...


LV From what I can tell, eskil 2.4 requires a tclkit with themed tk in it - probably Tk 8.5.


MSH 2014-10-10 I have tried to download the latest version of Eskil from the http://eskil.tcl.tk/index.html/doc/trunk/htdocs/download.html site but non of the links there work and Sourceforge no longer has the project. Are there any working links to Eskil ?

arjen (2016-08-16) Works for me.


yyamasak 2018-06-06 I have been using the enhanced version of WinMerge . Comparing WinMerge 2.14.0+-jp-152 vs Eskil 2.8.2, I had my impression that WinMerge wins in performance while Eskil wins in diff quality. Eskil's Directory Diff window is very slow when I tried to scroll the hierarchical view.