Index: Changes ================================================================== --- Changes +++ Changes @@ -1,11 +1,383 @@ +Released 2.8.3 + +2018-06-13 + Bumped revision to 2.8.3 + Better visibility that commit happened. + +2018-06-05 + Working on shortcuts for preprocess dialog. + +2018-05-14 + Added changeset tool to fourway, + +2018-05-13 + Adjustments to fourway UI. + +Released 2.8.2 + +2018-05-13 + Bumped revision to 2.8.2 + Fixed bug in Fossil handling. Rev -1 did not work. + +2018-05-12 + Added fourway diff. + +Released 2.8.1 + +2018-01-14 + Removed support for old RCS style -rREV command line. + Process directory diff in a nicer order. + +2018-01-11 + Bumped revision to 2.8.1 + Corrected detected of Emacs for Registry. (Broken in 2.7.4) + +2017-12-28 + Pause before a large file in dirdiff processing to make it clear where it is + slowed down. + +2017-12-22 + Added -excludedir and -excludefile options for dir diff. + +2017-12-16 + Make sure plugins are applied in the right order. + Make sure Dir Diff can pick one out of many plugins. + Dir Diff no longer shortcuts for files with same size&mtime. + +2017-12-13 + Use same font in commit window as in diff window. + Upgraded tablelist to 6.0 + +2017-12-07 + Support -nocase in dirdiff. + Repaired plugins for dirdiff (broken by multi plugin). + +2017-12-07 + Handle GIT revisions better for directory diff. + +2017-12-05 + Bumped revision to 2.8.0 + +2017-12-04 + Support multiple plugins from command line. + +2017-12-02 + Support multiple plugins. + Changed default pivot to 10. Include GUI choice for 1. + +2017-12-01 + Added GUI for multiple plugins. No function yet. + +Released 2.7.4 + +2017-11-30 + Allow multi select in table diff. + +2017-06-19 + Allow one side of directory diff to be protected from editing. + Allow directories to be created in directory diff. + +2017-03-18 + When needing an editor, try VISUAL and EDITOR plus a set of common ones. + +2017-02-05 + Bumped revision to 2.7.4 + Handle multiple preprocess definitions that can be saved with preferences. + +2017-02-04 + Support more areas for file drop. + +2017-01-31 + Made --query work again; lost in option reorganisation. + +2017-01-12 + Added -gz flag to compare compressed files. + +2016-09-04 + Preserve line endings when saving during Edit Mode. + +2016-08-30 + Bumped revision to 2.7.3 + +2016-08-21 + Auto-detect semicolon separator. Connect GUI separator with plugin. + +2016-08-19 + GUI support for table and separator. + +2016-08-15 + Bumped revision to 2.7.2 + +2016-07-29 + Include plugin command line options in command line help. + Include plugin options in plugin dialog. + +2016-07-29 + Corrected right side numbering when parsing patch. [288be8f321] + +2016-07-06 + Support negative revisions with GIT. Added log view for GIT. + +2016-07-01 + When displaying a patch, detect chunks marked with ##. + E.g. svn diff lists changed properties like that. + +2016-06-10 + Reorganised code for option descriptions. + +2016-06-09 + Upgraded to DiffUtilTcl 0.3.9 to get consistent word parse behaviour. + +2016-04-13 + Allow plugin to know file names. Use source file with pdftotext in PDF plugin + since stdin is not reliable there. + +2016-04-13 + When displaying a patch, detect a file with no changed chunks. + E.g. svn diff lists changed binary files like that. + +2016-04-08 + Allow GUI to set privilege for plugins. + Better search for pdftotext in pdf plugin. + +2015-11-22 + Bumped revision to 2.7.1 + Allow plugins to define command line options. + +2015-11-20 + Rebuilt command line option handling. + +2015-11-19 + Added binary plugin. + +2015-11-17 + Compress printed PDF. + +2015-10-14 + Page break between files when printing in patch mode. + +2015-10-12 + Use tablelist 5.14 that includes -colorizecommand, for table diff. + +2015-07-02 + Printing followed by redo diff closed Eskil. Fixed this. + +2015-06-02 + Made a patched version of tablelist for table diff. Patch stored in src dir. + Table diff works reasonable now + +2015-04-19 + Started working on table diff. + Added grep plugin. + +2015-04-09 + Started working on a edit buttons shown between diffs. + +2015-03-18 + Allow plugins to yield if Eskil is run in Tcl 8.6 or newer. + Added swap plugin to exemplify this. + +2015-03-18 + Added command line flag "-pluginallow" to allow a plugin to run in a standard + interpreter instead of a safe one. + Added pdf plugin. + +2015-03-17 + Added command line flag "-sep" to set a separator for table-like files + like CSV. + +2015-03-16 + Added csv plugin. + Pass ::argv to plugins. + +2015-03-15 + Extended Mercurial support to commit, revert, log and directory diff. + +2015-03-09 + Released 2.7 + +2015-03-06 + Generate release files for Mac, now when DiffUtil supports Mac. + +2015-03-01 + Added more key bindings to scroll diff. + +2015-02-25 + Allow saving prefs from dirdiff window. + Put "nice" setting in preferences. + +2015-02-24 + Bumped revision to 2.7 + +2015-02-23 + Version support in directory diff, for Fossil, GIT and Subversion. + +2014-12-17 + Changed the included print font to a true type font. + Allow -printFont to be "Courier" for fallback to PDF builtin. + +2014-11-25 + Added command line -printFont to select a font file for PDF. + +2014-11-16 + First working plugin in dirdiff. + +2014-11-13 + Undid all dirdiff refactoring from August. Bad idea... + +2014-11-12 + Bumped revision to 2.6.7 + +2014-11-12 + Added vcsvfs, to be used for revision aware dirdiff. + +2014-11-07 + Fixed silly error from dirdiff refactoring. [da1ad24ee2] + +2014-10-27 + Bumped revision to 2.6.6 + +2014-10-27 + Store default prefs as comment in rc file + +2014-08-12 + Started to refactor dirdiff code. + This prepares for making dirdiff revision aware. + +2014-02-01 + Added a font fallback in psballon. [0ff6d72ab9] + +2014-01-24 + Bumped revision to 2.6.5 + +2014-01-24 + Include tclkit.ico and tclkit.inf in kit, to get info on Windows. + +2014-01-11 + Detect Subversion 1.7 working copy where .svn is just in the top. + +2013-09-28 + Support direct print in patch mode. [6bce349e95] + +2013-09-28 + Added hourglass cursor during prune equal in directory diff. [766b7a4695] + +2013-09-26 + Fixed error printing patch with only deleted or inserted files. [2d89cee14d] + +2013-08-22 + Bumped revision to 2.6.4 + +2013-08-22 + Include afm font for PDF printing. + +2013-08-22 + Do not allow edit in text widget after startup. [51ad7323ff] + +2013-02-18 + Add .pdf to print file by default [e093eb8eef] + +2012-11-15 + No changes in scroll map when displaying a patch. + +2012-09-17 + Avoid getting double .-files in dirdiff on Windows. + Added "nice" option to control dirdiff speed. + +2012-08-30 + Corrected display of ancestor lines in three-way merge. + +2012-08-21 + Bumped revision to 2.6.3 + +2012-08-21 + Added Preferences menu for Pivot value. + +2012-08-21 + Added Revert button in Revision mode + +2012-07-12 + DiffUtilTcl is now 0.3.7. + This added -pivot to exclude very common lines, and post processing of + the excluded lines. This cuts down processing time for certain large files. + +2012-07-11 + Detect and display error if commit fails. + +2012-06-22 + Added -pivot command line flag to control C diff's -pivot. + +2012-06-18 Release 2.6.2 + +2012-06-12 + DiffUtilTcl is now 0.3.5. + +2012-06-12 + Added -nocdiff command line flag for debug. + +2012-02-28 + Support negative revisions with Fossil. + +2012-02-21 + Support branches in Subversion. [b71c8cf01b] + +2012-02-19 + Support regsub preprocessing controlled per side. + +2012-02-18 + Improved PDF print dialog. + +2012-02-17 + Improved plugin viewer. + +2012-02-14 + Include added files when using -review with Fossil. + +2012-02-07 + Fixed bug where extra lines showed when displaying only diffs (no context). + +Release 2.6.1 + +2011-11-01 + Fixed bug where copy button in directory diff picked the wrong file. + Use a custom Toolbutton layout to get a small toolbutton in directory diff. + +Release 2.6 + +2011-10-27 + Rebuilt rev-detection to handle any dir depth. + Detect .fos as fossil indicator. + +2011-10-15 + Added Show in plugin dialog. Added sort plugin. [FR 3735] + +2011-10-15 + Added procedure editor to debug menu. + +2011-10-15 + Corrected search of plugins to find them in VFS. [Bug 18395] + +2011-10-05 + Respect block parse setting when showing a patch. [Bug 18147] + +2011-10-04 + Fall back to Tcl-dialog when accessing a vfs. [Bug 18371] + +2011-05-09 + Use mouse dragging to set alignment. + +2011-05-09 + Rewritten directory diff to use tablelist. + Redesigned appearance of directory diff. + 2011-04-30 Improved three-way merge. Highlight conflicts and navigate directly between conflicts. - Include status for each merge chunk to see the descision made. + Include status for each merge chunk to see the decision made. Added Goto menu in merge window to get fewer toolbar buttons. - Autodetect line endings in ancestor file to select merge output. + Auto-detect line endings in ancestor file to select merge output. 2011-04-28 Code cleanup to get clean Nagelfar run 2011-04-28 @@ -13,12 +385,12 @@ 2011-04-24 Added basic GUI for plugin selection. 2011-04-22 - Merging did not work properly if alignement was used. [Bug 9925] - + Merging did not work properly if alignment was used. [Bug 9925] + 2011-04-11 Support files and revisions with -review in Fossil. Support revisions with -review in Git. New DiffUtil has a fallback to pure Tcl LCS. @@ -38,11 +410,11 @@ 2010-11-07 Added tkdnd support. [FR 5125] 2010-11-07 - Autodetect line endings in conflict file. + Auto-detect line endings in conflict file. Allow line ending selection in merge save. [FR 5160] Added menu bar to merge window. 2010-06-23 Support -noempty from DiffUtil, to try it out. @@ -90,11 +462,11 @@ 2008-11-19 Bug fix in Clip Diff Capture 2008-11-10 Improved patch parsing. - Includ Twapi in windows executable + Include Twapi in windows executable 2008-11-06 Added Capture in Clip Diff on Windows. Handle Rev and Plugin at the same time. @@ -172,11 +544,11 @@ 2007-01-29 Finished dirdiff filters. [FR 3040] 2007-01-28 Started on dirdiff filters. - Added dirdiff preferences dialog. + Added dirdiff preferences dialog. 2007-01-09 Document --query flag. [FR 3027] Smarter save in merge. [FR 2957] @@ -276,11 +648,11 @@ Full -r support for ClearCase. 2004-06-24 Added simple -r support to ClearCase diff. Support ignore case in block matching. - + Release 2.0.4 2004-06-17 Added ignore case option. @@ -325,11 +697,11 @@ 2004-02-10 Added preferences for width and height. Added Tools menu to directory diff window. Made it simpler to save a conflict in the same file. - + 2004-02-05 Stopped Tk from interfering with the command line. 2004-01-30 Release 2.0 DELETED Eskil.html Index: Eskil.html ================================================================== --- Eskil.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - Eskil - A graphical frontend to Diff - - - - - BerliOS Developer Logo -

