Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Changed application name to Eskil. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
8f64d52800afd8d687fef7015a5056b1 |
User & Date: | peter 2003-12-14 21:29:47.000 |
Context
2003-12-14
| ||
21:40 | Release 2.0b3 check-in: 022d6db8f2 user: peter tags: trunk | |
21:29 | Changed application name to Eskil. check-in: 8f64d52800 user: peter tags: trunk | |
21:10 | Fixed a bug in font dialog. Added griffin kit and some gui options. check-in: 4b9a7995b9 user: peter tags: trunk | |
Changes
Changes to src/eskil.tcl.
1 2 3 | #!/bin/sh #---------------------------------------------------------------------- # | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/bin/sh #---------------------------------------------------------------------- # # Eskil, a Graphical frontend to diff # # Copyright (c) 1998-2003, Peter Spjuth (peter.spjuth@space.se) # # Usage # Do 'eskil.tcl' for interactive mode # Do 'eskil.tcl --help' for command line usage # #---------------------------------------------------------------------- # $Revision$ #---------------------------------------------------------------------- # the next line restarts using tclsh \ exec tclsh "$0" "$@" package provide app-eskil 1.0 package require Tcl 8.4 package require Tk 8.4 catch {package require textSearch} if {[catch {package require psballoon}]} { # Add a dummy if it does not exists. proc addBalloon {args} {} |
︙ | ︙ | |||
66 67 68 69 70 71 72 | } # Locate a diff executable on windows. proc locateDiffExe {} { # Build a list of possible directories. set dirs [list $::thisDir] # Are we in a starkit? | | | | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | } # Locate a diff executable on windows. proc locateDiffExe {} { # Build a list of possible directories. set dirs [list $::thisDir] # Are we in a starkit? if {[string match "*/lib/app-eskil" $::thisDir]} { lappend dirs [file dirname [file dirname [file dirname $::thisDir]]] # And for a starpack lappend dirs [file dirname [info nameofexecutable]] } lappend dirs c:/bin foreach dir $dirs { set try [file join $dir diff.exe] if {[file exists $try]} { set ::util(diffexe) $try return } } if {[string equal [auto_execok diff] ""]} { tk_messageBox -icon error -title "Eskil Error" -message \ "Could not locate any external diff executable." \ -type ok exit } } if {$tcl_platform(platform) == "windows"} { |
︙ | ︙ | |||
141 142 143 144 145 146 147 | # Any windows remaining? if {[llength $::diff(diffWindows)] > 0} { set cont 1 } } } errMsg]} { | | | 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | # Any windows remaining? if {[llength $::diff(diffWindows)] > 0} { set cont 1 } } } errMsg]} { tk_messageBox -icon error -title "Eskil Error" -message \ "An error occured in the close process.\n$errMsg\n\ (This is a bug)\nTerminating application." -type ok } if {$cont} return if {$::util(diffWrapped)} { catch {file delete $::diff(diffexe)} |
︙ | ︙ | |||
498 499 500 501 502 503 504 | # As the previous procedure, this would need a complete rework and a # better algorithm. proc compareBlocks {block1 block2} { set size1 [llength $block1] set size2 [llength $block2] if {$size1 * $size2 > 1000} { | | | 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 | # As the previous procedure, this would need a complete rework and a # better algorithm. proc compareBlocks {block1 block2} { set size1 [llength $block1] set size2 [llength $block2] if {$size1 * $size2 > 1000} { puts "Eskil warning: Analyzing a large block. ($size1 $size2)" update idletasks } # Swap if block1 is bigger if {$size1 > $size2} { set apa $block1 set block1 $block2 |
︙ | ︙ | |||
2273 2274 2275 2276 2277 2278 2279 | return $text } # Main print function proc printDiffs {top {quiet 0}} { busyCursor $top update idletasks | | | | 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 | return $text } # Main print function proc printDiffs {top {quiet 0}} { busyCursor $top update idletasks set tmpFile [file nativename ~/eskil.enscript] if {$::diff($top,printFile) != ""} { set tmpFile2 [file nativename $::diff($top,printFile)] } else { set tmpFile2 [file nativename ~/eskil.ps] } set lines1 {} set lines2 {} set tdump1 [$::diff($top,wDiff1) dump -tag -text 1.0 end] set tdump2 [$::diff($top,wDiff2) dump -tag -text 1.0 end] |
︙ | ︙ | |||
2431 2432 2433 2434 2435 2436 2437 | } } normalCursor $top if {!$quiet} { destroy .dp toplevel .dp | | | 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 | } } normalCursor $top if {!$quiet} { destroy .dp toplevel .dp wm title .dp "Eskil Print" button .dp.b -text "Close" -command {destroy .dp} label .dp.l -anchor w -justify left -text "The following files have\ been created:\n\n$tmpFile\nInput file to enscript.\ \n\n$tmpFile2\nCreated with\ '[lrange $enscriptCmd 0 end-3] \\\n \ [lrange $enscriptCmd end-2 end]'" \ -font "Courier 8" |
︙ | ︙ | |||
2462 2463 2464 2465 2466 2467 2468 | destroy .pr toplevel .pr wm title .pr "Print diffs" label .pr.l1 -justify left -anchor w \ -text "The print function is just on an\ experimental level. It will use 'enscript' to write a postcript\ | | | 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 | destroy .pr toplevel .pr wm title .pr "Print diffs" label .pr.l1 -justify left -anchor w \ -text "The print function is just on an\ experimental level. It will use 'enscript' to write a postcript\ file \"eskil.ps\" in your home directory." label .pr.l2 -justify left -anchor w \ -text "Below you can adjust the gray scale\ levels that are used on the background to mark changes.\ The first value is used for changed text. The second for\ new/deleted text." .pr.l1 configure -wraplength 400 .pr.l2 configure -wraplength 400 |
︙ | ︙ | |||
3059 3060 3061 3062 3063 3064 3065 | incr t } set top .diff$t toplevel $top lappend ::diff(diffWindows) $top } | | | 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 | incr t } set top .diff$t toplevel $top lappend ::diff(diffWindows) $top } wm title $top "Eskil" wm protocol $top WM_DELETE_WINDOW [list cleanupAndExit $top] frame $top.f grid $top.f -row 0 -columnspan 4 -sticky news if {$tcl_platform(platform) == "windows"} { #frame $top.f.line -height 1 -bg SystemButtonHighlight |
︙ | ︙ | |||
3388 3389 3390 3391 3392 3393 3394 | global Pref TmpPref array set TmpPref [array get Pref] destroy .pr toplevel .pr | | | 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 | global Pref TmpPref array set TmpPref [array get Pref] destroy .pr toplevel .pr wm title .pr "Eskil Preferences" frame .pr.fc -borderwidth 1 -relief solid label .pr.fc.l1 -text "Colours" -anchor w label .pr.fc.l2 -text "Text" -anchor w label .pr.fc.l3 -text "Background" -anchor w entry .pr.fc.e1 -textvariable "TmpPref(colorchange)" -width 10 |
︙ | ︙ | |||
3591 3592 3593 3594 3595 3596 3597 | } } } set top .reg destroy $top toplevel $top | | | 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 | } } } set top .reg destroy $top toplevel $top wm title $top "Register Eskil" # Registry keys #set keyg {HKEY_CLASSES_ROOT\Folder\shell\Grep\command} set keydd {HKEY_CLASSES_ROOT\Folder\shell\Diff\command} set keyd {HKEY_CLASSES_ROOT\*\shell\Diff\command} set keyc {HKEY_CLASSES_ROOT\*\shell\DiffC\command} |
︙ | ︙ | |||
4361 4362 4363 4364 4365 4366 4367 | focus $w return $w.f } proc makeAboutWin {} { global diffver | | | 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 | focus $w return $w.f } proc makeAboutWin {} { global diffver set w [helpWin .ab "About Eskil"] text $w.t -width 45 -height 11 -wrap none -relief flat \ -bg [$w cget -bg] pack $w.t -side top -expand y -fill both $w.t insert end "A Tcl/Tk frontend to diff\n\n" $w.t insert end "$diffver\n\n" |
︙ | ︙ | |||
4413 4414 4415 4416 4417 4418 4419 | } } } proc makeHelpWin {} { global Pref | | | | 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 | } } } proc makeHelpWin {} { global Pref set doc [file join $::thisDir doc/eskil.txt] if {![file exists $doc]} return set w [helpWin .he "Eskil Help"] text $w.t -width 82 -height 35 -wrap word -yscrollcommand "$w.sb set"\ -font "Courier 10" scrollbar $w.sb -orient vert -command "$w.t yview" pack $w.sb -side right -fill y pack $w.t -side left -expand 1 -fill both |
︙ | ︙ | |||
4444 4445 4446 4447 4448 4449 4450 | $w.t tag configure ul -underline 1 insertTaggedText $w.t $doc $w.t configure -state disabled } proc printUsage {} { | | | | | | 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 | $w.t tag configure ul -underline 1 insertTaggedText $w.t $doc $w.t configure -state disabled } proc printUsage {} { puts {Usage: eskil.tcl [options] [file1] [file2] [options] All options but the ones listed below are passed to diff. [file1],[file2] Files to be compared If no files are given, the program is started anyway and you can select files from within. If only one file is given, the program looks for an RCS/CVS directory next to the file, and if found, runs in RCS/CVS mode. Options: -nodiff : Normally, if there are enough information on the command line to run diff, Eskil will do so unless this option is specified. -dir : Start in directory diff mode. Ignores other args. -clip : Start in clip diff mode. Ignores other args. -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 are large change blocks. -char : The analysis of changes can be done on either -word : character or word basis. -char is the default. -2nd : Turn on or off second stage parsing. -no2nd : It is on by default. -noignore : Don't ignore any whitespace. -b : Ignore space changes. Default. -w : Ignore all spaces. -conflict : Treat file as a merge conflict file and enter merge mode. -o <file> : Specify merge result output file. -browse : Automatically bring up file dialog after starting. -server : Set up Eskil to be controllable from the outside. -print <file> : Generate postscript and exit. -limit <lines> : Do not process more than <lines> lines.} } proc parseCommandLine {} { |
︙ | ︙ | |||
4565 4566 4567 4568 4569 4570 4571 | set Pref(ignore) " " } elseif {$arg == "-print"} { set nextArg printFile } elseif {$arg == "-server"} { if {$tcl_platform(platform) == "windows"} { catch { package require dde | | | | 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 | set Pref(ignore) " " } elseif {$arg == "-print"} { set nextArg printFile } elseif {$arg == "-server"} { if {$tcl_platform(platform) == "windows"} { catch { package require dde dde servername Eskil } } else { tk appname Eskil } } elseif {$arg == "-o"} { set nextArg mergeFile } elseif {$arg == "-r"} { set nextArg revision } elseif {[string range $arg 0 1] == "-r"} { set opts(doptrev$revNo) [string range $arg 2 end] |
︙ | ︙ | |||
4767 4768 4769 4770 4771 4772 4773 | } } } proc saveOptions {} { global Pref | | | 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 | } } } proc saveOptions {} { global Pref set rcfile "~/.eskilrc" if {[catch {set ch [open $rcfile w]} err]} { tk_messageBox -icon error -title "File error" -message \ "Error when trying to save preferences:\n$err" return } foreach i [array names Pref] { |
︙ | ︙ | |||
4811 4812 4813 4814 4815 4816 4817 | set Pref(recursive) 0 set Pref(dir,onlydiffs) 0 set Pref(nodir) 0 set Pref(autocompare) 1 set ::diff(filter) "" | | | | 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 | set Pref(recursive) 0 set Pref(dir,onlydiffs) 0 set Pref(nodir) 0 set Pref(autocompare) 1 set ::diff(filter) "" if {[file exists "~/.eskilrc"]} { source "~/.eskilrc" } } proc defaultGuiOptions {} { catch {package require griffin} option add *Menu.tearOff 0 |
︙ | ︙ |