Index: Changes ================================================================== --- Changes +++ Changes @@ -1,11 +1,463 @@ +Released 2.8.5 + +2023-04-23 + Added -printLineSpace. Corrected -printHeaderSize. + +2021-09-23 + Allow revision control detect with -browse. + +2021-03-29 + Support -context/-w/-b for -review. + +2021-03-01 + Bumped revision to 2.8.5 + +2021-02-28 + Ballonhelp within frame. + +2020-12-10 + Working towards runtime plugins. + +2020-10-30 + Correct parent in dialogs. + +2020-09-28 + Prune alone files dir diff. + +2020-09-02 + Fixed bug where copy context menu used the wrong key. + +2020-04-14 + Added gunzip plugin. + +2020-01-15 + Do not traverse a unique side in dir diff. + Support -norun for dir diff. + Prune empty directories in dir diff. + Added -includefile/dir command line, for dir diff. + +2020-01-07 + Handle multiple screens better for balloon help + +2019-11-10 + More combinations allowed in edit mode. Including copy block of selected text. + +2019-11-10 + Code cleanup to adhere a bit to some consistent standard. + +2019-08-28 + Allow multiple pairs of files on the command line to open multiple windows. + +2019-07-05 + Ctrl-E to enable Edit Mode. + Do not ask about overwriting in Edit Mode. Hidden preference to turn it on. + Added -subst command line, to acces PreProcess Subst function. + +2019-06-12 + Better SVN commit, when added directories are included. + +2019-03-12 + Auto-open prefix group dialog. + +Released 2.8.4 + +2019-02-06 + Bumped revision to 2.8.4 + +2019-02-04 + Include a file selector when committing multiple files. + Allow directory with -review. + +2018-10-03 + Handle deleted files in GIT vcsvfs + +2018-09-23 + Upgraded tablelist to 6.3 + +2018-06-20 + Added save-reload option in edit mode. + Upgraded tablelist to 6.2 + +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 +465,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 +490,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 +542,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 +624,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 +728,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 +777,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,197 @@ #---------------------------------------------------------------------- # Make file for Eskil #---------------------------------------------------------------------- -VERSION = 26 +# This string is used to generate release file names +VERSION = 285 +# This string is used to tag the version shown in Eskil +DOTVERSION = 2.8.5 # Path to the TclKits used for creating StarPacks. -TCLKIT = /home/peter/tclkit/v85 -TCLKIT_LINUX = $(TCLKIT)/tclkit-8.5.8 -TCLKIT_SOLARIS = $(TCLKIT)/tclkit-solaris-sparc +TCLKIT = /home/$(USER)/tclkit/v86 +TCLKIT_LINUX = $(TCLKIT)/tclkit-linux TCLKIT_WIN = $(TCLKIT)/tclkit-win32.upx.exe - -# Path to the libraries used -STYLE = /home/peter/src/packages/style -GRIFFIN = /home/peter/tclkit/griffin.vfs/lib/griffin -TEXTSEARCH = /home/peter/src/textsearch -DIFFUTIL = /home/peter/src/DiffUtilTcl/lib.vfs/DiffUtil -WCB = /home/peter/src/packages/wcb3.0 -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 -TWAPI = /home/peter/src/packages/twapi -TKDND = /home/peter/src/packages/tkdnd/lib/tkdnd1.0 +TCLKIT_MAC = $(TCLKIT)/tclkit-mac-867 + +# 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/$(USER)/src/textsearch +DIFFUTIL = /home/$(USER)/src/DiffUtilTcl/lib.vfs/DiffUtil +WCB = /home/$(USER)/src/packages/wcb3.5 +PDF4TCL = /home/$(USER)/src/pdf4tcl/pkg +SNIT = /home/$(USER)/src/packages/tcllib/modules/snit +TABLELIST = /home/$(USER)/src/packages/tablelist6.3 +TWAPI = /home/$(USER)/src/packages/twapi +TKDND = /home/$(USER)/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 +# Use this to rebuild the docs when command line changes or +# new wiki files are added. +docs: + echo "Usage" > htdocs/usage.wiki + echo "" >> htdocs/usage.wiki + echo "

Command Line Usage