-

Bug tracker and mailing list can be found at the -Project page -

-

Eskil: A graphical frontend to Diff

-Download -Features -Screenshots -Changes -

-

About Eskil

-The first major application I wrote in Tcl/Tk was this tool (somewhere around -1997). Writing it is what made me learn and enjoy Tcl. (I already liked Tk -but still found Tcl annoying at the time.)
-I have used it a lot during the years and lately it has received enough -polish to grant a public release. -

-Pronunciation: The E is short, like in "set", the rest is like "skill". -

-Any feedback, good or bad, can be sent to -<peter dot spjuth at gmail dot com> -

-It is similar but unrelated to TkDiff. - -

Features

- - - -

Download

- -Version 2.5:
-Is available from the -Project page -both as a Starkit and as Starpacks for Windows, Linux and Solaris. -

-The license for the application source is GPL but the bundled packages -are under the same license as Tcl. - -

More information about Starkits -and Starpacks. - -

Screenshots

- - -

-A "zoom" feature for long lines.

-
- -

Changes

-Changes in v2.5 (2011-04-01):
- -Changes in v2.4 (2009-01-08):
- -Changes in v2.3 (2007-12-05):
- -Changes in v2.2 (2007-04-05):
- -
-Changes in v2.1 (2006-06-02):
- -
-Changes in v2.0.7 (2004-12-14):
- -
-Changes in v2.0.6 (2004-10-19):
- -
-Changes in v2.0.5 (2004-08-20):
- -
-Changes in v2.0.4 (2004-06-17):
- -
-Changes in v2.0.3 (2004-05-26):
- -
-Changes in v2.0.2 (2004-05-03):
- -
-Changes in v2.0.1 (2004-02-10):
- -
-First public release v2.0 (2004-01-30):
-
- - - Index: Makefile ================================================================== --- Makefile +++ Makefile @@ -1,141 +1,183 @@ #---------------------------------------------------------------------- # Make file for Eskil #---------------------------------------------------------------------- -VERSION = 26 +# This string is used to generate release file names +VERSION = 283 +# This string is used to tag the version shown in Eskil +DOTVERSION = 2.8.3 # Path to the TclKits used for creating StarPacks. TCLKIT = /home/peter/tclkit/v85 -TCLKIT_LINUX = $(TCLKIT)/tclkit-8.5.8 +TCLKIT_LINUX = $(TCLKIT)/tclkit-linux TCLKIT_SOLARIS = $(TCLKIT)/tclkit-solaris-sparc TCLKIT_WIN = $(TCLKIT)/tclkit-win32.upx.exe +TCLKIT_MAC = $(TCLKIT)/tclkit-mac-866 -# Path to the libraries used -STYLE = /home/peter/src/packages/style -GRIFFIN = /home/peter/tclkit/griffin.vfs/lib/griffin +# Paths to the libraries used. +# If you do not have access to all these, you can get them from an Eskil kit +# as explained below. TEXTSEARCH = /home/peter/src/textsearch DIFFUTIL = /home/peter/src/DiffUtilTcl/lib.vfs/DiffUtil -WCB = /home/peter/src/packages/wcb3.0 +WCB = /home/peter/src/packages/wcb3.5 PDF4TCL = /home/peter/src/pdf4tcl/pkg -SNIT = /home/peter/tcl/tcllib/modules/snit -STRUCT = /home/peter/tcl/tcllib/modules/struct -CMDLINE = /home/peter/tcl/tcllib/modules/cmdline -TABLELIST = /home/peter/src/packages/tablelist/tablelist +SNIT = /home/peter/src/packages/tcllib/modules/snit +TABLELIST = /home/peter/src/packages/tablelist6.0 TWAPI = /home/peter/src/packages/twapi -TKDND = /home/peter/src/packages/tkdnd/lib/tkdnd1.0 +TKDND = /home/peter/src/packages/tkdnd/lib/tkdnd2.4 +EMBEDFONT = /usr/share/fonts/truetype/liberation/LiberationMono-Regular.ttf # Tools NAGELFAR = nagelfar all: setup SRCFILES = src/eskil.tcl src/clip.tcl src/dirdiff.tcl src/help.tcl src/map.tcl \ - src/print.tcl src/registry.tcl src/rev.tcl \ - src/compare.tcl src/merge.tcl src/printobj.tcl src/plugin.tcl + src/print.tcl src/registry.tcl src/rev.tcl src/debug.tcl \ + src/compare.tcl src/merge.tcl src/printobj.tcl src/plugin.tcl \ + src/vcsvfs.tcl src/preprocess.tcl src/startup.tcl src/fourway.tcl +#---------------------------------------------------------------- +# Build a dependency tree to other libs needed. +# This is made in a parallell VFS structure, mimicking Eskil's. +# Thus deps.vfs can also be created by downloading an Eskil kit, +# rename it to "deps" and unwrap it with sdx. #---------------------------------------------------------------- -# Setup symbolic links from the VFS to the real files -#---------------------------------------------------------------- + +deps.vfs/src/embedfont.ttf: + @mkdir -p deps.vfs/src + @cd deps.vfs/src ; ln -fs $(EMBEDFONT) embedfont.ttf +deps.vfs/lib/wcb: + @mkdir -p deps.vfs/lib + cd deps.vfs/lib ; ln -fns $(WCB) wcb +deps.vfs/lib/textsearch: + @mkdir -p deps.vfs/lib + cd deps.vfs/lib ; ln -fns $(TEXTSEARCH) textsearch +deps.vfs/lib/diffutil: + @mkdir -p deps.vfs/lib + cd deps.vfs/lib ; ln -fns $(DIFFUTIL) diffutil +deps.vfs/lib/pdf4tcl: + @mkdir -p deps.vfs/lib + cd deps.vfs/lib ; ln -fns $(PDF4TCL) pdf4tcl +deps.vfs/lib/tkdnd: + @mkdir -p deps.vfs/lib + cd deps.vfs/lib ; ln -fns $(TKDND) tkdnd +deps.vfs/lib/tablelist: + @mkdir -p deps.vfs/lib + cd deps.vfs/lib ; ln -fns $(TABLELIST) tablelist +deps.vfs/lib/snit: + @mkdir -p deps.vfs/lib/snit + cd deps.vfs/lib/snit ; ln -fs $(SNIT)/pkgIndex.tcl + cd deps.vfs/lib/snit ; ln -fs $(SNIT)/snit.tcl + cd deps.vfs/lib/snit ; ln -fs $(SNIT)/snit2.tcl + cd deps.vfs/lib/snit ; ln -fs $(SNIT)/main2.tcl + cd deps.vfs/lib/snit ; ln -fs $(SNIT)/main1.tcl + cd deps.vfs/lib/snit ; ln -fs $(SNIT)/validate.tcl + +#------------------------------------------------------------------ +# Setup symbolic links from the VFS to the sources and dependencies +#------------------------------------------------------------------ eskil.vfs/src/eskil.tcl: + @mkdir -p eskil.vfs/src @cd eskil.vfs/src ; for i in $(SRCFILES); do ln -fs ../../$$i ; done eskil.vfs/src/images: + @mkdir -p eskil.vfs/src @cd eskil.vfs/src ; ln -fs ../../src/images +eskil.vfs/src/embedfont.ttf: deps.vfs/src/embedfont.ttf + @mkdir -p eskil.vfs/src + @cd eskil.vfs/src ; ln -fs ../../deps.vfs/src/embedfont.ttf + @cd src ; ln -fs ../deps.vfs/src/embedfont.ttf eskil.vfs/examples: - cd eskil.vfs ; ln -s ../examples + cd eskil.vfs ; ln -fs ../examples eskil.vfs/doc: - cd eskil.vfs ; ln -s ../doc + cd eskil.vfs ; ln -fs ../doc eskil.vfs/plugins: - cd eskil.vfs ; ln -s ../plugins + cd eskil.vfs ; ln -fs ../plugins eskil.vfs/COPYING: - cd eskil.vfs ; ln -s ../COPYING -eskil.vfs/lib/wcb: - cd eskil.vfs/lib ; ln -s $(WCB) wcb -eskil.vfs/lib/style: -# cd eskil.vfs/lib ; ln -s $(STYLE) style -eskil.vfs/lib/griffin: - cd eskil.vfs/lib ; ln -s $(GRIFFIN) griffin -eskil.vfs/lib/textsearch: - cd eskil.vfs/lib ; ln -s $(TEXTSEARCH) textsearch -eskil.vfs/lib/diffutil: - cd eskil.vfs/lib ; ln -s $(DIFFUTIL) diffutil -eskil.vfs/lib/pdf4tcl: - cd eskil.vfs/lib ; ln -s $(PDF4TCL) pdf4tcl -eskil.vfs/lib/tkdnd: - cd eskil.vfs/lib ; ln -s $(TKDND) tkdnd -eskil.vfs/lib/tablelist: - cd eskil.vfs/lib ; ln -s $(TABLELIST) tablelist -eskil.vfs/lib/snit: - cd eskil.vfs/lib ; mkdir snit - cd eskil.vfs/lib/snit ; ln -s $(SNIT)/pkgIndex.tcl - cd eskil.vfs/lib/snit ; ln -s $(SNIT)/snit.tcl - cd eskil.vfs/lib/snit ; ln -s $(SNIT)/snit2.tcl - cd eskil.vfs/lib/snit ; ln -s $(SNIT)/main2.tcl - cd eskil.vfs/lib/snit ; ln -s $(SNIT)/main1.tcl - cd eskil.vfs/lib/snit ; ln -s $(SNIT)/validate.tcl -eskil.vfs/lib/struct: - cd eskil.vfs/lib ; mkdir struct - cd eskil.vfs/lib/struct ; ln -s $(STRUCT)/pkgIndex.tcl - cd eskil.vfs/lib/struct ; ln -s $(STRUCT)/list.tcl -eskil.vfs/lib/cmdline: - cd eskil.vfs/lib ; ln -s $(CMDLINE) cmdline + cd eskil.vfs ; ln -fs ../COPYING +eskil.vfs/lib/wcb: deps.vfs/lib/wcb + cd eskil.vfs/lib ; ln -fs ../../deps.vfs/lib/wcb +eskil.vfs/lib/textsearch: deps.vfs/lib/textsearch + cd eskil.vfs/lib ; ln -fs ../../deps.vfs/lib/textsearch +eskil.vfs/lib/diffutil: deps.vfs/lib/diffutil + cd eskil.vfs/lib ; ln -fs ../../deps.vfs/lib/diffutil +eskil.vfs/lib/pdf4tcl: deps.vfs/lib/pdf4tcl + cd eskil.vfs/lib ; ln -fs ../../deps.vfs/lib/pdf4tcl +eskil.vfs/lib/tkdnd: deps.vfs/lib/tkdnd + cd eskil.vfs/lib ; ln -fs ../../deps.vfs/lib/tkdnd +eskil.vfs/lib/tablelist: deps.vfs/lib/tablelist + cd eskil.vfs/lib ; ln -fs ../../deps.vfs/lib/tablelist +eskil.vfs/lib/snit: deps.vfs/lib/snit + cd eskil.vfs/lib ; ln -fs ../../deps.vfs/lib/snit links: eskil.vfs/src/eskil.tcl \ eskil.vfs/src/images \ + eskil.vfs/src/embedfont.ttf \ eskil.vfs/examples\ eskil.vfs/doc\ eskil.vfs/plugins\ eskil.vfs/COPYING\ - eskil.vfs/lib/griffin\ - eskil.vfs/lib/style\ eskil.vfs/lib/textsearch\ eskil.vfs/lib/diffutil\ eskil.vfs/lib/pdf4tcl\ eskil.vfs/lib/snit\ - eskil.vfs/lib/struct\ - eskil.vfs/lib/cmdline\ eskil.vfs/lib/tkdnd\ eskil.vfs/lib/tablelist\ eskil.vfs/lib/wcb -setup: links +# Use this with -B to just update the source links when a new source file +# is present +newsrc: eskil.vfs/src/eskil.tcl + +src/TAGS: $(SRCFILES) + etags -o src/TAGS --regex="/proc[ \t]+\([^ \t]+\)/\1/" $(SRCFILES) \ + eskil.vfs/lib/*/*.tcl + +setup: links src/TAGS #---------------------------------------------------------------- # Testing #---------------------------------------------------------------- spell: @cat doc/*.txt | ispell -d british -l | sort -u -NAGELFARFLAGS = -s syntaxdb86.tcl -filter "*Non constant definition*" -quiet +CHKFILES = $(SRCFILES) $(wildcard plugins/*.tcl) \ + eskil.vfs/lib/psballoon/psballoon.tcl \ + eskil.vfs/lib/pstools/pstools.tcl +NAGELFARFLAGS = -s syntaxdb.tcl -pkgpicky -filter "*Non constant definition*" -quiet # Create a common "header" file for all source files. eskil_h.syntax: $(SRCFILES) src/eskil.syntax @echo Creating syntax header file... @$(NAGELFAR) $(NAGELFARFLAGS) -header eskil_h.syntax $(SRCFILES) check: eskil_h.syntax @echo Checking... - @for i in $(SRCFILES); do $(NAGELFAR) $(NAGELFARFLAGS) eskil_h.syntax $$i ; done + @for i in $(CHKFILES); do $(NAGELFAR) $(NAGELFARFLAGS) eskil_h.syntax $$i ; done test: - @./tests/all.tcl + @./tests/all.tcl $(TESTFLAGS) + +run: + $(TCLKIT_LINUX) eskil.vfs/main.tcl #---------------------------------------------------------------- # Coverage #---------------------------------------------------------------- # Source files for code coverage -COVFILES = src/rev.tcl src/eskil.tcl +COVFILES = eskil.vfs/main.tcl eskil.vfs/src/rev.tcl eskil.vfs/src/eskil.tcl eskil.vfs/src/merge.tcl eskil.vfs/src/startup.tcl IFILES = $(COVFILES:.tcl=.tcl_i) LOGFILES = $(COVFILES:.tcl=.tcl_log) MFILES = $(COVFILES:.tcl=.tcl_m) # Instrument source file for code coverage -%.tcl_i: %.tcl - @$(NAGELFAR) -instrument $< +%.tcl_i: %.tcl eskil_h.syntax + @$(NAGELFAR) -instrument eskil_h.syntax $< # Target to prepare for code coverage run. Makes sure log file is clear. instrument: $(IFILES) @rm -f $(LOGFILES) @@ -157,25 +199,39 @@ #---------------------------------------------------------------- # Packaging/Releasing #---------------------------------------------------------------- -wrap: +tagversion: + echo "Version $(DOTVERSION) `date --iso-8601`" > eskil.vfs/version.txt + +wrap: tagversion sdx wrap eskil.kit -wrapexe: +wrapexe: tagversion @\rm -f eskil.linux eskil.exe eskil.solaris sdx wrap eskil.linux -runtime $(TCLKIT_LINUX) - sdx wrap eskil.solaris -runtime $(TCLKIT_SOLARIS) + sdx wrap eskil.mac -runtime $(TCLKIT_MAC) +# sdx wrap eskil.solaris -runtime $(TCLKIT_SOLARIS) cd eskil.vfs/lib ; ln -s $(TWAPI) twapi sdx wrap eskil.exe -runtime $(TCLKIT_WIN) rm eskil.vfs/lib/twapi release: setup wrap wrapexe @cp eskil.kit eskil`date +%Y%m%d`.kit @cp eskil.kit eskil$(VERSION).kit @gzip eskil.linux @mv eskil.linux.gz eskil$(VERSION).linux.gz - @gzip eskil.solaris - @mv eskil.solaris.gz eskil$(VERSION).solaris.gz + @gzip eskil.mac + @mv eskil.mac.gz eskil$(VERSION).mac.gz +# @gzip eskil.solaris +# @mv eskil.solaris.gz eskil$(VERSION).solaris.gz @zip eskil$(VERSION).win.zip eskil.exe @zip eskil`date +%Y%m%d`.win.zip eskil.exe + +tofossil: + fossil unversioned add eskil$(VERSION).kit --as htdocs/download/eskil$(VERSION).kit + fossil unversioned add eskil$(VERSION).linux.gz --as htdocs/download/eskil$(VERSION).linux.gz + fossil unversioned add eskil$(VERSION).mac.gz --as htdocs/download/eskil$(VERSION).mac.gz + fossil unversioned add eskil$(VERSION).win.zip --as htdocs/download/eskil$(VERSION).win.zip + fossil unversioned list + @echo 'Remember: fossil unversioned sync' Index: TODO ================================================================== --- TODO +++ TODO @@ -35,5 +35,12 @@ med ändrade namn. Print: utföra printkommando. Via dialog och -print? Klara t.ex. lp -n 2 Kanske generera pdf och pipea till lp? + + +Rev: +SVN: Vad göra med Log när -r är en branch? +Kan den fixas oom två -r är på samma branch? + +Fossil: Kan man fixa Log om man använder -r -1? Index: bindiff.tcl ================================================================== --- bindiff.tcl +++ bindiff.tcl @@ -1,220 +1,220 @@ -#!/bin/sh -# the next line restarts using wish \ -exec wish "$0" "$@" - -set thisScript [file join [pwd] [info script]] - -proc busyCursor {} { - global oldcursor oldcursor2 - if {![info exists oldcursor]} { - set oldcursor [. cget -cursor] - set oldcursor2 [.e1 cget -cursor] - } - . config -cursor watch - foreach w {.e1 .e2} { - $w config -cursor watch - } -} - -proc normalCursor {} { - global oldcursor oldcursor2 - . config -cursor $oldcursor - foreach w {.e1 .e2} { - $w config -cursor $oldcursor2 - } -} - -proc browse {varName} { - upvar $varName file - - if {$file == ""} { - set initdir [pwd] - } else { - set initdir [file dirname $file] - } - set apa [tk_getOpenFile -title "Select file" -initialdir $initdir] - if {$apa != ""} { - set file [file join $initdir $apa] - cd [file dirname $file] - } -} - -proc doComp {{extra 0}} { - global compRes file1 file2 - - busyCursor - update idletasks - - file stat $file1 stat1 - file stat $file2 stat2 - - set compRes "" - if {$stat1(size) == $stat2(size) && $stat1(mtime) == $stat2(mtime)} { - set compRes "Size&Time " - } - - update idletasks - - set eqbut 0 - set bufsz 65536 - set eq 1 - set ch1 [open $file1 r] - set ch2 [open $file2 r] - fconfigure $ch1 -translation binary - fconfigure $ch2 -translation binary - while {![eof $ch1] && ![eof $ch2]} { - set f1 [read $ch1 $bufsz] - set f2 [read $ch2 $bufsz] - if {![string equal $f1 $f2]} { - set eq 0 - set len1 [string length $f1] - set len2 [string length $f2] - if {$len1 != $len2} { - set len [expr {$len1 < $len2 ? $len1 : $len2}] - if {[string equal -length $len $f1 $f2]} { - set eqbut [expr {$len1 < $len2 ? 2 : 1}] - } - } - break - } - } - if {([eof $ch1] + [eof $ch2]) < 2} { - set eq 0 - } - close $ch1 - close $ch2 - - if {$eq} { - append compRes Equal - } else { - append compRes "Not Equal" - } - - if {$eqbut} { - append compRes " but [expr {abs($stat1(size) - $stat2(size))}]($eqbut)" - } - - if {!$extra || $eq || $eqbut} { - normalCursor - return - } - - update idletasks - set ch1 [open $file1 r] - set ch2 [open $file2 r] - fconfigure $ch1 -translation binary -buffersize 524288 - fconfigure $ch2 -translation binary -buffersize 524288 - set data1 [read $ch1] - set data2 [read $ch2] - close $ch1 - close $ch2 - set len1 [string length $data1] - set len2 [string length $data2] - - if {$len1 < 2000 || $len2 < 2000} { - normalCursor - return - } - - set mid1 [expr {$len1 / 2 - 500}] - set midstr1 [string range $data1 $mid1 [expr {$mid1 + 999}]] - set places {} - for {set i2 0} {$i2 < $len2} {incr i2} { - set i2 [string first $midstr1 $data2 $i2] - if {$i2 == -1} break - lappend places $i2 - } - if {[llength $places] > 1} { - append compRes " multiple parts" - } elseif {[llength $places] == 1} { - set i2 [lindex $places 0] - append compRes " s" - if {$mid1 < $i2} { - set start1 0 - set start2 [expr {$i2 - $mid1}] - } else { - set start1 [expr {$mid1 - $i2}] - set start2 0 - } - if {($len1 - $mid1) > ($len2 - $i2)} { - set end1 [expr {$mid1 + ($len2 - $i2) - 1}] - set end2 [expr {$len2 - 1}] - } else { - set end1 [expr {$len1 - 1}] - set end2 [expr {$i2 + ($len1 - $mid1) - 1}] - } - if {$end2 - $start2 != $end1 - $start1} { - append compRes " ($mid1=$i2 '$start1-$end1' '$start2-$end2')" - } - for {set s1 $start1 ; set s2 $start2} {$s1 < $mid1} {incr s1 1000 ; incr s2 1000} { - if {[string equal [string range $data1 $s1 [expr {$s1 + 999}]] \ - [string range $data2 $s2 [expr {$s2 + 999}]]]} { - break - } - } - for {set e1 $end1 ; set e2 $end2} {$e1 > $mid1} {incr e1 -1000 ; incr e2 -1000} { - if {[string equal [string range $data1 [expr {$e1 - 999}] $e1] \ - [string range $data2 [expr {$e2 - 999}] $e2]]} { - break - } - } - set eql [expr {$e1 - $s1 + 1}] - append compRes " '$s1 - $e1' == '$s2 - $e2' ($eql)($len1)($len2)" - } else { - append compRes " no" - } - normalCursor -} - -# File drop using TkDnd -proc fileDrop {var files} { - set $var [lindex $files 0] -} - -proc makeWin {} { - global tcl_platform - eval destroy [winfo children .] - - frame .fm - - menubutton .md -text Debug -menu .md.m -relief ridge - menu .md.m - if {$tcl_platform(platform) == "windows"} { - .md.m add checkbutton -label Console -variable consolestate \ - -onvalue show -offvalue hide -command {console $consolestate} - .md.m add separator - } - .md.m add command -label "Stack trace" -command {bgerror Debug} - .md.m add separator - .md.m add command -label "Reread Source" -command {source $thisScript} - .md.m add separator - .md.m add command -label "Redraw Window" -command {makeWin} - .md.m add separator - .md.m add command -label "Extra Comp" -command {doComp 1} - - pack .md -in .fm -side left - - button .bd -text Comp -command doComp - label .l -textvariable compRes - - entry .e1 -width 50 -textvariable file1 - entry .e2 -width 50 -textvariable file2 - button .b1 -text Browse -command "browse file1" - button .b2 -text Browse -command "browse file2" - - # Set up file dropping in entries if TkDnd is available - if {![catch {package require tkdnd}]} { - dnd bindtarget .e1 text/uri-list {fileDrop ::file1 %D} - dnd bindtarget .e2 text/uri-list {fileDrop ::file2 %D} - } - - grid .fm .l .bd -sticky wns - grid .e1 - .b1 -sticky news - grid .e2 - .b2 -sticky news - grid .l .bd -sticky news - grid columnconfigure . 1 -weight 1 -} - -if {![winfo exists .fm]} { - makeWin -} +#!/bin/sh +# the next line restarts using wish \ +exec wish "$0" "$@" + +set thisScript [file join [pwd] [info script]] + +proc busyCursor {} { + global oldcursor oldcursor2 + if {![info exists oldcursor]} { + set oldcursor [. cget -cursor] + set oldcursor2 [.e1 cget -cursor] + } + . config -cursor watch + foreach w {.e1 .e2} { + $w config -cursor watch + } +} + +proc normalCursor {} { + global oldcursor oldcursor2 + . config -cursor $oldcursor + foreach w {.e1 .e2} { + $w config -cursor $oldcursor2 + } +} + +proc browse {varName} { + upvar $varName file + + if {$file == ""} { + set initdir [pwd] + } else { + set initdir [file dirname $file] + } + set apa [tk_getOpenFile -title "Select file" -initialdir $initdir] + if {$apa != ""} { + set file [file join $initdir $apa] + cd [file dirname $file] + } +} + +proc doComp {{extra 0}} { + global compRes file1 file2 + + busyCursor + update idletasks + + file stat $file1 stat1 + file stat $file2 stat2 + + set compRes "" + if {$stat1(size) == $stat2(size) && $stat1(mtime) == $stat2(mtime)} { + set compRes "Size&Time " + } + + update idletasks + + set eqbut 0 + set bufsz 65536 + set eq 1 + set ch1 [open $file1 r] + set ch2 [open $file2 r] + fconfigure $ch1 -translation binary + fconfigure $ch2 -translation binary + while {![eof $ch1] && ![eof $ch2]} { + set f1 [read $ch1 $bufsz] + set f2 [read $ch2 $bufsz] + if {![string equal $f1 $f2]} { + set eq 0 + set len1 [string length $f1] + set len2 [string length $f2] + if {$len1 != $len2} { + set len [expr {$len1 < $len2 ? $len1 : $len2}] + if {[string equal -length $len $f1 $f2]} { + set eqbut [expr {$len1 < $len2 ? 2 : 1}] + } + } + break + } + } + if {([eof $ch1] + [eof $ch2]) < 2} { + set eq 0 + } + close $ch1 + close $ch2 + + if {$eq} { + append compRes Equal + } else { + append compRes "Not Equal" + } + + if {$eqbut} { + append compRes " but [expr {abs($stat1(size) - $stat2(size))}]($eqbut)" + } + + if {!$extra || $eq || $eqbut} { + normalCursor + return + } + + update idletasks + set ch1 [open $file1 r] + set ch2 [open $file2 r] + fconfigure $ch1 -translation binary -buffersize 524288 + fconfigure $ch2 -translation binary -buffersize 524288 + set data1 [read $ch1] + set data2 [read $ch2] + close $ch1 + close $ch2 + set len1 [string length $data1] + set len2 [string length $data2] + + if {$len1 < 2000 || $len2 < 2000} { + normalCursor + return + } + + set mid1 [expr {$len1 / 2 - 500}] + set midstr1 [string range $data1 $mid1 [expr {$mid1 + 999}]] + set places {} + for {set i2 0} {$i2 < $len2} {incr i2} { + set i2 [string first $midstr1 $data2 $i2] + if {$i2 == -1} break + lappend places $i2 + } + if {[llength $places] > 1} { + append compRes " multiple parts" + } elseif {[llength $places] == 1} { + set i2 [lindex $places 0] + append compRes " s" + if {$mid1 < $i2} { + set start1 0 + set start2 [expr {$i2 - $mid1}] + } else { + set start1 [expr {$mid1 - $i2}] + set start2 0 + } + if {($len1 - $mid1) > ($len2 - $i2)} { + set end1 [expr {$mid1 + ($len2 - $i2) - 1}] + set end2 [expr {$len2 - 1}] + } else { + set end1 [expr {$len1 - 1}] + set end2 [expr {$i2 + ($len1 - $mid1) - 1}] + } + if {$end2 - $start2 != $end1 - $start1} { + append compRes " ($mid1=$i2 '$start1-$end1' '$start2-$end2')" + } + for {set s1 $start1 ; set s2 $start2} {$s1 < $mid1} {incr s1 1000 ; incr s2 1000} { + if {[string equal [string range $data1 $s1 [expr {$s1 + 999}]] \ + [string range $data2 $s2 [expr {$s2 + 999}]]]} { + break + } + } + for {set e1 $end1 ; set e2 $end2} {$e1 > $mid1} {incr e1 -1000 ; incr e2 -1000} { + if {[string equal [string range $data1 [expr {$e1 - 999}] $e1] \ + [string range $data2 [expr {$e2 - 999}] $e2]]} { + break + } + } + set eql [expr {$e1 - $s1 + 1}] + append compRes " '$s1 - $e1' == '$s2 - $e2' ($eql)($len1)($len2)" + } else { + append compRes " no" + } + normalCursor +} + +# File drop using TkDnd +proc fileDrop {var files} { + set $var [lindex $files 0] +} + +proc makeWin {} { + global tcl_platform + eval destroy [winfo children .] + + frame .fm + + menubutton .md -text Debug -menu .md.m -relief ridge + menu .md.m + if {$tcl_platform(platform) == "windows"} { + .md.m add checkbutton -label Console -variable consolestate \ + -onvalue show -offvalue hide -command {console $consolestate} + .md.m add separator + } + .md.m add command -label "Stack trace" -command {bgerror Debug} + .md.m add separator + .md.m add command -label "Reread Source" -command {source $thisScript} + .md.m add separator + .md.m add command -label "Redraw Window" -command {makeWin} + .md.m add separator + .md.m add command -label "Extra Comp" -command {doComp 1} + + pack .md -in .fm -side left + + button .bd -text Comp -command doComp + label .l -textvariable compRes + + entry .e1 -width 50 -textvariable file1 + entry .e2 -width 50 -textvariable file2 + button .b1 -text Browse -command "browse file1" + button .b2 -text Browse -command "browse file2" + + # Set up file dropping in entries if TkDnd is available + if {![catch {package require tkdnd}]} { + dnd bindtarget .e1 text/uri-list {fileDrop ::file1 %D} + dnd bindtarget .e2 text/uri-list {fileDrop ::file2 %D} + } + + grid .fm .l .bd -sticky wns + grid .e1 - .b1 -sticky news + grid .e2 - .b2 -sticky news + grid .l .bd -sticky news + grid columnconfigure . 1 -weight 1 +} + +if {![winfo exists .fm]} { + makeWin +} ADDED bumprev.txt Index: bumprev.txt ================================================================== --- /dev/null +++ bumprev.txt @@ -0,0 +1,21 @@ +These files need to be changed when bumping revisions: + +Makefile (VERSION and DOTVERSION) +eskil.vfs/tclkit.inf (fileversion/productversion) + +Also, mark it in: +Changes + +File release affect these too: +htdocs/changes.wiki +htdocs/download.html + + + + +These changes are needed when adding a new source files: + +Add source to e.g. src/apa.tcl (plus add to fossil) +In src/startup.tcl, update InitReSource +In Makefile, update SRCFILES +Do make -B newsrc Index: doc/cmdline.txt ================================================================== --- doc/cmdline.txt +++ doc/cmdline.txt @@ -20,10 +20,12 @@ - : Read patch file from standard input, to allow pipes. -review : View revision control tree as a patch. -context : Show only differences, with lines of context. -foreach : Open one diff window per file listed. -close : Close windows with no changes. + -sep : See char as separator between columns in files. + -gz : Uncompress files. -noparse : Eskil can perform analysis of changed blocks to -line : improve display. See online help for details. -smallblock : The default. Do block analysis on small blocks. -block : Full block analysis. This can be slow if there @@ -59,19 +61,22 @@ -print : Generate PDF and exit. -printCharsPerLine : Adapt font size for this line length and wrap. (80) -printPaper : Select paper size (a4) -printHeaderSize : Font size for page header (10) + -printFont : Select font to use in PDF, afm or ttf. If + is given as "Courier", PDF built in font is used. -printColorChange : Color for change (1.0 0.7 0.7) -printColorOld : Color for old text (0.7 1.0 0.7) - -printColorNew : Color for new text (0.8 0.8 1.0) -plugin : Preprocess files using plugin. -plugininfo : Pass info to plugin (plugin specific) -pluginlist : List known plugins -plugindump : Dump plugin source to stdout + -pluginallow : Allow full access for a plugin. -limit : Do not process more than lines. To list all options matching a prefix, run 'eskil --query prefix'. In tcsh use this line to get option completion: complete eskil 'C/-/`eskil --query -`/' Index: doc/eskil.txt ================================================================== --- doc/eskil.txt +++ doc/eskil.txt @@ -33,10 +33,13 @@ \t highlight full words only, or check single characters. \t Mark last : Last change of a line is underlined Colours\t: Choose highlight colours. Context\t: You can select that only differing lines shall be displayed, \t and how many surrounding lines are shown. + Pivot \t: If many lines in a file are equal, runtime may go up. By initially + \t disregarding such lines this can be kept at a more reasonable + \t level. The pivot sets how many lines must be equal to be ignored. Toolbar\t: Show/hide toolbar Save default\t: Save current option settings in ~/.eskilrc Search Menu Find \t: Search dialog Index: doc/plugins.txt ================================================================== --- doc/plugins.txt +++ doc/plugins.txt @@ -1,23 +1,34 @@ -Eskil provides a plugin system where a plugin can preprocess data +Eskil provides a plugin system where plugins can preprocess data before being compared and displayed. The command line options for plugins are: -plugin plugin : Use plugin -plugininfo info : Pass info to plugin (plugin specific) + -pluginallow : Allow full access privilege for a plugin. +Command line options for info: -plugindump plugin : Dump plugin source to stdout -pluginlist : List known plugins +A plugin may further define command line options that it accepts. + +Multiple -plugin may be given and they will be applied in the given +order. Any -plugininfo and -pluginallow belongs to the last -plugin +before them. A plugin is a Tcl script that must follow a specific format. Dump one of the included plugins to see what it looks like. The plugin is executed in a safe interpreter and thus cannot do any -damage. +damage. You can turn this safety off with -pluginallow. A plugin is set up with these global variables filled in: -::WhoAmI : The name of the plugin -::Info : The contents of -plugininfo parameter -::Pref : A copy if Eskil's internal preferences array. +::WhoAmI : The name of the plugin +::WhoAmIFull : The full path to the plugin source +::Info : The contents of -plugininfo parameter +::Pref : A copy if Eskil's internal preferences array. +::File(left) : The name of the left file processed +::File(right): The name of the right file processed +::argv : A copy of the command line from Eskil's invocation Example plugins are included in the kit. A plugin may give a result that has a line-by-line correspondence to the original, in which case the preprocessed data is used for comparing @@ -29,5 +40,8 @@ When searching for a plugin "x", files "x" and "x.tcl" will match. The search path is current directory, "plugins" directory, the directory where Eskil is installed, "plugins" directory where Eskil is installed, and also the internal "plugins" wrapped into Eskil. + +Directory Diff only supports one plugin. The first plugin with FileCompare +defined will be used. Index: doc/revision.txt ================================================================== --- doc/revision.txt +++ doc/revision.txt @@ -15,13 +15,20 @@
eskil -r rev1 -r rev2 file.txt
Compare the two revisions. This does not involve the local copy of file.txt. The -r options are also available in the GUI in the "Rev 1" and "Rev 2" fields. +
    Directory Diff
