Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Cleaned up Pref array usage to be consistent in all code. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
255f3d94ce35e189b0a98debd10ba6f9 |
User & Date: | peter 2014-02-05 17:41:04.785 |
Context
2014-07-20
| ||
23:35 | Started to refactor dirdiff code check-in: 03d4b03550 user: peter tags: trunk | |
2014-02-05
| ||
17:41 | Cleaned up Pref array usage to be consistent in all code. check-in: 255f3d94ce user: peter tags: trunk | |
2014-02-02
| ||
20:38 | Added a font fallback in psballon. [0ff6d72ab9] check-in: 1eed3e5dfb user: peter tags: trunk | |
Changes
Changes to src/dirdiff.tcl.
︙ | ︙ | |||
49 50 51 52 53 54 55 | proc Fsort {l} { lsort -dictionary $l } # Compare two files or dirs # Return true if equal proc CompareFiles {file1 file2} { | < | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | proc Fsort {l} { lsort -dictionary $l } # Compare two files or dirs # Return true if equal proc CompareFiles {file1 file2} { if {[catch {file lstat $file1 stat1}]} { return 0 } if {[catch {file lstat $file2 stat2}]} { return 0 } |
︙ | ︙ | |||
75 76 77 78 79 80 81 | if {$l1 eq $l2} { return 1 } file stat $file1 stat1 file stat $file2 stat2 } # If contents is not checked, same size is enough to be equal | | | | | | | | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | if {$l1 eq $l2} { return 1 } file stat $file1 stat1 file stat $file2 stat2 } # If contents is not checked, same size is enough to be equal if {$stat1(size) == $stat2(size) && $::Pref(dir,comparelevel) == 0} { return 1 } set ignorekey $::Pref(dir,ignorekey) # Different size is enough when doing binary compare if {$stat1(size) != $stat2(size) && $::Pref(dir,comparelevel) == 2 \ && !$ignorekey} { return 0 } # Same size and time is always considered equal if {$stat1(size) == $stat2(size) && $stat1(mtime) == $stat2(mtime)} { return 1 } # Don't check further if contents should not be checked if {$::Pref(dir,comparelevel) == 0} { return 0 } # Don't check further if any is a directory if {$isdir1 || $isdir2} { # Consider dirs equal until we implement something recursive return 1 } switch $::Pref(dir,comparelevel) { 2 - 1 { # Check contents internally set bufsz 65536 set eq 1 set ch1 [open $file1 r] set ch2 [open $file2 r] if {$::Pref(dir,comparelevel) == 2} { fconfigure $ch1 -translation binary fconfigure $ch2 -translation binary } if {$ignorekey} { # Assume that all keywords are in the first block set f1 [read $ch1 $bufsz] set f2 [read $ch2 $bufsz] |
︙ | ︙ | |||
145 146 147 148 149 150 151 | } } return $eq } # Returns the contents of a directory as a sorted list of full file paths. proc DirContents {dir} { | < | | 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | } } return $eq } # Returns the contents of a directory as a sorted list of full file paths. proc DirContents {dir} { if {$::tcl_platform(platform) eq "windows"} { # .-files are not treated specially on windows. * is enough to get all set files [glob -directory $dir -nocomplain *] } else { set files [glob -directory $dir -nocomplain * {.[a-zA-Z]*}] } if {$::Pref(dir,onlyrev)} { # FIXA: move to rev and make general for other systems set entries [file join $dir CVS Entries] if {[file exists $entries]} { set ch [open $entries r] set data [read $ch] close $ch foreach line [split $data \n] { |
︙ | ︙ | |||
180 181 182 183 184 185 186 | set files2 {} foreach file $files { set full $file set tail [file tail $file] # Apply filters if {[FileIsDirectory $full]} { | | | | | | | | 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | set files2 {} foreach file $files { set full $file set tail [file tail $file] # Apply filters if {[FileIsDirectory $full]} { if {[llength $::Pref(dir,incdirs)] == 0} { set allowed 1 } else { set allowed 0 foreach pat $::Pref(dir,incdirs) { if {[string match $pat $tail]} { set allowed 1 break } } } if {$allowed} { foreach pat $::Pref(dir,exdirs) { if {[string match $pat $tail]} { set allowed 0 break } } } if {!$allowed} continue } else { if {[llength $::Pref(dir,incfiles)] == 0} { set allowed 1 } else { set allowed 0 foreach pat $::Pref(dir,incfiles) { if {[string match $pat $tail]} { set allowed 1 break } } } if {$allowed} { foreach pat $::Pref(dir,exfiles) { if {[string match $pat $tail]} { set allowed 0 break } } } if {!$allowed} continue |
︙ | ︙ | |||
236 237 238 239 240 241 242 | proc EditFile {file} { locateEditor ::util(editor) exec $::util(editor) $file & } # Pick a directory for compare proc BrowseDir {dirVar entryW} { | < | 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | proc EditFile {file} { locateEditor ::util(editor) exec $::util(editor) $file & } # Pick a directory for compare proc BrowseDir {dirVar entryW} { upvar "#0" $dirVar dir set newdir $dir while {$newdir != "." && ![FileIsDirectory $newdir]} { set newdir [file dirname $newdir] } set newdir [tk_chooseDirectory -initialdir $newdir -title "Select Directory"] |
︙ | ︙ | |||
463 464 465 466 467 468 469 | } else { $tree collapseall } } # Copy a file from one directory to the other method CopyFile {node from} { | | | 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 | } else { $tree collapseall } } # Copy a file from one directory to the other method CopyFile {node from} { global dirdiff set lf [$tree rowattrib $node leftfull] set rf [$tree rowattrib $node rightfull] set parent [$tree parent $node] set lp [$tree rowattrib $parent leftfull] set rp [$tree rowattrib $parent rightfull] |
︙ | ︙ | |||
850 851 852 853 854 855 856 | if {$rf eq ""} { $w.bl configure -state disabled } } # Compare two directories. method CompareDirs {dir1 dir2 node} { | < | 847 848 849 850 851 852 853 854 855 856 857 858 859 860 | if {$rf eq ""} { $w.bl configure -state disabled } } # Compare two directories. method CompareDirs {dir1 dir2 node} { if {$dir1 eq ""} { set files1 {} } else { set files1 [DirContents $dir1] } if {$dir2 eq ""} { set files2 {} |
︙ | ︙ | |||
972 973 974 975 976 977 978 | $win.m add cascade -menu $win.m.mo -label "Preferences" -underline 0 menu $win.m.mo $win.m.mo add command -label "Prefs..." -command makeDirDiffPrefWin $win.m.mo add cascade -label "Check" -menu $win.m.mo.mc menu $win.m.mo.mc | | | | | | 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 | $win.m add cascade -menu $win.m.mo -label "Preferences" -underline 0 menu $win.m.mo $win.m.mo add command -label "Prefs..." -command makeDirDiffPrefWin $win.m.mo add cascade -label "Check" -menu $win.m.mo.mc menu $win.m.mo.mc $win.m.mo.mc add radiobutton -variable ::Pref(dir,comparelevel) -value 0 \ -label "Do not check contents" $win.m.mo.mc add radiobutton -variable ::Pref(dir,comparelevel) -value 1 \ -label "Normal compare" $win.m.mo.mc add radiobutton -variable ::Pref(dir,comparelevel) -value 2 \ -label "Exact compare" $win.m.mo.mc add checkbutton -variable ::Pref(dir,ignorekey) \ -label "Ignore \$Keyword:\$" $win.m.mo add cascade -label "Nice" -menu $win.m.mo.mn menu $win.m.mo.mn $win.m.mo.mn add radiobutton -variable [myvar nice] -value 1 \ -command [mymethod DoNice] -label 1 $win.m.mo.mn add radiobutton -variable [myvar nice] -value 50 \ |
︙ | ︙ | |||
1032 1033 1034 1035 1036 1037 1038 | ttk::button $win.bu -image $::img(upup) -command [mymethod UpDir] \ -underline 0 addBalloon $win.bu "Up in both." bind $win <Alt-u> "$win.bu invoke" #catch {font delete myfont} | | | 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 | ttk::button $win.bu -image $::img(upup) -command [mymethod UpDir] \ -underline 0 addBalloon $win.bu "Up in both." bind $win <Alt-u> "$win.bu invoke" #catch {font delete myfont} #font create myfont -family $::Pref(fontfamily) -size $::Pref(fontsize) ttk::entryX $win.e1 -textvariable dirdiff(leftDir) -width 30 ttk::button $win.bu1 -image $::img(up) -command [mymethod UpDir 1] addBalloon $win.bu1 "Up in left." ttk::button $win.bb1 -image $::img(browse) \ -command "[list BrowseDir dirdiff(leftDir) $win.e1] [mymethod DoDirCompare]" |
︙ | ︙ | |||
1083 1084 1085 1086 1087 1088 1089 | method DoNice {} { $tree nice $nice } # Go up one level in directory hierarchy. # 0 = both method UpDir {{n 0}} { | | | 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 | method DoNice {} { $tree nice $nice } # Go up one level in directory hierarchy. # 0 = both method UpDir {{n 0}} { global dirdiff switch $n { 0 { set dirdiff(leftDir) [file dirname $dirdiff(leftDir)] set dirdiff(rightDir) [file dirname $dirdiff(rightDir)] $win.e1 xview end $win.e2 xview end } |
︙ | ︙ | |||
1154 1155 1156 1157 1158 1159 1160 | set ::TmpPref($item) $::Pref($item) } } wm title $top "Eskil Directory Preferences" set check [ttk::labelframe $top.check -text "Check" -padding 3] | | | | | | | | | | | 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 | set ::TmpPref($item) $::Pref($item) } } wm title $top "Eskil Directory Preferences" set check [ttk::labelframe $top.check -text "Check" -padding 3] ttk::radiobutton $check.rb1 -variable ::TmpPref(dir,comparelevel) -value 0 \ -text "Do not check contents" ttk::radiobutton $check.rb2 -variable ::TmpPref(dir,comparelevel) -value 1 \ -text "Normal compare" ttk::radiobutton $check.rb3 -variable ::TmpPref(dir,comparelevel) -value 2 \ -text "Exact compare" grid $check.rb1 -sticky w -padx 3 -pady 3 grid $check.rb2 -sticky w -padx 3 -pady 3 grid $check.rb3 -sticky w -padx 3 -pady 3 grid columnconfigure $check {0 1 2} -uniform a -weight 1 set opts [ttk::labelframe $top.opts -text "Options" -padding 3] ttk::checkbutton $opts.cb1 -variable ::TmpPref(dir,ignorekey) \ -text "Ignore \$Keyword:\$" pack {*}[winfo children $opts] -side top -anchor w set filter [ttk::labelframe $top.filter -text "Filter" -padding 3] ttk::label $filter.l1 -text "Include Files" -anchor w ttk::entryX $filter.e1 -width 20 -textvariable ::TmpPref(dir,incfiles) ttk::label $filter.l2 -text "Exclude Files" -anchor w ttk::entryX $filter.e2 -width 20 -textvariable ::TmpPref(dir,exfiles) ttk::label $filter.l3 -text "Include Dirs" -anchor w ttk::entryX $filter.e3 -width 20 -textvariable ::TmpPref(dir,incdirs) ttk::label $filter.l4 -text "Exclude Dirs" -anchor w ttk::entryX $filter.e4 -width 20 -textvariable ::TmpPref(dir,exdirs) ttk::checkbutton $filter.cb1 -text "Only revision controlled" \ -variable ::TmpPref(dir,onlyrev) grid $filter.l1 $filter.e1 -sticky we -padx 3 -pady 3 grid $filter.l2 $filter.e2 -sticky we -padx 3 -pady 3 grid $filter.l3 $filter.e3 -sticky we -padx 3 -pady 3 grid $filter.l4 $filter.e4 -sticky we -padx 3 -pady 3 grid $filter.cb1 - -sticky w -padx 3 -pady 3 grid columnconfigure $filter 1 -weight 1 |
︙ | ︙ |
Changes to src/eskil.tcl.
︙ | ︙ | |||
365 366 367 368 369 370 371 | } $::widgets($top,wDiff$n) insert end "\n" padding } # Insert one line in each text widget. # Mark them as changed, and optionally parse them. proc insertMatchingLines {top line1 line2} { | | | | | | | | 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 | } $::widgets($top,wDiff$n) insert end "\n" padding } # Insert one line in each text widget. # Mark them as changed, and optionally parse them. proc insertMatchingLines {top line1 line2} { global doingLine1 doingLine2 # FIXA: fully implement filter if {$::eskil(filter) != ""} { if {[regexp $::eskil(filter) $line1]} { insertLine $top 1 $doingLine1 $line1 insertLine $top 2 $doingLine2 $line2 incr doingLine1 incr doingLine2 set ::eskil(filterflag) 1 return } set ::eskil(filterflag) 0 } if {$::Pref(parse) != 0} { set opts $::Pref(ignore) if {$::Pref(nocase)} {lappend opts -nocase} if {$::Pref(lineparsewords)} {lappend opts -words} set res [DiffUtil::diffStrings {*}$opts $line1 $line2] set dotag 0 set n [expr {[llength $res] / 2}] $::widgets($top,wLine1) insert end [myFormL $doingLine1] \ "hl$::HighLightCount change" $::widgets($top,wLine2) insert end [myFormL $doingLine2] \ "hl$::HighLightCount change" set new1 "new1" set new2 "new2" set change "change" foreach {i1 i2} $res { incr n -1 if {$dotag} { if {$n == 1 && $::Pref(marklast)} { lappend new1 last lappend new2 last lappend change last } if {$i1 eq ""} { $::widgets($top,wDiff2) insert end $i2 $new2 } elseif {$i2 eq ""} { |
︙ | ︙ | |||
547 548 549 550 551 552 553 | addChange $top $n1 $tag1 $line1 $n1 $line2 $n2 nextHighlight $top } } # Insert two blocks of lines in the compare windows. proc insertMatchingBlocks {top block1 block2 line1 line2 details} { | | | | | 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 | addChange $top $n1 $tag1 $line1 $n1 $line2 $n2 nextHighlight $top } } # Insert two blocks of lines in the compare windows. proc insertMatchingBlocks {top block1 block2 line1 line2 details} { global doingLine1 doingLine2 set n1 [llength $block1] set n2 [llength $block2] set large [expr {$n1 * $n2 > 1000}] if {$n1 == 0 || $n2 == 0 || $::Pref(parse) < 2 || \ ($large && $::Pref(parse) < 3)} { # No extra parsing at all. insertMatchingBlocksNoParse $top $block1 $block2 $line1 $line2 $details return } # A large block may take time. Give a small warning. if {$large} { |
︙ | ︙ | |||
704 705 706 707 708 709 710 | # ch1 is a file channel for the left file # ch2 is a file channel for the right file # n1/n2 is the number of lines involved # line1/line2 says on what lines this block starts # If n1/n2 are both 0, it means that this is the last lines to be displayed. # In that case line1/line2, if non-zero says the last line to display. proc doText {top ch1 ch2 n1 n2 line1 line2} { | | | | | 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 | # ch1 is a file channel for the left file # ch2 is a file channel for the right file # n1/n2 is the number of lines involved # line1/line2 says on what lines this block starts # If n1/n2 are both 0, it means that this is the last lines to be displayed. # In that case line1/line2, if non-zero says the last line to display. proc doText {top ch1 ch2 n1 n2 line1 line2} { global doingLine1 doingLine2 if {$n1 == 0 && $n2 == 0} { # All blocks have been processed. Continue until end of file. # If "show all" is not on, just display a couple of context lines. set limit -1 if {$::Pref(context) >= 0} { set limit $::Pref(context) } # Consider any total limit on displayed lines. if {$::eskil($top,limitlines)} { set limit [expr {$::eskil($top,limitlines) - $::eskil($top,mapMax)}] if {$limit < 0} { set limit 0 } |
︙ | ︙ | |||
753 754 755 756 757 758 759 | if {$n1 == 0} {set tag2 new2} else {set tag2 change} if {$n2 == 0} {set tag1 new1} else {set tag1 change} # Display all equal lines before next diff, or skip if context is set. # If context is on, only skip a section if the blank # line replaces at least 3 lines. set limit -1 | | | | | | 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 | if {$n1 == 0} {set tag2 new2} else {set tag2 change} if {$n2 == 0} {set tag1 new1} else {set tag1 change} # Display all equal lines before next diff, or skip if context is set. # If context is on, only skip a section if the blank # line replaces at least 3 lines. set limit -1 if {$::Pref(context) == 0} { set limit 0 } elseif {$::Pref(context) > 0 && \ ($line1 - $doingLine1 > (2 * $::Pref(context) + 2))} { set limit $::Pref(context) } if {$doingLine1 == 1} { set allowStartFill 0 } else { set allowStartFill 1 } set t 0 |
︙ | ︙ | |||
802 803 804 805 806 807 808 | "**Bad alignment here!! $doingLine2 $line2**\n" $::widgets($top,wLine1) insert end "\n" $::widgets($top,wLine2) insert end "\n" } # Process the block | | | 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 | "**Bad alignment here!! $doingLine2 $line2**\n" $::widgets($top,wLine1) insert end "\n" $::widgets($top,wLine2) insert end "\n" } # Process the block if {$n1 == $n2 && ($n1 == 1 || $::Pref(parse) < 2)} { # Never do block parsing for one line blocks. # If block parsing is turned off, only do line parsing for # blocks of equal size. for {set t 0} {$t < $n1} {incr t} { gets $ch1 textline1 gets $ch2 textline2 insertMatchingLines $top $textline1 $textline2 |
︙ | ︙ | |||
903 904 905 906 907 908 909 | } else { set ::eskil($top,mergetranslation) lf } } # Read a conflict file and extract the two versions. proc prepareConflict {top} { | < < | 903 904 905 906 907 908 909 910 911 912 913 914 915 916 | } else { set ::eskil($top,mergetranslation) lf } } # Read a conflict file and extract the two versions. proc prepareConflict {top} { disallowEdit $top set ::eskil($top,leftFile) [tmpFile] set ::eskil($top,rightFile) [tmpFile] set ch1 [open $::eskil($top,leftFile) w] set ch2 [open $::eskil($top,rightFile) w] set ch [open $::eskil($top,conflictFile) r] |
︙ | ︙ | |||
963 964 965 966 967 968 969 | set ::eskil($top,leftLabel) $leftName set ::eskil($top,rightLabel) $rightName update idletasks } # Clean up after a conflict diff. proc cleanupConflict {top} { | < < | 961 962 963 964 965 966 967 968 969 970 971 972 973 974 | set ::eskil($top,leftLabel) $leftName set ::eskil($top,rightLabel) $rightName update idletasks } # Clean up after a conflict diff. proc cleanupConflict {top} { clearTmp $::eskil($top,rightFile) $::eskil($top,leftFile) set ::eskil($top,rightFile) $::eskil($top,conflictFile) set ::eskil($top,leftFile) $::eskil($top,conflictFile) } # Display one chunk from a patch file proc displayOnePatch {top leftLines rightLines leftLine rightLine} { |
︙ | ︙ | |||
1079 1080 1081 1082 1083 1084 1085 | set rblock {} } mapNoChange $top 0 } # Read a patch file and display it proc displayPatch {top} { | < < | 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 | set rblock {} } mapNoChange $top 0 } # Read a patch file and display it proc displayPatch {top} { set ::eskil($top,leftLabel) "Patch $::eskil($top,patchFile): old" set ::eskil($top,rightLabel) "Patch $::eskil($top,patchFile): new" update idletasks if {$::eskil($top,patchFile) eq ""} { if {$::eskil($top,patchData) eq ""} { set data [getFullPatch $top] |
︙ | ︙ | |||
1338 1339 1340 1341 1342 1343 1344 | } else { return "$tail2 vs $tail1" } } # Main diff function. proc doDiff {top} { | < | 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 | } else { return "$tail2 vs $tail1" } } # Main diff function. proc doDiff {top} { global doingLine1 doingLine2 if {$::eskil($top,mode) eq "" && ($::eskil($top,leftOK) == 0 || $::eskil($top,rightOK) == 0)} { disableRedo $top return } else { enableRedo $top |
︙ | ︙ | |||
1390 1391 1392 1393 1394 1395 1396 | } else { prepareFiles $top } wm title $top "Eskil: [TitleTail $top]" # Run diff and parse the result. | | | | | | | | 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 | } else { prepareFiles $top } wm title $top "Eskil: [TitleTail $top]" # Run diff and parse the result. set opts $::Pref(ignore) if {$::Pref(nocase)} {lappend opts -nocase} if {$::Pref(noempty)} {lappend opts -noempty} if {$::Pref(pivot) > 0} {lappend opts -pivot $::Pref(pivot)} if {[info exists ::eskil($top,aligns)] && \ [llength $::eskil($top,aligns)] > 0} { lappend opts -align $::eskil($top,aligns) } set range {} if {[info exists ::eskil($top,range)] && \ [llength $::eskil($top,range)] == 4} { set range $::eskil($top,range) lappend opts -range $range } foreach {RE sub side} $::Pref(preprocess) { lappend opts -regsub$side [list $RE $sub] } # Apply nodigit after preprocess if {$::Pref(nodigit)} {lappend opts -nodigit} # If a special file for diffing is present, use it. if {[info exists ::eskil($top,leftFileDiff)]} { set dFile1 $::eskil($top,leftFileDiff) } else { set dFile1 $::eskil($top,leftFile) } |
︙ | ︙ | |||
2130 2131 2132 2133 2134 2135 2136 | if {[doOpenAncestor $top]} { # Redo diff with ancestor doDiff $top } } proc openConflict {top} { | < < | | | | 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 | if {[doOpenAncestor $top]} { # Redo diff with ancestor doDiff $top } } proc openConflict {top} { if {[doOpenRight $top]} { startConflictDiff $top $::eskil($top,rightFile) set ::eskil($top,mergeFile) "" doDiff $top } } proc openPatch {top} { if {[doOpenLeft $top]} { set ::eskil($top,mode) "patch" set ::Pref(ignore) " " set ::Pref(nocase) 0 set ::Pref(noempty) 0 set ::eskil($top,patchFile) $::eskil($top,leftFile) set ::eskil($top,patchData) "" doDiff $top } } # Get data from clipboard and display as a patch. |
︙ | ︙ | |||
2622 2623 2624 2625 2626 2627 2628 | } ######### # Zooming ######### proc zoomRow {w X Y x y} { | < | 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 | } ######### # Zooming ######### proc zoomRow {w X Y x y} { set top [winfo toplevel $w] # Get the row that was clicked set index [$w index @$x,$y] set row [lindex [split $index "."] 0] # Check if it is selected if {[lsearch [$w tag names $index] sel] >= 0} { |
︙ | ︙ | |||
2653 2654 2655 2656 2657 2658 2659 | wm withdraw $top.balloon wm overrideredirect $top.balloon 1 set wid 0 foreach x {1 2} { text $top.balloon.t$x -relief flat -font $font -background \#ffffcc \ -foreground black -padx 2 -pady 0 -height 1 -wrap word | | | | | | | | | | 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 | wm withdraw $top.balloon wm overrideredirect $top.balloon 1 set wid 0 foreach x {1 2} { text $top.balloon.t$x -relief flat -font $font -background \#ffffcc \ -foreground black -padx 2 -pady 0 -height 1 -wrap word $top.balloon.t$x tag configure new1 -foreground $::Pref(colornew1) \ -background $::Pref(bgnew1) $top.balloon.t$x tag configure change -foreground $::Pref(colorchange) \ -background $::Pref(bgchange) $top.balloon.t$x tag configure new2 -foreground $::Pref(colornew2) \ -background $::Pref(bgnew2) $top.balloon.t$x tag configure equal -foreground $::Pref(colorequal) \ -background $::Pref(bgequal) pack $top.balloon.t$x -side "top" -padx 1 -pady 1 -fill both -expand 1 set tags {} foreach {key value index} $data($x) { if {$key eq "tagon"} { lappend tags $value set tags [lsort -unique $tags] |
︙ | ︙ | |||
2724 2725 2726 2727 2728 2729 2730 | proc unzoomRow {w} { set top [winfo toplevel $w] destroy $top.balloon } # Reconfigure font proc chFont {} { | < < | | | | | | | | | | < < < < < < < < < < < < < < | 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 | proc unzoomRow {w} { set top [winfo toplevel $w] destroy $top.balloon } # Reconfigure font proc chFont {} { font configure myfont -size $::Pref(fontsize) -family $::Pref(fontfamily) } # Change color settings proc applyColor {} { global dirdiff foreach top $::eskil(diffWindows) { if {$top eq ".clipdiff"} continue if {$top != ".dirdiff"} { foreach item {wLine1 wDiff1 wLine2 wDiff2} { if {![info exists ::widgets($top,$item)]} continue set w $::widgets($top,$item) $w tag configure equal -foreground $::Pref(colorequal) \ -background $::Pref(bgequal) $w tag configure new1 -foreground $::Pref(colornew1) \ -background $::Pref(bgnew1) $w tag configure change -foreground $::Pref(colorchange) \ -background $::Pref(bgchange) $w tag configure new2 -foreground $::Pref(colornew2) \ -background $::Pref(bgnew2) } continue } } } # Scroll text windows proc scrollText {top n what} { # Do not scroll if focus is in a text window. # This is for scroll bindings in the toplevel. |
︙ | ︙ | |||
2895 2896 2897 2898 2899 2900 2901 | $dMenu add command -label "_stats" -command {parray _stats} $dMenu add command -label "Nuisance" -command [list makeNuisance \ $top "It looks like you are trying out the debug menu."] } # Build the main window proc makeDiffWin {{top {}}} { | | | 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 | $dMenu add command -label "_stats" -command {parray _stats} $dMenu add command -label "Nuisance" -command [list makeNuisance \ $top "It looks like you are trying out the debug menu."] } # Build the main window proc makeDiffWin {{top {}}} { global tcl_platform if {$top != "" && [winfo exists $top] && [winfo toplevel $top] eq $top} { # Reuse the old window destroy {*}[winfo children $top] } else { # Locate a free toplevel name if {[info exists ::eskil(topDiffCnt)]} { |
︙ | ︙ | |||
2984 2985 2986 2987 2988 2989 2990 | $top.m.mo add separator $top.m.mo add command -label "Save default" \ -command [list saveOptions $top] menu $top.m.mo.f $top.m.mo.f add command -label "Select..." -command makeFontWin \ -underline 0 | | | | | | | | | | | | | | | | | | | | | 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 | $top.m.mo add separator $top.m.mo add command -label "Save default" \ -command [list saveOptions $top] menu $top.m.mo.f $top.m.mo.f add command -label "Select..." -command makeFontWin \ -underline 0 $top.m.mo.f add radiobutton -label 6 -variable ::Pref(fontsize) -value 6 \ -command chFont $top.m.mo.f add radiobutton -label 7 -variable ::Pref(fontsize) -value 7 \ -command chFont $top.m.mo.f add radiobutton -label 8 -variable ::Pref(fontsize) -value 8 \ -command chFont $top.m.mo.f add radiobutton -label 9 -variable ::Pref(fontsize) -value 9 \ -command chFont $top.m.mo.f add radiobutton -label 10 -variable ::Pref(fontsize) -value 10 \ -command chFont menu $top.m.mo.i $top.m.mo.i add radiobutton -label "No spaces" \ -variable ::Pref(ignore) -value " " $top.m.mo.i add radiobutton -label "Space changes (-b)" \ -variable ::Pref(ignore) -value "-b" $top.m.mo.i add radiobutton -label "All spaces (-w)" \ -variable ::Pref(ignore) -value "-w" $top.m.mo.i add separator $top.m.mo.i add checkbutton -label "Case (-i)" \ -variable ::Pref(nocase) $top.m.mo.i add checkbutton -label "Empty" \ -variable ::Pref(noempty) $top.m.mo.i add checkbutton -label "Digits" \ -variable ::Pref(nodigit) menu $top.m.mo.p $top.m.mo.p add radiobutton -label "Nothing" -variable ::Pref(parse) -value 0 $top.m.mo.p add radiobutton -label "Lines" -variable ::Pref(parse) -value 1 $top.m.mo.p add radiobutton -label "Blocks (small)" -variable ::Pref(parse) \ -value 2 $top.m.mo.p add radiobutton -label "Blocks" -variable ::Pref(parse) -value 3 $top.m.mo.p add separator $top.m.mo.p add radiobutton -label "Characters" \ -variable ::Pref(lineparsewords) -value "0" $top.m.mo.p add radiobutton -label "Words" \ -variable ::Pref(lineparsewords) -value "1" $top.m.mo.p add separator $top.m.mo.p add checkbutton -label "Fine chunks" -variable ::Pref(finegrainchunks) $top.m.mo.p add separator $top.m.mo.p add checkbutton -label "Mark last" -variable ::Pref(marklast) menu $top.m.mo.c $top.m.mo.c add radiobutton -label "Show all lines" \ -variable ::Pref(context) -value -1 $top.m.mo.c add radiobutton -label "Show only diffs" \ -variable ::Pref(context) -value 0 $top.m.mo.c add separator |
︙ | ︙ | |||
3135 3136 3137 3138 3139 3140 3141 | -underline 0 bind $top <Alt-n> [list findDiff $top 1] bind $top <Alt-p> [list findDiff $top -1] bind $top <Alt-c> [list revCommit $top] bind $top <Alt-l> [list revLog $top] catch {font delete myfont} | | | | | | | 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 | -underline 0 bind $top <Alt-n> [list findDiff $top 1] bind $top <Alt-p> [list findDiff $top -1] bind $top <Alt-c> [list revCommit $top] bind $top <Alt-l> [list revLog $top] catch {font delete myfont} font create myfont -family $::Pref(fontfamily) -size $::Pref(fontsize) fileLabel $top.l1 -textvariable ::eskil($top,leftLabel) fileLabel $top.l2 -textvariable ::eskil($top,rightLabel) ttk::frame $top.ft1 -borderwidth 2 -relief sunken text $top.ft1.tl -height $::Pref(lines) -width 5 -wrap none \ -font myfont -borderwidth 0 -padx 0 -highlightthickness 0 \ -takefocus 0 text $top.ft1.tt -height $::Pref(lines) -width $::Pref(linewidth) -wrap none \ -xscrollcommand [list $top.sbx1 set] \ -font myfont -borderwidth 0 -padx 1 \ -highlightthickness 0 $top.ft1.tt configure -tabstyle wordprocessor tk::frame $top.ft1.f -width 2 -height 2 -background lightgray pack $top.ft1.tl -side left -fill y pack $top.ft1.f -side left -fill y pack $top.ft1.tt -side right -fill both -expand 1 scrollbar $top.sby -orient vertical scrollbar $top.sbx1 -orient horizontal -command [list $top.ft1.tt xview] set ::widgets($top,wLine1) $top.ft1.tl set ::widgets($top,wDiff1) $top.ft1.tt ttk::frame $top.ft2 -borderwidth 2 -relief sunken text $top.ft2.tl -height $::Pref(lines) -width 5 -wrap none \ -font myfont -borderwidth 0 -padx 0 -highlightthickness 0 \ -takefocus 0 text $top.ft2.tt -height $::Pref(lines) -width $::Pref(linewidth) -wrap none \ -xscrollcommand [list $top.sbx2 set] \ -font myfont -borderwidth 0 -padx 1 \ -highlightthickness 0 $top.ft2.tt configure -tabstyle wordprocessor tk::frame $top.ft2.f -width 2 -height 2 -background lightgray pack $top.ft2.tl -side left -fill y pack $top.ft2.f -side left -fill y |
︙ | ︙ | |||
3248 3249 3250 3251 3252 3253 3254 | initDiffData $top resetEdit $top return $top } proc ValidateNewColors {} { | < | | | < < | < < < | | | | | | | | < < | | < < | | | | | | | | | | | | | | | | | | 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 | initDiffData $top resetEdit $top return $top } proc ValidateNewColors {} { foreach item {colorchange bgchange colornew1 bgnew1 colornew2 bgnew2 colorequal bgequal} { if {![info exists ::TmpPref($item)]} continue set col $::TmpPref($item) if {$col eq ""} continue if {[catch {winfo rgb . $col}]} { # FIXA: Error message # Just restore for now set ::TmpPref($item) $::Pref($item) } } } # Set new preferences. proc applyPref {} { ValidateNewColors array set ::Pref [array get ::TmpPref] applyColor } # Update test color fields. proc testColor {} { ValidateNewColors .pr.fc.t1 tag configure change -foreground $::TmpPref(colorchange) \ -background $::TmpPref(bgchange) .pr.fc.t2 tag configure new1 -foreground $::TmpPref(colornew1) \ -background $::TmpPref(bgnew1) .pr.fc.t3 tag configure new2 -foreground $::TmpPref(colornew2) \ -background $::TmpPref(bgnew2) .pr.fc.t4 tag configure equal -foreground $::TmpPref(colorequal) \ -background $::TmpPref(bgequal) } # Color dialog. proc selColor {name} { set old $::TmpPref($name) if {$old eq ""} { set t [tk_chooseColor -parent .pr] } else { set t [tk_chooseColor -parent .pr -initialcolor $old] } if {$t != ""} { set ::TmpPref($name) $t } } # Create a window for changing preferences. # Currently only colors are changed in this dialog. proc makePrefWin {} { array set ::TmpPref [array get ::Pref] destroy .pr toplevel .pr wm title .pr "Eskil Preferences" ttk::frame .pr.fc -borderwidth 1 -relief solid ttk::label .pr.fc.l1 -text "Colours" -anchor w ttk::label .pr.fc.l2 -text "Text" -anchor w ttk::label .pr.fc.l3 -text "Background" -anchor w ttk::entryX .pr.fc.e1 -textvariable "::TmpPref(colorchange)" -width 10 ttk::entryX .pr.fc.e2 -textvariable "::TmpPref(colornew1)" -width 10 ttk::entryX .pr.fc.e3 -textvariable "::TmpPref(colornew2)" -width 10 ttk::entryX .pr.fc.e4 -textvariable "::TmpPref(colorequal)" -width 10 ttk::button .pr.fc.b1 -text "Sel" -command "selColor colorchange" ttk::button .pr.fc.b2 -text "Sel" -command "selColor colornew1" ttk::button .pr.fc.b3 -text "Sel" -command "selColor colornew2" ttk::button .pr.fc.b4 -text "Sel" -command "selColor colorequal" ttk::entryX .pr.fc.e5 -textvariable "::TmpPref(bgchange)" -width 10 ttk::entryX .pr.fc.e6 -textvariable "::TmpPref(bgnew1)" -width 10 ttk::entryX .pr.fc.e7 -textvariable "::TmpPref(bgnew2)" -width 10 ttk::entryX .pr.fc.e8 -textvariable "::TmpPref(bgequal)" -width 10 ttk::button .pr.fc.b5 -text "Sel" -command "selColor bgchange" ttk::button .pr.fc.b6 -text "Sel" -command "selColor bgnew1" ttk::button .pr.fc.b7 -text "Sel" -command "selColor bgnew2" ttk::button .pr.fc.b8 -text "Sel" -command "selColor bgequal" text .pr.fc.t1 -width 12 -height 1 -font myfont -takefocus 0 text .pr.fc.t2 -width 12 -height 1 -font myfont -takefocus 0 text .pr.fc.t3 -width 12 -height 1 -font myfont -takefocus 0 text .pr.fc.t4 -width 12 -height 1 -font myfont -takefocus 0 .pr.fc.t1 tag configure change -foreground $::TmpPref(colorchange) \ -background $::TmpPref(bgchange) .pr.fc.t2 tag configure new1 -foreground $::TmpPref(colornew1) \ -background $::TmpPref(bgnew1) .pr.fc.t3 tag configure new2 -foreground $::TmpPref(colornew2) \ -background $::TmpPref(bgnew2) .pr.fc.t4 tag configure equal -foreground $::TmpPref(colorequal) \ -background $::TmpPref(bgequal) .pr.fc.t1 insert end "Changed text" change .pr.fc.t2 insert end "Deleted text" new1 .pr.fc.t3 insert end "Added text" new2 .pr.fc.t4 insert end "Equal text" equal .pr.fc.t1 configure -state disabled .pr.fc.t2 configure -state disabled |
︙ | ︙ | |||
3383 3384 3385 3386 3387 3388 3389 | pack .pr.fc -side top -fill x pack .pr.b1 .pr.b2 .pr.b3 -side left -expand 1 -fill x -anchor s \ -padx 2 -pady 2 } # Change font preference proc applyFont {lb} { | < < | | < | | | | | | | | 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 | pack .pr.fc -side top -fill x pack .pr.b1 .pr.b2 .pr.b3 -side left -expand 1 -fill x -anchor s \ -padx 2 -pady 2 } # Change font preference proc applyFont {lb} { set ::Pref(fontsize) $::TmpPref(fontsize) set i [lindex [$lb curselection] 0] set ::Pref(fontfamily) [$lb get $i] chFont } # Update example font proc exampleFont {lb} { set i [lindex [$lb curselection] 0] if {$i eq ""} return set ::TmpPref(fontfamily) [$lb get $i] font configure tmpfont -family $::TmpPref(fontfamily) if {[string is integer -strict $::TmpPref(fontsize)]} { font configure tmpfont -size $::TmpPref(fontsize) } } proc UpdateFontBox {lb} { $lb delete 0 end foreach {f fixed} $::FontCache { if {$fixed || !$::eskil(fixedfont)} { $lb insert end $f if {[string equal -nocase $f $::Pref(fontfamily)]} { $lb selection set end $lb see end } } } } # Font dialog proc makeFontWin {} { global FontCache destroy .fo toplevel .fo -padx 3 -pady 3 wm title .fo "Select Font" ttk::label .fo.ltmp -text "Searching for fonts..." pack .fo.ltmp -padx {10 50} -pady {10 50} update catch {font delete tmpfont} font create tmpfont array set ::TmpPref [array get ::Pref] ttk::labelframe .fo.lf -text "Family" -padding 3 set lb [Scroll y listbox .fo.lf.lb -width 15 -height 10 \ -exportselection no -selectmode single] bind $lb <<ListboxSelect>> [list exampleFont $lb] pack .fo.lf.lb -fill both -expand 1 ttk::labelframe .fo.ls -text "Size" -padding 3 spinbox .fo.ls.sp -from 1 -to 30 -increment 1 -width 3 -state readonly \ -textvariable ::TmpPref(fontsize) -command [list exampleFont $lb] pack .fo.ls.sp -fill both -expand 1 ttk::label .fo.le -text "Example\n0Ooi1Il" -anchor w -font tmpfont \ -width 1 -justify left if {![info exists ::eskil(fixedfont)]} {set ::eskil(fixedfont) 1} ttk::checkbutton .fo.cb -text "Fixed" -variable ::eskil(fixedfont) \ -command [list UpdateFontBox $lb] |
︙ | ︙ | |||
3980 3981 3982 3983 3984 3985 3986 | # Go through all command line arguments and start the appropriate # diff window. # Returns the created toplevel. # This can be used as an entry point if embedding eskil. # In that case fill in ::eskil(argv) and ::eskil(argc) before calling. proc parseCommandLine {} { | | | 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 | # Go through all command line arguments and start the appropriate # diff window. # Returns the created toplevel. # This can be used as an entry point if embedding eskil. # In that case fill in ::eskil(argv) and ::eskil(argc) before calling. proc parseCommandLine {} { global dirdiff set ::eskil(autoclose) 0 set ::eskil(ignorenewline) 0 if {$::eskil(argc) == 0} { Init return [makeDiffWin] |
︙ | ︙ | |||
4044 4045 4046 4047 4048 4049 4050 | } elseif {$nextArg eq "printFile"} { set opts(printFile) [file join [pwd] $arg] } elseif {$nextArg eq "printHeaderSize"} { if {![string is double -strict $arg] || $arg <= 0} { puts "Argument -printHeaderSize must be a positive number" exit } | | | | | | | | | | | 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 | } elseif {$nextArg eq "printFile"} { set opts(printFile) [file join [pwd] $arg] } elseif {$nextArg eq "printHeaderSize"} { if {![string is double -strict $arg] || $arg <= 0} { puts "Argument -printHeaderSize must be a positive number" exit } set ::Pref(printHeaderSize) $arg } elseif {$nextArg eq "printCharsPerLine"} { if {![string is integer -strict $arg] || $arg <= 0} { puts "Argument -printCharsPerLine must be a positive number" exit } set ::Pref(printCharsPerLine) $arg } elseif {$nextArg eq "printPaper"} { package require pdf4tcl if {[llength [pdf4tcl::getPaperSize $arg]] != 2} { puts "Argument -printPaper must be a valid paper size" puts "Valid paper sizes:" puts [join [lsort -dictionary [pdf4tcl::getPaperSizeList]] \n] exit } set ::Pref(printPaper) $arg } elseif {$nextArg eq "printColorChange"} { ValidatePdfColor $arg -printColorChange set ::Pref(printColorChange) $arg } elseif {$nextArg eq "printColorOld"} { ValidatePdfColor $arg -printColorOld set ::Pref(printColorNew1) $arg } elseif {$nextArg eq "printColorNew"} { ValidatePdfColor $arg -printColorNew set ::Pref(printColorNew2) $arg } elseif {$nextArg eq "revision"} { set opts(doptrev$revNo) $arg incr revNo } elseif {$nextArg eq "limitlines"} { set opts(limitlines) $arg } elseif {$nextArg eq "context"} { set ::Pref(context) $arg } elseif {$nextArg eq "pivot"} { if {$arg >= 1} { set ::Pref(pivot) $arg } } elseif {$nextArg eq "prefix"} { set RE [string map [list % $arg] {^.*?\m(%\w+).*$}] if {$::Pref(nocase)} { set RE "(?i)$RE" } lappend ::Pref(preprocess) $RE {\1} "" } elseif {$nextArg eq "plugin"} { set plugin $arg } elseif {$nextArg eq "plugininfo"} { set plugininfo $arg |
︙ | ︙ | |||
4125 4126 4127 4128 4129 4130 4131 | set match [lsearch -glob -all -inline $allOpts $arg*] if {[llength $match] == 1} { set arg [lindex $match 0] } } if {$arg eq "-w"} { | | | | | | | | | | | | | | | | | | 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 | set match [lsearch -glob -all -inline $allOpts $arg*] if {[llength $match] == 1} { set arg [lindex $match 0] } } if {$arg eq "-w"} { set ::Pref(ignore) "-w" } elseif {$arg eq "--help" || $arg eq "-help"} { printUsage exit } elseif {$arg eq "-b"} { set ::Pref(ignore) "-b" } elseif {$arg eq "-noignore"} { set ::Pref(ignore) " " } elseif {$arg eq "-i"} { set ::Pref(nocase) 1 } elseif {$arg eq "-nocase"} { set ::Pref(nocase) 1 } elseif {$arg eq "-noempty"} { # FIXA: Add to documentation set ::Pref(noempty) 1 } elseif {$arg eq "-pivot"} { # FIXA: Add to documentation set nextArg pivot } elseif {$arg eq "-nodigit"} { set ::Pref(nodigit) 1 } elseif {$arg eq "-nokeyword"} { set ::Pref(dir,ignorekey) 1 } elseif {$arg eq "-prefix"} { set nextArg prefix } elseif {$arg eq "-preprocess"} { set nextArg preprocess } elseif {$arg eq "-preprocessleft"} { set nextArg preprocessleft } elseif {$arg eq "-preprocessright"} { set nextArg preprocessright } elseif {$arg eq "-plugin"} { set nextArg "plugin" } elseif {$arg eq "-plugininfo"} { set nextArg "plugininfo" } elseif {$arg eq "-plugindump"} { set nextArg "plugindump" } elseif {$arg eq "-pluginlist"} { set pluginlist 1 } elseif {$arg eq "-context"} { set nextArg context } elseif {$arg eq "-noparse"} { set ::Pref(parse) 0 } elseif {$arg eq "-line"} { set ::Pref(parse) 1 } elseif {$arg eq "-smallblock"} { set ::Pref(parse) 2 } elseif {$arg eq "-block"} { set ::Pref(parse) 3 } elseif {$arg eq "-char"} { set ::Pref(lineparsewords) 0 } elseif {$arg eq "-word"} { set ::Pref(lineparsewords) 1 } elseif {$arg eq "-2nd"} { # Deprecated #set ::Pref(extralineparse) 1 } elseif {$arg eq "-no2nd"} { # Deprecated #set ::Pref(extralineparse) 0 } elseif {$arg eq "-limit"} { set nextArg limitlines } elseif {$arg eq "-nodiff"} { set noautodiff 1 } elseif {$arg eq "-nocdiff"} { set nocdiff 1 } elseif {$arg eq "-dir"} { |
︙ | ︙ | |||
4227 4228 4229 4230 4231 4232 4233 | tk appname Eskil } } elseif {$arg eq "-o"} { set nextArg mergeFile } elseif {$arg eq "-a"} { set nextArg ancestorFile # Default is no ignore on three-way merge | | | | 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 | tk appname Eskil } } elseif {$arg eq "-o"} { set nextArg mergeFile } elseif {$arg eq "-a"} { set nextArg ancestorFile # Default is no ignore on three-way merge set ::Pref(ignore) " " } elseif {$arg eq "-fine"} { set ::Pref(finegrainchunks) 1 } elseif {$arg eq "-r"} { set nextArg revision } elseif {$arg eq "-debug"} { set ::eskil(debug) 1 } elseif {$arg eq "-svn"} { set preferedRev "SVN" } elseif {$arg eq "-cvs"} { |
︙ | ︙ | |||
4438 4439 4440 4441 4442 4443 4444 | } } return $top } # Save options to file ~/.eskilrc proc saveOptions {top} { | < < | | | | | | | < < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 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 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 | } } return $top } # Save options to file ~/.eskilrc proc saveOptions {top} { # Check if the window size has changed set w $::widgets($top,wDiff1) if {[winfo reqwidth $w] != [winfo width $w] || \ [winfo reqheight $w] != [winfo height $w]} { set dx [expr {[winfo width $w] - [winfo reqwidth $w]}] set dy [expr {[winfo height $w] - [winfo reqheight $w]}] set cx [font measure myfont 0] set cy [font metrics myfont -linespace] set neww [expr {[$w cget -width] + $dx / $cx}] set newh [expr {[$w cget -height] + $dy / $cy}] if {$neww != $::Pref(linewidth) || $newh != $::Pref(lines)} { set apa [tk_messageBox -title "Save Preferences" -icon question \ -type yesno -message "Should I save the current window\ size with the preferences?\nCurrent: $neww x $newh Old:\ $::Pref(linewidth) x $::Pref(lines)"] if {$apa == "yes"} { set ::Pref(linewidth) $neww set ::Pref(lines) $newh } } } 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] { # Skip unchanged options. if {[info exists ::DefaultPref($i)]} { if {$::DefaultPref($i) eq $::Pref($i)} { continue } } puts $ch [list set ::Pref($i) $::Pref($i)] } close $ch tk_messageBox -icon info -title "Saved" -message \ "Preferences saved to:\n[file nativename $rcfile]" } proc getOptions {} { set ::DefaultPref(fontsize) 8 # Maybe change to TkFixedFont in 8.5 ? set ::DefaultPref(fontfamily) Courier set ::DefaultPref(ignore) "-b" set ::DefaultPref(nocase) 0 set ::DefaultPref(noempty) 0 set ::DefaultPref(pivot) 100 set ::DefaultPref(nodigit) 0 set ::DefaultPref(parse) 2 set ::DefaultPref(lineparsewords) 0 set ::DefaultPref(colorequal) "" set ::DefaultPref(colorchange) red set ::DefaultPref(colornew1) darkgreen set ::DefaultPref(colornew2) blue set ::DefaultPref(bgequal) "" set ::DefaultPref(bgchange) \#ffe0e0 set ::DefaultPref(bgnew1) \#a0ffa0 set ::DefaultPref(bgnew2) \#e0e0ff set ::DefaultPref(context) -1 set ::DefaultPref(finegrainchunks) 0 set ::DefaultPref(marklast) 1 set ::DefaultPref(linewidth) 80 set ::DefaultPref(lines) 60 set ::DefaultPref(editor) "" set ::DefaultPref(preprocess) {} set ::DefaultPref(toolbar) 0 set ::DefaultPref(wideMap) 0 ;# Not settable in GUI yet # Print options set ::DefaultPref(printHeaderSize) 10 set ::DefaultPref(printCharsPerLine) 80 set ::DefaultPref(printPaper) a4 set ::DefaultPref(printColorChange) "1.0 0.7 0.7" set ::DefaultPref(printColorNew1) "0.7 1.0 0.7" set ::DefaultPref(printColorNew2) "0.8 0.8 1.0" # Directory diff options set ::DefaultPref(dir,comparelevel) 1 set ::DefaultPref(dir,ignorekey) 0 set ::DefaultPref(dir,incfiles) "" set ::DefaultPref(dir,exfiles) "*.o" set ::DefaultPref(dir,incdirs) "" set ::DefaultPref(dir,exdirs) "RCS CVS .git .svn .hg" set ::DefaultPref(dir,onlyrev) 0 # Start with default preferences, before loading setup file array set ::Pref [array get ::DefaultPref] # Backward compatibilty options set ::Pref(onlydiffs) -1 set ::Pref(regsub) {} set ::eskil(filter) "" if {![info exists ::eskil_testsuite] && [file exists "~/.eskilrc"]} { safeLoad "~/.eskilrc" ::Pref } if {$::Pref(editor) ne ""} { set ::util(editor) $::Pref(editor) } # If the user's file has this old option, translate it to the new if {$::Pref(onlydiffs) == 0} { set ::Pref(context) -1 } unset ::Pref(onlydiffs) if {$::Pref(regsub) ne ""} { foreach {a b} $::Pref(regsub) { lappend ::Pref(preprocess) $a $b "" } } unset ::Pref(regsub) # Set up reactions to some Pref settings if {![info exists ::widgets(toolbars)]} { set ::widgets(toolbars) {} } trace add variable ::Pref(toolbar) write TraceToolbar } |
︙ | ︙ |
Changes to src/help.tcl.
︙ | ︙ | |||
142 143 144 145 146 147 148 | $w insert end [subst -nocommands -novariables $data] $tags set data "" } } } proc makeHelpWin {} { | < < | | | | | | | 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | $w insert end [subst -nocommands -novariables $data] $tags set data "" } } } proc makeHelpWin {} { set doc [file join $::eskil(thisDir) .. doc/eskil.txt] if {![file exists $doc]} return set w [helpWin .he "Eskil Help"] set t [Scroll y text $w.t -width 85 -height 35] pack $w.t -side top -expand 1 -fill both configureDocWin $t # Set up tags for change marks $t tag configure new1 -foreground $::Pref(colornew1) \ -background $::Pref(bgnew1) $t tag configure new2 -foreground $::Pref(colornew2) \ -background $::Pref(bgnew2) $t tag configure change -foreground $::Pref(colorchange) \ -background $::Pref(bgchange) $t tag configure ul -underline 1 set width [font measure [$t cget -font] [string repeat x 20]] $t configure -tabs [list $width [expr {$width * 3/2}] [expr {$width * 2}]] set width [font measure docFontP [string repeat x 36]] $t tag configure example -tabs [list $width] -wrap none |
︙ | ︙ | |||
220 221 222 223 224 225 226 | insertTaggedText $t $::eskil(thisDir)/../doc/$fileName #focus $t $t configure -state disabled } proc makeTutorialWin {} { | < < | 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | insertTaggedText $t $::eskil(thisDir)/../doc/$fileName #focus $t $t configure -state disabled } proc makeTutorialWin {} { set doc [file join $::eskil(thisDir) .. doc/tutorial.txt] if {![file exists $doc]} return if {[catch {cd [file join $::eskil(thisDir) .. examples]}]} { tk_messageBox -icon error -title "Eskil Error" -message \ "Could not locate examples directory." \ -type ok |
︙ | ︙ |
Changes to src/map.tcl.
︙ | ︙ | |||
19 20 21 22 23 24 25 | # Boston, MA 02111-1307, USA. # #---------------------------------------------------------------------- # $Revision$ #---------------------------------------------------------------------- proc createMap {top} { | < < | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | # Boston, MA 02111-1307, USA. # #---------------------------------------------------------------------- # $Revision$ #---------------------------------------------------------------------- proc createMap {top} { set w $top.c_map if {$::Pref(wideMap)} { set width 20 } else { set width 6 } canvas $w -width $width -borderwidth 0 -selectborderwidth 0 \ -highlightthickness 0 -height 10 set map [image create photo map$top] |
︙ | ︙ | |||
64 65 66 67 68 69 70 | } proc addMapLines {top n} { incr ::eskil($top,mapMax) $n } proc drawMap {top newh} { | < < | | | | 62 63 64 65 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 97 98 99 100 101 102 103 104 105 | } proc addMapLines {top n} { incr ::eskil($top,mapMax) $n } proc drawMap {top newh} { set oldh [map$top cget -height] if {$oldh == $newh} return map$top blank if {![info exists ::eskil($top,changes)] || \ [llength $::eskil($top,changes)] == 0} return set w [winfo width $top.c_map] set h [winfo height $top.c_map] set x2 [expr {$w - ($::Pref(wideMap) ? 5 : 1)}] if {$x2 < 0} { set x2 0 } map$top configure -width $w -height $h incr h -1 set y0 0 foreach change $::eskil($top,changes) { lassign $change start length type set y1 [expr {$start * $h / $::eskil($top,mapMax) + 1}] if {!$y0} { set y0 $y1 } ;# Record first occurance if {$y1 < 1} {set y1 1} if {$y1 > $h} {set y1 $h} set y2 [expr {($start + $length) * $h / $::eskil($top,mapMax) + 1}] if {$y2 < 1} {set y2 1} if {$y2 <= $y1} {set y2 [expr {$y1 + 1}]} if {$y2 > $h} {set y2 $h} incr y2 map$top put $::Pref(color$type) -to 1 $y1 $x2 $y2 } if {$::Pref(wideMap)} { map$top put black -to $x2 $y0 $w $y2 } } # Allow button 2 on map to jump to a position proc ThumbMap {top y} { incr y 15 ::tk::ScrollButton2Down $top.sby 0 $y } |
Changes to src/rev.tcl.
︙ | ︙ | |||
1161 1162 1163 1164 1165 1166 1167 | set ::eskil($top,leftLabel) $rev set ::eskil($top,leftOK) 0 set ::Pref(toolbar) 1 } # Prepare for revision diff. Checkout copies of the versions needed. proc prepareRev {top} { | < < | 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 | set ::eskil($top,leftLabel) $rev set ::eskil($top,leftOK) 0 set ::Pref(toolbar) 1 } # Prepare for revision diff. Checkout copies of the versions needed. proc prepareRev {top} { $::widgets($top,commit) configure -state disabled $::widgets($top,revert) configure -state disabled $::widgets($top,log) configure -state disabled set type $::eskil($top,modetype) set revs {} |
︙ | ︙ | |||
1237 1238 1239 1240 1241 1242 1243 | } # Make sure labels are updated before processing starts update idletasks } # Clean up after a revision diff. proc cleanupRev {top} { | < < | 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 | } # Make sure labels are updated before processing starts update idletasks } # Clean up after a revision diff. proc cleanupRev {top} { clearTmp $::eskil($top,rightFile) $::eskil($top,leftFile) set ::eskil($top,rightFile) $::eskil($top,RevFile) set ::eskil($top,leftFile) $::eskil($top,RevFile) } proc revCommit {top} { if {[$::widgets($top,commit) cget -state] eq "disabled"} return |
︙ | ︙ | |||
1275 1276 1277 1278 1279 1280 1281 | set type $::eskil($top,modetype) eskil::rev::${type}::viewLog $top $::eskil($top,RevFile) \ $::eskil($top,RevRevs) } # Get a complete tree patch from this system. proc getFullPatch {top} { | < < | 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 | set type $::eskil($top,modetype) eskil::rev::${type}::viewLog $top $::eskil($top,RevFile) \ $::eskil($top,RevRevs) } # Get a complete tree patch from this system. proc getFullPatch {top} { $::widgets($top,commit) configure -state disabled $::widgets($top,revert) configure -state disabled $::widgets($top,log) configure -state disabled set type $::eskil($top,modetype) set files $::eskil($top,reviewFiles) |
︙ | ︙ |