Artifact
66a4d9db8e51bb608a8302ed2b3142857ae82da1c77b7bd97a215ab44e8f7f92 :
File
src/diff.tcl
— part of check-in
[86f0722e0c]
at
2021-09-06 01:22:56
on branch trunk
— The diff --tk option shows an error message on the display if it encounters
an input line that it does not understand. This means that
"cannot compute difference between binary files" errors, and similar, are
dealt with correctly.
(user:
drh
size: 14176)
[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 68 74 6d 6c 20 2d 79 20 2d diff --html -y -
0120: 69 20 2d 76 7d 0a 23 0a 23 20 54 68 69 73 20 68 i -v}.#.# This h
0130: 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 69 73 eader comment is
0140: 20 73 74 72 69 70 70 65 64 20 6f 66 66 20 62 79 stripped off by
0150: 20 74 68 65 20 22 6d 6b 62 75 69 6c 74 69 6e 2e the "mkbuiltin.
0160: 63 22 20 70 72 6f 67 72 61 6d 2e 0a 23 0a 73 65 c" program..#.se
0170: 74 20 70 72 6f 67 20 7b 0a 70 61 63 6b 61 67 65 t prog {.package
0180: 20 72 65 71 75 69 72 65 20 54 6b 0a 0a 61 72 72 require Tk..arr
0190: 61 79 20 73 65 74 20 43 46 47 20 7b 0a 20 20 54 ay set CFG {. T
01a0: 49 54 4c 45 20 20 20 20 20 20 7b 46 6f 73 73 69 ITLE {Fossi
01b0: 6c 20 44 69 66 66 7d 0a 20 20 4c 4e 5f 43 4f 4c l Diff}. LN_COL
01c0: 5f 42 47 20 20 23 64 64 64 64 64 64 0a 20 20 4c _BG #dddddd. L
01d0: 4e 5f 43 4f 4c 5f 46 47 20 20 23 34 34 34 34 34 N_COL_FG #44444
01e0: 34 0a 20 20 54 58 54 5f 43 4f 4c 5f 42 47 20 23 4. TXT_COL_BG #
01f0: 66 66 66 66 66 66 0a 20 20 54 58 54 5f 43 4f 4c ffffff. TXT_COL
0200: 5f 46 47 20 23 30 30 30 30 30 30 0a 20 20 4d 4b _FG #000000. MK
0210: 52 5f 43 4f 4c 5f 42 47 20 23 34 34 34 34 34 34 R_COL_BG #444444
0220: 0a 20 20 4d 4b 52 5f 43 4f 4c 5f 46 47 20 23 64 . MKR_COL_FG #d
0230: 64 64 64 64 64 0a 20 20 43 48 4e 47 5f 42 47 20 ddddd. CHNG_BG
0240: 20 20 20 23 64 30 64 30 66 66 0a 20 20 41 44 44 #d0d0ff. ADD
0250: 5f 42 47 20 20 20 20 20 23 63 30 66 66 63 30 0a _BG #c0ffc0.
0260: 20 20 52 4d 5f 42 47 20 20 20 20 20 20 23 66 66 RM_BG #ff
0270: 63 30 63 30 0a 20 20 48 52 5f 46 47 20 20 20 20 c0c0. HR_FG
0280: 20 20 23 34 34 34 34 34 34 0a 20 20 48 52 5f 50 #444444. HR_P
0290: 41 44 5f 54 4f 50 20 34 0a 20 20 48 52 5f 50 41 AD_TOP 4. HR_PA
02a0: 44 5f 42 54 4d 20 38 0a 20 20 46 4e 5f 42 47 20 D_BTM 8. FN_BG
02b0: 20 20 20 20 20 23 34 34 34 34 34 34 0a 20 20 46 #444444. F
02c0: 4e 5f 46 47 20 20 20 20 20 20 23 66 66 66 66 66 N_FG #fffff
02d0: 66 0a 20 20 46 4e 5f 50 41 44 20 20 20 20 20 35 f. FN_PAD 5
02e0: 0a 20 20 45 52 52 5f 46 47 20 20 20 20 20 23 65 . ERR_FG #e
02f0: 65 30 30 30 30 0a 20 20 50 41 44 58 20 20 20 20 e0000. PADX
0300: 20 20 20 35 0a 20 20 57 49 44 54 48 20 20 20 20 5. WIDTH
0310: 20 20 38 30 0a 20 20 48 45 49 47 48 54 20 20 20 80. HEIGHT
0320: 20 20 34 35 0a 20 20 4c 42 5f 48 45 49 47 48 54 45. LB_HEIGHT
0330: 20 20 32 35 0a 7d 0a 0a 69 66 20 7b 21 5b 6e 61 25.}..if {![na
0340: 6d 65 73 70 61 63 65 20 65 78 69 73 74 73 20 74 mespace exists t
0350: 74 6b 5d 7d 20 7b 0a 20 20 69 6e 74 65 72 70 20 tk]} {. interp
0360: 61 6c 69 61 73 20 7b 7d 20 3a 3a 74 74 6b 3a 3a alias {} ::ttk::
0370: 73 63 72 6f 6c 6c 62 61 72 20 7b 7d 20 3a 3a 73 scrollbar {} ::s
0380: 63 72 6f 6c 6c 62 61 72 0a 20 20 69 6e 74 65 72 crollbar. inter
0390: 70 20 61 6c 69 61 73 20 7b 7d 20 3a 3a 74 74 6b p alias {} ::ttk
03a0: 3a 3a 6d 65 6e 75 62 75 74 74 6f 6e 20 7b 7d 20 ::menubutton {}
03b0: 3a 3a 6d 65 6e 75 62 75 74 74 6f 6e 0a 7d 0a 0a ::menubutton.}..
03c0: 70 72 6f 63 20 64 65 68 74 6d 6c 20 7b 78 7d 20 proc dehtml {x}
03d0: 7b 0a 20 20 73 65 74 20 78 20 5b 72 65 67 73 75 {. set x [regsu
03e0: 62 20 2d 61 6c 6c 20 7b 3c 5b 5e 3e 5d 2a 3e 7d b -all {<[^>]*>}
03f0: 20 24 78 20 7b 7d 5d 0a 20 20 72 65 74 75 72 6e $x {}]. return
0400: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 26 61 [string map {&a
0410: 6d 70 3b 20 26 20 26 6c 74 3b 20 3c 20 26 67 74 mp; & < < >
0420: 3b 20 3e 20 26 23 33 39 3b 20 27 20 26 71 75 6f ; > ' ' &quo
0430: 74 3b 20 5c 22 7d 20 24 78 5d 0a 7d 0a 0a 70 72 t; \"} $x].}..pr
0440: 6f 63 20 63 6f 6c 73 20 7b 7d 20 7b 0a 20 20 72 oc cols {} {. r
0450: 65 74 75 72 6e 20 5b 6c 69 73 74 20 2e 6c 6e 41 eturn [list .lnA
0460: 20 2e 74 78 74 41 20 2e 6d 6b 72 20 2e 6c 6e 42 .txtA .mkr .lnB
0470: 20 2e 74 78 74 42 5d 0a 7d 0a 0a 70 72 6f 63 20 .txtB].}..proc
0480: 63 6f 6c 54 79 70 65 20 7b 63 7d 20 7b 0a 20 20 colType {c} {.
0490: 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5d 2b 7d 20 regexp {[a-z]+}
04a0: 24 63 20 74 79 70 65 0a 20 20 72 65 74 75 72 6e $c type. return
04b0: 20 24 74 79 70 65 0a 7d 0a 0a 70 72 6f 63 20 67 $type.}..proc g
04c0: 65 74 4c 69 6e 65 20 7b 64 69 66 66 74 78 74 20 etLine {difftxt
04d0: 4e 20 69 69 76 61 72 7d 20 7b 0a 20 20 75 70 76 N iivar} {. upv
04e0: 61 72 20 24 69 69 76 61 72 20 69 69 0a 20 20 69 ar $iivar ii. i
04f0: 66 20 7b 24 69 69 3e 3d 24 4e 7d 20 7b 72 65 74 f {$ii>=$N} {ret
0500: 75 72 6e 20 2d 31 7d 0a 20 20 73 65 74 20 78 20 urn -1}. set x
0510: 5b 6c 69 6e 64 65 78 20 24 64 69 66 66 74 78 74 [lindex $difftxt
0520: 20 24 69 69 5d 0a 20 20 69 6e 63 72 20 69 69 0a $ii]. incr ii.
0530: 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 0a 0a 70 return $x.}..p
0540: 72 6f 63 20 72 65 61 64 44 69 66 66 73 20 7b 66 roc readDiffs {f
0550: 6f 73 73 69 6c 63 6d 64 7d 20 7b 0a 20 20 67 6c ossilcmd} {. gl
0560: 6f 62 61 6c 20 64 69 66 66 74 78 74 0a 20 20 69 obal difftxt. i
0570: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists
0580: 20 64 69 66 66 74 78 74 5d 7d 20 7b 0a 20 20 20 difftxt]} {.
0590: 20 73 65 74 20 69 6e 20 5b 6f 70 65 6e 20 24 66 set in [open $f
05a0: 6f 73 73 69 6c 63 6d 64 20 72 5d 0a 20 20 20 20 ossilcmd r].
05b0: 66 63 6f 6e 66 69 67 75 72 65 20 24 69 6e 20 2d fconfigure $in -
05c0: 65 6e 63 6f 64 69 6e 67 20 75 74 66 2d 38 0a 20 encoding utf-8.
05d0: 20 20 20 73 65 74 20 64 69 66 66 74 78 74 20 5b set difftxt [
05e0: 73 70 6c 69 74 20 5b 72 65 61 64 20 24 69 6e 5d split [read $in]
05f0: 20 5c 6e 5d 0a 20 20 20 20 63 6c 6f 73 65 20 24 \n]. close $
0600: 69 6e 0a 20 20 7d 0a 20 20 73 65 74 20 4e 20 5b in. }. set N [
0610: 6c 6c 65 6e 67 74 68 20 24 64 69 66 66 74 78 74 llength $difftxt
0620: 5d 0a 20 20 73 65 74 20 69 69 20 30 0a 20 20 73 ]. set ii 0. s
0630: 65 74 20 6e 44 69 66 66 73 20 30 0a 20 20 73 65 et nDiffs 0. se
0640: 74 20 6e 31 20 30 0a 20 20 73 65 74 20 6e 32 20 t n1 0. set n2
0650: 30 20 20 0a 20 20 61 72 72 61 79 20 73 65 74 20 0 . array set
0660: 77 69 64 74 68 73 20 7b 74 78 74 20 33 20 6c 6e widths {txt 3 ln
0670: 20 33 20 6d 6b 72 20 31 7d 0a 20 20 77 68 69 6c 3 mkr 1}. whil
0680: 65 20 7b 5b 73 65 74 20 6c 69 6e 65 20 5b 67 65 e {[set line [ge
0690: 74 4c 69 6e 65 20 24 64 69 66 66 74 78 74 20 24 tLine $difftxt $
06a0: 4e 20 69 69 5d 5d 20 21 3d 20 2d 31 7d 20 7b 0a N ii]] != -1} {.
06b0: 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 5b 6c switch -- [l
06c0: 69 6e 64 65 78 20 24 6c 69 6e 65 20 30 5d 20 7b index $line 0] {
06d0: 0a 20 20 20 20 20 20 46 49 4c 45 20 7b 0a 20 20 . FILE {.
06e0: 20 20 20 20 20 20 69 6e 63 72 20 6e 44 69 66 66 incr nDiff
06f0: 73 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 s. foreac
0700: 68 20 77 78 20 5b 6c 69 73 74 20 5b 73 74 72 69 h wx [list [stri
0710: 6e 67 20 6c 65 6e 67 74 68 20 24 6e 31 5d 20 5b ng length $n1] [
0720: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e string length $n
0730: 32 5d 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 2]] {.
0740: 69 66 20 7b 24 77 78 3e 24 77 69 64 74 68 73 28 if {$wx>$widths(
0750: 6c 6e 29 7d 20 7b 73 65 74 20 77 69 64 74 68 73 ln)} {set widths
0760: 28 6c 6e 29 20 24 77 78 7d 0a 20 20 20 20 20 20 (ln) $wx}.
0770: 20 20 7d 0a 20 20 20 20 20 20 20 20 2e 6c 6e 41 }. .lnA
0780: 20 69 6e 73 65 72 74 20 65 6e 64 20 5c 6e 20 66 insert end \n f
0790: 6e 20 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e n \n -. .
07a0: 74 78 74 41 20 69 6e 73 65 72 74 20 65 6e 64 20 txtA insert end
07b0: 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d [lindex $line 1]
07c0: 5c 6e 20 66 6e 20 5c 6e 20 2d 0a 20 20 20 20 20 \n fn \n -.
07d0: 20 20 20 2e 6d 6b 72 20 69 6e 73 65 72 74 20 65 .mkr insert e
07e0: 6e 64 20 5c 6e 20 66 6e 20 5c 6e 20 2d 0a 20 20 nd \n fn \n -.
07f0: 20 20 20 20 20 20 2e 6c 6e 42 20 69 6e 73 65 72 .lnB inser
0800: 74 20 65 6e 64 20 5c 6e 20 66 6e 20 5c 6e 20 2d t end \n fn \n -
0810: 0a 20 20 20 20 20 20 20 20 2e 74 78 74 42 20 69 . .txtB i
0820: 6e 73 65 72 74 20 65 6e 64 20 5b 6c 69 6e 64 65 nsert end [linde
0830: 78 20 24 6c 69 6e 65 20 32 5d 5c 6e 20 66 6e 20 x $line 2]\n fn
0840: 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 77 66 \n -. .wf
0850: 69 6c 65 73 2e 6c 62 20 69 6e 73 65 72 74 20 65 iles.lb insert e
0860: 6e 64 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 nd [lindex $line
0870: 20 32 5d 0a 20 20 20 20 20 20 20 20 73 65 74 20 2]. set
0880: 6e 31 20 30 0a 20 20 20 20 20 20 20 20 73 65 74 n1 0. set
0890: 20 6e 32 20 30 0a 20 20 20 20 20 20 7d 0a 20 20 n2 0. }.
08a0: 20 20 20 20 53 4b 49 50 20 7b 0a 20 20 20 20 20 SKIP {.
08b0: 20 20 20 73 65 74 20 6e 20 5b 6c 69 6e 64 65 78 set n [lindex
08c0: 20 24 6c 69 6e 65 20 31 5d 0a 20 20 20 20 20 20 $line 1].
08d0: 20 20 69 6e 63 72 20 6e 31 20 24 6e 0a 20 20 20 incr n1 $n.
08e0: 20 20 20 20 20 69 6e 63 72 20 6e 32 20 24 6e 0a incr n2 $n.
08f0: 20 20 20 20 20 20 20 20 2e 6c 6e 41 20 69 6e 73 .lnA ins
0900: 65 72 74 20 65 6e 64 20 2e 2e 2e 5c 6e 20 68 72 ert end ...\n hr
0910: 6c 6e 0a 20 20 20 20 20 20 20 20 2e 74 78 74 41 ln. .txtA
0920: 20 69 6e 73 65 72 74 20 65 6e 64 20 5b 73 74 72 insert end [str
0930: 69 6e 67 20 72 65 70 65 61 74 20 2e 20 33 30 5d ing repeat . 30]
0940: 5c 6e 20 68 72 74 78 74 0a 20 20 20 20 20 20 20 \n hrtxt.
0950: 20 2e 6d 6b 72 20 69 6e 73 65 72 74 20 65 6e 64 .mkr insert end
0960: 20 5c 6e 20 68 72 6c 6e 0a 20 20 20 20 20 20 20 \n hrln.
0970: 20 2e 6c 6e 42 20 69 6e 73 65 72 74 20 65 6e 64 .lnB insert end
0980: 20 2e 2e 2e 5c 6e 20 68 72 6c 6e 0a 20 20 20 20 ...\n hrln.
0990: 20 20 20 20 2e 74 78 74 42 20 69 6e 73 65 72 74 .txtB insert
09a0: 20 65 6e 64 20 5b 73 74 72 69 6e 67 20 72 65 70 end [string rep
09b0: 65 61 74 20 2e 20 33 30 5d 5c 6e 20 68 72 74 78 eat . 30]\n hrtx
09c0: 74 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 t. }.
09d0: 43 4f 4d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 COM {. se
09e0: 74 20 78 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e t x [lindex $lin
09f0: 65 20 31 5d 0a 20 20 20 20 20 20 20 20 69 6e 63 e 1]. inc
0a00: 72 20 6e 31 0a 20 20 20 20 20 20 20 20 69 6e 63 r n1. inc
0a10: 72 20 6e 32 0a 20 20 20 20 20 20 20 20 2e 6c 6e r n2. .ln
0a20: 41 20 69 6e 73 65 72 74 20 65 6e 64 20 24 6e 31 A insert end $n1
0a30: 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 74 78 \n -. .tx
0a40: 74 41 20 69 6e 73 65 72 74 20 65 6e 64 20 24 78 tA insert end $x
0a50: 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 6d 6b \n -. .mk
0a60: 72 20 69 6e 73 65 72 74 20 65 6e 64 20 5c 6e 20 r insert end \n
0a70: 2d 0a 20 20 20 20 20 20 20 20 2e 6c 6e 42 20 69 -. .lnB i
0a80: 6e 73 65 72 74 20 65 6e 64 20 24 6e 32 5c 6e 20 nsert end $n2\n
0a90: 2d 0a 20 20 20 20 20 20 20 20 2e 74 78 74 42 20 -. .txtB
0aa0: 69 6e 73 65 72 74 20 65 6e 64 20 24 78 5c 6e 20 insert end $x\n
0ab0: 2d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 -. }.
0ac0: 49 4e 53 20 7b 0a 20 20 20 20 20 20 20 20 73 65 INS {. se
0ad0: 74 20 78 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e t x [lindex $lin
0ae0: 65 20 31 5d 0a 20 20 20 20 20 20 20 20 69 6e 63 e 1]. inc
0af0: 72 20 6e 32 0a 20 20 20 20 20 20 20 20 2e 6c 6e r n2. .ln
0b00: 41 20 69 6e 73 65 72 74 20 65 6e 64 20 5c 6e 20 A insert end \n
0b10: 2d 0a 20 20 20 20 20 20 20 20 2e 74 78 74 41 20 -. .txtA
0b20: 69 6e 73 65 72 74 20 65 6e 64 20 5c 6e 20 2d 0a insert end \n -.
0b30: 20 20 20 20 20 20 20 20 2e 6d 6b 72 20 69 6e 73 .mkr ins
0b40: 65 72 74 20 65 6e 64 20 3e 5c 6e 20 2d 0a 20 20 ert end >\n -.
0b50: 20 20 20 20 20 20 2e 6c 6e 42 20 69 6e 73 65 72 .lnB inser
0b60: 74 20 65 6e 64 20 24 6e 32 5c 6e 20 2d 0a 20 20 t end $n2\n -.
0b70: 20 20 20 20 20 20 2e 74 78 74 42 20 69 6e 73 65 .txtB inse
0b80: 72 74 20 65 6e 64 20 24 78 20 61 64 64 20 5c 6e rt end $x add \n
0b90: 20 2d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 -. }.
0ba0: 20 44 45 4c 20 7b 0a 20 20 20 20 20 20 20 20 73 DEL {. s
0bb0: 65 74 20 78 20 5b 6c 69 6e 64 65 78 20 24 6c 69 et x [lindex $li
0bc0: 6e 65 20 31 5d 0a 20 20 20 20 20 20 20 20 69 6e ne 1]. in
0bd0: 63 72 20 6e 31 0a 20 20 20 20 20 20 20 20 2e 6c cr n1. .l
0be0: 6e 41 20 69 6e 73 65 72 74 20 65 6e 64 20 24 6e nA insert end $n
0bf0: 31 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 74 1\n -. .t
0c00: 78 74 41 20 69 6e 73 65 72 74 20 65 6e 64 20 24 xtA insert end $
0c10: 78 20 72 6d 20 5c 6e 20 2d 0a 20 20 20 20 20 20 x rm \n -.
0c20: 20 20 2e 6d 6b 72 20 69 6e 73 65 72 74 20 65 6e .mkr insert en
0c30: 64 20 3c 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 d <\n -.
0c40: 2e 6c 6e 42 20 69 6e 73 65 72 74 20 65 6e 64 20 .lnB insert end
0c50: 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 74 78 \n -. .tx
0c60: 74 42 20 69 6e 73 65 72 74 20 65 6e 64 20 5c 6e tB insert end \n
0c70: 20 2d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 -. }.
0c80: 20 45 44 49 54 20 7b 0a 20 20 20 20 20 20 20 20 EDIT {.
0c90: 69 6e 63 72 20 6e 31 0a 20 20 20 20 20 20 20 20 incr n1.
0ca0: 69 6e 63 72 20 6e 32 0a 20 20 20 20 20 20 20 20 incr n2.
0cb0: 2e 6c 6e 41 20 69 6e 73 65 72 74 20 65 6e 64 20 .lnA insert end
0cc0: 24 6e 31 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 $n1\n -.
0cd0: 2e 6c 6e 42 20 69 6e 73 65 72 74 20 65 6e 64 20 .lnB insert end
0ce0: 24 6e 32 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 $n2\n -.
0cf0: 2e 6d 6b 72 20 69 6e 73 65 72 74 20 65 6e 64 20 .mkr insert end
0d00: 7c 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 73 65 |\n -. se
0d10: 74 20 6e 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6c t nn [llength $l
0d20: 69 6e 65 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 ine]. for
0d30: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 24 {set i 1} {$i<$
0d40: 6e 6e 7d 20 7b 69 6e 63 72 20 69 20 33 7d 20 7b nn} {incr i 3} {
0d50: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 78 . set x
0d60: 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 20 24 [lindex $line $
0d70: 69 5d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 i]. if
0d80: 7b 24 78 20 6e 65 20 22 22 7d 20 7b 0a 20 20 20 {$x ne ""} {.
0d90: 20 20 20 20 20 20 20 20 20 2e 74 78 74 41 20 69 .txtA i
0da0: 6e 73 65 72 74 20 65 6e 64 20 24 78 20 2d 0a 20 nsert end $x -.
0db0: 20 20 20 20 20 20 20 20 20 20 20 2e 74 78 74 42 .txtB
0dc0: 20 69 6e 73 65 72 74 20 65 6e 64 20 24 78 20 2d insert end $x -
0dd0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 . }.
0de0: 20 20 20 20 20 20 20 69 66 20 7b 24 69 2b 32 3c if {$i+2<
0df0: 24 6e 6e 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 $nn} {.
0e00: 20 20 20 73 65 74 20 78 31 20 5b 6c 69 6e 64 65 set x1 [linde
0e10: 78 20 24 6c 69 6e 65 20 5b 65 78 70 72 20 7b 24 x $line [expr {$
0e20: 69 2b 31 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 i+1}]].
0e30: 20 20 20 73 65 74 20 78 32 20 5b 6c 69 6e 64 65 set x2 [linde
0e40: 78 20 24 6c 69 6e 65 20 5b 65 78 70 72 20 7b 24 x $line [expr {$
0e50: 69 2b 32 7d 5d 5d 0a 20 20 20 20 20 20 20 20 20 i+2}]].
0e60: 20 20 20 69 66 20 7b 22 24 78 31 22 20 65 71 20 if {"$x1" eq
0e70: 22 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 ""} {.
0e80: 20 20 20 20 2e 74 78 74 42 20 69 6e 73 65 72 74 .txtB insert
0e90: 20 65 6e 64 20 24 78 32 20 61 64 64 0a 20 20 20 end $x2 add.
0ea0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei
0eb0: 66 20 7b 22 24 78 32 22 20 65 71 20 22 22 7d 20 f {"$x2" eq ""}
0ec0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
0ed0: 2e 74 78 74 41 20 69 6e 73 65 72 74 20 65 6e 64 .txtA insert end
0ee0: 20 24 78 31 20 72 6d 0a 20 20 20 20 20 20 20 20 $x1 rm.
0ef0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 } else {.
0f00: 20 20 20 20 20 20 20 20 20 20 20 2e 74 78 74 41 .txtA
0f10: 20 69 6e 73 65 72 74 20 65 6e 64 20 24 78 31 20 insert end $x1
0f20: 63 68 6e 67 0a 20 20 20 20 20 20 20 20 20 20 20 chng.
0f30: 20 20 20 2e 74 78 74 42 20 69 6e 73 65 72 74 20 .txtB insert
0f40: 65 6e 64 20 24 78 32 20 63 68 6e 67 0a 20 20 20 end $x2 chng.
0f50: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 }.
0f60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d }. }
0f70: 0a 20 20 20 20 20 20 20 20 2e 74 78 74 41 20 69 . .txtA i
0f80: 6e 73 65 72 74 20 65 6e 64 20 5c 6e 20 2d 0a 20 nsert end \n -.
0f90: 20 20 20 20 20 20 20 2e 74 78 74 42 20 69 6e 73 .txtB ins
0fa0: 65 72 74 20 65 6e 64 20 5c 6e 20 2d 0a 20 20 20 ert end \n -.
0fb0: 20 20 20 7d 0a 20 20 20 20 20 20 22 22 20 7b 0a }. "" {.
0fc0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach
0fd0: 77 78 20 5b 6c 69 73 74 20 5b 73 74 72 69 6e 67 wx [list [string
0fe0: 20 6c 65 6e 67 74 68 20 24 6e 31 5d 20 5b 73 74 length $n1] [st
0ff0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 32 5d ring length $n2]
1000: 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 ] {. if
1010: 20 7b 24 77 78 3e 24 77 69 64 74 68 73 28 6c 6e {$wx>$widths(ln
1020: 29 7d 20 7b 73 65 74 20 77 69 64 74 68 73 28 6c )} {set widths(l
1030: 6e 29 20 24 77 78 7d 0a 20 20 20 20 20 20 20 20 n) $wx}.
1040: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }. }.
1050: 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 default {.
1060: 20 20 2e 6c 6e 41 20 69 6e 73 65 72 74 20 65 6e .lnA insert en
1070: 64 20 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e d \n -. .
1080: 74 78 74 41 20 69 6e 73 65 72 74 20 65 6e 64 20 txtA insert end
1090: 24 6c 69 6e 65 5c 6e 20 65 72 72 0a 20 20 20 20 $line\n err.
10a0: 20 20 20 20 2e 6d 6b 72 20 69 6e 73 65 72 74 20 .mkr insert
10b0: 65 6e 64 20 5c 6e 20 2d 0a 20 20 20 20 20 20 20 end \n -.
10c0: 20 2e 6c 6e 42 20 69 6e 73 65 72 74 20 65 6e 64 .lnB insert end
10d0: 20 5c 6e 20 2d 0a 20 20 20 20 20 20 20 20 2e 74 \n -. .t
10e0: 78 74 42 20 69 6e 73 65 72 74 20 65 6e 64 20 24 xtB insert end $
10f0: 6c 69 6e 65 5c 6e 20 65 72 72 0a 20 20 20 20 20 line\n err.
1100: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 }. }. }..
1110: 66 6f 72 65 61 63 68 20 63 20 5b 63 6f 6c 73 5d foreach c [cols]
1120: 20 7b 0a 20 20 20 20 73 65 74 20 74 79 70 65 20 {. set type
1130: 5b 63 6f 6c 54 79 70 65 20 24 63 5d 0a 20 20 20 [colType $c].
1140: 20 69 66 20 7b 24 74 79 70 65 20 6e 65 20 22 74 if {$type ne "t
1150: 78 74 22 7d 20 7b 0a 20 20 20 20 20 20 24 63 20 xt"} {. $c
1160: 63 6f 6e 66 69 67 20 2d 77 69 64 74 68 20 24 77 config -width $w
1170: 69 64 74 68 73 28 24 74 79 70 65 29 0a 20 20 20 idths($type).
1180: 20 7d 0a 20 20 20 20 24 63 20 63 6f 6e 66 69 67 }. $c config
1190: 20 2d 73 74 61 74 65 20 64 69 73 61 62 6c 65 64 -state disabled
11a0: 0a 20 20 7d 0a 20 20 69 66 20 7b 24 6e 44 69 66 . }. if {$nDif
11b0: 66 73 20 3c 3d 20 5b 2e 77 66 69 6c 65 73 2e 6c fs <= [.wfiles.l
11c0: 62 20 63 67 65 74 20 2d 68 65 69 67 68 74 5d 7d b cget -height]}
11d0: 20 7b 0a 20 20 20 20 2e 77 66 69 6c 65 73 2e 6c {. .wfiles.l
11e0: 62 20 63 6f 6e 66 69 67 20 2d 68 65 69 67 68 74 b config -height
11f0: 20 24 6e 44 69 66 66 73 0a 20 20 20 20 67 72 69 $nDiffs. gri
1200: 64 20 72 65 6d 6f 76 65 20 2e 77 66 69 6c 65 73 d remove .wfiles
1210: 2e 73 62 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 .sb. }.. retur
1220: 6e 20 24 6e 44 69 66 66 73 0a 7d 0a 0a 70 72 6f n $nDiffs.}..pro
1230: 63 20 76 69 65 77 44 69 66 66 20 7b 69 64 78 7d c viewDiff {idx}
1240: 20 7b 0a 20 20 2e 74 78 74 41 20 79 76 69 65 77 {. .txtA yview
1250: 20 24 69 64 78 0a 20 20 2e 74 78 74 41 20 78 76 $idx. .txtA xv
1260: 69 65 77 20 6d 6f 76 65 74 6f 20 30 0a 7d 0a 0a iew moveto 0.}..
1270: 70 72 6f 63 20 63 79 63 6c 65 44 69 66 66 73 20 proc cycleDiffs
1280: 7b 7b 72 65 76 65 72 73 65 20 30 7d 7d 20 7b 0a {{reverse 0}} {.
1290: 20 20 69 66 20 7b 24 72 65 76 65 72 73 65 7d 20 if {$reverse}
12a0: 7b 0a 20 20 20 20 73 65 74 20 72 61 6e 67 65 20 {. set range
12b0: 5b 2e 74 78 74 41 20 74 61 67 20 70 72 65 76 72 [.txtA tag prevr
12c0: 61 6e 67 65 20 66 6e 20 40 30 2c 30 20 31 2e 30 ange fn @0,0 1.0
12d0: 5d 0a 20 20 20 20 69 66 20 7b 24 72 61 6e 67 65 ]. if {$range
12e0: 20 65 71 20 22 22 7d 20 7b 0a 20 20 20 20 20 20 eq ""} {.
12f0: 76 69 65 77 44 69 66 66 20 7b 66 6e 2e 6c 61 73 viewDiff {fn.las
1300: 74 20 2d 31 63 7d 0a 20 20 20 20 7d 20 65 6c 73 t -1c}. } els
1310: 65 20 7b 0a 20 20 20 20 20 20 76 69 65 77 44 69 e {. viewDi
1320: 66 66 20 5b 6c 69 6e 64 65 78 20 24 72 61 6e 67 ff [lindex $rang
1330: 65 20 30 5d 0a 20 20 20 20 7d 0a 20 20 7d 20 65 e 0]. }. } e
1340: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 72 61 lse {. set ra
1350: 6e 67 65 20 5b 2e 74 78 74 41 20 74 61 67 20 6e nge [.txtA tag n
1360: 65 78 74 72 61 6e 67 65 20 66 6e 20 7b 40 30 2c extrange fn {@0,
1370: 30 20 2b 31 63 7d 20 65 6e 64 5d 0a 20 20 20 20 0 +1c} end].
1380: 69 66 20 7b 24 72 61 6e 67 65 20 65 71 20 22 22 if {$range eq ""
1390: 20 7c 7c 20 5b 6c 69 6e 64 65 78 20 5b 2e 74 78 || [lindex [.tx
13a0: 74 41 20 79 76 69 65 77 5d 20 31 5d 20 3d 3d 20 tA yview] 1] ==
13b0: 31 7d 20 7b 0a 20 20 20 20 20 20 76 69 65 77 44 1} {. viewD
13c0: 69 66 66 20 66 6e 2e 66 69 72 73 74 0a 20 20 20 iff fn.first.
13d0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 } else {.
13e0: 76 69 65 77 44 69 66 66 20 5b 6c 69 6e 64 65 78 viewDiff [lindex
13f0: 20 24 72 61 6e 67 65 20 30 5d 0a 20 20 20 20 7d $range 0]. }
1400: 0a 20 20 7d 0a 7d 0a 0a 70 72 6f 63 20 78 76 69 . }.}..proc xvi
1410: 73 20 7b 63 6f 6c 7d 20 7b 0a 20 20 73 65 74 20 s {col} {. set
1420: 76 69 65 77 20 5b 24 63 6f 6c 20 78 76 69 65 77 view [$col xview
1430: 5d 0a 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 ]. return [expr
1440: 20 7b 5b 6c 69 6e 64 65 78 20 24 76 69 65 77 20 {[lindex $view
1450: 31 5d 2d 5b 6c 69 6e 64 65 78 20 24 76 69 65 77 1]-[lindex $view
1460: 20 30 5d 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 73 63 0]}].}..proc sc
1470: 72 6f 6c 6c 2d 78 20 7b 61 72 67 73 7d 20 7b 0a roll-x {args} {.
1480: 20 20 73 65 74 20 63 20 2e 74 78 74 5b 65 78 70 set c .txt[exp
1490: 72 20 7b 5b 78 76 69 73 20 2e 74 78 74 41 5d 20 r {[xvis .txtA]
14a0: 3c 20 5b 78 76 69 73 20 2e 74 78 74 42 5d 20 3f < [xvis .txtB] ?
14b0: 20 22 41 22 20 3a 20 22 42 22 7d 5d 0a 20 20 65 "A" : "B"}]. e
14c0: 76 61 6c 20 24 63 20 78 76 69 65 77 20 24 61 72 val $c xview $ar
14d0: 67 73 0a 7d 0a 0a 69 6e 74 65 72 70 20 61 6c 69 gs.}..interp ali
14e0: 61 73 20 7b 7d 20 73 63 72 6f 6c 6c 2d 79 20 7b as {} scroll-y {
14f0: 7d 20 2e 74 78 74 41 20 79 76 69 65 77 0a 0a 70 } .txtA yview..p
1500: 72 6f 63 20 6e 6f 6f 70 20 7b 61 72 67 73 7d 20 roc noop {args}
1510: 7b 7d 0a 0a 70 72 6f 63 20 65 6e 61 62 6c 65 53 {}..proc enableS
1520: 79 6e 63 20 7b 61 78 69 73 7d 20 7b 0a 20 20 75 ync {axis} {. u
1530: 70 64 61 74 65 20 69 64 6c 65 74 61 73 6b 73 0a pdate idletasks.
1540: 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b interp alias {
1550: 7d 20 73 79 6e 63 2d 24 61 78 69 73 20 7b 7d 0a } sync-$axis {}.
1560: 20 20 72 65 6e 61 6d 65 20 5f 73 79 6e 63 2d 24 rename _sync-$
1570: 61 78 69 73 20 73 79 6e 63 2d 24 61 78 69 73 0a axis sync-$axis.
1580: 7d 0a 0a 70 72 6f 63 20 64 69 73 61 62 6c 65 53 }..proc disableS
1590: 79 6e 63 20 7b 61 78 69 73 7d 20 7b 0a 20 20 72 ync {axis} {. r
15a0: 65 6e 61 6d 65 20 73 79 6e 63 2d 24 61 78 69 73 ename sync-$axis
15b0: 20 5f 73 79 6e 63 2d 24 61 78 69 73 0a 20 20 69 _sync-$axis. i
15c0: 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 73 nterp alias {} s
15d0: 79 6e 63 2d 24 61 78 69 73 20 7b 7d 20 6e 6f 6f ync-$axis {} noo
15e0: 70 0a 7d 0a 0a 70 72 6f 63 20 73 79 6e 63 2d 78 p.}..proc sync-x
15f0: 20 7b 63 6f 6c 20 66 69 72 73 74 20 6c 61 73 74 {col first last
1600: 7d 20 7b 0a 20 20 64 69 73 61 62 6c 65 53 79 6e } {. disableSyn
1610: 63 20 78 0a 20 20 24 63 6f 6c 20 78 76 69 65 77 c x. $col xview
1620: 20 6d 6f 76 65 74 6f 20 5b 65 78 70 72 20 7b 24 moveto [expr {$
1630: 66 69 72 73 74 2a 5b 78 76 69 73 20 24 63 6f 6c first*[xvis $col
1640: 5d 2f 28 24 6c 61 73 74 2d 24 66 69 72 73 74 29 ]/($last-$first)
1650: 7d 5d 0a 20 20 66 6f 72 65 61 63 68 20 73 69 64 }]. foreach sid
1660: 65 20 7b 41 20 42 7d 20 7b 0a 20 20 20 20 73 65 e {A B} {. se
1670: 74 20 73 62 20 2e 73 62 78 24 73 69 64 65 0a 20 t sb .sbx$side.
1680: 20 20 20 73 65 74 20 78 76 69 65 77 20 5b 2e 74 set xview [.t
1690: 78 74 24 73 69 64 65 20 78 76 69 65 77 5d 0a 20 xt$side xview].
16a0: 20 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24 if {[lindex $
16b0: 78 76 69 65 77 20 30 5d 20 3e 20 30 20 7c 7c 20 xview 0] > 0 ||
16c0: 5b 6c 69 6e 64 65 78 20 24 78 76 69 65 77 20 31 [lindex $xview 1
16d0: 5d 20 3c 20 31 7d 20 7b 0a 20 20 20 20 20 20 67 ] < 1} {. g
16e0: 72 69 64 20 24 73 62 0a 20 20 20 20 20 20 65 76 rid $sb. ev
16f0: 61 6c 20 24 73 62 20 73 65 74 20 24 78 76 69 65 al $sb set $xvie
1700: 77 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 w. } else {.
1710: 20 20 20 20 20 67 72 69 64 20 72 65 6d 6f 76 65 grid remove
1720: 20 24 73 62 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 $sb. }. }.
1730: 20 65 6e 61 62 6c 65 53 79 6e 63 20 78 0a 7d 0a enableSync x.}.
1740: 0a 70 72 6f 63 20 73 79 6e 63 2d 79 20 7b 66 69 .proc sync-y {fi
1750: 72 73 74 20 6c 61 73 74 7d 20 7b 0a 20 20 64 69 rst last} {. di
1760: 73 61 62 6c 65 53 79 6e 63 20 79 0a 20 20 66 6f sableSync y. fo
1770: 72 65 61 63 68 20 63 20 5b 63 6f 6c 73 5d 20 7b reach c [cols] {
1780: 0a 20 20 20 20 24 63 20 79 76 69 65 77 20 6d 6f . $c yview mo
1790: 76 65 74 6f 20 24 66 69 72 73 74 0a 20 20 7d 0a veto $first. }.
17a0: 20 20 69 66 20 7b 24 66 69 72 73 74 20 3e 20 30 if {$first > 0
17b0: 20 7c 7c 20 24 6c 61 73 74 20 3c 20 31 7d 20 7b || $last < 1} {
17c0: 0a 20 20 20 20 67 72 69 64 20 2e 73 62 79 0a 20 . grid .sby.
17d0: 20 20 20 2e 73 62 79 20 73 65 74 20 24 66 69 72 .sby set $fir
17e0: 73 74 20 24 6c 61 73 74 0a 20 20 7d 20 65 6c 73 st $last. } els
17f0: 65 20 7b 0a 20 20 20 20 67 72 69 64 20 72 65 6d e {. grid rem
1800: 6f 76 65 20 2e 73 62 79 0a 20 20 7d 0a 20 20 65 ove .sby. }. e
1810: 6e 61 62 6c 65 53 79 6e 63 20 79 0a 7d 0a 0a 77 nableSync y.}..w
1820: 6d 20 77 69 74 68 64 72 61 77 20 2e 0a 77 6d 20 m withdraw ..wm
1830: 74 69 74 6c 65 20 2e 20 24 43 46 47 28 54 49 54 title . $CFG(TIT
1840: 4c 45 29 0a 77 6d 20 69 63 6f 6e 6e 61 6d 65 20 LE).wm iconname
1850: 2e 20 24 43 46 47 28 54 49 54 4c 45 29 0a 23 20 . $CFG(TITLE).#
1860: 4b 65 79 73 74 72 6f 6b 65 20 62 69 6e 64 69 6e Keystroke bindin
1870: 67 73 20 66 6f 72 20 6f 6e 20 74 68 65 20 74 6f gs for on the to
1880: 70 2d 6c 65 76 65 6c 20 77 69 6e 64 6f 77 20 66 p-level window f
1890: 6f 72 20 6e 61 76 69 67 61 74 69 6f 6e 20 61 6e or navigation an
18a0: 64 0a 23 20 63 6f 6e 74 72 6f 6c 20 61 6c 73 6f d.# control also
18b0: 20 66 69 72 65 20 77 68 65 6e 20 74 68 6f 73 65 fire when those
18c0: 20 73 61 6d 65 20 6b 65 79 73 74 72 6f 6b 65 73 same keystrokes
18d0: 20 61 72 65 20 70 72 65 73 73 65 64 20 69 6e 20 are pressed in
18e0: 74 68 65 0a 23 20 53 65 61 72 63 68 20 65 6e 74 the.# Search ent
18f0: 72 79 20 62 6f 78 2e 20 20 44 69 73 61 62 6c 65 ry box. Disable
1900: 20 74 68 65 6d 2c 20 74 6f 20 70 72 65 76 65 6e them, to preven
1910: 74 20 74 68 65 20 64 69 66 66 20 73 63 72 65 65 t the diff scree
1920: 6e 20 66 72 6f 6d 0a 23 20 64 69 73 61 70 70 65 n from.# disappe
1930: 61 72 69 6e 67 20 61 62 72 75 70 74 6c 79 20 61 aring abruptly a
1940: 6e 64 20 75 6e 65 78 70 65 63 74 65 64 6c 79 20 nd unexpectedly
1950: 77 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20 66 when searching f
1960: 6f 72 20 22 71 22 2e 0a 23 0a 62 69 6e 64 20 2e or "q"..#.bind .
1970: 20 3c 43 6f 6e 74 72 6f 6c 2d 71 3e 20 65 78 69 <Control-q> exi
1980: 74 0a 62 69 6e 64 20 2e 20 3c 43 6f 6e 74 72 6f t.bind . <Contro
1990: 6c 2d 70 3e 20 7b 63 61 74 63 68 20 73 65 61 72 l-p> {catch sear
19a0: 63 68 50 72 65 76 3b 20 62 72 65 61 6b 7d 0a 62 chPrev; break}.b
19b0: 69 6e 64 20 2e 20 3c 43 6f 6e 74 72 6f 6c 2d 6e ind . <Control-n
19c0: 3e 20 7b 63 61 74 63 68 20 73 65 61 72 63 68 4e > {catch searchN
19d0: 65 78 74 3b 20 62 72 65 61 6b 7d 0a 62 69 6e 64 ext; break}.bind
19e0: 20 2e 20 3c 45 73 63 61 70 65 3e 3c 45 73 63 61 . <Escape><Esca
19f0: 70 65 3e 20 65 78 69 74 0a 62 69 6e 64 20 2e 20 pe> exit.bind .
1a00: 3c 44 65 73 74 72 6f 79 3e 20 7b 61 66 74 65 72 <Destroy> {after
1a10: 20 30 20 65 78 69 74 7d 0a 62 69 6e 64 20 2e 20 0 exit}.bind .
1a20: 3c 54 61 62 3e 20 7b 63 79 63 6c 65 44 69 66 66 <Tab> {cycleDiff
1a30: 73 3b 20 62 72 65 61 6b 7d 0a 62 69 6e 64 20 2e s; break}.bind .
1a40: 20 3c 3c 50 72 65 76 57 69 6e 64 6f 77 3e 3e 20 <<PrevWindow>>
1a50: 7b 63 79 63 6c 65 44 69 66 66 73 20 31 3b 20 62 {cycleDiffs 1; b
1a60: 72 65 61 6b 7d 0a 62 69 6e 64 20 2e 20 3c 43 6f reak}.bind . <Co
1a70: 6e 74 72 6f 6c 2d 66 3e 20 7b 73 65 61 72 63 68 ntrol-f> {search
1a80: 4f 6e 4f 66 66 3b 20 62 72 65 61 6b 7d 0a 62 69 OnOff; break}.bi
1a90: 6e 64 20 2e 20 3c 43 6f 6e 74 72 6f 6c 2d 67 3e nd . <Control-g>
1aa0: 20 7b 63 61 74 63 68 20 73 65 61 72 63 68 4e 65 {catch searchNe
1ab0: 78 74 3b 20 62 72 65 61 6b 7d 0a 62 69 6e 64 20 xt; break}.bind
1ac0: 2e 20 3c 52 65 74 75 72 6e 3e 20 7b 0a 20 20 65 . <Return> {. e
1ad0: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 62 vent generate .b
1ae0: 62 2e 66 69 6c 65 73 20 3c 31 3e 0a 20 20 65 76 b.files <1>. ev
1af0: 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 62 62 ent generate .bb
1b00: 2e 66 69 6c 65 73 20 3c 42 75 74 74 6f 6e 52 65 .files <ButtonRe
1b10: 6c 65 61 73 65 2d 31 3e 0a 20 20 62 72 65 61 6b lease-1>. break
1b20: 0a 7d 0a 66 6f 72 65 61 63 68 20 7b 6b 65 79 20 .}.foreach {key
1b30: 61 78 69 73 20 61 72 67 73 7d 20 7b 0a 20 20 55 axis args} {. U
1b40: 70 20 20 20 20 79 20 7b 73 63 72 6f 6c 6c 20 2d p y {scroll -
1b50: 35 20 75 6e 69 74 73 7d 0a 20 20 6b 20 20 20 20 5 units}. k
1b60: 20 79 20 7b 73 63 72 6f 6c 6c 20 2d 35 20 75 6e y {scroll -5 un
1b70: 69 74 73 7d 0a 20 20 44 6f 77 6e 20 20 79 20 7b its}. Down y {
1b80: 73 63 72 6f 6c 6c 20 35 20 75 6e 69 74 73 7d 0a scroll 5 units}.
1b90: 20 20 6a 20 20 20 20 20 79 20 7b 73 63 72 6f 6c j y {scrol
1ba0: 6c 20 35 20 75 6e 69 74 73 7d 0a 20 20 4c 65 66 l 5 units}. Lef
1bb0: 74 20 20 78 20 7b 73 63 72 6f 6c 6c 20 2d 35 20 t x {scroll -5
1bc0: 75 6e 69 74 73 7d 0a 20 20 68 20 20 20 20 20 78 units}. h x
1bd0: 20 7b 73 63 72 6f 6c 6c 20 2d 35 20 75 6e 69 74 {scroll -5 unit
1be0: 73 7d 0a 20 20 52 69 67 68 74 20 78 20 7b 73 63 s}. Right x {sc
1bf0: 72 6f 6c 6c 20 35 20 75 6e 69 74 73 7d 0a 20 20 roll 5 units}.
1c00: 6c 20 20 20 20 20 78 20 7b 73 63 72 6f 6c 6c 20 l x {scroll
1c10: 35 20 75 6e 69 74 73 7d 0a 20 20 50 72 69 6f 72 5 units}. Prior
1c20: 20 79 20 7b 73 63 72 6f 6c 6c 20 2d 31 20 70 61 y {scroll -1 pa
1c30: 67 65 7d 0a 20 20 62 20 20 20 20 20 79 20 7b 73 ge}. b y {s
1c40: 63 72 6f 6c 6c 20 2d 31 20 70 61 67 65 7d 0a 20 croll -1 page}.
1c50: 20 4e 65 78 74 20 20 79 20 7b 73 63 72 6f 6c 6c Next y {scroll
1c60: 20 31 20 70 61 67 65 7d 0a 20 20 73 70 61 63 65 1 page}. space
1c70: 20 79 20 7b 73 63 72 6f 6c 6c 20 31 20 70 61 67 y {scroll 1 pag
1c80: 65 7d 0a 20 20 48 6f 6d 65 20 20 79 20 7b 6d 6f e}. Home y {mo
1c90: 76 65 74 6f 20 30 7d 0a 20 20 67 20 20 20 20 20 veto 0}. g
1ca0: 79 20 7b 6d 6f 76 65 74 6f 20 30 7d 0a 20 20 45 y {moveto 0}. E
1cb0: 6e 64 20 20 20 79 20 7b 6d 6f 76 65 74 6f 20 31 nd y {moveto 1
1cc0: 7d 0a 7d 20 7b 0a 20 20 62 69 6e 64 20 2e 20 3c }.} {. bind . <
1cd0: 24 6b 65 79 3e 20 22 73 63 72 6f 6c 6c 2d 24 61 $key> "scroll-$a
1ce0: 78 69 73 20 24 61 72 67 73 3b 20 62 72 65 61 6b xis $args; break
1cf0: 22 0a 20 20 62 69 6e 64 20 2e 20 3c 53 68 69 66 ". bind . <Shif
1d00: 74 2d 24 6b 65 79 3e 20 63 6f 6e 74 69 6e 75 65 t-$key> continue
1d10: 0a 7d 0a 0a 66 72 61 6d 65 20 2e 62 62 0a 3a 3a .}..frame .bb.::
1d20: 74 74 6b 3a 3a 6d 65 6e 75 62 75 74 74 6f 6e 20 ttk::menubutton
1d30: 2e 62 62 2e 66 69 6c 65 73 20 2d 74 65 78 74 20 .bb.files -text
1d40: 22 46 69 6c 65 73 22 0a 69 66 20 7b 5b 74 6b 20 "Files".if {[tk
1d50: 77 69 6e 64 6f 77 69 6e 67 73 79 73 74 65 6d 5d windowingsystem]
1d60: 20 65 71 20 22 77 69 6e 33 32 22 7d 20 7b 0a 20 eq "win32"} {.
1d70: 20 3a 3a 74 74 6b 3a 3a 73 74 79 6c 65 20 74 68 ::ttk::style th
1d80: 65 6d 65 20 75 73 65 20 77 69 6e 6e 61 74 69 76 eme use winnativ
1d90: 65 0a 20 20 2e 62 62 2e 66 69 6c 65 73 20 63 6f e. .bb.files co
1da0: 6e 66 69 67 75 72 65 20 2d 70 61 64 64 69 6e 67 nfigure -padding
1db0: 20 7b 32 30 20 31 20 31 30 20 32 7d 0a 7d 0a 74 {20 1 10 2}.}.t
1dc0: 6f 70 6c 65 76 65 6c 20 2e 77 66 69 6c 65 73 0a oplevel .wfiles.
1dd0: 77 6d 20 77 69 74 68 64 72 61 77 20 2e 77 66 69 wm withdraw .wfi
1de0: 6c 65 73 0a 75 70 64 61 74 65 20 69 64 6c 65 74 les.update idlet
1df0: 61 73 6b 73 0a 77 6d 20 74 72 61 6e 73 69 65 6e asks.wm transien
1e00: 74 20 2e 77 66 69 6c 65 73 20 2e 0a 77 6d 20 6f t .wfiles ..wm o
1e10: 76 65 72 72 69 64 65 72 65 64 69 72 65 63 74 20 verrideredirect
1e20: 2e 77 66 69 6c 65 73 20 31 0a 6c 69 73 74 62 6f .wfiles 1.listbo
1e30: 78 20 2e 77 66 69 6c 65 73 2e 6c 62 20 2d 77 69 x .wfiles.lb -wi
1e40: 64 74 68 20 30 20 2d 68 65 69 67 68 74 20 24 43 dth 0 -height $C
1e50: 46 47 28 4c 42 5f 48 45 49 47 48 54 29 20 2d 61 FG(LB_HEIGHT) -a
1e60: 63 74 69 76 65 73 74 79 6c 65 20 6e 6f 6e 65 20 ctivestyle none
1e70: 5c 0a 20 20 2d 79 73 63 72 6f 6c 6c 20 7b 2e 77 \. -yscroll {.w
1e80: 66 69 6c 65 73 2e 73 62 20 73 65 74 7d 0a 3a 3a files.sb set}.::
1e90: 74 74 6b 3a 3a 73 63 72 6f 6c 6c 62 61 72 20 2e ttk::scrollbar .
1ea0: 77 66 69 6c 65 73 2e 73 62 20 2d 63 6f 6d 6d 61 wfiles.sb -comma
1eb0: 6e 64 20 7b 2e 77 66 69 6c 65 73 2e 6c 62 20 79 nd {.wfiles.lb y
1ec0: 76 69 65 77 7d 0a 67 72 69 64 20 2e 77 66 69 6c view}.grid .wfil
1ed0: 65 73 2e 6c 62 20 2e 77 66 69 6c 65 73 2e 73 62 es.lb .wfiles.sb
1ee0: 20 2d 73 74 69 63 6b 79 20 6e 73 0a 62 69 6e 64 -sticky ns.bind
1ef0: 20 2e 62 62 2e 66 69 6c 65 73 20 3c 31 3e 20 7b .bb.files <1> {
1f00: 0a 20 20 73 65 74 20 78 20 5b 77 69 6e 66 6f 20 . set x [winfo
1f10: 72 6f 6f 74 78 20 25 57 5d 0a 20 20 73 65 74 20 rootx %W]. set
1f20: 79 20 5b 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 y [expr {[winfo
1f30: 72 6f 6f 74 79 20 25 57 5d 2b 5b 77 69 6e 66 6f rooty %W]+[winfo
1f40: 20 68 65 69 67 68 74 20 25 57 5d 7d 5d 0a 20 20 height %W]}].
1f50: 77 6d 20 67 65 6f 6d 65 74 72 79 20 2e 77 66 69 wm geometry .wfi
1f60: 6c 65 73 20 2b 24 78 2b 24 79 0a 20 20 77 6d 20 les +$x+$y. wm
1f70: 64 65 69 63 6f 6e 69 66 79 20 2e 77 66 69 6c 65 deiconify .wfile
1f80: 73 0a 20 20 66 6f 63 75 73 20 2e 77 66 69 6c 65 s. focus .wfile
1f90: 73 2e 6c 62 0a 7d 0a 62 69 6e 64 20 2e 77 66 69 s.lb.}.bind .wfi
1fa0: 6c 65 73 20 3c 46 6f 63 75 73 4f 75 74 3e 20 7b les <FocusOut> {
1fb0: 77 6d 20 77 69 74 68 64 72 61 77 20 2e 77 66 69 wm withdraw .wfi
1fc0: 6c 65 73 7d 0a 62 69 6e 64 20 2e 77 66 69 6c 65 les}.bind .wfile
1fd0: 73 20 3c 45 73 63 61 70 65 3e 20 7b 66 6f 63 75 s <Escape> {focu
1fe0: 73 20 2e 7d 0a 66 6f 72 65 61 63 68 20 65 76 74 s .}.foreach evt
1ff0: 20 7b 31 20 52 65 74 75 72 6e 7d 20 7b 0a 20 20 {1 Return} {.
2000: 62 69 6e 64 20 2e 77 66 69 6c 65 73 2e 6c 62 20 bind .wfiles.lb
2010: 3c 24 65 76 74 3e 20 7b 0a 20 20 20 20 63 61 74 <$evt> {. cat
2020: 63 68 20 7b 0a 20 20 20 20 20 20 73 65 74 20 69 ch {. set i
2030: 64 78 20 5b 6c 69 6e 64 65 78 20 5b 2e 74 78 74 dx [lindex [.txt
2040: 41 20 74 61 67 20 72 61 6e 67 65 73 20 66 6e 5d A tag ranges fn]
2050: 20 5b 65 78 70 72 20 7b 5b 25 57 20 63 75 72 73 [expr {[%W curs
2060: 65 6c 65 63 74 69 6f 6e 5d 2a 32 7d 5d 5d 0a 20 election]*2}]].
2070: 20 20 20 20 20 76 69 65 77 44 69 66 66 20 24 69 viewDiff $i
2080: 64 78 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 63 dx. }. foc
2090: 75 73 20 2e 0a 20 20 20 20 62 72 65 61 6b 0a 20 us .. break.
20a0: 20 7d 0a 7d 0a 62 69 6e 64 20 2e 77 66 69 6c 65 }.}.bind .wfile
20b0: 73 2e 6c 62 20 3c 4d 6f 74 69 6f 6e 3e 20 7b 0a s.lb <Motion> {.
20c0: 20 20 25 57 20 73 65 6c 65 63 74 69 6f 6e 20 63 %W selection c
20d0: 6c 65 61 72 20 30 20 65 6e 64 0a 20 20 25 57 20 lear 0 end. %W
20e0: 73 65 6c 65 63 74 69 6f 6e 20 73 65 74 20 40 25 selection set @%
20f0: 78 2c 25 79 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 x,%y.}..foreach
2100: 7b 73 69 64 65 20 73 79 6e 63 43 6f 6c 7d 20 7b {side syncCol} {
2110: 41 20 2e 74 78 74 42 20 42 20 2e 74 78 74 41 7d A .txtB B .txtA}
2120: 20 7b 0a 20 20 73 65 74 20 6c 6e 20 2e 6c 6e 24 {. set ln .ln$
2130: 73 69 64 65 0a 20 20 74 65 78 74 20 24 6c 6e 0a side. text $ln.
2140: 20 20 24 6c 6e 20 74 61 67 20 63 6f 6e 66 69 67 $ln tag config
2150: 20 2d 20 2d 6a 75 73 74 69 66 79 20 72 69 67 68 - -justify righ
2160: 74 0a 0a 20 20 73 65 74 20 74 78 74 20 2e 74 78 t.. set txt .tx
2170: 74 24 73 69 64 65 0a 20 20 74 65 78 74 20 24 74 t$side. text $t
2180: 78 74 20 2d 77 69 64 74 68 20 24 43 46 47 28 57 xt -width $CFG(W
2190: 49 44 54 48 29 20 2d 68 65 69 67 68 74 20 24 43 IDTH) -height $C
21a0: 46 47 28 48 45 49 47 48 54 29 20 2d 77 72 61 70 FG(HEIGHT) -wrap
21b0: 20 6e 6f 6e 65 20 5c 0a 20 20 20 20 2d 78 73 63 none \. -xsc
21c0: 72 6f 6c 6c 20 22 73 79 6e 63 2d 78 20 24 73 79 roll "sync-x $sy
21d0: 6e 63 43 6f 6c 22 0a 20 20 63 61 74 63 68 20 7b ncCol". catch {
21e0: 24 74 78 74 20 63 6f 6e 66 69 67 20 2d 74 61 62 $txt config -tab
21f0: 73 74 79 6c 65 20 77 6f 72 64 70 72 6f 63 65 73 style wordproces
2200: 73 6f 72 7d 20 3b 23 20 52 65 71 75 69 72 65 64 sor} ;# Required
2210: 20 66 6f 72 20 54 6b 3e 3d 38 2e 35 0a 20 20 66 for Tk>=8.5. f
2220: 6f 72 65 61 63 68 20 74 61 67 20 7b 61 64 64 20 oreach tag {add
2230: 72 6d 20 63 68 6e 67 7d 20 7b 0a 20 20 20 20 24 rm chng} {. $
2240: 74 78 74 20 74 61 67 20 63 6f 6e 66 69 67 20 24 txt tag config $
2250: 74 61 67 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 tag -background
2260: 24 43 46 47 28 5b 73 74 72 69 6e 67 20 74 6f 75 $CFG([string tou
2270: 70 70 65 72 20 24 74 61 67 5d 5f 42 47 29 0a 20 pper $tag]_BG).
2280: 20 20 20 24 74 78 74 20 74 61 67 20 6c 6f 77 65 $txt tag lowe
2290: 72 20 24 74 61 67 0a 20 20 7d 0a 20 20 24 74 78 r $tag. }. $tx
22a0: 74 20 74 61 67 20 63 6f 6e 66 69 67 20 66 6e 20 t tag config fn
22b0: 2d 62 61 63 6b 67 72 6f 75 6e 64 20 24 43 46 47 -background $CFG
22c0: 28 46 4e 5f 42 47 29 20 2d 66 6f 72 65 67 72 6f (FN_BG) -foregro
22d0: 75 6e 64 20 24 43 46 47 28 46 4e 5f 46 47 29 20 und $CFG(FN_FG)
22e0: 5c 0a 20 20 20 20 2d 6a 75 73 74 69 66 79 20 63 \. -justify c
22f0: 65 6e 74 65 72 0a 20 20 24 74 78 74 20 74 61 67 enter. $txt tag
2300: 20 63 6f 6e 66 69 67 20 65 72 72 20 2d 66 6f 72 config err -for
2310: 65 67 72 6f 75 6e 64 20 24 43 46 47 28 45 52 52 eground $CFG(ERR
2320: 5f 46 47 29 0a 7d 0a 74 65 78 74 20 2e 6d 6b 72 _FG).}.text .mkr
2330: 0a 0a 66 6f 72 65 61 63 68 20 63 20 5b 63 6f 6c ..foreach c [col
2340: 73 5d 20 7b 0a 20 20 73 65 74 20 6b 65 79 50 72 s] {. set keyPr
2350: 65 66 69 78 20 5b 73 74 72 69 6e 67 20 74 6f 75 efix [string tou
2360: 70 70 65 72 20 5b 63 6f 6c 54 79 70 65 20 24 63 pper [colType $c
2370: 5d 5d 5f 43 4f 4c 5f 0a 20 20 69 66 20 7b 5b 74 ]]_COL_. if {[t
2380: 6b 20 77 69 6e 64 6f 77 69 6e 67 73 79 73 74 65 k windowingsyste
2390: 6d 5d 20 65 71 20 22 77 69 6e 33 32 22 7d 20 7b m] eq "win32"} {
23a0: 24 63 20 63 6f 6e 66 69 67 20 2d 66 6f 6e 74 20 $c config -font
23b0: 7b 63 6f 75 72 69 65 72 20 39 7d 7d 0a 20 20 24 {courier 9}}. $
23c0: 63 20 63 6f 6e 66 69 67 20 2d 62 67 20 24 43 46 c config -bg $CF
23d0: 47 28 24 7b 6b 65 79 50 72 65 66 69 78 7d 42 47 G(${keyPrefix}BG
23e0: 29 20 2d 66 67 20 24 43 46 47 28 24 7b 6b 65 79 ) -fg $CFG(${key
23f0: 50 72 65 66 69 78 7d 46 47 29 20 2d 62 6f 72 64 Prefix}FG) -bord
2400: 65 72 77 69 64 74 68 20 30 20 5c 0a 20 20 20 20 erwidth 0 \.
2410: 2d 70 61 64 78 20 24 43 46 47 28 50 41 44 58 29 -padx $CFG(PADX)
2420: 20 2d 79 73 63 72 6f 6c 6c 20 73 79 6e 63 2d 79 -yscroll sync-y
2430: 0a 20 20 24 63 20 74 61 67 20 63 6f 6e 66 69 67 . $c tag config
2440: 20 68 72 6c 6e 20 2d 73 70 61 63 69 6e 67 31 20 hrln -spacing1
2450: 24 43 46 47 28 48 52 5f 50 41 44 5f 54 4f 50 29 $CFG(HR_PAD_TOP)
2460: 20 2d 73 70 61 63 69 6e 67 33 20 24 43 46 47 28 -spacing3 $CFG(
2470: 48 52 5f 50 41 44 5f 42 54 4d 29 20 5c 0a 20 20 HR_PAD_BTM) \.
2480: 20 20 20 2d 66 6f 72 65 67 72 6f 75 6e 64 20 24 -foreground $
2490: 43 46 47 28 48 52 5f 46 47 29 20 2d 6a 75 73 74 CFG(HR_FG) -just
24a0: 69 66 79 20 72 69 67 68 74 0a 20 20 24 63 20 74 ify right. $c t
24b0: 61 67 20 63 6f 6e 66 69 67 20 68 72 74 78 74 20 ag config hrtxt
24c0: 20 2d 73 70 61 63 69 6e 67 31 20 24 43 46 47 28 -spacing1 $CFG(
24d0: 48 52 5f 50 41 44 5f 54 4f 50 29 20 2d 73 70 61 HR_PAD_TOP) -spa
24e0: 63 69 6e 67 33 20 24 43 46 47 28 48 52 5f 50 41 cing3 $CFG(HR_PA
24f0: 44 5f 42 54 4d 29 20 5c 0a 20 20 20 20 20 2d 66 D_BTM) \. -f
2500: 6f 72 65 67 72 6f 75 6e 64 20 24 43 46 47 28 48 oreground $CFG(H
2510: 52 5f 46 47 29 20 2d 6a 75 73 74 69 66 79 20 63 R_FG) -justify c
2520: 65 6e 74 65 72 0a 20 20 24 63 20 74 61 67 20 63 enter. $c tag c
2530: 6f 6e 66 69 67 20 66 6e 20 2d 73 70 61 63 69 6e onfig fn -spacin
2540: 67 31 20 24 43 46 47 28 46 4e 5f 50 41 44 29 20 g1 $CFG(FN_PAD)
2550: 2d 73 70 61 63 69 6e 67 33 20 24 43 46 47 28 46 -spacing3 $CFG(F
2560: 4e 5f 50 41 44 29 0a 20 20 62 69 6e 64 74 61 67 N_PAD). bindtag
2570: 73 20 24 63 20 22 2e 20 24 63 20 54 65 78 74 20 s $c ". $c Text
2580: 61 6c 6c 22 0a 20 20 62 69 6e 64 20 24 63 20 3c all". bind $c <
2590: 31 3e 20 7b 66 6f 63 75 73 20 25 57 7d 0a 7d 0a 1> {focus %W}.}.
25a0: 0a 3a 3a 74 74 6b 3a 3a 73 63 72 6f 6c 6c 62 61 .::ttk::scrollba
25b0: 72 20 2e 73 62 79 20 2d 63 6f 6d 6d 61 6e 64 20 r .sby -command
25c0: 7b 2e 74 78 74 41 20 79 76 69 65 77 7d 20 2d 6f {.txtA yview} -o
25d0: 72 69 65 6e 74 20 76 65 72 74 69 63 61 6c 0a 3a rient vertical.:
25e0: 3a 74 74 6b 3a 3a 73 63 72 6f 6c 6c 62 61 72 20 :ttk::scrollbar
25f0: 2e 73 62 78 41 20 2d 63 6f 6d 6d 61 6e 64 20 7b .sbxA -command {
2600: 2e 74 78 74 41 20 78 76 69 65 77 7d 20 2d 6f 72 .txtA xview} -or
2610: 69 65 6e 74 20 68 6f 72 69 7a 6f 6e 74 61 6c 0a ient horizontal.
2620: 3a 3a 74 74 6b 3a 3a 73 63 72 6f 6c 6c 62 61 72 ::ttk::scrollbar
2630: 20 2e 73 62 78 42 20 2d 63 6f 6d 6d 61 6e 64 20 .sbxB -command
2640: 7b 2e 74 78 74 42 20 78 76 69 65 77 7d 20 2d 6f {.txtB xview} -o
2650: 72 69 65 6e 74 20 68 6f 72 69 7a 6f 6e 74 61 6c rient horizontal
2660: 0a 66 72 61 6d 65 20 2e 73 70 61 63 65 72 0a 0a .frame .spacer..
2670: 69 66 20 7b 5b 72 65 61 64 44 69 66 66 73 20 24 if {[readDiffs $
2680: 66 6f 73 73 69 6c 63 6d 64 5d 20 3d 3d 20 30 7d fossilcmd] == 0}
2690: 20 7b 0a 20 20 74 6b 5f 6d 65 73 73 61 67 65 42 {. tk_messageB
26a0: 6f 78 20 2d 74 79 70 65 20 6f 6b 20 2d 74 69 74 ox -type ok -tit
26b0: 6c 65 20 24 43 46 47 28 54 49 54 4c 45 29 20 2d le $CFG(TITLE) -
26c0: 6d 65 73 73 61 67 65 20 22 4e 6f 20 63 68 61 6e message "No chan
26d0: 67 65 73 22 0a 20 20 65 78 69 74 0a 7d 0a 75 70 ges". exit.}.up
26e0: 64 61 74 65 20 69 64 6c 65 74 61 73 6b 73 0a 0a date idletasks..
26f0: 70 72 6f 63 20 73 61 76 65 44 69 66 66 20 7b 7d proc saveDiff {}
2700: 20 7b 0a 20 20 73 65 74 20 66 6e 20 5b 74 6b 5f {. set fn [tk_
2710: 67 65 74 53 61 76 65 46 69 6c 65 5d 0a 20 20 69 getSaveFile]. i
2720: 66 20 7b 24 66 6e 3d 3d 22 22 7d 20 72 65 74 75 f {$fn==""} retu
2730: 72 6e 0a 20 20 73 65 74 20 6f 75 74 20 5b 6f 70 rn. set out [op
2740: 65 6e 20 24 66 6e 20 77 62 5d 0a 20 20 70 75 74 en $fn wb]. put
2750: 73 20 24 6f 75 74 20 22 23 21 2f 75 73 72 2f 62 s $out "#!/usr/b
2760: 69 6e 2f 74 63 6c 73 68 5c 6e 23 5c 6e 23 20 52 in/tclsh\n#\n# R
2770: 75 6e 20 74 68 69 73 20 73 63 72 69 70 74 20 75 un this script u
2780: 73 69 6e 67 20 27 74 63 6c 73 68 27 20 6f 72 20 sing 'tclsh' or
2790: 27 77 69 73 68 27 22 0a 20 20 70 75 74 73 20 24 'wish'". puts $
27a0: 6f 75 74 20 22 23 20 74 6f 20 73 65 65 20 74 68 out "# to see th
27b0: 65 20 67 72 61 70 68 69 63 61 6c 20 64 69 66 66 e graphical diff
27c0: 2e 5c 6e 23 22 0a 20 20 70 75 74 73 20 24 6f 75 .\n#". puts $ou
27d0: 74 20 22 73 65 74 20 66 6f 73 73 69 6c 63 6d 64 t "set fossilcmd
27e0: 20 7b 7d 22 0a 20 20 70 75 74 73 20 24 6f 75 74 {}". puts $out
27f0: 20 22 73 65 74 20 70 72 6f 67 20 5b 6c 69 73 74 "set prog [list
2800: 20 24 3a 3a 70 72 6f 67 5d 22 0a 20 20 70 75 74 $::prog]". put
2810: 73 20 24 6f 75 74 20 22 73 65 74 20 64 69 66 66 s $out "set diff
2820: 74 78 74 20 5c 31 37 33 22 0a 20 20 66 6f 72 65 txt \173". fore
2830: 61 63 68 20 65 20 24 3a 3a 64 69 66 66 74 78 74 ach e $::difftxt
2840: 20 7b 70 75 74 73 20 24 6f 75 74 20 5b 6c 69 73 {puts $out [lis
2850: 74 20 24 65 5d 7d 0a 20 20 70 75 74 73 20 24 6f t $e]}. puts $o
2860: 75 74 20 22 5c 31 37 35 22 0a 20 20 70 75 74 73 ut "\175". puts
2870: 20 24 6f 75 74 20 22 65 76 61 6c 20 5c 24 70 72 $out "eval \$pr
2880: 6f 67 22 0a 20 20 63 6c 6f 73 65 20 24 6f 75 74 og". close $out
2890: 0a 7d 0a 70 72 6f 63 20 69 6e 76 65 72 74 44 69 .}.proc invertDi
28a0: 66 66 20 7b 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c ff {} {. global
28b0: 20 43 46 47 0a 20 20 61 72 72 61 79 20 73 65 74 CFG. array set
28c0: 20 78 20 5b 67 72 69 64 20 69 6e 66 6f 20 2e 74 x [grid info .t
28d0: 78 74 41 5d 0a 20 20 69 66 20 7b 24 78 28 2d 63 xtA]. if {$x(-c
28e0: 6f 6c 75 6d 6e 29 3d 3d 31 7d 20 7b 0a 20 20 20 olumn)==1} {.
28f0: 20 67 72 69 64 20 63 6f 6e 66 69 67 20 2e 6c 6e grid config .ln
2900: 42 20 2d 63 6f 6c 75 6d 6e 20 30 0a 20 20 20 20 B -column 0.
2910: 67 72 69 64 20 63 6f 6e 66 69 67 20 2e 74 78 74 grid config .txt
2920: 42 20 2d 63 6f 6c 75 6d 6e 20 31 0a 20 20 20 20 B -column 1.
2930: 2e 74 78 74 42 20 74 61 67 20 63 6f 6e 66 69 67 .txtB tag config
2940: 20 61 64 64 20 2d 62 61 63 6b 67 72 6f 75 6e 64 add -background
2950: 20 24 43 46 47 28 52 4d 5f 42 47 29 0a 20 20 20 $CFG(RM_BG).
2960: 20 67 72 69 64 20 63 6f 6e 66 69 67 20 2e 6c 6e grid config .ln
2970: 41 20 2d 63 6f 6c 75 6d 6e 20 33 0a 20 20 20 20 A -column 3.
2980: 67 72 69 64 20 63 6f 6e 66 69 67 20 2e 74 78 74 grid config .txt
2990: 41 20 2d 63 6f 6c 75 6d 6e 20 34 0a 20 20 20 20 A -column 4.
29a0: 2e 74 78 74 41 20 74 61 67 20 63 6f 6e 66 69 67 .txtA tag config
29b0: 20 72 6d 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 rm -background
29c0: 24 43 46 47 28 41 44 44 5f 42 47 29 0a 20 20 20 $CFG(ADD_BG).
29d0: 20 2e 62 62 2e 69 6e 76 65 72 74 20 63 6f 6e 66 .bb.invert conf
29e0: 69 67 20 2d 74 65 78 74 20 55 6e 69 6e 76 65 72 ig -text Uninver
29f0: 74 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 t. } else {.
2a00: 20 67 72 69 64 20 63 6f 6e 66 69 67 20 2e 6c 6e grid config .ln
2a10: 41 20 2d 63 6f 6c 75 6d 6e 20 30 0a 20 20 20 20 A -column 0.
2a20: 67 72 69 64 20 63 6f 6e 66 69 67 20 2e 74 78 74 grid config .txt
2a30: 41 20 2d 63 6f 6c 75 6d 6e 20 31 0a 20 20 20 20 A -column 1.
2a40: 2e 74 78 74 41 20 74 61 67 20 63 6f 6e 66 69 67 .txtA tag config
2a50: 20 72 6d 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 rm -background
2a60: 24 43 46 47 28 52 4d 5f 42 47 29 0a 20 20 20 20 $CFG(RM_BG).
2a70: 67 72 69 64 20 63 6f 6e 66 69 67 20 2e 6c 6e 42 grid config .lnB
2a80: 20 2d 63 6f 6c 75 6d 6e 20 33 0a 20 20 20 20 67 -column 3. g
2a90: 72 69 64 20 63 6f 6e 66 69 67 20 2e 74 78 74 42 rid config .txtB
2aa0: 20 2d 63 6f 6c 75 6d 6e 20 34 0a 20 20 20 20 2e -column 4. .
2ab0: 74 78 74 42 20 74 61 67 20 63 6f 6e 66 69 67 20 txtB tag config
2ac0: 61 64 64 20 2d 62 61 63 6b 67 72 6f 75 6e 64 20 add -background
2ad0: 24 43 46 47 28 41 44 44 5f 42 47 29 0a 20 20 20 $CFG(ADD_BG).
2ae0: 20 2e 62 62 2e 69 6e 76 65 72 74 20 63 6f 6e 66 .bb.invert conf
2af0: 69 67 20 2d 74 65 78 74 20 49 6e 76 65 72 74 0a ig -text Invert.
2b00: 20 20 7d 0a 20 20 2e 6d 6b 72 20 63 6f 6e 66 69 }. .mkr confi
2b10: 67 20 2d 73 74 61 74 65 20 6e 6f 72 6d 61 6c 0a g -state normal.
2b20: 20 20 73 65 74 20 63 6c 74 20 5b 2e 6d 6b 72 20 set clt [.mkr
2b30: 73 65 61 72 63 68 20 2d 61 6c 6c 20 3c 20 31 2e search -all < 1.
2b40: 30 20 65 6e 64 5d 0a 20 20 73 65 74 20 63 67 74 0 end]. set cgt
2b50: 20 5b 2e 6d 6b 72 20 73 65 61 72 63 68 20 2d 61 [.mkr search -a
2b60: 6c 6c 20 3e 20 31 2e 30 20 65 6e 64 5d 0a 20 20 ll > 1.0 end].
2b70: 66 6f 72 65 61 63 68 20 63 20 24 63 6c 74 20 7b foreach c $clt {
2b80: 2e 6d 6b 72 20 72 65 70 6c 61 63 65 20 24 63 20 .mkr replace $c
2b90: 22 24 63 20 2b 31 20 63 68 61 72 73 22 20 3e 7d "$c +1 chars" >}
2ba0: 0a 20 20 66 6f 72 65 61 63 68 20 63 20 24 63 67 . foreach c $cg
2bb0: 74 20 7b 2e 6d 6b 72 20 72 65 70 6c 61 63 65 20 t {.mkr replace
2bc0: 24 63 20 22 24 63 20 2b 31 20 63 68 61 72 73 22 $c "$c +1 chars"
2bd0: 20 3c 7d 0a 20 20 2e 6d 6b 72 20 63 6f 6e 66 69 <}. .mkr confi
2be0: 67 20 2d 73 74 61 74 65 20 64 69 73 61 62 6c 65 g -state disable
2bf0: 64 0a 7d 0a 70 72 6f 63 20 73 65 61 72 63 68 4f d.}.proc searchO
2c00: 6e 4f 66 66 20 7b 7d 20 7b 0a 20 20 69 66 20 7b nOff {} {. if {
2c10: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 [info exists ::s
2c20: 65 61 72 63 68 5d 7d 20 7b 0a 20 20 20 20 75 6e earch]} {. un
2c30: 73 65 74 20 3a 3a 73 65 61 72 63 68 0a 20 20 20 set ::search.
2c40: 20 2e 74 78 74 41 20 74 61 67 20 72 65 6d 6f 76 .txtA tag remov
2c50: 65 20 73 65 61 72 63 68 20 31 2e 30 20 65 6e 64 e search 1.0 end
2c60: 0a 20 20 20 20 2e 74 78 74 42 20 74 61 67 20 72 . .txtB tag r
2c70: 65 6d 6f 76 65 20 73 65 61 72 63 68 20 31 2e 30 emove search 1.0
2c80: 20 65 6e 64 0a 20 20 20 20 70 61 63 6b 20 66 6f end. pack fo
2c90: 72 67 65 74 20 2e 62 62 2e 73 66 72 61 6d 65 0a rget .bb.sframe.
2ca0: 20 20 20 20 66 6f 63 75 73 20 2e 0a 20 20 7d 20 focus .. }
2cb0: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 3a else {. set :
2cc0: 3a 73 65 61 72 63 68 20 2e 74 78 74 41 0a 20 20 :search .txtA.
2cd0: 20 20 69 66 20 7b 21 5b 77 69 6e 66 6f 20 65 78 if {![winfo ex
2ce0: 69 73 74 73 20 2e 62 62 2e 73 66 72 61 6d 65 5d ists .bb.sframe]
2cf0: 7d 20 7b 0a 20 20 20 20 20 20 66 72 61 6d 65 20 } {. frame
2d00: 2e 62 62 2e 73 66 72 61 6d 65 0a 20 20 20 20 20 .bb.sframe.
2d10: 20 3a 3a 74 74 6b 3a 3a 65 6e 74 72 79 20 2e 62 ::ttk::entry .b
2d20: 62 2e 73 66 72 61 6d 65 2e 65 20 2d 77 69 64 74 b.sframe.e -widt
2d30: 68 20 31 30 0a 20 20 20 20 20 20 70 61 63 6b 20 h 10. pack
2d40: 2e 62 62 2e 73 66 72 61 6d 65 2e 65 20 2d 73 69 .bb.sframe.e -si
2d50: 64 65 20 6c 65 66 74 20 2d 66 69 6c 6c 20 79 20 de left -fill y
2d60: 2d 65 78 70 61 6e 64 20 31 0a 20 20 20 20 20 20 -expand 1.
2d70: 62 69 6e 64 20 2e 62 62 2e 73 66 72 61 6d 65 2e bind .bb.sframe.
2d80: 65 20 3c 52 65 74 75 72 6e 3e 20 7b 73 65 61 72 e <Return> {sear
2d90: 63 68 4e 65 78 74 3b 20 62 72 65 61 6b 7d 0a 20 chNext; break}.
2da0: 20 20 20 20 20 3a 3a 74 74 6b 3a 3a 62 75 74 74 ::ttk::butt
2db0: 6f 6e 20 2e 62 62 2e 73 66 72 61 6d 65 2e 6e 78 on .bb.sframe.nx
2dc0: 20 2d 74 65 78 74 20 5c 75 32 31 39 33 20 2d 77 -text \u2193 -w
2dd0: 69 64 74 68 20 31 20 2d 63 6f 6d 6d 61 6e 64 20 idth 1 -command
2de0: 73 65 61 72 63 68 4e 65 78 74 0a 20 20 20 20 20 searchNext.
2df0: 20 3a 3a 74 74 6b 3a 3a 62 75 74 74 6f 6e 20 2e ::ttk::button .
2e00: 62 62 2e 73 66 72 61 6d 65 2e 70 76 20 2d 74 65 bb.sframe.pv -te
2e10: 78 74 20 5c 75 32 31 39 31 20 2d 77 69 64 74 68 xt \u2191 -width
2e20: 20 31 20 2d 63 6f 6d 6d 61 6e 64 20 73 65 61 72 1 -command sear
2e30: 63 68 50 72 65 76 0a 20 20 20 20 20 20 74 6b 5f chPrev. tk_
2e40: 6f 70 74 69 6f 6e 4d 65 6e 75 20 2e 62 62 2e 73 optionMenu .bb.s
2e50: 66 72 61 6d 65 2e 74 79 70 20 3a 3a 73 65 61 72 frame.typ ::sear
2e60: 63 68 5f 74 79 70 65 20 5c 0a 20 20 20 20 20 20 ch_type \.
2e70: 20 20 20 20 20 45 78 61 63 74 20 7b 4e 6f 20 43 Exact {No C
2e80: 61 73 65 7d 20 7b 52 65 67 45 78 70 7d 20 7b 57 ase} {RegExp} {W
2e90: 68 6f 6c 65 20 57 6f 72 64 7d 0a 20 20 20 20 20 hole Word}.
2ea0: 20 2e 62 62 2e 73 66 72 61 6d 65 2e 74 79 70 20 .bb.sframe.typ
2eb0: 63 6f 6e 66 69 67 20 2d 77 69 64 74 68 20 31 30 config -width 10
2ec0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 73 65 61 . set ::sea
2ed0: 72 63 68 5f 74 79 70 65 20 45 78 61 63 74 0a 20 rch_type Exact.
2ee0: 20 20 20 20 20 70 61 63 6b 20 2e 62 62 2e 73 66 pack .bb.sf
2ef0: 72 61 6d 65 2e 6e 78 20 2e 62 62 2e 73 66 72 61 rame.nx .bb.sfra
2f00: 6d 65 2e 70 76 20 2e 62 62 2e 73 66 72 61 6d 65 me.pv .bb.sframe
2f10: 2e 74 79 70 20 2d 73 69 64 65 20 6c 65 66 74 0a .typ -side left.
2f20: 20 20 20 20 7d 0a 20 20 20 20 70 61 63 6b 20 2e }. pack .
2f30: 62 62 2e 73 66 72 61 6d 65 20 2d 73 69 64 65 20 bb.sframe -side
2f40: 6c 65 66 74 0a 20 20 20 20 61 66 74 65 72 20 69 left. after i
2f50: 64 6c 65 20 7b 66 6f 63 75 73 20 2e 62 62 2e 73 dle {focus .bb.s
2f60: 66 72 61 6d 65 2e 65 7d 0a 20 20 7d 0a 7d 0a 70 frame.e}. }.}.p
2f70: 72 6f 63 20 73 65 61 72 63 68 4e 65 78 74 20 7b roc searchNext {
2f80: 7d 20 7b 73 65 61 72 63 68 53 74 65 70 20 2d 66 } {searchStep -f
2f90: 6f 72 77 61 72 64 73 20 2b 31 20 31 2e 30 20 65 orwards +1 1.0 e
2fa0: 6e 64 7d 0a 70 72 6f 63 20 73 65 61 72 63 68 50 nd}.proc searchP
2fb0: 72 65 76 20 7b 7d 20 7b 73 65 61 72 63 68 53 74 rev {} {searchSt
2fc0: 65 70 20 2d 62 61 63 6b 77 61 72 64 73 20 2d 31 ep -backwards -1
2fd0: 20 65 6e 64 20 31 2e 30 7d 0a 70 72 6f 63 20 73 end 1.0}.proc s
2fe0: 65 61 72 63 68 53 74 65 70 20 7b 64 69 72 65 63 earchStep {direc
2ff0: 74 69 6f 6e 20 69 6e 63 72 20 73 74 61 72 74 20 tion incr start
3000: 73 74 6f 70 7d 20 7b 0a 20 20 73 65 74 20 70 61 stop} {. set pa
3010: 74 74 65 72 6e 20 5b 2e 62 62 2e 73 66 72 61 6d ttern [.bb.sfram
3020: 65 2e 65 20 67 65 74 5d 0a 20 20 69 66 20 7b 24 e.e get]. if {$
3030: 70 61 74 74 65 72 6e 3d 3d 22 22 7d 20 72 65 74 pattern==""} ret
3040: 75 72 6e 0a 20 20 73 65 74 20 63 6f 75 6e 74 20 urn. set count
3050: 30 0a 20 20 73 65 74 20 77 20 24 3a 3a 73 65 61 0. set w $::sea
3060: 72 63 68 0a 20 20 69 66 20 7b 22 24 77 22 3d 3d rch. if {"$w"==
3070: 22 2e 74 78 74 41 22 7d 20 7b 73 65 74 20 6f 74 ".txtA"} {set ot
3080: 68 65 72 20 2e 74 78 74 42 7d 20 7b 73 65 74 20 her .txtB} {set
3090: 6f 74 68 65 72 20 2e 74 78 74 41 7d 0a 20 20 69 other .txtA}. i
30a0: 66 20 7b 5b 6c 73 65 61 72 63 68 20 5b 24 77 20 f {[lsearch [$w
30b0: 6d 61 72 6b 20 6e 61 6d 65 73 5d 20 73 65 61 72 mark names] sear
30c0: 63 68 5d 3c 30 7d 20 7b 0a 20 20 20 20 24 77 20 ch]<0} {. $w
30d0: 6d 61 72 6b 20 73 65 74 20 73 65 61 72 63 68 20 mark set search
30e0: 24 73 74 61 72 74 0a 20 20 7d 0a 20 20 73 77 69 $start. }. swi
30f0: 74 63 68 20 24 3a 3a 73 65 61 72 63 68 5f 74 79 tch $::search_ty
3100: 70 65 20 7b 0a 20 20 20 20 45 78 61 63 74 20 20 pe {. Exact
3110: 20 20 20 20 20 20 7b 73 65 74 20 73 74 20 2d 65 {set st -e
3120: 78 61 63 74 7d 0a 20 20 20 20 7b 4e 6f 20 43 61 xact}. {No Ca
3130: 73 65 7d 20 20 20 20 7b 73 65 74 20 73 74 20 2d se} {set st -
3140: 6e 6f 63 61 73 65 7d 0a 20 20 20 20 7b 52 65 67 nocase}. {Reg
3150: 45 78 70 7d 20 20 20 20 20 7b 73 65 74 20 73 74 Exp} {set st
3160: 20 2d 72 65 67 65 78 70 7d 0a 20 20 20 20 7b 57 -regexp}. {W
3170: 68 6f 6c 65 20 57 6f 72 64 7d 20 7b 73 65 74 20 hole Word} {set
3180: 73 74 20 2d 72 65 67 65 78 70 3b 20 73 65 74 20 st -regexp; set
3190: 70 61 74 74 65 72 6e 20 5c 5c 79 24 70 61 74 74 pattern \\y$patt
31a0: 65 72 6e 5c 5c 79 7d 0a 20 20 7d 0a 20 20 73 65 ern\\y}. }. se
31b0: 74 20 69 64 78 20 5b 24 77 20 73 65 61 72 63 68 t idx [$w search
31c0: 20 2d 63 6f 75 6e 74 20 63 6f 75 6e 74 20 24 64 -count count $d
31d0: 69 72 65 63 74 69 6f 6e 20 24 73 74 20 2d 2d 20 irection $st --
31e0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
31f0: 24 70 61 74 74 65 72 6e 20 22 73 65 61 72 63 68 $pattern "search
3200: 20 24 69 6e 63 72 20 63 68 61 72 73 22 20 24 73 $incr chars" $s
3210: 74 6f 70 5d 0a 20 20 69 66 20 7b 22 24 69 64 78 top]. if {"$idx
3220: 22 3d 3d 22 22 7d 20 7b 0a 20 20 20 20 73 65 74 "==""} {. set
3230: 20 69 64 78 20 5b 24 6f 74 68 65 72 20 73 65 61 idx [$other sea
3240: 72 63 68 20 2d 63 6f 75 6e 74 20 63 6f 75 6e 74 rch -count count
3250: 20 24 64 69 72 65 63 74 69 6f 6e 20 24 73 74 20 $direction $st
3260: 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 73 74 61 -- $pattern $sta
3270: 72 74 20 24 73 74 6f 70 5d 0a 20 20 20 20 69 66 rt $stop]. if
3280: 20 7b 22 24 69 64 78 22 21 3d 22 22 7d 20 7b 0a {"$idx"!=""} {.
3290: 20 20 20 20 20 20 73 65 74 20 74 68 69 73 20 24 set this $
32a0: 77 0a 20 20 20 20 20 20 73 65 74 20 77 20 24 6f w. set w $o
32b0: 74 68 65 72 0a 20 20 20 20 20 20 73 65 74 20 6f ther. set o
32c0: 74 68 65 72 20 24 74 68 69 73 0a 20 20 20 20 7d ther $this. }
32d0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 73 65 else {. se
32e0: 74 20 69 64 78 20 5b 24 77 20 73 65 61 72 63 68 t idx [$w search
32f0: 20 2d 63 6f 75 6e 74 20 63 6f 75 6e 74 20 24 64 -count count $d
3300: 69 72 65 63 74 69 6f 6e 20 24 73 74 20 2d 2d 20 irection $st --
3310: 24 70 61 74 74 65 72 6e 20 24 73 74 61 72 74 20 $pattern $start
3320: 24 73 74 6f 70 5d 0a 20 20 20 20 7d 0a 20 20 7d $stop]. }. }
3330: 0a 20 20 24 77 20 74 61 67 20 72 65 6d 6f 76 65 . $w tag remove
3340: 20 73 65 61 72 63 68 20 31 2e 30 20 65 6e 64 0a search 1.0 end.
3350: 20 20 24 77 20 6d 61 72 6b 20 75 6e 73 65 74 20 $w mark unset
3360: 73 65 61 72 63 68 0a 20 20 24 6f 74 68 65 72 20 search. $other
3370: 74 61 67 20 72 65 6d 6f 76 65 20 73 65 61 72 63 tag remove searc
3380: 68 20 31 2e 30 20 65 6e 64 0a 20 20 24 6f 74 68 h 1.0 end. $oth
3390: 65 72 20 6d 61 72 6b 20 75 6e 73 65 74 20 73 65 er mark unset se
33a0: 61 72 63 68 0a 20 20 69 66 20 7b 22 24 69 64 78 arch. if {"$idx
33b0: 22 21 3d 22 22 7d 20 7b 0a 20 20 20 20 24 77 20 "!=""} {. $w
33c0: 6d 61 72 6b 20 73 65 74 20 73 65 61 72 63 68 20 mark set search
33d0: 24 69 64 78 0a 20 20 20 20 24 77 20 79 76 69 65 $idx. $w yvie
33e0: 77 20 2d 70 69 63 6b 70 6c 61 63 65 20 24 69 64 w -pickplace $id
33f0: 78 0a 20 20 20 20 24 77 20 74 61 67 20 61 64 64 x. $w tag add
3400: 20 73 65 61 72 63 68 20 73 65 61 72 63 68 20 22 search search "
3410: 24 69 64 78 20 2b 24 63 6f 75 6e 74 20 63 68 61 $idx +$count cha
3420: 72 73 22 0a 20 20 20 20 24 77 20 74 61 67 20 63 rs". $w tag c
3430: 6f 6e 66 69 67 20 73 65 61 72 63 68 20 2d 62 61 onfig search -ba
3440: 63 6b 67 72 6f 75 6e 64 20 7b 23 66 63 63 30 30 ckground {#fcc00
3450: 30 7d 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 73 0}. }. set ::s
3460: 65 61 72 63 68 20 24 77 0a 7d 0a 3a 3a 74 74 6b earch $w.}.::ttk
3470: 3a 3a 62 75 74 74 6f 6e 20 2e 62 62 2e 71 75 69 ::button .bb.qui
3480: 74 20 2d 74 65 78 74 20 7b 51 75 69 74 7d 20 2d t -text {Quit} -
3490: 63 6f 6d 6d 61 6e 64 20 65 78 69 74 0a 3a 3a 74 command exit.::t
34a0: 74 6b 3a 3a 62 75 74 74 6f 6e 20 2e 62 62 2e 69 tk::button .bb.i
34b0: 6e 76 65 72 74 20 2d 74 65 78 74 20 7b 49 6e 76 nvert -text {Inv
34c0: 65 72 74 7d 20 2d 63 6f 6d 6d 61 6e 64 20 69 6e ert} -command in
34d0: 76 65 72 74 44 69 66 66 0a 3a 3a 74 74 6b 3a 3a vertDiff.::ttk::
34e0: 62 75 74 74 6f 6e 20 2e 62 62 2e 73 61 76 65 20 button .bb.save
34f0: 2d 74 65 78 74 20 7b 53 61 76 65 20 41 73 2e 2e -text {Save As..
3500: 2e 7d 20 2d 63 6f 6d 6d 61 6e 64 20 73 61 76 65 .} -command save
3510: 44 69 66 66 0a 3a 3a 74 74 6b 3a 3a 62 75 74 74 Diff.::ttk::butt
3520: 6f 6e 20 2e 62 62 2e 73 65 61 72 63 68 20 2d 74 on .bb.search -t
3530: 65 78 74 20 7b 53 65 61 72 63 68 7d 20 2d 63 6f ext {Search} -co
3540: 6d 6d 61 6e 64 20 73 65 61 72 63 68 4f 6e 4f 66 mmand searchOnOf
3550: 66 0a 70 61 63 6b 20 2e 62 62 2e 71 75 69 74 20 f.pack .bb.quit
3560: 2e 62 62 2e 69 6e 76 65 72 74 20 2d 73 69 64 65 .bb.invert -side
3570: 20 6c 65 66 74 0a 69 66 20 7b 24 66 6f 73 73 69 left.if {$fossi
3580: 6c 63 6d 64 21 3d 22 22 7d 20 7b 70 61 63 6b 20 lcmd!=""} {pack
3590: 2e 62 62 2e 73 61 76 65 20 2d 73 69 64 65 20 6c .bb.save -side l
35a0: 65 66 74 7d 0a 70 61 63 6b 20 2e 62 62 2e 66 69 eft}.pack .bb.fi
35b0: 6c 65 73 20 2e 62 62 2e 73 65 61 72 63 68 20 2d les .bb.search -
35c0: 73 69 64 65 20 6c 65 66 74 0a 67 72 69 64 20 72 side left.grid r
35d0: 6f 77 63 6f 6e 66 69 67 75 72 65 20 2e 20 31 20 owconfigure . 1
35e0: 2d 77 65 69 67 68 74 20 31 0a 67 72 69 64 20 63 -weight 1.grid c
35f0: 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75 72 65 20 2e olumnconfigure .
3600: 20 31 20 2d 77 65 69 67 68 74 20 31 0a 67 72 69 1 -weight 1.gri
3610: 64 20 63 6f 6c 75 6d 6e 63 6f 6e 66 69 67 75 72 d columnconfigur
3620: 65 20 2e 20 34 20 2d 77 65 69 67 68 74 20 31 0a e . 4 -weight 1.
3630: 67 72 69 64 20 2e 62 62 20 2d 72 6f 77 20 30 20 grid .bb -row 0
3640: 2d 63 6f 6c 75 6d 6e 73 70 61 6e 20 36 0a 65 76 -columnspan 6.ev
3650: 61 6c 20 67 72 69 64 20 5b 63 6f 6c 73 5d 20 2d al grid [cols] -
3660: 72 6f 77 20 31 20 2d 73 74 69 63 6b 79 20 6e 73 row 1 -sticky ns
3670: 65 77 0a 67 72 69 64 20 2e 73 62 79 20 2d 72 6f ew.grid .sby -ro
3680: 77 20 31 20 2d 63 6f 6c 75 6d 6e 20 35 20 2d 73 w 1 -column 5 -s
3690: 74 69 63 6b 79 20 6e 73 0a 67 72 69 64 20 2e 73 ticky ns.grid .s
36a0: 62 78 41 20 2d 72 6f 77 20 32 20 2d 63 6f 6c 75 bxA -row 2 -colu
36b0: 6d 6e 73 70 61 6e 20 32 20 2d 73 74 69 63 6b 79 mnspan 2 -sticky
36c0: 20 65 77 0a 67 72 69 64 20 2e 73 70 61 63 65 72 ew.grid .spacer
36d0: 20 2d 72 6f 77 20 32 20 2d 63 6f 6c 75 6d 6e 20 -row 2 -column
36e0: 32 0a 67 72 69 64 20 2e 73 62 78 42 20 2d 72 6f 2.grid .sbxB -ro
36f0: 77 20 32 20 2d 63 6f 6c 75 6d 6e 20 33 20 2d 63 w 2 -column 3 -c
3700: 6f 6c 75 6d 6e 73 70 61 6e 20 32 20 2d 73 74 69 olumnspan 2 -sti
3710: 63 6b 79 20 65 77 0a 0a 2e 73 70 61 63 65 72 20 cky ew...spacer
3720: 63 6f 6e 66 69 67 20 2d 68 65 69 67 68 74 20 5b config -height [
3730: 77 69 6e 66 6f 20 68 65 69 67 68 74 20 2e 73 62 winfo height .sb
3740: 78 41 5d 0a 77 6d 20 64 65 69 63 6f 6e 69 66 79 xA].wm deiconify
3750: 20 2e 0a 7d 0a 65 76 61 6c 20 24 70 72 6f 67 0a ..}.eval $prog.