+ +Eskil can also browse and compare revisions for some systems directly in the +directory diff. It works just like for files, but give a directory on the +command line. Currently Git, Fossil and Subversion are supported. +
    Commit support
When comparing a file with the latest checked in version, some of the systems have support for committing directly from Eskil. If supported, the Commit button will be enabled. +It is also possible to revert the local changes using the Revert button.
    Priority between systems
If multiple systems are used within a directory Git/Hg/Bzr will be detected before CVS/SVN. Command line options -cvs and -svn can be used to put preference on one of those systems. @@ -31,22 +38,22 @@
hg diff | eskil -
git diff -p --diff-filter=M master | eskil -
    View all changes
-If the command line option -review is used. Eskil will generate a patch +If the command line option -review is used, Eskil will generate a patch for the current tree and display it as in patch mode. E.g. in a Mercurial directory, these show the same thing: -
eskil -preview
+
eskil -review
hg diff | eskil -
If file names are given after -review, only the listed files are included. If supported, the Commit button will be enabled allowing the viewed differences to be committed.
    RCS/CVS
-For RCS and CVS the arguments to -r are standard version numbers just like to their -r options. RCS style -r\u003crev\u003e is allowed. +For RCS and CVS the arguments to -r are standard version numbers just like to their -r options. If a revision is an integer, it is added to the last number in the current version, thus giving relative versions. E.g. -1 gives the second to last version.
    Subversion