" >> htdocs/usage.wiki + echo "" >> htdocs/usage.wiki + echo "" >> htdocs/usage.wiki + $(TCLKIT_LINUX) eskil.vfs/main.tcl -help | grep -v " Version " >> htdocs/usage.wiki + echo "" >> htdocs/usage.wiki + echo "Documentation" > htdocs/toc.wiki + echo "" >> htdocs/toc.wiki + grep title htdocs/*.wiki | grep -v Documentation | \ + sed -e 's/htdocs/[./' -e 's/:/|/' -e 's,,],' | \ + awk '{print $0; print ""};' >> htdocs/toc.wiki #---------------------------------------------------------------- # 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 -plugin nfplugin.tcl # Create a common "header" file for all source files. -eskil_h.syntax: $(SRCFILES) src/eskil.syntax +eskil_h.syntax: $(SRCFILES) src/eskil.syntax nfplugin.tcl @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 -debug #---------------------------------------------------------------- # 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 +213,36 @@ #---------------------------------------------------------------- # Packaging/Releasing #---------------------------------------------------------------- -wrap: +tagversion: + echo "Version $(DOTVERSION) `date --iso-8601`" > eskil.vfs/version.txt + +wrap: tagversion sdx wrap eskil.kit -wrapexe: - @\rm -f eskil.linux eskil.exe eskil.solaris +wrapexe: tagversion + @\rm -f eskil.linux eskil.exe sdx wrap eskil.linux -runtime $(TCLKIT_LINUX) - sdx wrap eskil.solaris -runtime $(TCLKIT_SOLARIS) + sdx wrap eskil.mac -runtime $(TCLKIT_MAC) 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 @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,31 @@ +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 + +Make sure revision is bumped and everything is committed. +Clean run of make check / make test +make release +make tofossil + +Update htdocs/download.html with info from above. +Update htdocs/changes.wiki +Update Changes + +Commit, and do 'fossil unversioned sync' + +--------------- +New Source File + +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 @@ -52,26 +54,29 @@ -conflict : Treat file as a merge conflict file and enter merge mode. -o : Specify merge result output file. -fine : Use fine grained chunks. Useful for merging. - -browse : Automatically bring up file dialog after starting. + -browse : Bring up file dialog for missing files after starting -server : Set up Eskil to be controllable from the outside. -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/editmode.txt ================================================================== --- doc/editmode.txt +++ doc/editmode.txt @@ -1,3 +1,13 @@ -To be written... +The files on display may be edited if you turn on Edit Mode. +This is done with the Tools->Edit Mode menu. +Onle real files may be edited. If you are comparing versions fetched from a +Revision Control system, it cannot be edited. + +If an edited side has empty areas, i.e. lines that are not part of the file +and only there to line up with the other side, those will be gray. + +Edit mode will not allow you to enter or remove newlines freely. Only by +copying blocks from other side lines may change. -Hint: Right click over line numbers when in Edit Mode. +By right clicking over a change's line numbers you get options to copy +lines and blocks between the two sides, as well as the options to save a file. 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,33 +1,50 @@ -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. +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. + 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 -help -A plugin is a Tcl script that must follow a specific format. -Dump one of the included plugins to see what it looks like. +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. + 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. - -Example plugins are included in the kit. +::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 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 while the original is used for displaying. The main plugin procedure -returns 0 to signify this case. +should return 0 to signify this case. If the plugin procedure returns 1, the processed data is used also for displaying. -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/pkgIndex.tcl ================================================================== --- eskil.vfs/lib/psballoon/pkgIndex.tcl +++ eskil.vfs/lib/psballoon/pkgIndex.tcl @@ -6,6 +6,6 @@ # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. -package ifneeded psballoon 1.0 [list source [file join $dir psballoon.tcl]] +package ifneeded psballoon 1.2 [list source [file join $dir psballoon.tcl]] Index: eskil.vfs/lib/psballoon/psballoon.tcl ================================================================== --- eskil.vfs/lib/psballoon/psballoon.tcl +++ eskil.vfs/lib/psballoon/psballoon.tcl @@ -2,112 +2,331 @@ # # 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. # #---------------------------------------------------------------------- # $Revision: 1.1 $ #---------------------------------------------------------------------- -package provide psballoon 1.0 +package provide psballoon 1.2 namespace eval psballoon { variable balloon + variable config + set config(-useframe) 0 + set balloon(W) "" set balloon(pending) 0 set balloon(created) 0 set balloon(id) "" namespace export addBalloon } -proc psballoon::addBalloon {w {msg ""}} { +# -useframe +proc psballoon::configure {args} { + variable config + foreach {arg val} $args { + set config($arg) $val + } +} + +# 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 +} + +# addBalloon widget ?widgets...? ?-fmt? ?msg? +# If message is not given, it is extracted from widget. This is used to show +# e.g. labels where text might not be fully visible. +# Message may contain callbacks in [] for dynamic text. +proc psballoon::addBalloon {W args} { + variable balloon + variable config + + set frame $config(-useframe) + + # Last argument is message + set msg [lindex $args end] + + set Wlist [list $W] + foreach arg [lrange $args 0 end-1] { + switch $arg { + -fmt { + # Request for formatting + if {$msg ne ""} { + set msg [Fmt $msg] + } + } + -frame { + set frame 1 + } + -top { + set frame 0 + } + default { + lappend Wlist $arg + } + } + } + + foreach W $Wlist { + AddBalloon2 $W $msg $frame + } +} + +proc psballoon::AddBalloon2 {W msg frame} { variable balloon - set c [winfo class $w] + set c [winfo class $W] if {$msg == "" && $c != "Listbox" && $c != "Label"} { - error "Missing message to balloon for $w ($c)" + error "Missing message to balloon for $W ($c)" + } + set balloon(msg,$W) $msg + set balloon(frame,$W) $frame + + if {$msg eq "_"} { + bind $W "" + bind $W