Artifact
5d3d6d51dc6e05b06e5449299c0e2fbbfc754885fd08070fea232457c764d871 :
File
src/diff.tcl
— part of check-in
[356163b0]
at
2024-12-14 20:40:43
on branch diff-tree
— Change the name of the --tree option to --external-baseline.
(user:
drh
size: 15452)
[more...]
0000: 23 20 54 68 65 20 22 64 69 66 66 20 2d 2d 74 6b # The "diff --tk
0010: 22 20 63 6f 6d 6d 61 6e 64 20 6f 75 74 70 75 74 " command output
0020: 73 20 70 72 65 70 65 6e 64 73 20 61 20 22 73 65 s prepends a "se
0030: 74 20 66 6f 73 73 69 6c 63 6d 64 20 7b 2e 2e 2e t fossilcmd {...
0040: 7d 22 20 6c 69 6e 65 0a 23 20 74 6f 20 74 68 69 }" line.# to thi
0050: 73 20 66 69 6c 65 2c 20 74 68 65 6e 20 72 75 6e s file, then run
0060: 73 20 74 68 69 73 20 66 69 6c 65 20 75 73 69 6e s this file usin
0070: 67 20 22 74 63 6c 73 68 22 20 69 6e 20 6f 72 64 g "tclsh" in ord
0080: 65 72 20 74 6f 20 64 69 73 70 6c 61 79 20 74 68 er to display th
0090: 65 0a 23 20 67 72 61 70 68 69 63 61 6c 20 64 69 e.# graphical di
00a0: 66 66 20 69 6e 20 61 20 73 65 70 61 72 61 74 65 ff in a separate
00b0: 20 77 69 6e 64 6f 77 2e 20 20 41 20 74 79 70 69 window. A typi
00c0: 63 61 6c 20 22 73 65 74 20 66 6f 73 73 69 6c 63 cal "set fossilc
00d0: 6d 64 22 20 6c 69 6e 65 0a 23 20 6c 6f 6f 6b 73 md" line.# looks
00e0: 20 6c 69 6b 65 20 74 68 69 73 3a 0a 23 0a 23 20 like this:.#.#
00f0: 20 20 20 20 73 65 74 20 66 6f 73 73 69 6c 63 6d set fossilcm
0100: 64 20 7b 7c 20 22 2e 2f 66 6f 73 73 69 6c 22 20 d {| "./fossil"
0110: 64 69 66 66 20 2d 2d 74 63 6c 20 2d 69 20 2d 76 diff --tcl -i -v
0120: 7d 0a 23 0a 23 20 54 68 69 73 20 68 65 61 64 65 }.#.# This heade
0130: 72 20 63 6f 6d 6d 65 6e 74 20 69 73 20 73 74 72 r comment is str
0140: 69 70 70 65 64 20 6f 66 66 20 62 79 20 74 68 65 ipped off by the
0150: 20 22 6d 6b 62 75 69 6c 74 69 6e 2e 63 22 20 70 "mkbuiltin.c" p
0160: 72 6f 67 72 61 6d 2e 0a 23 0a 73 65 74 20 70 72 rogram..#.set pr
0170: 6f 67 20 7b 0a 70 61 63 6b 61 67 65 20 72 65 71 og {.package req
0180: 75 69 72 65 20 54 6b 0a 0a 61 72 72 61 79 20 73 uire Tk..array s
0190: 65 74 20 43 46 47 5f 6c 69 67 68 74 20 7b 0a 20 et CFG_light {.
01a0: 20 54 49 54 4c 45 20 20 20 20 20 20 7b 46 6f 73 TITLE {Fos
01b0: 73 69 6c 20 44 69 66 66 7d 0a 20 20 4c 4e 5f 43 sil Diff}. LN_C
01c0: 4f 4c 5f 42 47 20 20 23 64 64 64 64 64 64 0a 20 OL_BG #dddddd.
01d0: 20 4c 4e 5f 43 4f 4c 5f 46 47 20 20 23 34 34 34 LN_COL_FG #444
01e0: 34 34 34 0a 20 20 54 58 54 5f 43 4f 4c 5f 42 47 444. TXT_COL_BG
01f0: 20 23 66 66 66 66 66 66 0a 20 20 54 58 54 5f 43 #ffffff. TXT_C
0200: 4f 4c 5f 46 47 20 23 30 30 30 30 30 30 0a 20 20 OL_FG #000000.
0210: 4d 4b 52 5f 43 4f 4c 5f 42 47 20 23 34 34 34 34 MKR_COL_BG #4444
0220: 34 34 0a 20 20 4d 4b 52 5f 43 4f 4c 5f 46 47 20 44. MKR_COL_FG
0230: 23 64 64 64 64 64 64 0a 20 20 43 48 4e 47 5f 42 #dddddd. CHNG_B
0240: 47 20 20 20 20 23 64 30 64 30 66 66 0a 20 20 41 G #d0d0ff. A
0250: 44 44 5f 42 47 20 20 20 20 20 23 63 30 66 66 63 DD_BG #c0ffc
0260: 30 0a 20 20 52 4d 5f 42 47 20 20 20 20 20 20 23 0. RM_BG #
0270: 66 66 63 30 63 30 0a 20 20 48 52 5f 46 47 20 20 ffc0c0. HR_FG
0280: 20 20 20 20 23 34 34 34 34 34 34 0a 20 20 48 52 #444444. HR
0290: 5f 50 41 44 5f 54 4f 50 20 34 0a 20 20 48 52 5f _PAD_TOP 4. HR_
02a0: 50 41 44 5f 42 54 4d 20 38 0a 20 20 46 4e 5f 42 PAD_BTM 8. FN_B
02b0: 47 20 20 20 20 20 20 23 34 34 34 34 34 34 0a 20 G #444444.
02c0: 20 46 4e 5f 46 47 20 20 20 20 20 20 23 66 66 66 FN_FG #fff
02d0: 66 66 66 0a 20 20 46 4e 5f 50 41 44 20 20 20 20 fff. FN_PAD
02e0: 20 35 0a 20 20 45 52 52 5f 46 47 20 20 20 20 20 5. ERR_FG
02f0: 23 65 65 30 30 30 30 0a 20 20 50 41 44 58 20 20 #ee0000. PADX
0300: 20 20 20 20 20 35 0a 20 20 57 49 44 54 48 20 20 5. WIDTH
0310: 20 20 20 20 38 30 0a 20 20 48 45 49 47 48 54 20 80. HEIGHT
0320: 20 20 20 20 34 35 0a 20 20 4c 42 5f 48 45 49 47 45. LB_HEIG
0330: 48 54 20 20 32 35 0a 7d 0a 0a 61 72 72 61 79 20 HT 25.}..array
0340: 73 65 74 20 43 46 47 5f 64 61 72 6b 20 7b 0a 20 set CFG_dark {.
0350: 20 54 49 54 4c 45 20 20 20 20 20 20 7b 46 6f 73 TITLE {Fos
0360: 73 69 6c 20 44 69 66 66 7d 0a 20 20 4c 4e 5f 43 sil Diff}. LN_C
0370: 4f 4c 5f 42 47 20 20 23 64 64 64 64 64 64 0a 20 OL_BG #dddddd.
0380: 20 4c 4e 5f 43 4f 4c 5f 46 47 20 20 23 34 34 34 LN_COL_FG #444
0390: 34 34 34 0a 20 20 54 58 54 5f 43 4f 4c 5f 42 47 444. TXT_COL_BG
03a0: 20 23 33 66 33 66 33 66 0a 20 20 54 58 54 5f 43 #3f3f3f. TXT_C
03b0: 4f 4c 5f 46 47 20 23 64 63 64 63 63 63 0a 20 20 OL_FG #dcdccc.
03c0: 4d 4b 52 5f 43 4f 4c 5f 42 47 20 23 34 34 34 34 MKR_COL_BG #4444
03d0: 34 34 0a 20 20 4d 4b 52 5f 43 4f 4c 5f 46 47 20 44. MKR_COL_FG
03e0: 23 64 64 64 64 64 64 0a 20 20 43 48 4e 47 5f 42 #dddddd. CHNG_B
03f0: 47 20 20 20 20 23 36 61 36 61 66 63 0a 20 20 41 G #6a6afc. A
0400: 44 44 5f 42 47 20 20 20 20 20 23 35 37 39 33 34 DD_BG #57934
0410: 63 0a 20 20 52 4d 5f 42 47 20 20 20 20 20 20 23 c. RM_BG #
0420: 65 66 36 37 36 37 0a 20 20 48 52 5f 46 47 20 20 ef6767. HR_FG
0430: 20 20 20 20 23 34 34 34 34 34 34 0a 20 20 48 52 #444444. HR
0440: 5f 50 41 44 5f 54 4f 50 20 34 0a 20 20 48 52 5f _PAD_TOP 4. HR_
0450: 50 41 44 5f 42 54 4d 20 38 0a 20 20 46 4e 5f 42 PAD_BTM 8. FN_B
0460: 47 20 20 20 20 20 20 23 35 65 35 65 35 65 0a 20 G #5e5e5e.
0470: 20 46 4e 5f 46 47 20 20 20 20 20 20 23 66 66 66 FN_FG #fff
0480: 66 66 66 0a 20 20 46 4e 5f 50 41 44 20 20 20 20 fff. FN_PAD
0490: 20 35 0a 20 20 45 52 52 5f 46 47 20 20 20 20 20 5. ERR_FG
04a0: 23 65 65 30 30 30 30 0a 20 20 50 41 44 58 20 20 #ee0000. PADX
04b0: 20 20 20 20 20 35 0a 20 20 57 49 44 54 48 20 20 5. WIDTH
04c0: 20 20 20 20 38 30 0a 20 20 48 45 49 47 48 54 20 80. HEIGHT
04d0: 20 20 20 20 34 35 0a 20 20 4c 42 5f 48 45 49 47 45. LB_HEIG
04e0: 48 54 20 20 32 35 0a 7d 0a 0a 61 72 72 61 79 20 HT 25.}..array
04f0: 73 65 74 20 43 46 47 5f 61 72 72 20 7b 0a 20 20 set CFG_arr {.
0500: 30 20 20 20 20 20 20 20 20 20 20 43 46 47 5f 6c 0 CFG_l
0510: 69 67 68 74 0a 20 20 31 20 20 20 20 20 20 20 20 ight. 1
0520: 20 20 43 46 47 5f 64 61 72 6b 0a 7d 0a 0a 61 72 CFG_dark.}..ar
0530: 72 61 79 20 73 65 74 20 43 46 47 20 5b 61 72 72 ray set CFG [arr
0540: 61 79 20 67 65 74 20 24 43 46 47 5f 61 72 72 28 ay get $CFG_arr(
0550: 24 64 61 72 6b 6d 6f 64 65 29 5d 0a 0a 69 66 20 $darkmode)]..if
0560: 7b 21 5b 6e 61 6d 65 73 70 61 63 65 20 65 78 69 {![namespace exi
0570: 73 74 73 20 74 74 6b 5d 7d 20 7b 0a 20 20 69 6e sts ttk]} {. in
0580: 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 3a 3a terp alias {} ::
0590: 74 74 6b 3a 3a 73 63 72 6f 6c 6c 62 61 72 20 7b ttk::scrollbar {
05a0: 7d 20 3a 3a 73 63 72 6f 6c 6c 62 61 72 0a 20 20 } ::scrollbar.
05b0: 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 interp alias {}
05c0: 3a 3a 74 74 6b 3a 3a 6d 65 6e 75 62 75 74 74 6f ::ttk::menubutto
05d0: 6e 20 7b 7d 20 3a 3a 6d 65 6e 75 62 75 74 74 6f n {} ::menubutto
05e0: 6e 0a 7d 0a 0a 70 72 6f 63 20 64 65 68 74 6d 6c n.}..proc dehtml
05f0: 20 7b 78 7d 20 7b 0a 20 20 73 65 74 20 78 20 5b {x} {. set x [
0600: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 5b 5e regsub -all {<[^
0610: 3e 5d 2a 3e 7d 20 24 78 20 7b 7d 5d 0a 20 20 72 >]*>} $x {}]. r
0620: 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 6d 61 eturn [string ma
0630: 70 20 7b 26 61 6d 70 3b 20 26 20 26 6c 74 3b 20 p {& & <
0640: 3c 20 26 67 74 3b 20 3e 20 26 23 33 39 3b 20 27 < > > ' '
0650: 20 26 71 75 6f 74 3b 20 5c 22 7d 20 24 78 5d 0a " \"} $x].
0660: 7d 0a 0a 70 72 6f 63 20 63 6f 6c 73 20 7b 7d 20 }..proc cols {}
0670: 7b 0a 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 {. return [list
0680: 20 2e 6c 6e 41 20 2e 74 78 74 41 20 2e 6d 6b 72 .lnA .txtA .mkr
0690: 20 2e 6c 6e 42 20 2e 74 78 74 42 5d 0a 7d 0a 0a .lnB .txtB].}..
06a0: 70 72 6f 63 20 63 6f 6c 54 79 70 65 20 7b 63 7d proc colType {c}
06b0: 20 7b 0a 20 20 72 65 67 65 78 70 20 7b 5b 61 2d {. regexp {[a-
06c0: 7a 5d 2b 7d 20 24 63 20 74 79 70 65 0a 20 20 72 z]+} $c type. r
06d0: 65 74 75 72 6e 20 24 74 79 70 65 0a 7d 0a 0a 70 eturn $type.}..p
06e0: 72 6f 63 20 67 65 74 4c 69 6e 65 20 7b 64 69 66 roc getLine {dif
06f0: 66 74 78 74 20 4e 20 69 69 76 61 72 7d 20 7b 0a ftxt N iivar} {.
0700: 20 20 75 70 76 61 72 20 24 69 69 76 61 72 20 69 upvar $iivar i
0710: 69 0a 20 20 69 66 20 7b 24 69 69 3e 3d 24 4e 7d i. if {$ii>=$N}
0720: 20 7b 72 65 74 75 72 6e 20 2d 31 7d 0a 20 20 73 {return -1}. s
0730: 65 74 20 78 20 5b 6c 69 6e 64 65 78 20 24 64 69 et x [lindex $di
0740: 66 66 74 78 74 20 24 69 69 5d 0a 20 20 69 6e 63 fftxt $ii]. inc
0750: 72 20 69 69 0a 20 20 72 65 74 75 72 6e 20 24 78 r ii. return $x
0760: 0a 7d 0a 0a 70 72 6f 63 20 72 65 61 64 44 69 66 .}..proc readDif
0770: 66 73 20 7b 66 6f 73 73 69 6c 63 6d 64 7d 20 7b fs {fossilcmd} {
0780: 0a 20 20 67 6c 6f 62 61 6c 20 64 69 66 66 74 78 . global difftx
0790: 74 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 t. if {![info e
07a0: 78 69 73 74 73 20 64 69 66 66 74 78 74 5d 7d 20 xists difftxt]}
07b0: 7b 0a 20 20 20 20 73 65 74 20 69 6e 20 5b 6f 70 {. set in [op
07c0: 65 6e 20 24 66 6f 73 73 69 6c 63 6d 64 20 72 5d en $fossilcmd r]
07d0: 0a 20 20 20 20 66 63 6f 6e 66 69 67 75 72 65 20 . fconfigure
07e0: 24 69 6e 20 2d 65 6e 63 6f 64 69 6e 67 20 75 74 $in -encoding ut
07f0: 66 2d 38 0a 20 20 20 20 73 65 74 20 64 69 66 66 f-8. set diff
0800: 74 78 74 20 5b 73 70 6c 69 74 20 5b 72 65 61 64 txt [split [read
0810: 20 24 69 6e 5d 20 5c 6e 5d 0a 20 20 20 20 63 6c $in] \n]. cl
0820: 6f 73 65 20 24 69 6e 0a 20 20 7d 0a 20 20 73 65 ose $in. }. se
0830: 74 20 4e 20 5b 6c 6c 65 6e 67 74 68 20 24 64 69 t N [llength $di
0840: 66 66 74 78 74 5d 0a 20 20 73 65 74 20 69 69 20 fftxt]. set ii
0850: 30 0a 20 20 73 65 74 20 6e 44 69 66 66 73 20 30 0. set nDiffs 0
0860: 0a 20 20 73 65 74 20 6e 31 20 30 0a 20 20 73 65 . set n1 0. se
0870: 74 20 6e 32 20 30 20 20 0a 20 20 61 72 72 61 79 t n2 0 . array
0880: 20 73 65 74 20 77 69 64 74 68 73 20 7b 74 78 74 set widths {txt
0890: 20 33 20 6c 6e 20 33 20 6d 6b 72 20 31 7d 0a 20 3 ln 3 mkr 1}.
08a0: 20 0a 20 20 0a 20 20 73 65 74 20 66 72 6f 6d 49 . . set fromI
08b0: 6e 64 65 78 20 5b 6c 73 65 61 72 63 68 20 2d 67 ndex [lsearch -g
08c0: 6c 6f 62 20 24 66 6f 73 73 69 6c 63 6d 64 20 2a lob $fossilcmd *
08d0: 2d 66 72 6f 6d 5d 0a 20 20 73 65 74 20 74 6f 49 -from]. set toI
08e0: 6e 64 65 78 20 5b 6c 73 65 61 72 63 68 20 2d 67 ndex [lsearch -g
08f0: 6c 6f 62 20 24 66 6f 73 73 69 6c 63 6d 64 20 2a lob $fossilcmd *
0900: 2d 74 6f 5d 0a 20 20 73 65 74 20 62 72 61 6e 63 -to]. set branc
0910: 68 49 6e 64 65 78 20 5b 6c 73 65 61 72 63 68 20 hIndex [lsearch
0920: 2d 67 6c 6f 62 20 24 66 6f 73 73 69 6c 63 6d 64 -glob $fossilcmd
0930: 20 2a 2d 62 72 61 6e 63 68 5d 0a 20 20 73 65 74 *-branch]. set
0940: 20 63 68 65 63 6b 69 6e 49 6e 64 65 78 20 5b 6c checkinIndex [l
0950: 73 65 61 72 63 68 20 2d 67 6c 6f 62 20 24 66 6f search -glob $fo
0960: 73 73 69 6c 63 6d 64 20 2a 2d 63 68 65 63 6b 69 ssilcmd *-checki
0970: 6e 5d 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 n]. if {[string
0980: 20 6d 61 74 63 68 20 2a 3f 2d 2d 65 78 74 65 72 match *?--exter
0990: 6e 61 6c 2d 62 61 73 65 6c 69 6e 65 2a 20 24 66 nal-baseline* $f
09a0: 6f 73 73 69 6c 63 6d 64 5d 7d 20 7b 0a 20 20 20 ossilcmd]} {.
09b0: 20 73 65 74 20 66 41 20 7b 65 78 74 65 72 6e 61 set fA {externa
09c0: 6c 20 62 61 73 65 6c 69 6e 65 7d 0a 20 20 7d 20 l baseline}. }
09d0: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 else {. set f
09e0: 41 20 7b 62 61 73 65 20 63 68 65 63 6b 2d 69 6e A {base check-in
09f0: 7d 0a 20 20 7d 0a 20 20 73 65 74 20 66 42 20 7b }. }. set fB {
0a00: 63 75 72 72 65 6e 74 20 63 68 65 63 6b 2d 6f 75 current check-ou
0a10: 74 7d 0a 20 20 69 66 20 7b 24 66 72 6f 6d 49 6e t}. if {$fromIn
0a20: 64 65 78 20 3e 20 2d 31 7d 20 7b 73 65 74 20 66 dex > -1} {set f
0a30: 41 20 5b 6c 69 6e 64 65 78 20 24 66 6f 73 73 69 A [lindex $fossi
0a40: 6c 63 6d 64 20 24 66 72 6f 6d 49 6e 64 65 78 2b lcmd $fromIndex+
0a50: 31 5d 7d 0a 20 20 69 66 20 7b 24 74 6f 49 6e 64 1]}. if {$toInd
0a60: 65 78 20 3e 20 2d 31 7d 20 7b 73 65 74 20 66 42 ex > -1} {set fB
0a70: 20 5b 6c 69 6e 64 65 78 20 24 66 6f 73 73 69 6c [lindex $fossil
0a80: 63 6d 64 20 24 74 6f 49 6e 64 65 78 2b 31 5d 7d cmd $toIndex+1]}
0a90: 0a 20 20 69 66 20 7b 24 62 72 61 6e 63 68 49 6e . if {$branchIn
0aa0: 64 65 78 20 3e 20 2d 31 7d 20 7b 73 65 74 20 66 dex > -1} {set f
0ab0: 41 20 22 62 72 61 6e 63 68 20 70 6f 69 6e 74 22 A "branch point"
0ac0: 3b 20 73 65 74 20 66 42 20 22 6c 65 61 66 20 6f ; set fB "leaf o
0ad0: 66 20 62 72 61 6e 63 68 20 27 5b 6c 69 6e 64 65 f branch '[linde
0ae0: 78 20 24 66 6f 73 73 69 6c 63 6d 64 20 24 62 72 x $fossilcmd $br
0af0: 61 6e 63 68 49 6e 64 65 78 2b 31 5d 27 22 7d 0a anchIndex+1]'"}.
0b00: 20 20 69 66 20 7b 24 63 68 65 63 6b 69 6e 49 6e if {$checkinIn
0b10: 64 65 78 20 3e 20 2d 31 7d 20 7b 73 65 74 20 66 dex > -1} {set f
0b20: 41 20 22 70 72 69 6d 61 72 79 20 70 61 72 65 6e A "primary paren
0b30: 74 22 3b 20 73 65 74 20 66 42 20 5b 6c 69 6e 64 t"; set fB [lind
0b40: 65 78 20 24 66 6f 73 73 69 6c 63 6d 64 20 24 63 ex $fossilcmd $c
0b50: 68 65 63 6b 69 6e 49 6e 64 65 78 2b 31 5d 7d 0a heckinIndex+1]}.
0b60: 20 20 0a 20 20 0a 20 20 77 68 69 6c 65 20 7b 5b . . while {[
0b70: 73 65 74 20 6c 69 6e 65 20 5b 67 65 74 4c 69 6e set line [getLin
0b80: 65 20 24 64 69 66 66 74 78 74 20 24 4e 20 69 69 e $difftxt $N ii
0b90: 5d 5d 20 21 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 ]] != -1} {.
0ba0: 73 77 69 74 63 68 20 2d 2d 20 5b 6c 69 6e 64 65 switch -- [linde
0bb0: 78 20 24 6c 69 6e 65 20 30 5d 20 7b 0a 20 20 20 x $line 0] {.
0bc0: 20 20 20 46 49 4c 45 20 7b 0a 20 20 20 20 20 20 FILE {.
0bd0: 20 20 69 6e 63 72 20 6e 44 69 66 66 73 0a 20 20 incr nDiffs.
0be0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 77 78 foreach wx
0bf0: 20 5b 6c 69 73 74 20 5b 73 74 72 69 6e 67 20 6c [list [string l
0c00: 65 6e 67 74 68 20 24 6e 31 5d 20 5b 73 74 72 69 ength $n1] [stri
0c10: 6e 67 20 6c 65 6e 67 74 68 20 24 6e 32 5d 5d 20 ng length $n2]]
0c20: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b {. if {
0c30: 24 77 78 3e 24 77 69 64 74 68 73 28 6c 6e 29 7d $wx>$widths(ln)}
0c40: 20 7b 73 65 74 20 77 69 64 74 68 73 28 6c 6e 29 {set widths(ln)
0c50: 20 24 77 78 7d 0a 20 20 20 20 20 20 20 20 7d 0a $wx}. }.
0c60: 20 20 20 20 20 20 20 20 2e 6c 6e 41 20 69 6e 73 .lnA ins
0c70: 65 72 74 20 65 6e 64 20 5c 6e 20 66 6e 20 5c 6e ert end \n fn \n
0c80: 20 2d 0a 20 20 20 20 20 20 20 20 2e 74 78 74 41 -. .txtA
0c90: 20 69 6e 73 65 72 74 20 65 6e 64 20 22 5b 6c 69 insert end "[li
0ca0: 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 20 28 24 ndex $line 1] ($
0cb0: 66 41 29 5c 6e 22 20 66 6e 20 5c 6e 20 2d 0a 20 fA)\n" fn \n -.
0cc0: 20 20 20 20 20 20 20 2e 6d 6b 72 20 69 6e 73 65 .mkr inse
0cd0: 72 74 20 65 6e 64 20 5c 6e 20 66 6e 20 5c 6e 20 rt end \n fn \n
0ce0: 2d 0a 20 20 20 20 20 20 20 20 2e 6c 6e 42 20 69 -. .lnB i
0cf0: 6e 73 65 72 74 20 65 6e 64 20 5c 6e 20 66 6e 20 nsert end \n fn
0d00: 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 74 78 \n -. .tx
0d10: 74 42 20 69 6e 73 65 72 74 20 65 6e 64 20 22 5b tB insert end "[
0d20: 6c 69 6e 64 65 78 20 24 6c 69 6e 65 20 32 5d 20 lindex $line 2]
0d30: 28 24 66 42 29 5c 6e 22 20 66 6e 20 5c 6e 20 2d ($fB)\n" fn \n -
0d40: 0a 20 20 20 20 20 20 20 20 2e 77 66 69 6c 65 73 . .wfiles
0d50: 2e 6c 62 20 69 6e 73 65 72 74 20 65 6e 64 20 5b .lb insert end [
0d60: 6c 69 6e 64 65 78 20 24 6c 69 6e 65 20 32 5d 0a lindex $line 2].
0d70: 20 20 20 20 20 20 20 20 73 65 74 20 6e 31 20 30 set n1 0
0d80: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 32 20 . set n2
0d90: 30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 0. }.
0da0: 53 4b 49 50 20 7b 0a 20 20 20 20 20 20 20 20 73 SKIP {. s
0db0: 65 74 20 6e 20 5b 6c 69 6e 64 65 78 20 24 6c 69 et n [lindex $li
0dc0: 6e 65 20 31 5d 0a 20 20 20 20 20 20 20 20 69 6e ne 1]. in
0dd0: 63 72 20 6e 31 20 24 6e 0a 20 20 20 20 20 20 20 cr n1 $n.
0de0: 20 69 6e 63 72 20 6e 32 20 24 6e 0a 20 20 20 20 incr n2 $n.
0df0: 20 20 20 20 2e 6c 6e 41 20 69 6e 73 65 72 74 20 .lnA insert
0e00: 65 6e 64 20 2e 2e 2e 5c 6e 20 68 72 6c 6e 0a 20 end ...\n hrln.
0e10: 20 20 20 20 20 20 20 2e 74 78 74 41 20 69 6e 73 .txtA ins
0e20: 65 72 74 20 65 6e 64 20 5b 73 74 72 69 6e 67 20 ert end [string
0e30: 72 65 70 65 61 74 20 2e 20 33 30 5d 5c 6e 20 68 repeat . 30]\n h
0e40: 72 74 78 74 0a 20 20 20 20 20 20 20 20 2e 6d 6b rtxt. .mk
0e50: 72 20 69 6e 73 65 72 74 20 65 6e 64 20 5c 6e 20 r insert end \n
0e60: 68 72 6c 6e 0a 20 20 20 20 20 20 20 20 2e 6c 6e hrln. .ln
0e70: 42 20 69 6e 73 65 72 74 20 65 6e 64 20 2e 2e 2e B insert end ...
0e80: 5c 6e 20 68 72 6c 6e 0a 20 20 20 20 20 20 20 20 \n hrln.
0e90: 2e 74 78 74 42 20 69 6e 73 65 72 74 20 65 6e 64 .txtB insert end
0ea0: 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 [string repeat
0eb0: 2e 20 33 30 5d 5c 6e 20 68 72 74 78 74 0a 20 20 . 30]\n hrtxt.
0ec0: 20 20 20 20 7d 0a 20 20 20 20 20 20 43 4f 4d 20 }. COM
0ed0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 78 20 {. set x
0ee0: 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d [lindex $line 1]
0ef0: 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 6e 31 . incr n1
0f00: 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 6e 32 . incr n2
0f10: 0a 20 20 20 20 20 20 20 20 2e 6c 6e 41 20 69 6e . .lnA in
0f20: 73 65 72 74 20 65 6e 64 20 24 6e 31 5c 6e 20 2d sert end $n1\n -
0f30: 0a 20 20 20 20 20 20 20 20 2e 74 78 74 41 20 69 . .txtA i
0f40: 6e 73 65 72 74 20 65 6e 64 20 24 78 5c 6e 20 2d nsert end $x\n -
0f50: 0a 20 20 20 20 20 20 20 20 2e 6d 6b 72 20 69 6e . .mkr in
0f60: 73 65 72 74 20 65 6e 64 20 5c 6e 20 2d 0a 20 20 sert end \n -.
0f70: 20 20 20 20 20 20 2e 6c 6e 42 20 69 6e 73 65 72 .lnB inser
0f80: 74 20 65 6e 64 20 24 6e 32 5c 6e 20 2d 0a 20 20 t end $n2\n -.
0f90: 20 20 20 20 20 20 2e 74 78 74 42 20 69 6e 73 65 .txtB inse
0fa0: 72 74 20 65 6e 64 20 24 78 5c 6e 20 2d 0a 20 20 rt end $x\n -.
0fb0: 20 20 20 20 7d 0a 20 20 20 20 20 20 49 4e 53 20 }. INS
0fc0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 78 20 {. set x
0fd0: 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d [lindex $line 1]
0fe0: 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 6e 32 . incr n2
0ff0: 0a 20 20 20 20 20 20 20 20 2e 6c 6e 41 20 69 6e . .lnA in
1000: 73 65 72 74 20 65 6e 64 20 5c 6e 20 2d 0a 20 20 sert end \n -.
1010: 20 20 20 20 20 20 2e 74 78 74 41 20 69 6e 73 65 .txtA inse
1020: 72 74 20 65 6e 64 20 5c 6e 20 2d 0a 20 20 20 20 rt end \n -.
1030: 20 20 20 20 2e 6d 6b 72 20 69 6e 73 65 72 74 20 .mkr insert
1040: 65 6e 64 20 3e 5c 6e 20 2d 0a 20 20 20 20 20 20 end >\n -.
1050: 20 20 2e 6c 6e 42 20 69 6e 73 65 72 74 20 65 6e .lnB insert en
1060: 64 20 24 6e 32 5c 6e 20 2d 0a 20 20 20 20 20 20 d $n2\n -.
1070: 20 20 2e 74 78 74 42 20 69 6e 73 65 72 74 20 65 .txtB insert e
1080: 6e 64 20 24 78 20 61 64 64 20 5c 6e 20 2d 0a 20 nd $x add \n -.
1090: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 44 45 4c }. DEL
10a0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 78 {. set x
10b0: 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 [lindex $line 1
10c0: 5d 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 6e ]. incr n
10d0: 31 0a 20 20 20 20 20 20 20 20 2e 6c 6e 41 20 69 1. .lnA i
10e0: 6e 73 65 72 74 20 65 6e 64 20 24 6e 31 5c 6e 20 nsert end $n1\n
10f0: 2d 0a 20 20 20 20 20 20 20 20 2e 74 78 74 41 20 -. .txtA
1100: 69 6e 73 65 72 74 20 65 6e 64 20 24 78 20 72 6d insert end $x rm
1110: 20 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 6d \n -. .m
1120: 6b 72 20 69 6e 73 65 72 74 20 65 6e 64 20 3c 5c kr insert end <\
1130: 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 6c 6e 42 n -. .lnB
1140: 20 69 6e 73 65 72 74 20 65 6e 64 20 5c 6e 20 2d insert end \n -
1150: 0a 20 20 20 20 20 20 20 20 2e 74 78 74 42 20 69 . .txtB i
1160: 6e 73 65 72 74 20 65 6e 64 20 5c 6e 20 2d 0a 20 nsert end \n -.
1170: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 45 44 49 }. EDI
1180: 54 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 63 72 T {. incr
1190: 20 6e 31 0a 20 20 20 20 20 20 20 20 69 6e 63 72 n1. incr
11a0: 20 6e 32 0a 20 20 20 20 20 20 20 20 2e 6c 6e 41 n2. .lnA
11b0: 20 69 6e 73 65 72 74 20 65 6e 64 20 24 6e 31 5c insert end $n1\
11c0: 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 6c 6e 42 n -. .lnB
11d0: 20 69 6e 73 65 72 74 20 65 6e 64 20 24 6e 32 5c insert end $n2\
11e0: 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 6d 6b 72 n -. .mkr
11f0: 20 69 6e 73 65 72 74 20 65 6e 64 20 7c 5c 6e 20 insert end |\n
1200: 2d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6e -. set nn
1210: 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 5d [llength $line]
1220: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 . for {se
1230: 74 20 69 20 31 7d 20 7b 24 69 3c 24 6e 6e 7d 20 t i 1} {$i<$nn}
1240: 7b 69 6e 63 72 20 69 20 33 7d 20 7b 0a 20 20 20 {incr i 3} {.
1250: 20 20 20 20 20 20 20 73 65 74 20 78 20 5b 6c 69 set x [li
1260: 6e 64 65 78 20 24 6c 69 6e 65 20 24 69 5d 0a 20 ndex $line $i].
1270: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 78 20 if {$x
1280: 6e 65 20 22 22 7d 20 7b 0a 20 20 20 20 20 20 20 ne ""} {.
1290: 20 20 20 20 20 2e 74 78 74 41 20 69 6e 73 65 72 .txtA inser
12a0: 74 20 65 6e 64 20 24 78 20 2d 0a 20 20 20 20 20 t end $x -.
12b0: 20 20 20 20 20 20 20 2e 74 78 74 42 20 69 6e 73 .txtB ins
12c0: 65 72 74 20 65 6e 64 20 24 78 20 2d 0a 20 20 20 ert end $x -.
12d0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
12e0: 20 20 20 69 66 20 7b 24 69 2b 32 3c 24 6e 6e 7d if {$i+2<$nn}
12f0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {. s
1300: 65 74 20 78 31 20 5b 6c 69 6e 64 65 78 20 24 6c et x1 [lindex $l
1310: 69 6e 65 20 5b 65 78 70 72 20 7b 24 69 2b 31 7d ine [expr {$i+1}
1320: 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ]]. s
1330: 65 74 20 78 32 20 5b 6c 69 6e 64 65 78 20 24 6c et x2 [lindex $l
1340: 69 6e 65 20 5b 65 78 70 72 20 7b 24 69 2b 32 7d ine [expr {$i+2}
1350: 5d 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ]]. i
1360: 66 20 7b 22 24 78 31 22 20 65 71 20 22 22 7d 20 f {"$x1" eq ""}
1370: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
1380: 2e 74 78 74 42 20 69 6e 73 65 72 74 20 65 6e 64 .txtB insert end
1390: 20 24 78 32 20 61 64 64 0a 20 20 20 20 20 20 20 $x2 add.
13a0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 22 } elseif {"
13b0: 24 78 32 22 20 65 71 20 22 22 7d 20 7b 0a 20 20 $x2" eq ""} {.
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 2e 74 78 74 .txt
13d0: 41 20 69 6e 73 65 72 74 20 65 6e 64 20 24 78 31 A insert end $x1
13e0: 20 72 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rm.
13f0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 } else {.
1400: 20 20 20 20 20 20 20 2e 74 78 74 41 20 69 6e 73 .txtA ins
1410: 65 72 74 20 65 6e 64 20 24 78 31 20 63 68 6e 67 ert end $x1 chng
1420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e . .
1430: 74 78 74 42 20 69 6e 73 65 72 74 20 65 6e 64 20 txtB insert end
1440: 24 78 32 20 63 68 6e 67 0a 20 20 20 20 20 20 20 $x2 chng.
1450: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
1460: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 }. }.
1470: 20 20 20 20 20 2e 74 78 74 41 20 69 6e 73 65 72 .txtA inser
1480: 74 20 65 6e 64 20 5c 6e 20 2d 0a 20 20 20 20 20 t end \n -.
1490: 20 20 20 2e 74 78 74 42 20 69 6e 73 65 72 74 20 .txtB insert
14a0: 65 6e 64 20 5c 6e 20 2d 0a 20 20 20 20 20 20 7d end \n -. }
14b0: 0a 20 20 20 20 20 20 22 22 20 7b 0a 20 20 20 20 . "" {.
14c0: 20 20 20 20 66 6f 72 65 61 63 68 20 77 78 20 5b foreach wx [
14d0: 6c 69 73 74 20 5b 73 74 72 69 6e 67 20 6c 65 6e list [string len
14e0: 67 74 68 20 24 6e 31 5d 20 5b 73 74 72 69 6e 67 gth $n1] [string
14f0: 20 6c 65 6e 67 74 68 20 24 6e 32 5d 5d 20 7b 0a length $n2]] {.
1500: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 77 if {$w
1510: 78 3e 24 77 69 64 74 68 73 28 6c 6e 29 7d 20 7b x>$widths(ln)} {
1520: 73 65 74 20 77 69 64 74 68 73 28 6c 6e 29 20 24 set widths(ln) $
1530: 77 78 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 wx}. }.
1540: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 }. defa
1550: 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 2e 6c ult {. .l
1560: 6e 41 20 69 6e 73 65 72 74 20 65 6e 64 20 5c 6e nA insert end \n
1570: 20 2d 0a 20 20 20 20 20 20 20 20 2e 74 78 74 41 -. .txtA
1580: 20 69 6e 73 65 72 74 20 65 6e 64 20 24 6c 69 6e insert end $lin
1590: 65 5c 6e 20 65 72 72 0a 20 20 20 20 20 20 20 20 e\n err.
15a0: 2e 6d 6b 72 20 69 6e 73 65 72 74 20 65 6e 64 20 .mkr insert end
15b0: 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 6c 6e \n -. .ln
15c0: 42 20 69 6e 73 65 72 74 20 65 6e 64 20 5c 6e 20 B insert end \n
15d0: 2d 0a 20 20 20 20 20 20 20 20 2e 74 78 74 42 20 -. .txtB
15e0: 69 6e 73 65 72 74 20 65 6e 64 20 24 6c 69 6e 65 insert end $line
15f0: 5c 6e 20 65 72 72 0a 20 20 20 20 20 20 7d 0a 20 \n err. }.
1600: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 66 6f 72 65 }. }.. fore
1610: 61 63 68 20 63 20 5b 63 6f 6c 73 5d 20 7b 0a 20 ach c [cols] {.
1620: 20 20 20 73 65 74 20 74 79 70 65 20 5b 63 6f 6c set type [col
1630: 54 79 70 65 20 24 63 5d 0a 20 20 20 20 69 66 20 Type $c]. if
1640: 7b 24 74 79 70 65 20 6e 65 20 22 74 78 74 22 7d {$type ne "txt"}
1650: 20 7b 0a 20 20 20 20 20 20 24 63 20 63 6f 6e 66 {. $c conf
1660: 69 67 20 2d 77 69 64 74 68 20 24 77 69 64 74 68 ig -width $width
1670: 73 28 24 74 79 70 65 29 0a 20 20 20 20 7d 0a 20 s($type). }.
1680: 20 20 20 24 63 20 63 6f 6e 66 69 67 20 2d 73 74 $c config -st
1690: 61 74 65 20 64 69 73 61 62 6c 65 64 0a 20 20 7d ate disabled. }
16a0: 0a 20 20 69 66 20 7b 24 6e 44 69 66 66 73 20 3c . if {$nDiffs <
16b0: 3d 20 5b 2e 77 66 69 6c 65 73 2e 6c 62 20 63 67 = [.wfiles.lb cg
16c0: 65 74 20 2d 68 65 69 67 68 74 5d 7d 20 7b 0a 20 et -height]} {.
16d0: 20 20 20 2e 77 66 69 6c 65 73 2e 6c 62 20 63 6f .wfiles.lb co
16e0: 6e 66 69 67 20 2d 68 65 69 67 68 74 20 24 6e 44 nfig -height $nD
16f0: 69 66 66 73 0a 20 20 20 20 67 72 69 64 20 72 65 iffs. grid re
1700: 6d 6f 76 65 20 2e 77 66 69 6c 65 73 2e 73 62 0a move .wfiles.sb.
1710: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 24 6e }.. return $n
1720: 44 69 66 66 73 0a 7d 0a 0a 70 72 6f 63 20 76 69 Diffs.}..proc vi
1730: 65 77 44 69 66 66 20 7b 69 64 78 7d 20 7b 0a 20 ewDiff {idx} {.
1740: 20 2e 74 78 74 41 20 79 76 69 65 77 20 24 69 64 .txtA yview $id
1750: 78 0a 20 20 2e 74 78 74 41 20 78 76 69 65 77 20 x. .txtA xview
1760: 6d 6f 76 65 74 6f 20 30 0a 7d 0a 0a 70 72 6f 63 moveto 0.}..proc
1770: 20 63 79 63 6c 65 44 69 66 66 73 20 7b 7b 72 65 cycleDiffs {{re
1780: 76 65 72 73 65 20 30 7d 7d 20 7b 0a 20 20 69 66 verse 0}} {. if
1790: 20 7b 24 72 65 76 65 72 73 65 7d 20 7b 0a 20 20 {$reverse} {.
17a0: 20 20 73 65 74 20 72 61 6e 67 65 20 5b 2e 74 78 set range [.tx
17b0: 74 41 20 74 61 67 20 70 72 65 76 72 61 6e 67 65 tA tag prevrange
17c0: 20 66 6e 20 40 30 2c 30 20 31 2e 30 5d 0a 20 20 fn @0,0 1.0].
17d0: 20 20 69 66 20 7b 24 72 61 6e 67 65 20 65 71 20 if {$range eq
17e0: 22 22 7d 20 7b 0a 20 20 20 20 20 20 76 69 65 77 ""} {. view
17f0: 44 69 66 66 20 7b 66 6e 2e 6c 61 73 74 20 2d 31 Diff {fn.last -1
1800: 63 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a c}. } else {.
1810: 20 20 20 20 20 20 76 69 65 77 44 69 66 66 20 5b viewDiff [
1820: 6c 69 6e 64 65 78 20 24 72 61 6e 67 65 20 30 5d lindex $range 0]
1830: 0a 20 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65 20 . }. } else
1840: 7b 0a 20 20 20 20 73 65 74 20 72 61 6e 67 65 20 {. set range
1850: 5b 2e 74 78 74 41 20 74 61 67 20 6e 65 78 74 72 [.txtA tag nextr
1860: 61 6e 67 65 20 66 6e 20 7b 40 30 2c 30 20 2b 31 ange fn {@0,0 +1
1870: 63 7d 20 65 6e 64 5d 0a 20 20 20 20 69 66 20 7b c} end]. if {
1880: 24 72 61 6e 67 65 20 65 71 20 22 22 20 7c 7c 20 $range eq "" ||
1890: 5b 6c 69 6e 64 65 78 20 5b 2e 74 78 74 41 20 79 [lindex [.txtA y
18a0: 76 69 65 77 5d 20 31 5d 20 3d 3d 20 31 7d 20 7b view] 1] == 1} {
18b0: 0a 20 20 20 20 20 20 76 69 65 77 44 69 66 66 20 . viewDiff
18c0: 66 6e 2e 66 69 72 73 74 0a 20 20 20 20 7d 20 65 fn.first. } e
18d0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 76 69 65 77 lse {. view
18e0: 44 69 66 66 20 5b 6c 69 6e 64 65 78 20 24 72 61 Diff [lindex $ra
18f0: 6e 67 65 20 30 5d 0a 20 20 20 20 7d 0a 20 20 7d nge 0]. }. }
1900: 0a 7d 0a 0a 70 72 6f 63 20 78 76 69 73 20 7b 63 .}..proc xvis {c
1910: 6f 6c 7d 20 7b 0a 20 20 73 65 74 20 76 69 65 77 ol} {. set view
1920: 20 5b 24 63 6f 6c 20 78 76 69 65 77 5d 0a 20 20 [$col xview].
1930: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c return [expr {[l
1940: 69 6e 64 65 78 20 24 76 69 65 77 20 31 5d 2d 5b index $view 1]-[
1950: 6c 69 6e 64 65 78 20 24 76 69 65 77 20 30 5d 7d lindex $view 0]}
1960: 5d 0a 7d 0a 0a 70 72 6f 63 20 73 63 72 6f 6c 6c ].}..proc scroll
1970: 2d 78 20 7b 61 72 67 73 7d 20 7b 0a 20 20 73 65 -x {args} {. se
1980: 74 20 63 20 2e 74 78 74 5b 65 78 70 72 20 7b 5b t c .txt[expr {[
1990: 78 76 69 73 20 2e 74 78 74 41 5d 20 3c 20 5b 78 xvis .txtA] < [x
19a0: 76 69 73 20 2e 74 78 74 42 5d 20 3f 20 22 41 22 vis .txtB] ? "A"
19b0: 20 3a 20 22 42 22 7d 5d 0a 20 20 65 76 61 6c 20 : "B"}]. eval
19c0: 24 63 20 78 76 69 65 77 20 24 61 72 67 73 0a 7d $c xview $args.}
19d0: 0a 0a 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b ..interp alias {
19e0: 7d 20 73 63 72 6f 6c 6c 2d 79 20 7b 7d 20 2e 74 } scroll-y {} .t
19f0: 78 74 41 20 79 76 69 65 77 0a 0a 70 72 6f 63 20 xtA yview..proc
1a00: 6e 6f 6f 70 20 7b 61 72 67 73 7d 20 7b 7d 0a 0a noop {args} {}..
1a10: 70 72 6f 63 20 65 6e 61 62 6c 65 53 79 6e 63 20 proc enableSync
1a20: 7b 61 78 69 73 7d 20 7b 0a 20 20 75 70 64 61 74 {axis} {. updat
1a30: 65 20 69 64 6c 65 74 61 73 6b 73 0a 20 20 69 6e e idletasks. in
1a40: 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 73 79 terp alias {} sy
1a50: 6e 63 2d 24 61 78 69 73 20 7b 7d 0a 20 20 72 65 nc-$axis {}. re
1a60: 6e 61 6d 65 20 5f 73 79 6e 63 2d 24 61 78 69 73 name _sync-$axis
1a70: 20 73 79 6e 63 2d 24 61 78 69 73 0a 7d 0a 0a 70 sync-$axis.}..p
1a80: 72 6f 63 20 64 69 73 61 62 6c 65 53 79 6e 63 20 roc disableSync
1a90: 7b 61 78 69 73 7d 20 7b 0a 20 20 72 65 6e 61 6d {axis} {. renam
1aa0: 65 20 73 79 6e 63 2d 24 61 78 69 73 20 5f 73 79 e sync-$axis _sy
1ab0: 6e 63 2d 24 61 78 69 73 0a 20 20 69 6e 74 65 72 nc-$axis. inter
1ac0: 70 20 61 6c 69 61 73 20 7b 7d 20 73 79 6e 63 2d p alias {} sync-
1ad0: 24 61 78 69 73 20 7b 7d 20 6e 6f 6f 70 0a 7d 0a $axis {} noop.}.
1ae0: 0a 70 72 6f 63 20 73 79 6e 63 2d 78 20 7b 63 6f .proc sync-x {co
1af0: 6c 20 66 69 72 73 74 20 6c 61 73 74 7d 20 7b 0a l first last} {.
1b00: 20 20 64 69 73 61 62 6c 65 53 79 6e 63 20 78 0a disableSync x.
1b10: 20 20 24 63 6f 6c 20 78 76 69 65 77 20 6d 6f 76 $col xview mov
1b20: 65 74 6f 20 5b 65 78 70 72 20 7b 24 66 69 72 73 eto [expr {$firs
1b30: 74 2a 5b 78 76 69 73 20 24 63 6f 6c 5d 2f 28 24 t*[xvis $col]/($
1b40: 6c 61 73 74 2d 24 66 69 72 73 74 29 7d 5d 0a 20 last-$first)}].
1b50: 20 66 6f 72 65 61 63 68 20 73 69 64 65 20 7b 41 foreach side {A
1b60: 20 42 7d 20 7b 0a 20 20 20 20 73 65 74 20 73 62 B} {. set sb
1b70: 20 2e 73 62 78 24 73 69 64 65 0a 20 20 20 20 73 .sbx$side. s
1b80: 65 74 20 78 76 69 65 77 20 5b 2e 74 78 74 24 73 et xview [.txt$s
1b90: 69 64 65 20 78 76 69 65 77 5d 0a 20 20 20 20 69 ide xview]. i
1ba0: 66 20 7b 5b 6c 69 6e 64 65 78 20 24 78 76 69 65 f {[lindex $xvie
1bb0: 77 20 30 5d 20 3e 20 30 20 7c 7c 20 5b 6c 69 6e w 0] > 0 || [lin
1bc0: 64 65 78 20 24 78 76 69 65 77 20 31 5d 20 3c 20 dex $xview 1] <
1bd0: 31 7d 20 7b 0a 20 20 20 20 20 20 67 72 69 64 20 1} {. grid
1be0: 24 73 62 0a 20 20 20 20 20 20 65 76 61 6c 20 24 $sb. eval $
1bf0: 73 62 20 73 65 74 20 24 78 76 69 65 77 0a 20 20 sb set $xview.
1c00: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 } else {.
1c10: 20 67 72 69 64 20 72 65 6d 6f 76 65 20 24 73 62 grid remove $sb
1c20: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 65 6e 61 . }. }. ena
1c30: 62 6c 65 53 79 6e 63 20 78 0a 7d 0a 0a 70 72 6f bleSync x.}..pro
1c40: 63 20 73 79 6e 63 2d 79 20 7b 66 69 72 73 74 20 c sync-y {first
1c50: 6c 61 73 74 7d 20 7b 0a 20 20 64 69 73 61 62 6c last} {. disabl
1c60: 65 53 79 6e 63 20 79 0a 20 20 66 6f 72 65 61 63 eSync y. foreac
1c70: 68 20 63 20 5b 63 6f 6c 73 5d 20 7b 0a 20 20 20 h c [cols] {.
1c80: 20 24 63 20 79 76 69 65 77 20 6d 6f 76 65 74 6f $c yview moveto
1c90: 20 24 66 69 72 73 74 0a 20 20 7d 0a 20 20 69 66 $first. }. if
1ca0: 20 7b 24 66 69 72 73 74 20 3e 20 30 20 7c 7c 20 {$first > 0 ||
1cb0: 24 6c 61 73 74 20 3c 20 31 7d 20 7b 0a 20 20 20 $last < 1} {.
1cc0: 20 67 72 69 64 20 2e 73 62 79 0a 20 20 20 20 2e grid .sby. .
1cd0: 73 62 79 20 73 65 74 20 24 66 69 72 73 74 20 24 sby set $first $
1ce0: 6c 61 73 74 0a 20 20 7d 20 65 6c 73 65 20 7b 0a last. } else {.
1cf0: 20 20 20 20 67 72 69 64 20 72 65 6d 6f 76 65 20 grid remove
1d00: 2e 73 62 79 0a 20 20 7d 0a 20 20 65 6e 61 62 6c .sby. }. enabl
1d10: 65 53 79 6e 63 20 79 0a 7d 0a 0a 77 6d 20 77 69 eSync y.}..wm wi
1d20: 74 68 64 72 61 77 20 2e 0a 77 6d 20 74 69 74 6c thdraw ..wm titl
1d30: 65 20 2e 20 24 43 46 47 28 54 49 54 4c 45 29 0a e . $CFG(TITLE).
1d40: 77 6d 20 69 63 6f 6e 6e 61 6d 65 20 2e 20 24 43 wm iconname . $C
1d50: 46 47 28 54 49 54 4c 45 29 0a 23 20 4b 65 79 73 FG(TITLE).# Keys
1d60: 74 72 6f 6b 65 20 62 69 6e 64 69 6e 67 73 20 66 troke bindings f
1d70: 6f 72 20 6f 6e 20 74 68 65 20 74 6f 70 2d 6c 65 or on the top-le
1d80: 76 65 6c 20 77 69 6e 64 6f 77 20 66 6f 72 20 6e vel window for n
1d90: 61 76 69 67 61 74 69 6f 6e 20 61 6e 64 0a 23 20 avigation and.#
1da0: 63 6f 6e 74 72 6f 6c 20 61 6c 73 6f 20 66 69 72 control also fir
1db0: 65 20 77 68 65 6e 20 74 68 6f 73 65 20 73 61 6d e when those sam
1dc0: 65 20 6b 65 79 73 74 72 6f 6b 65 73 20 61 72 65 e keystrokes are
1dd0: 20 70 72 65 73 73 65 64 20 69 6e 20 74 68 65 0a pressed in the.
1de0: 23 20 53 65 61 72 63 68 20 65 6e 74 72 79 20 62 # Search entry b
1df0: 6f 78 2e 20 20 44 69 73 61 62 6c 65 20 74 68 65 ox. Disable the
1e00: 6d 2c 20 74 6f 20 70 72 65 76 65 6e 74 20 74 68 m, to prevent th
1e10: 65 20 64 69 66 66 20 73 63 72 65 65 6e 20 66 72 e diff screen fr
1e20: 6f 6d 0a 23 20 64 69 73 61 70 70 65 61 72 69 6e om.# disappearin
1e30: 67 20 61 62 72 75 70 74 6c 79 20 61 6e 64 20 75 g abruptly and u
1e40: 6e 65 78 70 65 63 74 65 64 6c 79 20 77 68 65 6e nexpectedly when
1e50: 20 73 65 61 72 63 68 69 6e 67 20 66 6f 72 20 22 searching for "
1e60: 71 22 2e 0a 23 0a 62 69 6e 64 20 2e 20 3c 43 6f q"..#.bind . <Co
1e70: 6e 74 72 6f 6c 2d 71 3e 20 65 78 69 74 0a 62 69 ntrol-q> exit.bi
1e80: 6e 64 20 2e 20 3c 43 6f 6e 74 72 6f 6c 2d 70 3e nd . <Control-p>
1e90: 20 7b 63 61 74 63 68 20 73 65 61 72 63 68 50 72 {catch searchPr
1ea0: 65 76 3b 20 62 72 65 61 6b 7d 0a 62 69 6e 64 20 ev; break}.bind
1eb0: 2e 20 3c 43 6f 6e 74 72 6f 6c 2d 6e 3e 20 7b 63 . <Control-n> {c
1ec0: 61 74 63 68 20 73 65 61 72 63 68 4e 65 78 74 3b atch searchNext;
1ed0: 20 62 72 65 61 6b 7d 0a 62 69 6e 64 20 2e 20 3c break}.bind . <
1ee0: 45 73 63 61 70 65 3e 3c 45 73 63 61 70 65 3e 20 Escape><Escape>
1ef0: 65 78 69 74 0a 62 69 6e 64 20 2e 20 3c 44 65 73 exit.bind . <Des
1f00: 74 72 6f 79 3e 20 7b 61 66 74 65 72 20 30 20 65 troy> {after 0 e
1f10: 78 69 74 7d 0a 62 69 6e 64 20 2e 20 3c 54 61 62 xit}.bind . <Tab
1f20: 3e 20 7b 63 79 63 6c 65 44 69 66 66 73 3b 20 62 > {cycleDiffs; b
1f30: 72 65 61 6b 7d 0a 62 69 6e 64 20 2e 20 3c 3c 50 reak}.bind . <<P
1f40: 72 65 76 57 69 6e 64 6f 77 3e 3e 20 7b 63 79 63 revWindow>> {cyc
1f50: 6c 65 44 69 66 66 73 20 31 3b 20 62 72 65 61 6b leDiffs 1; break
1f60: 7d 0a 62 69 6e 64 20 2e 20 3c 43 6f 6e 74 72 6f }.bind . <Contro
1f70: 6c 2d 66 3e 20 7b 73 65 61 72 63 68 4f 6e 4f 66 l-f> {searchOnOf
1f80: 66 3b 20 62 72 65 61 6b 7d 0a 62 69 6e 64 20 2e f; break}.bind .
1f90: 20 3c 43 6f 6e 74 72 6f 6c 2d 67 3e 20 7b 63 61 <Control-g> {ca
1fa0: 74 63 68 20 73 65 61 72 63 68 4e 65 78 74 3b 20 tch searchNext;
1fb0: 62 72 65 61 6b 7d 0a 62 69 6e 64 20 2e 20 3c 52 break}.bind . <R
1fc0: 65 74 75 72 6e 3e 20 7b 0a 20 20 65 76 65 6e 74 eturn> {. event
1fd0: 20 67 65 6e 65 72 61 74 65 20 2e 62 62 2e 66 69 generate .bb.fi
1fe0: 6c 65 73 20 3c 31 3e 0a 20 20 65 76 65 6e 74 20 les <1>. event
1ff0: 67 65 6e 65 72 61 74 65 20 2e 62 62 2e 66 69 6c generate .bb.fil
2000: 65 73 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 es <ButtonReleas
2010: 65 2d 31 3e 0a 20 20 62 72 65 61 6b 0a 7d 0a 66 e-1>. break.}.f
2020: 6f 72 65 61 63 68 20 7b 6b 65 79 20 61 78 69 73 oreach {key axis
2030: 20 61 72 67 73 7d 20 7b 0a 20 20 55 70 20 20 20 args} {. Up
2040: 20 79 20 7b 73 63 72 6f 6c 6c 20 2d 35 20 75 6e y {scroll -5 un
2050: 69 74 73 7d 0a 20 20 6b 20 20 20 20 20 79 20 7b its}. k y {
2060: 73 63 72 6f 6c 6c 20 2d 35 20 75 6e 69 74 73 7d scroll -5 units}
2070: 0a 20 20 44 6f 77 6e 20 20 79 20 7b 73 63 72 6f . Down y {scro
2080: 6c 6c 20 35 20 75 6e 69 74 73 7d 0a 20 20 6a 20 ll 5 units}. j
2090: 20 20 20 20 79 20 7b 73 63 72 6f 6c 6c 20 35 20 y {scroll 5
20a0: 75 6e 69 74 73 7d 0a 20 20 4c 65 66 74 20 20 78 units}. Left x
20b0: 20 7b 73 63 72 6f 6c 6c 20 2d 35 20 75 6e 69 74 {scroll -5 unit
20c0: 73 7d 0a 20 20 68 20 20 20 20 20 78 20 7b 73 63 s}. h x {sc
20d0: 72 6f 6c 6c 20 2d 35 20 75 6e 69 74 73 7d 0a 20 roll -5 units}.
20e0: 20 52 69 67 68 74 20 78 20 7b 73 63 72 6f 6c 6c Right x {scroll
20f0: 20 35 20 75 6e 69 74 73 7d 0a 20 20 6c 20 20 20 5 units}. l
2100: 20 20 78 20 7b 73 63 72 6f 6c 6c 20 35 20 75 6e x {scroll 5 un
2110: 69 74 73 7d 0a 20 20 50 72 69 6f 72 20 79 20 7b its}. Prior y {
2120: 73 63 72 6f 6c 6c 20 2d 31 20 70 61 67 65 7d 0a scroll -1 page}.
2130: 20 20 62 20 20 20 20 20 79 20 7b 73 63 72 6f 6c b y {scrol
2140: 6c 20 2d 31 20 70 61 67 65 7d 0a 20 20 4e 65 78 l -1 page}. Nex
2150: 74 20 20 79 20 7b 73 63 72 6f 6c 6c 20 31 20 70 t y {scroll 1 p
2160: 61 67 65 7d 0a 20 20 73 70 61 63 65 20 79 20 7b age}. space y {
2170: 73 63 72 6f 6c 6c 20 31 20 70 61 67 65 7d 0a 20 scroll 1 page}.
2180: 20 48 6f 6d 65 20 20 79 20 7b 6d 6f 76 65 74 6f Home y {moveto
2190: 20 30 7d 0a 20 20 67 20 20 20 20 20 79 20 7b 6d 0}. g y {m
21a0: 6f 76 65 74 6f 20 30 7d 0a 20 20 45 6e 64 20 20 oveto 0}. End
21b0: 20 79 20 7b 6d 6f 76 65 74 6f 20 31 7d 0a 7d 20 y {moveto 1}.}
21c0: 7b 0a 20 20 62 69 6e 64 20 2e 20 3c 24 6b 65 79 {. bind . <$key
21d0: 3e 20 22 73 63 72 6f 6c 6c 2d 24 61 78 69 73 20 > "scroll-$axis
21e0: 24 61 72 67 73 3b 20 62 72 65 61 6b 22 0a 20 20 $args; break".
21f0: 62 69 6e 64 20 2e 20 3c 53 68 69 66 74 2d 24 6b bind . <Shift-$k
2200: 65 79 3e 20 63 6f 6e 74 69 6e 75 65 0a 7d 0a 0a ey> continue.}..
2210: 66 72 61 6d 65 20 2e 62 62 0a 3a 3a 74 74 6b 3a frame .bb.::ttk:
2220: 3a 6d 65 6e 75 62 75 74 74 6f 6e 20 2e 62 62 2e :menubutton .bb.
2230: 66 69 6c 65 73 20 2d 74 65 78 74 20 22 46 69 6c files -text "Fil
2240: 65 73 22 0a 69 66 20 7b 5b 74 6b 20 77 69 6e 64 es".if {[tk wind
2250: 6f 77 69 6e 67 73 79 73 74 65 6d 5d 20 65 71 20 owingsystem] eq
2260: 22 77 69 6e 33 32 22 7d 20 7b 0a 20 20 3a 3a 74 "win32"} {. ::t
2270: 74 6b 3a 3a 73 74 79 6c 65 20 74 68 65 6d 65 20 tk::style theme
2280: 75 73 65 20 77 69 6e 6e 61 74 69 76 65 0a 20 20 use winnative.
2290: 2e 62 62 2e 66 69 6c 65 73 20 63 6f 6e 66 69 67 .bb.files config
22a0: 75 72 65 20 2d 70 61 64 64 69 6e 67 20 7b 32 30 ure -padding {20
22b0: 20 31 20 31 30 20 32 7d 0a 7d 0a 74 6f 70 6c 65 1 10 2}.}.tople
22c0: 76 65 6c 20 2e 77 66 69 6c 65 73 0a 77 6d 20 77 vel .wfiles.wm w
22d0: 69 74 68 64 72 61 77 20 2e 77 66 69 6c 65 73 0a ithdraw .wfiles.
22e0: 75 70 64 61 74 65 20 69 64 6c 65 74 61 73 6b 73 update idletasks
22f0: 0a 77 6d 20 74 72 61 6e 73 69 65 6e 74 20 2e 77 .wm transient .w
2300: 66 69 6c 65 73 20 2e 0a 77 6d 20 6f 76 65 72 72 files ..wm overr
2310: 69 64 65 72 65 64 69 72 65 63 74 20 2e 77 66 69 ideredirect .wfi
2320: 6c 65 73 20 31 0a 6c 69 73 74 62 6f 78 20 2e 77 les 1.listbox .w
2330: 66 69 6c 65 73 2e 6c 62 20 2d 77 69 64 74 68 20 files.lb -width
2340: 30 20 2d 68 65 69 67 68 74 20 24 43 46 47 28 4c 0 -height $CFG(L
2350: 42 5f 48 45 49 47 48 54 29 20 2d 61 63 74 69 76 B_HEIGHT) -activ
2360: 65 73 74 79 6c 65 20 6e 6f 6e 65 20 5c 0a 20 20 estyle none \.
2370: 2d 79 73 63 72 6f 6c 6c 20 7b 2e 77 66 69 6c 65 -yscroll {.wfile
2380: 73 2e 73 62 20 73 65 74 7d 0a 3a 3a 74 74 6b 3a s.sb set}.::ttk:
2390: 3a 73 63 72 6f 6c 6c 62 61 72 20 2e 77 66 69 6c :scrollbar .wfil
23a0: 65 73 2e 73 62 20 2d 63 6f 6d 6d 61 6e 64 20 7b es.sb -command {
23b0: 2e 77 66 69 6c 65 73 2e 6c 62 20 79 76 69 65 77 .wfiles.lb yview
23c0: 7d 0a 67 72 69 64 20 2e 77 66 69 6c 65 73 2e 6c }.grid .wfiles.l
23d0: 62 20 2e 77 66 69 6c 65 73 2e 73 62 20 2d 73 74 b .wfiles.sb -st
23e0: 69 63 6b 79 20 6e 73 0a 62 69 6e 64 20 2e 62 62 icky ns.bind .bb
23f0: 2e 66 69 6c 65 73 20 3c 31 3e 20 7b 0a 20 20 73 .files <1> {. s
2400: 65 74 20 78 20 5b 77 69 6e 66 6f 20 72 6f 6f 74 et x [winfo root
2410: 78 20 25 57 5d 0a 20 20 73 65 74 20 79 20 5b 65 x %W]. set y [e
2420: 78 70 72 20 7b 5b 77 69 6e 66 6f 20 72 6f 6f 74 xpr {[winfo root
2430: 79 20 25 57 5d 2b 5b 77 69 6e 66 6f 20 68 65 69 y %W]+[winfo hei
2440: 67 68 74 20 25 57 5d 7d 5d 0a 20 20 77 6d 20 67 ght %W]}]. wm g
2450: 65 6f 6d 65 74 72 79 20 2e 77 66 69 6c 65 73 20 eometry .wfiles
2460: 2b 24 78 2b 24 79 0a 20 20 77 6d 20 64 65 69 63 +$x+$y. wm deic
2470: 6f 6e 69 66 79 20 2e 77 66 69 6c 65 73 0a 20 20 onify .wfiles.
2480: 66 6f 63 75 73 20 2e 77 66 69 6c 65 73 2e 6c 62 focus .wfiles.lb
2490: 0a 7d 0a 62 69 6e 64 20 2e 77 66 69 6c 65 73 20 .}.bind .wfiles
24a0: 3c 46 6f 63 75 73 4f 75 74 3e 20 7b 77 6d 20 77 <FocusOut> {wm w
24b0: 69 74 68 64 72 61 77 20 2e 77 66 69 6c 65 73 7d ithdraw .wfiles}
24c0: 0a 62 69 6e 64 20 2e 77 66 69 6c 65 73 20 3c 45 .bind .wfiles <E
24d0: 73 63 61 70 65 3e 20 7b 66 6f 63 75 73 20 2e 7d scape> {focus .}
24e0: 0a 66 6f 72 65 61 63 68 20 65 76 74 20 7b 31 20 .foreach evt {1
24f0: 52 65 74 75 72 6e 7d 20 7b 0a 20 20 62 69 6e 64 Return} {. bind
2500: 20 2e 77 66 69 6c 65 73 2e 6c 62 20 3c 24 65 76 .wfiles.lb <$ev
2510: 74 3e 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b t> {. catch {
2520: 0a 20 20 20 20 20 20 73 65 74 20 69 64 78 20 5b . set idx [
2530: 6c 69 6e 64 65 78 20 5b 2e 74 78 74 41 20 74 61 lindex [.txtA ta
2540: 67 20 72 61 6e 67 65 73 20 66 6e 5d 20 5b 65 78 g ranges fn] [ex
2550: 70 72 20 7b 5b 25 57 20 63 75 72 73 65 6c 65 63 pr {[%W curselec
2560: 74 69 6f 6e 5d 2a 32 7d 5d 5d 0a 20 20 20 20 20 tion]*2}]].
2570: 20 76 69 65 77 44 69 66 66 20 24 69 64 78 0a 20 viewDiff $idx.
2580: 20 20 20 7d 0a 20 20 20 20 66 6f 63 75 73 20 2e }. focus .
2590: 0a 20 20 20 20 62 72 65 61 6b 0a 20 20 7d 0a 7d . break. }.}
25a0: 0a 62 69 6e 64 20 2e 77 66 69 6c 65 73 2e 6c 62 .bind .wfiles.lb
25b0: 20 3c 4d 6f 74 69 6f 6e 3e 20 7b 0a 20 20 25 57 <Motion> {. %W
25c0: 20 73 65 6c 65 63 74 69 6f 6e 20 63 6c 65 61 72 selection clear
25d0: 20 30 20 65 6e 64 0a 20 20 25 57 20 73 65 6c 65 0 end. %W sele
25e0: 63 74 69 6f 6e 20 73 65 74 20 40 25 78 2c 25 79 ction set @%x,%y
25f0: 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 73 69 64 .}..foreach {sid
2600: 65 20 73 79 6e 63 43 6f 6c 7d 20 7b 41 20 2e 74 e syncCol} {A .t
2610: 78 74 42 20 42 20 2e 74 78 74 41 7d 20 7b 0a 20 xtB B .txtA} {.
2620: 20 73 65 74 20 6c 6e 20 2e 6c 6e 24 73 69 64 65 set ln .ln$side
2630: 0a 20 20 74 65 78 74 20 24 6c 6e 0a 20 20 24 6c . text $ln. $l
2640: 6e 20 74 61 67 20 63 6f 6e 66 69 67 20 2d 20 2d n tag config - -
2650: 6a 75 73 74 69 66 79 20 72 69 67 68 74 0a 0a 20 justify right..
2660: 20 73 65 74 20 74 78 74 20 2e 74 78 74 24 73 69 set txt .txt$si
2670: 64 65 0a 20 20 74 65 78 74 20 24 74 78 74 20 2d de. text $txt -
2680: 77 69 64 74 68 20 24 43 46 47 28 57 49 44 54 48 width $CFG(WIDTH
2690: 29 20 2d 68 65 69 67 68 74 20 24 43 46 47 28 48 ) -height $CFG(H
26a0: 45 49 47 48 54 29 20 2d 77 72 61 70 20 6e 6f 6e EIGHT) -wrap non
26b0: 65 20 5c 0a 20 20 20 20 2d 78 73 63 72 6f 6c 6c e \. -xscroll
26c0: 20 22 73 79 6e 63 2d 78 20 24 73 79 6e 63 43 6f "sync-x $syncCo
26d0: 6c 22 0a 20 20 63 61 74 63 68 20 7b 24 74 78 74 l". catch {$txt
26e0: 20 63 6f 6e 66 69 67 20 2d 74 61 62 73 74 79 6c config -tabstyl
26f0: 65 20 77 6f 72 64 70 72 6f 63 65 73 73 6f 72 7d e wordprocessor}
2700: 20 3b 23 20 52 65 71 75 69 72 65 64 20 66 6f 72 ;# Required for
2710: 20 54 6b 3e 3d 38 2e 35 0a 20 20 66 6f 72 65 61 Tk>=8.5. forea
2720: 63 68 20 74 61 67 20 7b 61 64 64 20 72 6d 20 63 ch tag {add rm c
2730: 68 6e 67 7d 20 7b 0a 20 20 20 20 24 74 78 74 20 hng} {. $txt
2740: 74 61 67 20 63 6f 6e 66 69 67 20 24 74 61 67 20 tag config $tag
2750: 2d 62 61 63 6b 67 72 6f 75 6e 64 20 24 43 46 47 -background $CFG
2760: 28 5b 73 74 72 69 6e 67 20 74 6f 75 70 70 65 72 ([string toupper
2770: 20 24 74 61 67 5d 5f 42 47 29 0a 20 20 20 20 24 $tag]_BG). $
2780: 74 78 74 20 74 61 67 20 6c 6f 77 65 72 20 24 74 txt tag lower $t
2790: 61 67 0a 20 20 7d 0a 20 20 24 74 78 74 20 74 61 ag. }. $txt ta
27a0: 67 20 63 6f 6e 66 69 67 20 66 6e 20 2d 62 61 63 g config fn -bac
27b0: 6b 67 72 6f 75 6e 64 20 24 43 46 47 28 46 4e 5f kground $CFG(FN_
27c0: 42 47 29 20 2d 66 6f 72 65 67 72 6f 75 6e 64 20 BG) -foreground
27d0: 24 43 46 47 28 46 4e 5f 46 47 29 20 5c 0a 20 20 $CFG(FN_FG) \.
27e0: 20 20 2d 6a 75 73 74 69 66 79 20 63 65 6e 74 65 -justify cente
27f0: 72 0a 20 20 24 74 78 74 20 74 61 67 20 63 6f 6e r. $txt tag con
2800: 66 69 67 20 65 72 72 20 2d 66 6f 72 65 67 72 6f fig err -foregro
2810: 75 6e 64 20 24 43 46 47 28 45 52 52 5f 46 47 29 und $CFG(ERR_FG)
2820: 0a 7d 0a 74 65 78 74 20 2e 6d 6b 72 0a 0a 66 6f .}.text .mkr..fo
2830: 72 65 61 63 68 20 63 20 5b 63 6f 6c 73 5d 20 7b reach c [cols] {
2840: 0a 20 20 73 65 74 20 6b 65 79 50 72 65 66 69 78 . set keyPrefix
2850: 20 5b 73 74 72 69 6e 67 20 74 6f 75 70 70 65 72 [string toupper
2860: 20 5b 63 6f 6c 54 79 70 65 20 24 63 5d 5d 5f 43 [colType $c]]_C
2870: 4f 4c 5f 0a 20 20 69 66 20 7b 5b 74 6b 20 77 69 OL_. if {[tk wi
2880: 6e 64 6f 77 69 6e 67 73 79 73 74 65 6d 5d 20 65 ndowingsystem] e
2890: 71 20 22 77 69 6e 33 32 22 7d 20 7b 24 63 20 63 q "win32"} {$c c
28a0: 6f 6e 66 69 67 20 2d 66 6f 6e 74 20 7b 63 6f 75 onfig -font {cou
28b0: 72 69 65 72 20 39 7d 7d 0a 20 20 24 63 20 63 6f rier 9}}. $c co
28c0: 6e 66 69 67 20 2d 62 67 20 24 43 46 47 28 24 7b nfig -bg $CFG(${
28d0: 6b 65 79 50 72 65 66 69 78 7d 42 47 29 20 2d 66 keyPrefix}BG) -f
28e0: 67 20 24 43 46 47 28 24 7b 6b 65 79 50 72 65 66 g $CFG(${keyPref
28f0: 69 78 7d 46 47 29 20 2d 62 6f 72 64 65 72 77 69 ix}FG) -borderwi
2900: 64 74 68 20 30 20 5c 0a 20 20 20 20 2d 70 61 64 dth 0 \. -pad
2910: 78 20 24 43 46 47 28 50 41 44 58 29 20 2d 79 73 x $CFG(PADX) -ys
2920: 63 72 6f 6c 6c 20 73 79 6e 63 2d 79 0a 20 20 24 croll sync-y. $
2930: 63 20 74 61 67 20 63 6f 6e 66 69 67 20 68 72 6c c tag config hrl
2940: 6e 20 2d 73 70 61 63 69 6e 67 31 20 24 43 46 47 n -spacing1 $CFG
2950: 28 48 52 5f 50 41 44 5f 54 4f 50 29 20 2d 73 70 (HR_PAD_TOP) -sp
2960: 61 63 69 6e 67 33 20 24 43 46 47 28 48 52 5f 50 acing3 $CFG(HR_P
2970: 41 44 5f 42 54 4d 29 20 5c 0a 20 20 20 20 20 2d AD_BTM) \. -
2980: 66 6f 72 65 67 72 6f 75 6e 64 20 24 43 46 47 28 foreground $CFG(
2990: 48 52 5f 46 47 29 20 2d 6a 75 73 74 69 66 79 20 HR_FG) -justify
29a0: 72 69 67 68 74 0a 20 20 24 63 20 74 61 67 20 63 right. $c tag c
29b0: 6f 6e 66 69 67 20 68 72 74 78 74 20 20 2d 73 70 onfig hrtxt -sp
29c0: 61 63 69 6e 67 31 20 24 43 46 47 28 48 52 5f 50 acing1 $CFG(HR_P
29d0: 41 44 5f 54 4f 50 29 20 2d 73 70 61 63 69 6e 67 AD_TOP) -spacing
29e0: 33 20 24 43 46 47 28 48 52 5f 50 41 44 5f 42 54 3 $CFG(HR_PAD_BT
29f0: 4d 29 20 5c 0a 20 20 20 20 20 2d 66 6f 72 65 67 M) \. -foreg
2a00: 72 6f 75 6e 64 20 24 43 46 47 28 48 52 5f 46 47 round $CFG(HR_FG
2a10: 29 20 2d 6a 75 73 74 69 66 79 20 63 65 6e 74 65 ) -justify cente
2a20: 72 0a 20 20 24 63 20 74 61 67 20 63 6f 6e 66 69 r. $c tag confi
2a30: 67 20 66 6e 20 2d 73 70 61 63 69 6e 67 31 20 24 g fn -spacing1 $
2a40: 43 46 47 28 46 4e 5f 50 41 44 29 20 2d 73 70 61 CFG(FN_PAD) -spa
2a50: 63 69 6e 67 33 20 24 43 46 47 28 46 4e 5f 50 41 cing3 $CFG(FN_PA
2a60: 44 29 0a 20 20 62 69 6e 64 74 61 67 73 20 24 63 D). bindtags $c
2a70: 20 22 2e 20 24 63 20 54 65 78 74 20 61 6c 6c 22 ". $c Text all"
2a80: 0a 20 20 62 69 6e 64 20 24 63 20 3c 31 3e 20 7b . bind $c <1> {
2a90: 66 6f 63 75 73 20 25 57 7d 0a 7d 0a 0a 3a 3a 74 focus %W}.}..::t
2aa0: 74 6b 3a 3a 73 63 72 6f 6c 6c 62 61 72 20 2e 73 tk::scrollbar .s
2ab0: 62 79 20 2d 63 6f 6d 6d 61 6e 64 20 7b 2e 74 78 by -command {.tx
2ac0: 74 41 20 79 76 69 65 77 7d 20 2d 6f 72 69 65 6e tA yview} -orien
2ad0: 74 20 76 65 72 74 69 63 61 6c 0a 3a 3a 74 74 6b t vertical.::ttk
2ae0: 3a 3a 73 63 72 6f 6c 6c 62 61 72 20 2e 73 62 78 ::scrollbar .sbx
2af0: 41 20 2d 63 6f 6d 6d 61 6e 64 20 7b 2e 74 78 74 A -command {.txt
2b00: 41 20 78 76 69 65 77 7d 20 2d 6f 72 69 65 6e 74 A xview} -orient
2b10: 20 68 6f 72 69 7a 6f 6e 74 61 6c 0a 3a 3a 74 74 horizontal.::tt
2b20: 6b 3a 3a 73 63 72 6f 6c 6c 62 61 72 20 2e 73 62 k::scrollbar .sb
2b30: 78 42 20 2d 63 6f 6d 6d 61 6e 64 20 7b 2e 74 78 xB -command {.tx
2b40: 74 42 20 78 76 69 65 77 7d 20 2d 6f 72 69 65 6e tB xview} -orien
2b50: 74 20 68 6f 72 69 7a 6f 6e 74 61 6c 0a 66 72 61 t horizontal.fra
2b60: 6d 65 20 2e 73 70 61 63 65 72 0a 0a 69 66 20 7b me .spacer..if {
2b70: 5b 72 65 61 64 44 69 66 66 73 20 24 66 6f 73 73 [readDiffs $foss
2b80: 69 6c 63 6d 64 5d 20 3d 3d 20 30 7d 20 7b 0a 20 ilcmd] == 0} {.
2b90: 20 74 6b 5f 6d 65 73 73 61 67 65 42 6f 78 20 2d tk_messageBox -
2ba0: 74 79 70 65 20 6f 6b 20 2d 74 69 74 6c 65 20 24 type ok -title $
2bb0: 43 46 47 28 54 49 54 4c 45 29 20 2d 6d 65 73 73 CFG(TITLE) -mess
2bc0: 61 67 65 20 22 4e 6f 20 63 68 61 6e 67 65 73 22 age "No changes"
2bd0: 0a 20 20 65 78 69 74 0a 7d 0a 75 70 64 61 74 65 . exit.}.update
2be0: 20 69 64 6c 65 74 61 73 6b 73 0a 0a 70 72 6f 63 idletasks..proc
2bf0: 20 73 61 76 65 44 69 66 66 20 7b 7d 20 7b 0a 20 saveDiff {} {.
2c00: 20 73 65 74 20 66 6e 20 5b 74 6b 5f 67 65 74 53 set fn [tk_getS
2c10: 61 76 65 46 69 6c 65 5d 0a 20 20 69 66 20 7b 24 aveFile]. if {$
2c20: 66 6e 3d 3d 22 22 7d 20 72 65 74 75 72 6e 0a 20 fn==""} return.
2c30: 20 73 65 74 20 6f 75 74 20 5b 6f 70 65 6e 20 24 set out [open $
2c40: 66 6e 20 77 62 5d 0a 20 20 70 75 74 73 20 24 6f fn wb]. puts $o
2c50: 75 74 20 22 23 21 2f 75 73 72 2f 62 69 6e 2f 74 ut "#!/usr/bin/t
2c60: 63 6c 73 68 5c 6e 23 5c 6e 23 20 52 75 6e 20 74 clsh\n#\n# Run t
2c70: 68 69 73 20 73 63 72 69 70 74 20 75 73 69 6e 67 his script using
2c80: 20 27 74 63 6c 73 68 27 20 6f 72 20 27 77 69 73 'tclsh' or 'wis
2c90: 68 27 22 0a 20 20 70 75 74 73 20 24 6f 75 74 20 h'". puts $out
2ca0: 22 23 20 74 6f 20 73 65 65 20 74 68 65 20 67 72 "# to see the gr
2cb0: 61 70 68 69 63 61 6c 20 64 69 66 66 2e 5c 6e 23 aphical diff.\n#
2cc0: 22 0a 20 20 70 75 74 73 20 24 6f 75 74 20 22 73 ". puts $out "s
2cd0: 65 74 20 66 6f 73 73 69 6c 63 6d 64 20 7b 7d 22 et fossilcmd {}"
2ce0: 0a 20 20 70 75 74 73 20 24 6f 75 74 20 22 73 65 . puts $out "se
2cf0: 74 20 70 72 6f 67 20 5b 6c 69 73 74 20 24 3a 3a t prog [list $::
2d00: 70 72 6f 67 5d 22 0a 20 20 70 75 74 73 20 24 6f prog]". puts $o
2d10: 75 74 20 22 73 65 74 20 64 69 66 66 74 78 74 20 ut "set difftxt
2d20: 5c 31 37 33 22 0a 20 20 66 6f 72 65 61 63 68 20 \173". foreach
2d30: 65 20 24 3a 3a 64 69 66 66 74 78 74 20 7b 70 75 e $::difftxt {pu
2d40: 74 73 20 24 6f 75 74 20 5b 6c 69 73 74 20 24 65 ts $out [list $e
2d50: 5d 7d 0a 20 20 70 75 74 73 20 24 6f 75 74 20 22 ]}. puts $out "
2d60: 5c 31 37 35 22 0a 20 20 70 75 74 73 20 24 6f 75 \175". puts $ou
2d70: 74 20 22 65 76 61 6c 20 5c 24 70 72 6f 67 22 0a t "eval \$prog".
2d80: 20 20 63 6c 6f 73 65 20 24 6f 75 74 0a 7d 0a 70 close $out.}.p
2d90: 72 6f 63 20 69 6e 76 65 72 74 44 69 66 66 20 7b roc invertDiff {
2da0: 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 43 46 47 } {. global CFG
2db0: 0a 20 20 61 72 72 61 79 20 73 65 74 20 78 20 5b . array set x [
2dc0: 67 72 69 64 20 69 6e 66 6f 20 2e 74 78 74 41 5d grid info .txtA]
2dd0: 0a 20 20 69 66 20 7b 24 78 28 2d 63 6f 6c 75 6d . if {$x(-colum
2de0: 6e 29 3d 3d 31 7d 20 7b 0a 20 20 20 20 67 72 69 n)==1} {. gri
2df0: 64 20 63 6f 6e 66 69 67 20 2e 6c 6e 42 20 2d 63 d config .lnB -c
2e00: 6f 6c 75 6d 6e 20 30 0a 20 20 20 20 67 72 69 64 olumn 0. grid
2e10: 20 63 6f 6e 66 69 67 20 2e 74 78 74 42 20 2d 63 config .txtB -c
2e20: 6f 6c 75 6d 6e 20 31 0a 20 20 20 20 2e 74 78 74 olumn 1. .txt
2e30: 42 20 74 61 67 20 63 6f 6e 66 69 67 20 61 64 64 B tag config add
2e40: 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 24 43 46 -background $CF
2e50: 47 28 52 4d 5f 42 47 29 0a 20 20 20 20 67 72 69 G(RM_BG). gri
2e60: 64 20 63 6f 6e 66 69 67 20 2e 6c 6e 41 20 2d 63 d config .lnA -c
2e70: 6f 6c 75 6d 6e 20 33 0a 20 20 20 20 67 72 69 64 olumn 3. grid
2e80: 20 63 6f 6e 66 69 67 20 2e 74 78 74 41 20 2d 63 config .txtA -c
2e90: 6f 6c 75 6d 6e 20 34 0a 20 20 20 20 2e 74 78 74 olumn 4. .txt
2ea0: 41 20 74 61 67 20 63 6f 6e 66 69 67 20 72 6d 20 A tag config rm
2eb0: 2d 62 61 63 6b 67 72 6f 75 6e 64 20 24 43 46 47 -background $CFG
2ec0: 28 41 44 44 5f 42 47 29 0a 20 20 20 20 2e 62 62 (ADD_BG). .bb
2ed0: 2e 69 6e 76 65 72 74 20 63 6f 6e 66 69 67 20 2d .invert config -
2ee0: 74 65 78 74 20 55 6e 69 6e 76 65 72 74 0a 20 20 text Uninvert.
2ef0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 67 72 69 } else {. gri
2f00: 64 20 63 6f 6e 66 69 67 20 2e 6c 6e 41 20 2d 63 d config .lnA -c
2f10: 6f 6c 75 6d 6e 20 30 0a 20 20 20 20 67 72 69 64 olumn 0. grid
2f20: 20 63 6f 6e 66 69 67 20 2e 74 78 74 41 20 2d 63 config .txtA -c
2f30: 6f 6c 75 6d 6e 20 31 0a 20 20 20 20 2e 74 78 74 olumn 1. .txt
2f40: 41 20 74 61 67 20 63 6f 6e 66 69 67 20 72 6d 20 A tag config rm
2f50: 2d 62 61 63 6b 67 72 6f 75 6e 64 20 24 43 46 47 -background $CFG
2f60: 28 52 4d 5f 42 47 29 0a 20 20 20 20 67 72 69 64 (RM_BG). grid
2f70: 20 63 6f 6e 66 69 67 20 2e 6c 6e 42 20 2d 63 6f config .lnB -co
2f80: 6c 75 6d 6e 20 33 0a 20 20 20 20 67 72 69 64 20 lumn 3. grid
2f90: 63 6f 6e 66 69 67 20 2e 74 78 74 42 20 2d 63 6f config .txtB -co
2fa0: 6c 75 6d 6e 20 34 0a 20 20 20 20 2e 74 78 74 42 lumn 4. .txtB
2fb0: 20 74 61 67 20 63 6f 6e 66 69 67 20 61 64 64 20 tag config add
2fc0: 2d 62 61 63 6b 67 72 6f 75 6e 64 20 24 43 46 47 -background $CFG
2fd0: 28 41 44 44 5f 42 47 29 0a 20 20 20 20 2e 62 62 (ADD_BG). .bb
2fe0: 2e 69 6e 76 65 72 74 20 63 6f 6e 66 69 67 20 2d .invert config -
2ff0: 74 65 78 74 20 49 6e 76 65 72 74 0a 20 20 7d 0a text Invert. }.
3000: 20 20 2e 6d 6b 72 20 63 6f 6e 66 69 67 20 2d 73 .mkr config -s
3010: 74 61 74 65 20 6e 6f 72 6d 61 6c 0a 20 20 73 65 tate normal. se
3020: 74 20 63 6c 74 20 5b 2e 6d 6b 72 20 73 65 61 72 t clt [.mkr sear
3030: 63 68 20 2d 61 6c 6c 20 3c 20 31 2e 30 20 65 6e ch -all < 1.0 en
3040: 64 5d 0a 20 20 73 65 74 20 63 67 74 20 5b 2e 6d d]. set cgt [.m
3050: 6b 72 20 73 65 61 72 63 68 20 2d 61 6c 6c 20 3e kr search -all >
3060: 20 31 2e 30 20 65 6e 64 5d 0a 20 20 66 6f 72 65 1.0 end]. fore
3070: 61 63 68 20 63 20 24 63 6c 74 20 7b 2e 6d 6b 72 ach c $clt {.mkr
3080: 20 72 65 70 6c 61 63 65 20 24 63 20 22 24 63 20 replace $c "$c
3090: 2b 31 20 63 68 61 72 73 22 20 3e 7d 0a 20 20 66 +1 chars" >}. f
30a0: 6f 72 65 61 63 68 20 63 20 24 63 67 74 20 7b 2e oreach c $cgt {.
30b0: 6d 6b 72 20 72 65 70 6c 61 63 65 20 24 63 20 22 mkr replace $c "
30c0: 24 63 20 2b 31 20 63 68 61 72 73 22 20 3c 7d 0a $c +1 chars" <}.
30d0: 20 20 2e 6d 6b 72 20 63 6f 6e 66 69 67 20 2d 73 .mkr config -s
30e0: 74 61 74 65 20 64 69 73 61 62 6c 65 64 0a 7d 0a tate disabled.}.
30f0: 70 72 6f 63 20 73 65 61 72 63 68 4f 6e 4f 66 66 proc searchOnOff
3100: 20 7b 7d 20 7b 0a 20 20 69 66 20 7b 5b 69 6e 66 {} {. if {[inf
3110: 6f 20 65 78 69 73 74 73 20 3a 3a 73 65 61 72 63 o exists ::searc
3120: 68 5d 7d 20 7b 0a 20 20 20 20 75 6e 73 65 74 20 h]} {. unset
3130: 3a 3a 73 65 61 72 63 68 0a 20 20 20 20 2e 74 78 ::search. .tx
3140: 74 41 20 74 61 67 20 72 65 6d 6f 76 65 20 73 65 tA tag remove se
3150: 61 72 63 68 20 31 2e 30 20 65 6e 64 0a 20 20 20 arch 1.0 end.
3160: 20 2e 74 78 74 42 20 74 61 67 20 72 65 6d 6f 76 .txtB tag remov
3170: 65 20 73 65 61 72 63 68 20 31 2e 30 20 65 6e 64 e search 1.0 end
3180: 0a 20 20 20 20 70 61 63 6b 20 66 6f 72 67 65 74 . pack forget
3190: 20 2e 62 62 2e 73 66 72 61 6d 65 0a 20 20 20 20 .bb.sframe.
31a0: 66 6f 63 75 73 20 2e 0a 20 20 7d 20 65 6c 73 65 focus .. } else
31b0: 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 73 65 61 {. set ::sea
31c0: 72 63 68 20 2e 74 78 74 41 0a 20 20 20 20 69 66 rch .txtA. if
31d0: 20 7b 21 5b 77 69 6e 66 6f 20 65 78 69 73 74 73 {![winfo exists
31e0: 20 2e 62 62 2e 73 66 72 61 6d 65 5d 7d 20 7b 0a .bb.sframe]} {.
31f0: 20 20 20 20 20 20 66 72 61 6d 65 20 2e 62 62 2e frame .bb.
3200: 73 66 72 61 6d 65 0a 20 20 20 20 20 20 3a 3a 74 sframe. ::t
3210: 74 6b 3a 3a 65 6e 74 72 79 20 2e 62 62 2e 73 66 tk::entry .bb.sf
3220: 72 61 6d 65 2e 65 20 2d 77 69 64 74 68 20 31 30 rame.e -width 10
3230: 0a 20 20 20 20 20 20 70 61 63 6b 20 2e 62 62 2e . pack .bb.
3240: 73 66 72 61 6d 65 2e 65 20 2d 73 69 64 65 20 6c sframe.e -side l
3250: 65 66 74 20 2d 66 69 6c 6c 20 79 20 2d 65 78 70 eft -fill y -exp
3260: 61 6e 64 20 31 0a 20 20 20 20 20 20 62 69 6e 64 and 1. bind
3270: 20 2e 62 62 2e 73 66 72 61 6d 65 2e 65 20 3c 52 .bb.sframe.e <R
3280: 65 74 75 72 6e 3e 20 7b 73 65 61 72 63 68 4e 65 eturn> {searchNe
3290: 78 74 3b 20 62 72 65 61 6b 7d 0a 20 20 20 20 20 xt; break}.
32a0: 20 3a 3a 74 74 6b 3a 3a 62 75 74 74 6f 6e 20 2e ::ttk::button .
32b0: 62 62 2e 73 66 72 61 6d 65 2e 6e 78 20 2d 74 65 bb.sframe.nx -te
32c0: 78 74 20 5c 75 32 31 39 33 20 2d 77 69 64 74 68 xt \u2193 -width
32d0: 20 31 20 2d 63 6f 6d 6d 61 6e 64 20 73 65 61 72 1 -command sear
32e0: 63 68 4e 65 78 74 0a 20 20 20 20 20 20 3a 3a 74 chNext. ::t
32f0: 74 6b 3a 3a 62 75 74 74 6f 6e 20 2e 62 62 2e 73 tk::button .bb.s
3300: 66 72 61 6d 65 2e 70 76 20 2d 74 65 78 74 20 5c frame.pv -text \
3310: 75 32 31 39 31 20 2d 77 69 64 74 68 20 31 20 2d u2191 -width 1 -
3320: 63 6f 6d 6d 61 6e 64 20 73 65 61 72 63 68 50 72 command searchPr
3330: 65 76 0a 20 20 20 20 20 20 74 6b 5f 6f 70 74 69 ev. tk_opti
3340: 6f 6e 4d 65 6e 75 20 2e 62 62 2e 73 66 72 61 6d onMenu .bb.sfram
3350: 65 2e 74 79 70 20 3a 3a 73 65 61 72 63 68 5f 74 e.typ ::search_t
3360: 79 70 65 20 5c 0a 20 20 20 20 20 20 20 20 20 20 ype \.
3370: 20 45 78 61 63 74 20 7b 4e 6f 20 43 61 73 65 7d Exact {No Case}
3380: 20 7b 52 65 67 45 78 70 7d 20 7b 57 68 6f 6c 65 {RegExp} {Whole
3390: 20 57 6f 72 64 7d 0a 20 20 20 20 20 20 2e 62 62 Word}. .bb
33a0: 2e 73 66 72 61 6d 65 2e 74 79 70 20 63 6f 6e 66 .sframe.typ conf
33b0: 69 67 20 2d 77 69 64 74 68 20 31 30 0a 20 20 20 ig -width 10.
33c0: 20 20 20 73 65 74 20 3a 3a 73 65 61 72 63 68 5f set ::search_
33d0: 74 79 70 65 20 45 78 61 63 74 0a 20 20 20 20 20 type Exact.
33e0: 20 70 61 63 6b 20 2e 62 62 2e 73 66 72 61 6d 65 pack .bb.sframe
33f0: 2e 6e 78 20 2e 62 62 2e 73 66 72 61 6d 65 2e 70 .nx .bb.sframe.p
3400: 76 20 2e 62 62 2e 73 66 72 61 6d 65 2e 74 79 70 v .bb.sframe.typ
3410: 20 2d 73 69 64 65 20 6c 65 66 74 0a 20 20 20 20 -side left.
3420: 7d 0a 20 20 20 20 70 61 63 6b 20 2e 62 62 2e 73 }. pack .bb.s
3430: 66 72 61 6d 65 20 2d 73 69 64 65 20 6c 65 66 74 frame -side left
3440: 0a 20 20 20 20 61 66 74 65 72 20 69 64 6c 65 20 . after idle
3450: 7b 66 6f 63 75 73 20 2e 62 62 2e 73 66 72 61 6d {focus .bb.sfram
3460: 65 2e 65 7d 0a 20 20 7d 0a 7d 0a 70 72 6f 63 20 e.e}. }.}.proc
3470: 73 65 61 72 63 68 4e 65 78 74 20 7b 7d 20 7b 73 searchNext {} {s
3480: 65 61 72 63 68 53 74 65 70 20 2d 66 6f 72 77 61 earchStep -forwa
3490: 72 64 73 20 2b 31 20 31 2e 30 20 65 6e 64 7d 0a rds +1 1.0 end}.
34a0: 70 72 6f 63 20 73 65 61 72 63 68 50 72 65 76 20 proc searchPrev
34b0: 7b 7d 20 7b 73 65 61 72 63 68 53 74 65 70 20 2d {} {searchStep -
34c0: 62 61 63 6b 77 61 72 64 73 20 2d 31 20 65 6e 64 backwards -1 end
34d0: 20 31 2e 30 7d 0a 70 72 6f 63 20 73 65 61 72 63 1.0}.proc searc
34e0: 68 53 74 65 70 20 7b 64 69 72 65 63 74 69 6f 6e hStep {direction
34f0: 20 69 6e 63 72 20 73 74 61 72 74 20 73 74 6f 70 incr start stop
3500: 7d 20 7b 0a 20 20 73 65 74 20 70 61 74 74 65 72 } {. set patter
3510: 6e 20 5b 2e 62 62 2e 73 66 72 61 6d 65 2e 65 20 n [.bb.sframe.e
3520: 67 65 74 5d 0a 20 20 69 66 20 7b 24 70 61 74 74 get]. if {$patt
3530: 65 72 6e 3d 3d 22 22 7d 20 72 65 74 75 72 6e 0a ern==""} return.
3540: 20 20 73 65 74 20 63 6f 75 6e 74 20 30 0a 20 20 set count 0.
3550: 73 65 74 20 77 20 24 3a 3a 73 65 61 72 63 68 0a set w $::search.
3560: 20 20 69 66 20 7b 22 24 77 22 3d 3d 22 2e 74 78 if {"$w"==".tx
3570: 74 41 22 7d 20 7b 73 65 74 20 6f 74 68 65 72 20 tA"} {set other
3580: 2e 74 78 74 42 7d 20 7b 73 65 74 20 6f 74 68 65 .txtB} {set othe
3590: 72 20 2e 74 78 74 41 7d 0a 20 20 69 66 20 7b 5b r .txtA}. if {[
35a0: 6c 73 65 61 72 63 68 20 5b 24 77 20 6d 61 72 6b lsearch [$w mark
35b0: 20 6e 61 6d 65 73 5d 20 73 65 61 72 63 68 5d 3c names] search]<
35c0: 30 7d 20 7b 0a 20 20 20 20 24 77 20 6d 61 72 6b 0} {. $w mark
35d0: 20 73 65 74 20 73 65 61 72 63 68 20 24 73 74 61 set search $sta
35e0: 72 74 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 20 rt. }. switch
35f0: 24 3a 3a 73 65 61 72 63 68 5f 74 79 70 65 20 7b $::search_type {
3600: 0a 20 20 20 20 45 78 61 63 74 20 20 20 20 20 20 . Exact
3610: 20 20 7b 73 65 74 20 73 74 20 2d 65 78 61 63 74 {set st -exact
3620: 7d 0a 20 20 20 20 7b 4e 6f 20 43 61 73 65 7d 20 }. {No Case}
3630: 20 20 20 7b 73 65 74 20 73 74 20 2d 6e 6f 63 61 {set st -noca
3640: 73 65 7d 0a 20 20 20 20 7b 52 65 67 45 78 70 7d se}. {RegExp}
3650: 20 20 20 20 20 7b 73 65 74 20 73 74 20 2d 72 65 {set st -re
3660: 67 65 78 70 7d 0a 20 20 20 20 7b 57 68 6f 6c 65 gexp}. {Whole
3670: 20 57 6f 72 64 7d 20 7b 73 65 74 20 73 74 20 2d Word} {set st -
3680: 72 65 67 65 78 70 3b 20 73 65 74 20 70 61 74 74 regexp; set patt
3690: 65 72 6e 20 5c 5c 79 24 70 61 74 74 65 72 6e 5c ern \\y$pattern\
36a0: 5c 79 7d 0a 20 20 7d 0a 20 20 73 65 74 20 69 64 \y}. }. set id
36b0: 78 20 5b 24 77 20 73 65 61 72 63 68 20 2d 63 6f x [$w search -co
36c0: 75 6e 74 20 63 6f 75 6e 74 20 24 64 69 72 65 63 unt count $direc
36d0: 74 69 6f 6e 20 24 73 74 20 2d 2d 20 5c 0a 20 20 tion $st -- \.
36e0: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 74 $pat
36f0: 74 65 72 6e 20 22 73 65 61 72 63 68 20 24 69 6e tern "search $in
3700: 63 72 20 63 68 61 72 73 22 20 24 73 74 6f 70 5d cr chars" $stop]
3710: 0a 20 20 69 66 20 7b 22 24 69 64 78 22 3d 3d 22 . if {"$idx"=="
3720: 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 69 64 78 "} {. set idx
3730: 20 5b 24 6f 74 68 65 72 20 73 65 61 72 63 68 20 [$other search
3740: 2d 63 6f 75 6e 74 20 63 6f 75 6e 74 20 24 64 69 -count count $di
3750: 72 65 63 74 69 6f 6e 20 24 73 74 20 2d 2d 20 24 rection $st -- $
3760: 70 61 74 74 65 72 6e 20 24 73 74 61 72 74 20 24 pattern $start $
3770: 73 74 6f 70 5d 0a 20 20 20 20 69 66 20 7b 22 24 stop]. if {"$
3780: 69 64 78 22 21 3d 22 22 7d 20 7b 0a 20 20 20 20 idx"!=""} {.
3790: 20 20 73 65 74 20 74 68 69 73 20 24 77 0a 20 20 set this $w.
37a0: 20 20 20 20 73 65 74 20 77 20 24 6f 74 68 65 72 set w $other
37b0: 0a 20 20 20 20 20 20 73 65 74 20 6f 74 68 65 72 . set other
37c0: 20 24 74 68 69 73 0a 20 20 20 20 7d 20 65 6c 73 $this. } els
37d0: 65 20 7b 0a 20 20 20 20 20 20 73 65 74 20 69 64 e {. set id
37e0: 78 20 5b 24 77 20 73 65 61 72 63 68 20 2d 63 6f x [$w search -co
37f0: 75 6e 74 20 63 6f 75 6e 74 20 24 64 69 72 65 63 unt count $direc
3800: 74 69 6f 6e 20 24 73 74 20 2d 2d 20 24 70 61 74 tion $st -- $pat
3810: 74 65 72 6e 20 24 73 74 61 72 74 20 24 73 74 6f tern $start $sto
3820: 70 5d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 24 p]. }. }. $
3830: 77 20 74 61 67 20 72 65 6d 6f 76 65 20 73 65 61 w tag remove sea
3840: 72 63 68 20 31 2e 30 20 65 6e 64 0a 20 20 24 77 rch 1.0 end. $w
3850: 20 6d 61 72 6b 20 75 6e 73 65 74 20 73 65 61 72 mark unset sear
3860: 63 68 0a 20 20 24 6f 74 68 65 72 20 74 61 67 20 ch. $other tag
3870: 72 65 6d 6f 76 65 20 73 65 61 72 63 68 20 31 2e remove search 1.
3880: 30 20 65 6e 64 0a 20 20 24 6f 74 68 65 72 20 6d 0 end. $other m
3890: 61 72 6b 20 75 6e 73 65 74 20 73 65 61 72 63 68 ark unset search
38a0: 0a 20 20 69 66 20 7b 22 24 69 64 78 22 21 3d 22 . if {"$idx"!="
38b0: 22 7d 20 7b 0a 20 20 20 20 24 77 20 6d 61 72 6b "} {. $w mark
38c0: 20 73 65 74 20 73 65 61 72 63 68 20 24 69 64 78 set search $idx
38d0: 0a 20 20 20 20 24 77 20 79 76 69 65 77 20 2d 70 . $w yview -p
38e0: 69 63 6b 70 6c 61 63 65 20 24 69 64 78 0a 20 20 ickplace $idx.
38f0: 20 20 24 77 20 74 61 67 20 61 64 64 20 73 65 61 $w tag add sea
3900: 72 63 68 20 73 65 61 72 63 68 20 22 24 69 64 78 rch search "$idx
3910: 20 2b 24 63 6f 75 6e 74 20 63 68 61 72 73 22 0a +$count chars".
3920: 20 20 20 20 24 77 20 74 61 67 20 63 6f 6e 66 69 $w tag confi
3930: 67 20 73 65 61 72 63 68 20 2d 62 61 63 6b 67 72 g search -backgr
3940: 6f 75 6e 64 20 7b 23 66 63 63 30 30 30 7d 0a 20 ound {#fcc000}.
3950: 20 7d 0a 20 20 73 65 74 20 3a 3a 73 65 61 72 63 }. set ::searc
3960: 68 20 24 77 0a 7d 0a 3a 3a 74 74 6b 3a 3a 62 75 h $w.}.::ttk::bu
3970: 74 74 6f 6e 20 2e 62 62 2e 71 75 69 74 20 2d 74 tton .bb.quit -t
3980: 65 78 74 20 7b 51 75 69 74 7d 20 2d 63 6f 6d 6d ext {Quit} -comm
3990: 61 6e 64 20 65 78 69 74 0a 3a 3a 74 74 6b 3a 3a and exit.::ttk::
39a0: 62 75 74 74 6f 6e 20 2e 62 62 2e 69 6e 76 65 72 button .bb.inver
39b0: 74 20 2d 74 65 78 74 20 7b 49 6e 76 65 72 74 7d t -text {Invert}
39c0: 20 2d 63 6f 6d 6d 61 6e 64 20 69 6e 76 65 72 74 -command invert
39d0: 44 69 66 66 0a 3a 3a 74 74 6b 3a 3a 62 75 74 74 Diff.::ttk::butt
39e0: 6f 6e 20 2e 62 62 2e 73 61 76 65 20 2d 74 65 78 on .bb.save -tex
39f0: 74 20 7b 53 61 76 65 20 41 73 2e 2e 2e 7d 20 2d t {Save As...} -
3a00: 63 6f 6d 6d 61 6e 64 20 73 61 76 65 44 69 66 66 command saveDiff
3a10: 0a 3a 3a 74 74 6b 3a 3a 62 75 74 74 6f 6e 20 2e .::ttk::button .
3a20: 62 62 2e 73 65 61 72 63 68 20 2d 74 65 78 74 20 bb.search -text
3a30: 7b 53 65 61 72 63 68 7d 20 2d 63 6f 6d 6d 61 6e {Search} -comman
3a40: 64 20 73 65 61 72 63 68 4f 6e 4f 66 66 0a 70 61 d searchOnOff.pa
3a50: 63 6b 20 2e 62 62 2e 71 75 69 74 20 2e 62 62 2e ck .bb.quit .bb.
3a60: 69 6e 76 65 72 74 20 2d 73 69 64 65 20 6c 65 66 invert -side lef
3a70: 74 0a 69 66 20 7b 24 66 6f 73 73 69 6c 63 6d 64 t.if {$fossilcmd
3a80: 21 3d 22 22 7d 20 7b 70 61 63 6b 20 2e 62 62 2e !=""} {pack .bb.
3a90: 73 61 76 65 20 2d 73 69 64 65 20 6c 65 66 74 7d save -side left}
3aa0: 0a 70 61 63 6b 20 2e 62 62 2e 66 69 6c 65 73 20 .pack .bb.files
3ab0: 2e 62 62 2e 73 65 61 72 63 68 20 2d 73 69 64 65 .bb.search -side
3ac0: 20 6c 65 66 74 0a 67 72 69 64 20 72 6f 77 63 6f left.grid rowco
3ad0: 6e 66 69 67 75 72 65 20 2e 20 31 20 2d 77 65 69 nfigure . 1 -wei
3ae0: 67 68 74 20 31 0a 67 72 69 64 20 63 6f 6c 75 6d ght 1.grid colum
3af0: 6e 63 6f 6e 66 69 67 75 72 65 20 2e 20 31 20 2d nconfigure . 1 -
3b00: 77 65 69 67 68 74 20 31 0a 67 72 69 64 20 63 6f weight 1.grid co
3b10: 6c 75 6d 6e 63 6f 6e 66 69 67 75 72 65 20 2e 20 lumnconfigure .
3b20: 34 20 2d 77 65 69 67 68 74 20 31 0a 67 72 69 64 4 -weight 1.grid
3b30: 20 2e 62 62 20 2d 72 6f 77 20 30 20 2d 63 6f 6c .bb -row 0 -col
3b40: 75 6d 6e 73 70 61 6e 20 36 0a 65 76 61 6c 20 67 umnspan 6.eval g
3b50: 72 69 64 20 5b 63 6f 6c 73 5d 20 2d 72 6f 77 20 rid [cols] -row
3b60: 31 20 2d 73 74 69 63 6b 79 20 6e 73 65 77 0a 67 1 -sticky nsew.g
3b70: 72 69 64 20 2e 73 62 79 20 2d 72 6f 77 20 31 20 rid .sby -row 1
3b80: 2d 63 6f 6c 75 6d 6e 20 35 20 2d 73 74 69 63 6b -column 5 -stick
3b90: 79 20 6e 73 0a 67 72 69 64 20 2e 73 62 78 41 20 y ns.grid .sbxA
3ba0: 2d 72 6f 77 20 32 20 2d 63 6f 6c 75 6d 6e 73 70 -row 2 -columnsp
3bb0: 61 6e 20 32 20 2d 73 74 69 63 6b 79 20 65 77 0a an 2 -sticky ew.
3bc0: 67 72 69 64 20 2e 73 70 61 63 65 72 20 2d 72 6f grid .spacer -ro
3bd0: 77 20 32 20 2d 63 6f 6c 75 6d 6e 20 32 0a 67 72 w 2 -column 2.gr
3be0: 69 64 20 2e 73 62 78 42 20 2d 72 6f 77 20 32 20 id .sbxB -row 2
3bf0: 2d 63 6f 6c 75 6d 6e 20 33 20 2d 63 6f 6c 75 6d -column 3 -colum
3c00: 6e 73 70 61 6e 20 32 20 2d 73 74 69 63 6b 79 20 nspan 2 -sticky
3c10: 65 77 0a 0a 2e 73 70 61 63 65 72 20 63 6f 6e 66 ew...spacer conf
3c20: 69 67 20 2d 68 65 69 67 68 74 20 5b 77 69 6e 66 ig -height [winf
3c30: 6f 20 68 65 69 67 68 74 20 2e 73 62 78 41 5d 0a o height .sbxA].
3c40: 77 6d 20 64 65 69 63 6f 6e 69 66 79 20 2e 0a 7d wm deiconify ..}
3c50: 0a 65 76 61 6c 20 24 70 72 6f 67 0a .eval $prog.