For Subversion the arguments to -r are standard version numbers just like its -r option. If a revision is a negative integer, the log is searched backwards for earlier versions. E.g. -1 gives the second to last version. @@ -53,17 +60,39 @@
    Git
For Git -r is passed to show, as in "git show :". +
git config --global merge.tool eskil
+
git config --global mergetool.eskil.cmd 'eskil -fine -a $BASE -o $MERGED $REMOTE $LOCAL'
+
git config --global diff.tool eskil
+
git config --global difftool.eskil.cmd 'eskil $LOCAL $REMOTE'
+
    Fossil
For Fossil -r is passed to finfo, as in "fossil finfo -p -r ". +Additionaly, if a revision is a negative integer, the log is searched backwards +for earlier versions. E.g. -1 gives the second to last version. The search +follows the current branch from the current version. + +
fossil settings gmerge-command 'eskil -fine -a "%baseline" "%merge" "%original" -o "%output"' -global
+
    Mercurial
For Mercurial -r works as in "hg cat -r". +However, Eskil interprets zero or negative numbers as going back from the tip, i.e. -1 is one step back, corresponding to -2 in Mercurial. + +Mercurial is supported in the Directory Diff, but needs the hglist extension to +display correct file sizes and dates. If not they are faked using the file's +sha1 and thus unique per file and gives a correct result in comparison. + +To use Eskil for conflict resolution these config settings can be used. + +[merge-tools] +eskil.args = -fine -a $base $other $local -o $output +eskil.priority = 1
    Bazaar
