Fossil

Hex Artifact Content
Login

Artifact 66a4d9db8e51bb608a8302ed2b3142857ae82da1c77b7bd97a215ab44e8f7f92:


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; & &lt; < &gt
0420: 3b 20 3e 20 26 23 33 39 3b 20 27 20 26 71 75 6f  ; > &#39; ' &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.