For Bazaar -r works as in "bzr cat -r". Index: doc/tutorial.txt ================================================================== --- doc/tutorial.txt +++ doc/tutorial.txt @@ -43,26 +43,28 @@ \u2022\tDouble click on merge.txt to bring up the diff. \u2022\tSelect menu File->Open Ancestor File. \u2022\tSelect file mergeanc.txt -The merge window will appear with most changes merged. Conflicts are marked with gray, and a row of asterisks in the status bar. Conflicts are resolved to the right initially. Navigate between conflicts using shift-up/down keys. Select side with left/right keys. +The merge window will appear with most changes merged. Conflicts are marked with gray, and a row of asterisks in the status bar. Conflicts are resolved to the right initially. Navigate between conflicts using ctrl-up/down keys. Select side with left/right keys. Hover over the status bar to see ancestor info. Regular expression preprocessing -Double click on enum.c to bring up the diff. -[write something here to explain the problem and the goal] +Sometimes there are things in files being compared that you want to highlight or disregard. This preprocessing step applies search/replace regular expressions on the files being compared before lines are matched. The result is only used for determining equality. The original is always used for display and if lines differ after preprocessing, all changes are shown for that line. [add reference to re_syntax and regsub manuals] + +Double click on enum.c to bring up the diff. \u2022\tSelect menu Options->Preprocess. -\u2022\tPress "Add" to add a new preprocessing set. -\u2022\tEnter the regular expression "^.*?\\m(Apa\\w+).*$" in the field. +\u2022\tIf there is no clear set, press "Add" to add a new preprocessing set. +\u2022\tPress "Edit" to edit that preprocessing set. +\u2022\tEnter the regular expression "^.*?\\m(Apa\\w+).*$" in the Regexp field. \u2022\tEnter "\\1" in the substitution field. \u2022\tEnter a word starting with "Apa" in one of the example fields and see that the result is just that word. \u2022\tPress "Ok" and select menu File->Redo Diff. -A shortcut for the above is to use "-prefix Apa" on the command line. +A shortcut for the above is to use "-prefix Apa" on the command line, or to use the "Add Prefix" button and enter "Apa" as prefix. Changed filename in directory diff \u2022\tRight click on "namechange1" in Directory Diff's left window. \u2022\tSelect "Mark File" in the menu. DELETED eskil.vfs/COPYING Index: eskil.vfs/COPYING ================================================================== --- eskil.vfs/COPYING +++ /dev/null @@ -1,1 +0,0 @@ -../COPYING DELETED eskil.vfs/doc Index: eskil.vfs/doc ================================================================== --- eskil.vfs/doc +++ /dev/null @@ -1,1 +0,0 @@ -../doc DELETED eskil.vfs/examples Index: eskil.vfs/examples ================================================================== --- eskil.vfs/examples +++ /dev/null @@ -1,1 +0,0 @@ -../examples Index: eskil.vfs/lib/psballoon/psballoon.tcl ================================================================== --- eskil.vfs/lib/psballoon/psballoon.tcl +++ eskil.vfs/lib/psballoon/psballoon.tcl @@ -2,11 +2,11 @@ # # psballoon.tcl, # Procedures to create help message balloons or display balloons for # listboxes and labels that can't display all of their contents. # -# Copyright (c) 2003, Peter Spjuth (peter.spjuth@space.se) +# Copyright (c) 2003, Peter Spjuth (peter.spjuth@gmail.com) # # Permission is granted to use this code under the same terms as # for the Tcl core code. # #---------------------------------------------------------------------- @@ -22,12 +22,57 @@ set balloon(created) 0 set balloon(id) "" namespace export addBalloon } -proc psballoon::addBalloon {w {msg ""}} { +# Do some simple formatting, to be able to have cleaner text in source +proc psballoon::Fmt {msg} { + # Remove any newlines. + set msg [regsub -all "\n" $msg " "] + # Remove multiple whitespace + set msg [regsub -all {\s+} $msg " "] + set msg [string trim $msg] + # Any explicitly requested newlines? + set msg [regsub -all {\\n\s*} $msg "\n"] + # Further line breaks by length? + set lines {} + foreach line [split $msg \n] { + while {[string length $line] > 80} { + # There should be no path through this loop that does not + # shorten $line + set ix [string last " " $line 80] + if {$ix < 0} { + set ix [string first " " $line] + if {$ix < 0} { + # Just cut at 80 + set ix 80 + } + } + + if {$ix == 0} { + set line [string trim $line] + } else { + lappend lines [string range $line 0 $ix-1] + set line [string range $line $ix+1 end] + } + } + lappend lines $line + } + set msg [join $lines \n] + return $msg +} + +proc psballoon::addBalloon {w args} { variable balloon + + set msg [lindex $args end] + set args [lrange $args 0 end-1] + + # Request for formatting + if {"-fmt" in $args && $msg ne ""} { + set msg [Fmt $msg] + } set c [winfo class $w] if {$msg == "" && $c != "Listbox" && $c != "Label"} { error "Missing message to balloon for $w ($c)" } @@ -64,17 +109,46 @@ destroy .balloon } set balloon(created) 0 set balloon(pending) 0 } + +# Measure display width needed for a text with line breaks +proc psballoon::Measure {font txt} { + set len 0 + foreach line [split $txt \n] { + set lw [font measure $font $line] + if {$lw > $len} { + set len $lw + } + } + return $len +} proc psballoon::createBalloon {w mx my} { variable balloon if {$balloon(created) == 0} { - set font [$w cget -font] + # Figure out widget's font + if {[catch {set font [$w cget -font]}]} { + set font [ttk::style lookup [winfo class $w] -font] + } + # Fallback to something reasonable of font fails. + if {$font eq ""} { + set font TkDefaultFont + } set ww [winfo width $w] set ih [winfo height $w] + if {[winfo class $w] in {TLabelframe Labelframe}} { + # Put it below the label, not the entire widget. + # 1.5 font heights is a reasonable guess + set fh [font metrics $font -linespace] + set ih [expr {$fh * 3 /2 }] + # Below cursor at least + if {$ih <= $my} { + set ih [expr {$my + 5}] + } + } set ix 0 set iy 0 set create 1 set msg $balloon(msg,$w) if {$msg == ""} { @@ -84,17 +158,20 @@ set msg [$w get $i] foreach {ix iy iw ih} [$w bbox $i] {break} } Label { set msg [$w cget -text] - set iw [font measure $font $msg] + set iw [Measure $font $msg] } } - #Don't create a balloon if the text is fully visible. + # Don't create a balloon if the text is fully visible. set create [expr {$iw > $ww - 8}] } else { - set iw [font measure $font $msg] + if {[string index $msg 0] eq "\["} { + set msg [subst -novariables -nobackslashes $msg] + } + set iw [Measure $font $msg] } if {$create} { set x [expr {[winfo rootx $w] + $ix}] set y [expr {[winfo rooty $w] + $iy + $ih + 2}] if {$x + $iw + 8 > [winfo screenwidth $w]} { @@ -102,12 +179,12 @@ } toplevel .balloon -bg black wm overrideredirect .balloon 1 label .balloon.l \ -text $msg -relief flat -font $font -justify left \ - -bg #ffffaa -fg black -padx 2 -pady 0 -anchor w + -bg #ffffaa -fg black -padx 2 -pady 0 -anchor "w" pack .balloon.l -side left -padx 1 -pady 1 wm geometry .balloon +${x}+${y} set balloon(created) 1 } } } Index: eskil.vfs/lib/pstools/pstools.tcl ================================================================== --- eskil.vfs/lib/pstools/pstools.tcl +++ eskil.vfs/lib/pstools/pstools.tcl @@ -37,10 +37,11 @@ interp alias {} _iparray loadinterp array interp invokehidden loadinterp source $file foreach arg $args { + ##nagelfar vartype arg varName upvar 1 $arg TheVar if {[_iparray exists $arg]} { foreach {key val} [_iparray get $arg] { if {[info exists TheVar($key)]} { set TheVar($key) $val @@ -127,22 +128,41 @@ # already exists. proc pstools::locateEditor {globVar} { upvar "#0" $globVar var if {[info exists var]} return - - # What is a good value on Mac? - if {$::tcl_platform(platform) == "unix"} { - set var emacs - } else { - set var wordpad - foreach dir [lsort -decreasing -dictionary \ - [glob -nocomplain c:/apps/emacs*]] { + + set candidates {} + if {[info exists ::env(VISUAL)]} { + lappend candidates $::env(VISUAL) + } + if {[info exists ::env(EDITOR)]} { + lappend candidates $::env(EDITOR) + } + if {$::tcl_platform(platform) == "windows"} { + # Try to locate some common installation points for Emacs + set dirs [glob -nocomplain c:/apps/emacs*] + lappend dirs {*}[glob -nocomplain "C:/Program Files/emacs*"] + foreach dir [lsort -decreasing -dictionary $dirs] { set em [file join $dir bin runemacs.exe] set em [file normalize $em] if {[file exists $em]} { - set var $em + lappend candidates $em break } } + lappend candidates runemacs wordpad + } + # What is a good value on Mac? + + # Add some more for fallback + lappend candidates emacs gvim gedit kate + + foreach cand $candidates { + if {[auto_execok $cand] ne ""} { + set var [list $cand] + return + } } + # If we fall through here we are kind of lost... + set var "could_not_find_editor" } Index: eskil.vfs/main.tcl ================================================================== --- eskil.vfs/main.tcl +++ eskil.vfs/main.tcl @@ -1,3 +1,3 @@ package require starkit starkit::startup -source $::starkit::topdir/src/eskil.tcl +source $::starkit::topdir/src/startup.tcl DELETED eskil.vfs/plugins Index: eskil.vfs/plugins ================================================================== --- eskil.vfs/plugins +++ /dev/null @@ -1,1 +0,0 @@ -../plugins DELETED eskil.vfs/src/clip.tcl Index: eskil.vfs/src/clip.tcl ================================================================== --- eskil.vfs/src/clip.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/clip.tcl DELETED eskil.vfs/src/compare.tcl Index: eskil.vfs/src/compare.tcl ================================================================== --- eskil.vfs/src/compare.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/compare.tcl DELETED eskil.vfs/src/dirdiff.tcl Index: eskil.vfs/src/dirdiff.tcl ================================================================== --- eskil.vfs/src/dirdiff.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/dirdiff.tcl DELETED eskil.vfs/src/eskil.tcl Index: eskil.vfs/src/eskil.tcl ================================================================== --- eskil.vfs/src/eskil.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/eskil.tcl DELETED eskil.vfs/src/help.tcl Index: eskil.vfs/src/help.tcl ================================================================== --- eskil.vfs/src/help.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/help.tcl DELETED eskil.vfs/src/map.tcl Index: eskil.vfs/src/map.tcl ================================================================== --- eskil.vfs/src/map.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/map.tcl DELETED eskil.vfs/src/merge.tcl Index: eskil.vfs/src/merge.tcl ================================================================== --- eskil.vfs/src/merge.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/merge.tcl DELETED eskil.vfs/src/plugin.tcl Index: eskil.vfs/src/plugin.tcl ================================================================== --- eskil.vfs/src/plugin.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/plugin.tcl DELETED eskil.vfs/src/print.tcl Index: eskil.vfs/src/print.tcl ================================================================== --- eskil.vfs/src/print.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/print.tcl DELETED eskil.vfs/src/printobj.tcl Index: eskil.vfs/src/printobj.tcl ================================================================== --- eskil.vfs/src/printobj.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/printobj.tcl DELETED eskil.vfs/src/registry.tcl Index: eskil.vfs/src/registry.tcl ================================================================== --- eskil.vfs/src/registry.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/registry.tcl DELETED eskil.vfs/src/rev.tcl Index: eskil.vfs/src/rev.tcl ================================================================== --- eskil.vfs/src/rev.tcl +++ /dev/null @@ -1,1 +0,0 @@ -../../src/rev.tcl ADDED eskil.vfs/tclkit.ico Index: eskil.vfs/tclkit.ico ================================================================== --- /dev/null +++ eskil.vfs/tclkit.ico cannot compute difference between binary files ADDED eskil.vfs/tclkit.inf Index: eskil.vfs/tclkit.inf ================================================================== --- /dev/null +++ eskil.vfs/tclkit.inf @@ -0,0 +1,6 @@ +CompanyName "Peter Spjuth" +LegalCopyright "Copyright (c) 1998-2018 Peter Spjuth et al." +FileDescription "File difference viewer" +ProductName "Eskil" +ProductVersion "2.8.3" +FileVersion "2.8.3" ADDED examples/dir1/csv1.txt Index: examples/dir1/csv1.txt ================================================================== --- /dev/null +++ examples/dir1/csv1.txt @@ -0,0 +1,32 @@ +head1,head2,head3,head4,head5,head6,head7,head8,head9,head10 +MCPM,JFPC,FJ9S9,J1J,CC3,72HJ,RN?I,O48,BH<< +RKBO,@P:,GGG0,=8FNP,P6K,I@4,44H,48RG,1ODB:,SN:O? +CM7,M75,PML7@,I1:,EMRL,KHK,J3IQ,N4:CJ,2H:F=,L;9I +a,b,c,d,e,f,g,h,i,j +9R6,MQPJA,BL1,0NCR,6BEH0,DC=,D@F,I9J19,L8M99,DQHEE +GGK,OB?PM,I9S;K,060,AHO=8,JC46O,J>=,11?,QNEP,I1Q +:9EA,3LPO,>27,BHA6,A3<,ODLH,01?L5,HLJ,KF>S= +601,QK<26,1H>,PAQ,H2P,C@=,J?59<,;MG,E>8KF,BD6I +M>SR,KA3L,PJG,HMF=G,<79I,B3;4<,1>D,JOPM,K:R7,HK< +CK9NB,G;10O,K2;,S6>7,O12KG,@RM,QN>,=<1<,D?CJ +PM2;K,JPQR?,<;7C3,H5SO,6M9,OL;@D,?4H>I,Q3F,E8ODJ,2P;2O,C7QN= +F036,>FOG0,EI<91,2H5P1,AAPP?,N58HI,RRRN;,J?A6B,;:;C,19KL +SG?H2,:<7,NLS@0,=7GA,5IJ,MLQO,4N0>=,9SRJ,7?PM,>P9E5,1O9,=5?,JCGB,A940,D;8MB,B2L +E8Q2F,D12L,JL7ME,P0QPN,6@B,FEHI,QAF69,PIK,4KO,:C? +G8:,J19EL,?2L,6EOBA,D:B,6N>,2G2,F6<,@B8,@BNC? +ERG0J,:7R,DCD,QBBNQ,OBB1,G8@,9QNE,D3S,306,HCM?S +4MJ,;C4,:72BJ,=M;5,64@,:73:3,3SO,?SRJO,59R,73HHF,4=2,?J?7,C0; +KPG64,QI442,3OCQ,50C2K,M>9C,>9<,CNA1J,>9Q,@RJ4S,899 +3;RS,H3;@5,<:C,1OAL,J=85K,PI6,OIA,FQ4S,H?53P,;SBD4 +?==,<0A;,:3;Q,3FH,<3N,=D0,ASSH,>E1M,E44I,5S: +RRHBE,0A1M:,DKLIA,NSN,KA:@,BG3,=193,6G;6E,H92,@,MS?BR +KPFLI,A>LCB,Q:?C,,72P,EME ADDED examples/dir1/csv2.txt Index: examples/dir1/csv2.txt ================================================================== --- /dev/null +++ examples/dir1/csv2.txt @@ -0,0 +1,32 @@ +head1 head2 head3 head4 head5 head6 head7 head8 head9 head10 +MCPM JFPC FJ9S9 J1J CC3 72HJ RN?I O48 BH<< +RKBO @P: GGG0 =8FNP P6K I@4 44H 48RG 1ODB: SN:O? +CM7 M75 PML7@ I1: EMRL KHK J3IQ N4:CJ 2H:F= L;9I +a b c d e f g h i j +9R6 MQPJA BL1 0NCR 6BEH0 DC= D@F I9J19 L8M99 DQHEE +GGK OB?PM I9S;K 060 AHO=8 JC46O J>= 11? QNEP I1Q +:9EA 3LPO >27 BHA6 A3< ODLH 01?L5 HLJ KF>S= +601 QK<26 1H> PAQ H2P C@= J?59< ;MG E>8KF BD6I +M>SR KA3L PJG HMF=G <79I B3;4< 1>D JOPM K:R7 HK< +CK9NB G;10O K2; S6>7 O12KG @RM QN> =<1< D?CJ +PM2;K JPQR? <;7C3 H5SO 6M9 OL;@D ?4H>I Q3F E8ODJ 2P;2O C7QN= +F036 >FOG0 EI<91 2H5P1 AAPP? N58HI RRRN; J?A6B ;:;C 19KL +SG?H2 :<7 NLS@0 =7GA 5IJ MLQO 4N0>= 9SRJ 7?PM >P9E5 1O9 =5? JCGB A940 D;8MB B2L +E8Q2F D12L JL7ME P0QPN 6@B FEHI QAF69 PIK 4KO :C? +G8: J19EL ?2L 6EOBA D:B 6N> 2G2 F6< @B8 @BNC? +ERG0J :7R DCD QBBNQ OBB1 G8@ 9QNE D3S 306 HCM?S +4MJ ;C4 :72BJ =M;5 64@ :73:3 3SO ?SRJO 59R 73HHF 4=2 ?J?7 C0; +KPG64 QI442 3OCQ 50C2K M>9C >9< CNA1J >9Q @RJ4S 899 +3;RS H3;@5 <:C 1OAL J=85K PI6 OIA FQ4S H?53P ;SBD4 +?== <0A; :3;Q 3FH <3N =D0 ASSH >E1M E44I 5S: +RRHBE 0A1M: DKLIA NSN KA:@ BG3 =193 6G;6E H92 @ MS?BR +KPFLI A>LCB Q:?C 72P EME Index: examples/dir1/keyword ================================================================== --- examples/dir1/keyword +++ examples/dir1/keyword @@ -1,2 +1,2 @@ - A file with a keyword in it. -$Revision$ +A file with a keyword in it. +$Revision:abc$ Index: examples/dir1/longline.txt ================================================================== --- examples/dir1/longline.txt +++ examples/dir1/longline.txt @@ -1,3 +1,3 @@ -abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäö -hopp -abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdef +abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäö +hopp +abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdef ADDED examples/dir1/misc.txt Index: examples/dir1/misc.txt ================================================================== --- /dev/null +++ examples/dir1/misc.txt @@ -0,0 +1,42 @@ +Misc examples of diffs. +A line with some inline changes. +1 +11 +111 +One line against many. +2 +22 +222 +Apa 1 +Bepa 1 +Cepa 1 +3 +33 +333 +The following is a real-life tricky case that currently do not show up well. + WrImmediate16 TME_TmEnCfg0 0563 + WrImmediate16 TME_TmEnCfg1 0212 + WrImmediate16 TME_TmIdCfg 0200 + WrImmediate32 TME_Bat0 21323130 + WrImmediate32 TME_Bat1 21323130 + WrImmediate32 TME_Bat2 21323130 + WrImmediate32 TME_Bat3 21323130 + WrImmediate32 TME_VcCfgA 00400FCA + WrImmediate32 TME_VcCfgB 004007C1 + WrImmediate32 TME_VcCfgC 004007C1 +4 +44 +444 +Apa 1 +Bepa 1 +Cepa 1 +5 +55 +555 +Apa 1 +Bepa 1 +Cepa 1 +Depa 1 +6 +66 +666 ADDED examples/dir2/csv1.txt Index: examples/dir2/csv1.txt ================================================================== --- /dev/null +++ examples/dir2/csv1.txt @@ -0,0 +1,32 @@ +head1,head2,head3,head4,head5,head6,head7,head8,head9,head10 +MCPM,JFPC,FJ9S9,J1J,CC3,72HJ,RN?I,O48,BH<< +RKBO,@P:,GGG0,=8FNP,P6K,O@GJ>,44H,48RG,1ODB:,SN:O? +CM7,M75,PML7@,I1:,EMRL,KHK,J3IQ,N4:CJ,2H:F=,L;9I +9R6,MQPJA,BL1,0NCR,6BEH0,DC=,D@F,I9J19,L8M99,DQHEE +GGK,OB?PM,I9S;K,060,AHO=8,JC46O,J>=,11?,QNEP,I1Q +:9EA,3LPO,>27,BHA6,A3<,ODLH,01?L5,PN:R,SPR>J,KF>S= +601,QK<26,1H>,PAQ,H2P,C@=,J?59<,;MG,E>8KF,BD6I +M>SR,KA3L,PJG,HMF=G,<79I,B3;4<,1>D,JOPM,=AR,HK< +CK9NB,G;10O,:4JG9,>K2;,S6>7,O12KG,@RM,QN>,=<1<,D?CJ +PM2;K,JPQR?,7DI,H5SO,6SJA,OL;@D,?4H>I,Q3F,E8ODJ,2P;,C7QN= +F036,>FOG0,EI<91,2H5P1,AAPP?,N58HI,RRRN;,J?A6B,;:;C,19KL +0PPF@,:<7,NLS@0,=7GA,5IJ,MLQO,4N0>=,9SRJ,7?PM,>P9E5,72K5,=5?,JCGB,03I<,D;8MB,B2L +E8Q2F,D12L,JL7ME,PH01C,:A21,FEHI,QAF69,PIK,4KO,SFPI +G8:,F51,?2L,6EOBA,D:B,6N>,2G2,F6<,Q=7K,@BNC? +ERG0J,:7R,DCD,QBBNQ,OBB1,G8@,9QNE,=4M:,306,HCM?S +4MJ,;C4,:72BJ,=M;5,64@,?1A0D,3SO,A2C7,59R,73HHF,4=2,?J?7,C0; +KPG64,QI442,3OCQ,50C2K,M>9C,>9<,CNA1J,>9Q,@RJ4S,899 +3;RS,H3;@5,<73,1OAL,J=85K,PI6,OIA,FQ4S,H?53P,;SBD4 +?==,<0A;,:3;Q,3FH,<3N,=D0,ASSH,:>M,E44I,5S: +RRHBE,0A1M:,DKLIA,=DM,KA:@,66S6,=193,6G;6E,H92,@,MS?BR +KPFLI,A>LCB,Q:?C,D49J?,KKCI,<@LM8,A06GB,?=R:>,72P,EME ADDED examples/dir2/csv2.txt Index: examples/dir2/csv2.txt ================================================================== --- /dev/null +++ examples/dir2/csv2.txt @@ -0,0 +1,32 @@ +head1 head2 head3 head4 head5 head6 head7 head8 head9 head10 +MCPM JFPC FJ9S9 J1J CC3 72HJ RN?I O48 BH<< +RKBO @P: GGG0 =8FNP P6K O@GJ> 44H 48RG 1ODB: SN:O? +CM7 M75 PML7@ I1: EMRL KHK J3IQ N4:CJ 2H:F= L;9I +9R6 MQPJA BL1 0NCR 6BEH0 DC= D@F I9J19 L8M99 DQHEE +GGK OB?PM I9S;K 060 AHO=8 JC46O J>= 11? QNEP I1Q +:9EA 3LPO >27 BHA6 A3< ODLH 01?L5 PN:R SPR>J KF>S= +601 QK<26 1H> PAQ H2P C@= J?59< ;MG E>8KF BD6I +M>SR KA3L PJG HMF=G <79I B3;4< 1>D JOPM =AR HK< +CK9NB G;10O :4JG9 >K2; S6>7 O12KG @RM QN> =<1< D?CJ +PM2;K JPQR? 7DI H5SO 6SJA OL;@D ?4H>I Q3F E8ODJ 2P; C7QN= +F036 >FOG0 EI<91 2H5P1 AAPP? N58HI RRRN; J?A6B ;:;C 19KL +0PPF@ :<7 NLS@0 =7GA 5IJ MLQO 4N0>= 9SRJ 7?PM >P9E5 72K5 =5? JCGB 03I< D;8MB B2L +E8Q2F D12L JL7ME PH01C :A21 FEHI QAF69 PIK 4KO SFPI +G8: F51 ?2L 6EOBA D:B 6N> 2G2 F6< Q=7K @BNC? +ERG0J :7R DCD QBBNQ OBB1 G8@ 9QNE =4M: 306 HCM?S +4MJ ;C4 :72BJ =M;5 64@ ?1A0D 3SO A2C7 59R 73HHF 4=2 ?J?7 C0; +KPG64 QI442 3OCQ 50C2K M>9C >9< CNA1J >9Q @RJ4S 899 +3;RS H3;@5 <73 1OAL J=85K PI6 OIA FQ4S H?53P ;SBD4 +?== <0A; :3;Q 3FH <3N =D0 ASSH :>M E44I 5S: +RRHBE 0A1M: DKLIA =DM KA:@ 66S6 =193 6G;6E H92 @ MS?BR +KPFLI A>LCB Q:?C D49J? KKCI <@LM8 A06GB ?=R:> 72P EME Index: examples/dir2/keyword ================================================================== --- examples/dir2/keyword +++ examples/dir2/keyword @@ -1,2 +1,2 @@ A file with a keyword in it. -$Revision$ +$Revision:b$ Index: examples/dir2/longline.txt ================================================================== --- examples/dir2/longline.txt +++ examples/dir2/longline.txt @@ -1,5 +1,5 @@ -abcdefghijklmnop -abcdefxhijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs1uvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklm2opqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäö -hej -hopp -abcdefghi2klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyza4cdef +abcdefghijklmnop +abcdefxhijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs1uvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklm2opqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäö +hej +hopp +abcdefghi2klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzåäöabcdefghijklmnopqrstuvwxyza4cdef ADDED examples/dir2/misc.txt Index: examples/dir2/misc.txt ================================================================== --- /dev/null +++ examples/dir2/misc.txt @@ -0,0 +1,37 @@ +Misc examples of diffs. +A line 1 with sume line changes. +1 +11 +111 +Surrounding line1 +One line against many others. +Surrounding line2 +Surrounding line3 +2 +22 +222 +Bepa 2 +Gurka +Cepa 2 +3 +33 +333 +The following is a real-life tricky case that currently do not show up well. + WrImmediate16 TME_TmIdCfg 0204 + WrImmediate16 TME_VcCfgA 0FC7 + WrImmediate32 TME_VcCfgB 00400FC1 + WrImmediate32 TME_VcCfgC 00400FC1 +4 +44 +444 +Cepa 2 +Gurka +5 +55 +555 +Bepa 2 +Apa 2 +Cepa 2 +6 +66 +666 ADDED htdocs/changes.wiki Index: htdocs/changes.wiki ================================================================== --- /dev/null +++ htdocs/changes.wiki @@ -0,0 +1,231 @@ +Changes + +Upcoming changes (not yet released): + + * TBD + +Changes in v2.8.3 (2018-06-13): + + * More features in Fourway diff. + * Better visibility that commit happened. + * Shortcuts in preprocess dialog for common patterns. + +Changes in v2.8.2 (2018-05-13): + + * Added Fourway diff, for comparing changes. + * Bugfix in revision handling for Fossil. + +Changes in v2.8.1 (2018-01-14): + + * Repaired plugins for directory diff (broken by multi plugin in 2.8.0). + * Added -excludedir and -excludefile options for directory diff. + * Handle GIT revisions better for directory diff. + * Support -nocase in directory diff. + * Directory diff no longer shortcuts for files with same size&mtime. + * Removed support for old RCS style -rREV command line. + * Corrected detected of Emacs for Registry. (Broken in 2.7.4) + +Changes in v2.8.0 (2017-12-05): + + * Handle multiple plugins. + * Upgraded DiffUtil to 0.4.0 which is significantly faster for large files. + * Default pivot is now 10. Added GUI choise for pivot 1. + +Changes in v2.7.4 (2017-11-30): + + * Handle multiple preprocess definitions that can be saved with preferences. + * Preserve line endings when saving during Edit Mode. + * Added -gz flag to compare compressed files. + * Allow multi select in table diff. + * Allow one side of directory diff to be protected from editing. + * Allow directories to be created in directory diff. + * When needing an editor, try VISUAL and EDITOR plus a set of common ones. + +Changes in v2.7.3 (2016-08-30): + + * Requires Tcl 8.6 + * GUI support for table and separator. + +Changes in v2.7.2 (2016-08-15): + + * Corrected right side numbering when parsing patch. + * Word parse now consistently uses non-space as word char. + * New [./table.wiki | table] view, activated by -table, when comparing tables. + * Mercurial support for Directory Diff, Commit, Revert and Log. + * GIT support for negative revisions and log view. + * Printed PDF is now compressed. + * Printed PDF from patch view adds page break between files. + * Plugins can define command line options they accept. + * Plugins can read ::argv to know the given command line. + * New plugin for binary files + * New plugin for CSV files + * Added option -sep, to set a separator that makes input be interpreted + in a table like manner. + * New plugin for PDF files + * Added option -pluginallow to run plugins in a standard interpreter instead + of a safe one. Thus a plugin could use e.g. exec. + * Allow plugins to yield if Eskil is run in Tcl 8.6 or newer. + Added swap plugin to exemplify this. + +Changes in v2.7 (2015-03-09): + + * Directory Diff support for GIT, Fossil and Subversion. + Directly browse and compare two revisions. + * Plugins in Directory Diff. + * Added option -printFont to select font for PDF generation. + Default font changed to a True Type font. + Use "-printFont Courier" to fall back on PDF built-in. + * Mac supported + +Changes in v2.6.7 (2014-11-13): + + * Fixed Directory Diff that stopped working in 2.6.6 + +Changes in v2.6.6 (2014-10-27): + + * Avoid font error with balloon help. + * Store default prefs as comment in rc file. + +Changes in v2.6.5 (2014-01-24): + + * Fixed error printing patch with only deleted or inserted files. + * Support direct print in patch mode. + * Detect Subversion 1.7 working copy + +Changes in v2.6.4 (2013-08-22): + + * Include afm font for consistent PDF printing. + * Add .pdf to print file by default + * Fixed bug that marked extra changes in scroll map when displaying a patch. + * Avoid getting double .-files in dirdiff on Windows. + * Corrected display of ancestor lines in three-way merge. + +Changes in v2.6.3 (2012-08-21): + + * Added Revert button in Revision mode + * Added -pivot flag to control diff algorithm. This cuts down processing time for certain large files. + +Changes in v2.6.2 (2012-06-18): + + * Fixed bug where extra lines showed when displaying only diffs (no context). + * Include added files when using -review with Fossil. + * Improved plugin viewer and PDF print dialog. + * Support regsub preprocessing controlled per side. + * Support branches in Subversion. + * Support negative revisions with Fossil. + * Added -nocdiff command line flag for debug. + * Fixed a bug where alignment was not properly shown in output. + * Fixed out-of-stack crash. + +Changes in v2.6.1 (2011-11-01): + + * Eskil [http://eskil.tcl.tk|re-hosted] and changed to use [http://www.fossil-scm.org|Fossil]. + * Fixed directory diff appearance on Windows. + * Fixed bug where copy button in directory diff picked the wrong file. + * Fixed bug where plugins were not found in VFS. + +Changes in v2.6 (2011-10-30): + + * Support commit in Git and Fossil. + * Support commit, list of files and revisions with -review. + * Added Paste Patch command. + * New -pluginlist option. New GUI for plugin selection. + * Added three-way merge. + * Auto-detect line endings in ancestor file to select merge output. + * Fully rewritten directory diff with new design. + * Set alignment with drag & drop. + +Changes in v2.5 (2011-04-01): + + * Requires Tcl 8.5. + * Plugins: Added dump, better documentation. + * Dir diff: Added step down. + * Dir diff: Redesigned to display less. + * Support for Perforce and Fossil. + * Allow zero lines of context. + * Detect and display annotation in patch view. + * Select colors for PDF print. Command line options for PDF. + * Removed support for Postscript output. + * Support File Drop with TkDnd. + * Handle line endings in conflict and merge. + +Changes in v2.4 (2009-01-08): + + * Completely redesigned directory diff. + * Added a log viewer in revision mode. + * Added color option for unchanged text. + * Plugins support. + * Support for Subversion, Mercurial and Bazaar. + * Support commit in Subversion. + * Added -review for displaying all changes in a tree. + * Support command line "-" to read a patch from std input. + +Changes in v2.3 (2007-12-05): + + * Added -printpdf command line option. + * Fixed line numbering in PDF with big line numbers. + * Started on GIT support. + * Anything on the command line is checked for a starkit. + Kits are mounted and treated as directories. + +Changes in v2.2 (2007-04-05): + + * Added experimental -nonewline command option. + * Added -close command option. + * Added experimental PDF print. + * Added dirdiff preferences and filters. + * Smarter save in merge. FR 2957 + * Added commit button for CVS. FR 2780 + * Bug fixes include: Kits are mounted read-only, fixed dir diff window menu, + improved patch file parsing. + +Changes in v2.1 (2006-06-02): + + * Added -preprocess command line option. + * Added -foreach command line option. + * Added -context command line option. + * Handle starkits as directories in dir diff. + * Support relative -r with CVS. + +Changes in v2.0.7 (2004-12-14): + + * Added regsub preprocessing option. + * Added -prefix command line option. + * Improved merge window. + * Added ignore keyword option to directory diff. + +Changes in v2.0.6 (2004-10-19): + + * Added Ignore Digit option. + * Fixed bug in -r for ClearCase. + * Edit Mode made more robust. + +Changes in v2.0.5 (2004-08-20): + + * Option -r can now be used with ClearCase diff. + * Edit Mode allows simple editing in the diff display and saving. + +Changes in v2.0.4 (2004-06-17): + + * Added ignore case option. + * Improved alignment function. + +Changes in v2.0.3 (2004-05-26): + + * Added context options for "Diffs only" mode. + * Rewrote how "Separate Diff" and "Align" works. The latter now only happens after a "Redo Diff". + * Added scroll map and some more context menu options in Directory Diff. + +Changes in v2.0.2 (2004-05-03): + + * Fixed a bug in ClearCase support. + * Improved enscript usage in print command. + * Added "mark file" in dirdiff context menu. + +Changes in v2.0.1 (2004-02-10): + + * Added preference for width and height. + * Added Tools menu to directory diff window. + * Made it simpler to save a conflict in the same file. + +First public release v2.0 (2004-01-30): ADDED htdocs/download.html Index: htdocs/download.html ================================================================== --- /dev/null +++ htdocs/download.html @@ -0,0 +1,132 @@ +
+ +Downloads are available both as a Starkit +and as Starpacks for some platforms. +If you need a Starpack for some other platform, you can +generate it yourself. +

+Eskil's application source is licensed under GPL, but the bundled packages +included in the starkit are under the same license as Tcl. + +

Version 2.8.3

+ +

Version 2.8.2

+ +

Version 2.8.1

+ +

Version 2.8.0

+ +

Version 2.7.4

+ +

Version 2.7.3

+ +

Version 2.7.2

+ +

Version 2.7

+ +

Version 2.6.7

+ +

Version 2.6.6

+NOTE: Directory diff in 2.6.6 does not work. 2.6.7 has replaced it + +

Version 2.6.2

+ +

Version 2.6.1

+
ADDED htdocs/eskil1.png Index: htdocs/eskil1.png ================================================================== --- /dev/null +++ htdocs/eskil1.png cannot compute difference between binary files ADDED htdocs/eskil2.png Index: htdocs/eskil2.png ================================================================== --- /dev/null +++ htdocs/eskil2.png cannot compute difference between binary files ADDED htdocs/eskil3.png Index: htdocs/eskil3.png ================================================================== --- /dev/null +++ htdocs/eskil3.png cannot compute difference between binary files ADDED htdocs/fossil.wiki Index: htdocs/fossil.wiki ================================================================== --- /dev/null +++ htdocs/fossil.wiki @@ -0,0 +1,65 @@ +Fossil Support +

Fossil Support

+ +

Introduction

+ +Eskil can compare versions in many revision control systems including +[http://www.fossil-scm.org | Fossil]. + +If you specify only one file on the command line to Eskil, it will +automatically detect if the file is under revision control and enter revision +control mode. + +By default the local file is compared against the latest checked in version. +This is for the common case when you just want to know what you have changed +before checking in. + +You can use the -r option to select which versions to compare. +The -r option works as in fossil finfo. If a revision is zero or a negative +integer, +the log is searched backwards for earlier versions. E.g. -1 gives the second +to last version. The search follows the current branch from the current version. + + +Examples: + +Compare file.txt with the latest checked in version: +
eskil file.txt
+ +Compare file.txt with the specified version: +
eskil -r rev file.txt
+ +Compare the two revisions. This does not involve the local copy of file.txt. +
eskil -r rev1 -r rev2 file.txt
+ +The -r options are also available in the GUI in the "Rev 1" and "Rev 2" fields. + +

Directory Diff

+ +Eskil can also browse and compare Fossil revisions in the directory diff. +It works just like for files, but give a directory on the command line. + +

Commit support

+ +When comparing a file with the latest checked in version, Eskil can commit +directly to Fossil. + +

View all changes

+ +If the command line option -review is used, Eskil will generate a patch +for the current tree and display it as in patch mode. + +eskil -review [files] + +If file names are given after -review, only the listed files are included. +The Commit button will be enabled allowing the viewed differences to be +committed directly from Eskil. + +

Conflict merging

+Eskil can be used as the conflict resolution tool for Fossil by configuring +the gmerge-command setting like this: + +
fossil settings gmerge-command 'eskil -fine -a "%baseline" "%merge" "%original" -o "%output"' -global
+ + + ADDED htdocs/index.html Index: htdocs/index.html ================================================================== --- /dev/null +++ htdocs/index.html @@ -0,0 +1,45 @@ +
+ + + +

About Eskil

+Eskil is a graphical tool to view the differences between files and directories. It supports version management and patch files and has various preprocessing and alignment options to improve the display of tricky diffs. +

+Pronunciation: The E is short, like in "set", the rest is like "skill". +

+Any feedback, good or bad, can be sent to +<peter dot spjuth at gmail dot com> or added as a Ticket. +

+It is similar but unrelated to TkDiff. + +

Features

+ +
    +
  • Highlights changes within a line.
  • +
  • Matches similar lines within a changed block to better show changed +lines that are adjacent to added/removed lines.
  • +
  • Recursive directory diff.
  • +
  • Fossil/CVS/RCS/ClearCase/GIT/SVN/BZR/HG/Perforce diff.
  • +
  • Conflict merge and three-way merge.
  • +
  • Commit changes directly from Eskil.
  • +
  • View patch, from file or clipboard.
  • +
  • Print to PDF.
  • +
  • "Clip diff"
  • +
  • Plugins for preprocessing files.
  • +
  • Alignment and block diff functions for tricky diffs.
  • +
  • Edit and Save file from diff window.
  • +
  • Starkit compare and browsing.
  • +
+ +

Screenshots

+ + +

+A "zoom" feature for long lines.

+
+

Directory Diff.

+
+ +

ADDED htdocs/plugins.wiki Index: htdocs/plugins.wiki ================================================================== --- /dev/null +++ htdocs/plugins.wiki @@ -0,0 +1,119 @@ +Plugins + +

Introduction

+ +Eskil provides a plugin system where a plugin can preprocess data +before being compared and displayed. + +A plugin is a Tcl script that must follow a specific format. +Example plugins are included in the kit. +Dump one of the included plugins to see what it looks like. + +When searching for a plugin "x", files "x" and "x.tcl" will +match. The search path is current directory, "plugins" directory, +the directory where Eskil is installed, "plugins" directory where +Eskil is installed, and also the internal "plugins" wrapped into Eskil. + +

Usage

+ +The command line options for plugins are: + * -plugin plugin : Use plugin + * -plugininfo info : Pass info to plugin (plugin specific) + * -plugindump plugin : Dump plugin source to stdout + * -pluginlist : List known plugins + * -pluginallow : Allow full access privilege for a plugin. + +A plugin may further define command line options that it accepts. +A way to see the plugin's options is to do: +
eskil -plugin <plg> -help
+ +Multiple -plugin may be given and they will be applied in the given +order. Any -plugininfo and -pluginallow belongs to the last -plugin +before them. + +

General Format

+ +A plugin is a Tcl script file that must start with the verbatim sequence +"##Eskil Plugin :". A plugin is sourced and used in its own safe +interpreter and thus have free access to its own global space. Hookup +points are defined by declaring specifically named procedures as specified +below, and apart from those, a plugin can define and do whatever within +the limits of a safe interpreter. + +In addition to the standard safe interpreter environment, a plugin has +access to stdout as well. By using the command line option -pluginallow, +the plugin is run in a standard interpreter and may e.g. do exec to utilize +external tools. + +A plugin is set up with these global variables filled in: + * ::WhoAmI : The name of the plugin + * ::WhoAmIFull : The full path to the plugin source + * ::Info : The contents of -plugininfo parameter + * ::Pref : A copy if Eskil's internal preferences array. + * ::File(left) : The name of the left file processed + * ::File(right): The name of the right file processed + * ::argv : A copy of the command line from Eskil's invocation + +

Additional options

+A plugin can declare command line options that should be accepted by Eskil. +They will be passed on to the plugin through the ::argv list. +If the initial "##Eskil" line is followed by comments formatted as below, +it adds options. Any empty line will end parsing for such lines. + +A line like "## Option -